h30631
級別: 略有小成
|
請問各位大師們,為什麼用GX 模擬PLC 去跑程式時,DADDP 指令時,數(shù)字會亂跳,如圖片 但是實際上監(jiān)控實體PLC 就不會有這個問題,請問是哪裡出錯了?? [ 此帖被h30631在2013-01-03 17:03重新編輯 ] |
---|---|
|
hefei3903
級別: 略有小成
|
T0,T1組成的是脈沖輸出程序,D350中的值應(yīng)該會每隔0.22s跳一次。 |
---|---|
|
h30631
級別: 略有小成
|
樓上說的沒錯,但是我的重點是在於 一次只能+20 ,但是他一次加了不只20,反而加了好幾萬去了 實際接plc 實體去跑卻又是正常的,一次加20,因為仿真軟件設(shè)定沒有設(shè)定好嗎? |
---|---|
|
sjm213
有小知識,無大學問。
級別: 論壇版主
|
1,根本原因在于你用了DADDP,這是個32位的指令。實際計算過程是把[D351 D350]與[T1 T0]相加后放入了[D351 D350]; 2,仿真與實機的區(qū)別在于,仿真默認掃描周期是100ms的,而實機的掃描周期會原低于這個數(shù)。這就造成仿真在T0計時到后,其輸出觸點驅(qū)動了T1計時,T1的數(shù)值馬上變成了1,所以掃描到達T0的上升沿,執(zhí)行加法處理時,就是00000000+00010014--》00010014(都用16進制表示)的計算過程,這個十六進制的數(shù)換成十進制就是65556;執(zhí)行到第八遍的時候,這個數(shù)就是65556*8=524448。而因?qū)崣C的掃描周期遠低于100ms,則在實機上執(zhí)行該程序,T0計時到達,掃描到T1時,該數(shù)值還沒有累積到0.1S,所以T1的數(shù)值還是0沒有變成1,繼續(xù)執(zhí)行加法處理時,就是00000000+00000014--》00000014的計算過程,這個十六進制的數(shù)換成10進制就是20,得到了想要的結(jié)果; 3,將DADDP指令換成16位的ADDP指令可以避免這種情況; 4,將T0上升沿后做加法運算這一句緊放在T0輸出線圈這一句后面可以避免這種情況;T0輸出線圈這一句放在RST T0這段后面更好。 |
---|---|
|
h30631
級別: 略有小成
|
感謝版主大師的指導~ 依照指示,真的如板大所說,原來是時序的問題 所以我這種寫法會有編寫的順序問題, 可以在請問一下,執(zhí)行 dadd這個指令 我知道的是會有一個D上位&D下位,與他相加的T也會自動有一個上位&下位嗎? [ DADDP D0 T0 D0 ] = D1 D0 + "T1 T0 " ?? 因為我在煩惱,T 如果計時超過16位元的範圍,該如何讓他"先存到D後再重新計時" |
---|---|
|
guochunyi
直讀解西門屏HMI口令 。。。
級別: 論壇版主
|
來這里說自己有教程,卻又遮遮掩掩不肯給你共享的,,騙子居多。。 |
|
---|---|---|
|
sjm213
有小知識,無大學問。
級別: 論壇版主
|
今天在實機上調(diào)試了這個程序,現(xiàn)象與樓主所講一樣。 再仔細想了一下,在三樓講的第二條有問題。 PLC中無論掃描周期如何修改,執(zhí)行的結(jié)果都是樓主期望的那樣,T1對ADD之后的D350不會產(chǎn)生影響,因為T0狀態(tài)ON的這個掃描周期,T1才剛開始計時,PLC工作的原理是下一次掃描到T1輸出觸點時才會更新當前值,所以T1現(xiàn)在的值是0,不會影響到T0和D350值的相加。 仿真中,無論掃描周期如何修改,T1在T0為ON開始計時的這個周期都是已經(jīng)有了一個數(shù)值“1”,這就對D350的數(shù)值產(chǎn)生了附圖中顯示的影響。 說明仿真和PLC實機運行是不一樣的。 |
---|---|
|
sjm213
有小知識,無大學問。
級別: 論壇版主
|
但是32位指令執(zhí)行時是 D1 D0 + T1 T0這是確確實實的。 |
---|---|
|
rockyhuo
專業(yè)制造全伺服高速衛(wèi)生巾機器
級別: 論壇先鋒
|
簡單吧T1改成T3就可以了,怎樣的都是加20 |
|
---|---|---|
|