f1652577
滄海一聲笑!
級(jí)別: 探索解密
![]() |
圖片:
![]() MOV (SM402 ,K0,D20); MOV (SM402 ,K0,D21); FOR D20 :=K0 TO K99 BY K1 DO D20:= D20+K1; D21:= D21+D20; END_FOR; 模擬時(shí)為什么D21中的數(shù)值一直在變? |
---|---|
|
楓落云端
施主,腳抬一下
級(jí)別: 略有小成
![]() ![]() |
只能說樓主還沒有深刻理解PLC的循環(huán)掃描工作機(jī)制 |
---|---|
|
楓落云端
施主,腳抬一下
級(jí)別: 略有小成
![]() ![]() |
前兩句只是PLC運(yùn)行第一個(gè)掃描周期起作用,每一個(gè)FOR循環(huán),D20都會(huì)從0自加到99。D21=(1+2+...+99)*N個(gè)掃描周期,由于直接使用D21寄存器,默認(rèn)為16位的有符號(hào)整數(shù),最大只能到+32767,再加就會(huì)溢出到符號(hào)位,所以變成負(fù)數(shù),之后自加又變成正數(shù),繼續(xù)加又溢出變負(fù)數(shù),一直不斷地循環(huán) |
---|---|
本帖最近評(píng)分記錄: |
楓落云端
施主,腳抬一下
級(jí)別: 略有小成
![]() ![]() |
我只是具體分析他的程序運(yùn)行過程,產(chǎn)生這個(gè)現(xiàn)象是正常的。如果想只是要循環(huán)一次,那就得加條件限制。 MOV (SM402 ,K0,D20); MOV (SM402 ,K0,D21); IF LDP(TRUE,M0) THEN FOR D20 :=K0 TO K99 BY K1 DO D20:= D20+K1; D21:= D21+D20; END_FOR; END_IF; |
---|---|
|
楓落云端
施主,腳抬一下
級(jí)別: 略有小成
![]() ![]() |
以上是M0 為ON時(shí)執(zhí)行一次循環(huán),如果只是想PLC開機(jī)自動(dòng)算一次,那就變成 MOV (SM402 ,K0,D20); MOV (SM402 ,K0,D21); IF SM402 THEN FOR D20 :=K0 TO K99 BY K1 DO D20:= D20+K1; D21:= D21+D20; END_FOR; END_IF; |
---|---|
|