以前都是自己寫了個FB塊實現(xiàn)斜坡函數(shù)功能。 比如控制一臺機(jī)器線速度為150m/Min, 而設(shè)定加速度為30m/Min/s , 那么程序控制輸出在5秒時間(150/30)將輸出線性增加。
大家一般怎么做? 用那些指令呢?
回到這個問題本身。 原來論壇上也有過幾個貼子,問起如何計算1500/1200的掃描周期。
其中一個方案就是用RD_SYS_T指令讀取當(dāng)前系統(tǒng)的時間, 然后兩個掃描周期讀取的時間用T_DIFF指令做減法,就計算出來掃描周期了。
#iTMP_Int0 := RD_SYS_T(OUT=>#ACTUAL_TIME); //讀取當(dāng)前系統(tǒng)時間
#rDELTA_TIME := 1.0E-3*DINT_TO_REAL(TIME_TO_DINT(T_DIFF(IN1:=#ACTUAL_TIME, IN2:=#LAST_TIME))); //兩次調(diào)用之時間差(S)
#LAST_TIME := #ACTUAL_TIME; //為下一次調(diào)用做準(zhǔn)備
#rDELTA_TIME就是計算出來的掃描周期了(單位:秒)
然后按照我頂樓提出的問題, 加速度度為30,目標(biāo)速度150。 那么每個掃描周期我的速度增量為30*#rDELTA_TIME, 每個掃描周期將輸出疊加,直到達(dá)到目標(biāo)速度150為止
看起來,思路和程序都*沒問題? 而且這個塊我也用了有幾年了?。。?nbsp; 可是昨天在調(diào)一臺小機(jī)器的時候,忽然發(fā)現(xiàn)不對勁。 我在觸摸屏上有顯示當(dāng)前目標(biāo)速度的,觸摸屏對應(yīng)的變量刷新周期為一秒, 那么原則上我在觸摸屏上觀察到的目標(biāo)速度應(yīng)該是以30為增量了,比如*眼看到12,那么第二個數(shù)據(jù)應(yīng)該是42,第三下就是72。。。。 可是事實卻是每次增加20多點.....
我吼了幾嗓子,結(jié)果沒什么人起哄呀... ...
我本來是想帶節(jié)奏的,結(jié)果被ZANE版帶溝里去了 ^_^
算了,我還是自己寫出來吧。
#iTemp0 := RD_SYS_T(OUT=>#ACTUAL_TIME); //讀取當(dāng)前系統(tǒng)時間
#rCycleTime := 1.0E-3*DINT_TO_REAL(TIME_TO_DINT(T_DIFF(IN1:=#ACTUAL_TIME, IN2:=#LAST_TIME))); //兩次調(diào)用之時間差(S)
#LAST_TIME := #ACTUAL_TIME; //為下一次調(diào)用做準(zhǔn)備
對照圖片,DTL數(shù)據(jù)類型可以讀取到 納秒單位。 而事實上T_DIFF指令是將兩個DTL類型做減法,可是結(jié)果卻只保留到 毫秒 單位! 毫秒就毫秒吧,zui“可怕”的卻是它的減法不是四舍五入,而是去尾留整?。?! 比如我的掃描周期為2.1ms,它計算出來的結(jié)果顯示為2ms, 掃描周期為2.99毫秒,它也顯示是2ms ! 這就尷尬了.... .... 當(dāng)我在加速過程中,PLC的掃描周期平均為2.6ms時,計算的zui終結(jié)果也還是2ms, 意味著,我的實際加速度就變成了 30 * 2 / 2.6 = 23 ... ...
問題就是這么出來的... ...
嘿嘿,怎么解決???
西門子V901FL6096-1AC61-0LA1代理商
西門子V901FL6096-1AC61-0LA1代理商