西門(mén)子總代理: | PLC |
西門(mén)子一級(jí)代: | 驅(qū)動(dòng) |
西門(mén)子代理商: | 伺服電機(jī) |
單價(jià): | 面議 |
發(fā)貨期限: | 自買(mǎi)家付款之日起 天內(nèi)發(fā)貨 |
所在地: | 廣東 惠州 |
有效期至: | 長(zhǎng)期有效 |
發(fā)布時(shí)間: | 2024-03-13 10:34 |
最后更新: | 2024-03-13 10:34 |
瀏覽次數(shù): | 180 |
采購(gòu)咨詢: |
請(qǐng)賣(mài)家聯(lián)系我
|
01
線性平滑功能關(guān)主要有兩大作用:
1、對(duì)設(shè)置值目標(biāo)值進(jìn)行平滑,在收放卷以及一些同步控制中,閉環(huán)有可能會(huì)在PLC里面做閉環(huán)控制,所以速度指令通常是由PLC給出,變頻器、驅(qū)動(dòng)器這些執(zhí)行機(jī)構(gòu)加減速時(shí)間設(shè)置的會(huì)非常短,因?yàn)橐獫M足一些同步性跟隨控制的需要,這時(shí)候如果去點(diǎn)動(dòng)一個(gè)外部設(shè)備,直接設(shè)定一個(gè)目標(biāo)值,如果沒(méi)有一個(gè)線性平滑的功能,設(shè)備都會(huì)有一個(gè)明顯的一個(gè)沖擊,所以這時(shí)候一般會(huì)引入一個(gè)線性平滑功能,對(duì)于設(shè)定值,它實(shí)現(xiàn)一個(gè)斜坡加減速的功能,
2、另外一個(gè)功能就是在PID的優(yōu)化算法里面實(shí)現(xiàn)對(duì)于給定值PID的目標(biāo)值的一個(gè)平滑給定。比如設(shè)定給定的一個(gè)溫度,我們從30°升到100°C,通常我們?nèi)绻苯釉O(shè)置的話,會(huì)有一個(gè)很明顯的階躍。對(duì)于這樣的一個(gè)階躍信號(hào)后面的閉環(huán)控制系統(tǒng)PID,它的響應(yīng)是比較困難,所以這時(shí)候我們通常會(huì)對(duì)給定值進(jìn)行一個(gè)平滑,比如說(shuō)那些線速度設(shè)定,張力設(shè)定,對(duì)于這些需要控制的這個(gè)目標(biāo)量,通常都會(huì)有一個(gè)平滑過(guò)渡的過(guò)程,一個(gè)階躍信號(hào)給過(guò)去后面的閉環(huán)控制系統(tǒng)很難及時(shí)響應(yīng),會(huì)給系統(tǒng)造成一定的沖擊,所以這時(shí)候會(huì)引入這樣的一個(gè)線性平滑功能塊,介紹完線性平滑功能塊的作用之后,我們看一下這樣一個(gè)功能塊它的算法原理是如何實(shí)現(xiàn)的。
算法原理,這里我們結(jié)合著PLC代碼部分進(jìn)行講解。我們這里已經(jīng)編寫(xiě)好了一個(gè)線性平滑功能塊,這里我們?cè)诙〞r(shí)中斷OB30里面進(jìn)行調(diào)用,這里的定時(shí)中斷的中斷時(shí)間是10ms,每10ms里面去調(diào)用一個(gè)這樣的一個(gè)平滑函數(shù)功能塊,直接監(jiān)控觀察一下這樣的一個(gè)功能塊?,F(xiàn)在它的目標(biāo)值是30,如果要去修改它的這樣的一個(gè)速度,比如讓他轉(zhuǎn)到60r/min,大家可以看得到我的這個(gè)目標(biāo)值雖然階躍發(fā)生變化了,但是我的輸出平滑值它是慢慢爬升到這個(gè)階段的,它有一個(gè)爬升的這樣的一個(gè)過(guò)程。
我們?cè)趯⑺俣冉档?,可以看到我們?cè)谟|摸屏或者上位機(jī)上去給進(jìn)這樣的一個(gè)速度指令,但是實(shí)際上速度指令并不是馬上降到的設(shè)定值,而是一個(gè)斜坡有一個(gè)加速減速的過(guò)程,所以這里的線性平滑功能快主要是為了完成對(duì)于我們的目標(biāo)值的一個(gè)線性平滑。
平滑時(shí)間是自己可設(shè)的,這里的工程量的最小值是0,最大值是200,然后總的平滑時(shí)間是50,實(shí)現(xiàn)這樣的一個(gè)平滑時(shí)間一個(gè)設(shè)定,對(duì)于變頻器里面,通常大家知道0~50Hz對(duì)應(yīng)的你的加速時(shí)間,有的時(shí)候會(huì)設(shè)置成15秒,20秒,其實(shí)是一個(gè)道理,就是這里的算法是在PLC里面去實(shí)現(xiàn)這樣的一個(gè)過(guò)程,因?yàn)橛械臅r(shí)候我們的這樣的一個(gè)閉環(huán)控制,同步控制是在PLC這邊去做的,所以這樣的平滑必須由我們這個(gè)PLC上位控制器去給出這樣的一個(gè)平滑指令。
接下來(lái)看一下編程里面是如何進(jìn)行實(shí)現(xiàn)的。這里將縱坐標(biāo)的最小值、最大值設(shè)定成0-200,橫坐標(biāo)平滑總時(shí)間設(shè)置成50秒,這里面還有一個(gè)求解步長(zhǎng),就是所謂的這個(gè)定時(shí)中斷的時(shí)間,如果我們?cè)O(shè)置是10ms,那10ms,50秒里面被劃分了多少份呢?我們首先利用這樣的一個(gè)平滑總時(shí)間除以一個(gè)計(jì)算步長(zhǎng),當(dāng)然這里的單位是毫秒,總時(shí)間單位是秒,秒我們要轉(zhuǎn)成毫秒,毫秒之后再除以這樣的一個(gè)步長(zhǎng),就總共我們被分割了這么多份,從這個(gè)最小值到最大值被分割這么多份,需要計(jì)算出我們的單步增量,這里的增量它是一個(gè)既是代表遞增也是代表遞減的,所以它是一個(gè)變化量。首先要計(jì)算出這樣的一個(gè)變化量,這個(gè)變化量計(jì)算出來(lái)之后,這樣的一個(gè)平滑輸出,就利用這樣的一個(gè)公式就可以算出來(lái)我們的平滑數(shù)值,值等于我們的這個(gè)初始值,就是這里的平滑值,再加上單步遞增量,再乘以一個(gè)系數(shù)。為什么要有個(gè)系數(shù)呢?就是因?yàn)槲覀冇锌赡苁沁f增的也有可能是遞減,這要根據(jù)這個(gè)目標(biāo)值和我們的平滑輸出值這個(gè)大小關(guān)系,可以看一下,這邊這時(shí)候平滑輸出值已經(jīng)是10了,那如果這時(shí)候我要讓它變?yōu)樽優(yōu)?,那是不是必須得遞減,所以這里是根據(jù)這樣的一個(gè)輸出平滑值和我們的這個(gè)目標(biāo)值的大小來(lái)判斷到底是遞減還是遞增的,可以看到我們現(xiàn)在就是一個(gè)遞減的過(guò)程,那我們?nèi)绻麑⑽覀兊倪@個(gè)設(shè)定值設(shè)置的大于我們的這個(gè)平滑輸出值,比如說(shuō)我們?cè)O(shè)置成40,可以看到我們現(xiàn)在的輸出它就是一個(gè)平滑遞增的這樣的一個(gè)過(guò)程。
符號(hào)表:
代碼:
REGION 單步變化量
#deltaValue := (#maxValue - #minValue) / DINT_TO_REAL(#smoothTime * 1000 / #h);
END_REGION
REGION 計(jì)算偏差juedui值
#SetSmSUB := #SetValue - #sm_out_1;
IF #SetSmSUB < 0.0 THEN
#SetSmSUB := #SetSmSUB * -1;
END_IF;
END_REGION
REGION 計(jì)算平滑輸出值sm_out
IF #SetSmSUB > #deltaValue THEN
IF #SetValue > #sm_out_1 THEN
#factor := 1.0;
ELSIF #SetValue = #sm_out_1 THEN
#factor := 0.0;
ELSIF #SetValue < #sm_out_1 THEN
#factor := -1.0;
END_IF;
#sm_out_1 := #sm_out_1 + #factor * #deltaValue;
ELSE
#sm_out_1 := #SetValue;
END_IF;
#sm_out := #sm_out_1;
END_REGION