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