f1652577
滄海一聲笑!
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 16 個
工控威望: 116 點
下載積分: 3369 分
在線時間: 26(小時)
注冊時間: 2016-04-15
最后登錄: 2023-08-18
查看f1652577的 主題 / 回貼
樓主  發(fā)表于: 2017-11-15 16:46
圖片:
MOV (SM402 ,K0,D20);
MOV (SM402 ,K0,D21);
FOR D20 :=K0 TO K99    BY K1 DO
    D20:= D20+K1;
    D21:= D21+D20;
END_FOR;

模擬時為什么D21中的數(shù)值一直在變?
潔白的月光
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 62 個
工控威望: 160 點
下載積分: 526 分
在線時間: 103(小時)
注冊時間: 2016-03-12
最后登錄: 2018-10-14
查看潔白的月光的 主題 / 回貼
1樓  發(fā)表于: 2017-11-15 17:02
把前兩句搞成 d20:=0;
d21:=0;
試試;蛘邠Q成M8000。沒用過Q,應(yīng)該是SM400把。。
f1652577
滄海一聲笑!
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 16 個
工控威望: 116 點
下載積分: 3369 分
在線時間: 26(小時)
注冊時間: 2016-04-15
最后登錄: 2023-08-18
查看f1652577的 主題 / 回貼
2樓  發(fā)表于: 2017-11-15 17:16
前兩句時給d20,d21賦初始值,sm402就是m8002
潔白的月光
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 62 個
工控威望: 160 點
下載積分: 526 分
在線時間: 103(小時)
注冊時間: 2016-03-12
最后登錄: 2018-10-14
查看潔白的月光的 主題 / 回貼
3樓  發(fā)表于: 2017-11-15 19:36
不好意思,弄錯了。感覺三菱的循環(huán)程序有問題。我用C語言寫了同樣的程序。C語言就可以。如果你要解決那個問題。,你不防可以寫個IF M0 THEN,當(dāng)M0啟動開始循環(huán)。然后你D20增加到101.在循環(huán)語句里嵌套一個,IF d20=100 then,m0:=false; exit;end_if;end_for;end_if;
f1652577
滄海一聲笑!
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 16 個
工控威望: 116 點
下載積分: 3369 分
在線時間: 26(小時)
注冊時間: 2016-04-15
最后登錄: 2023-08-18
查看f1652577的 主題 / 回貼
4樓  發(fā)表于: 2017-11-16 09:27
還是不行。
楓落云端
施主,腳抬一下
級別: 略有小成

精華主題: 0
發(fā)帖數(shù)量: 341 個
工控威望: 465 點
下載積分: 1595 分
在線時間: 409(小時)
注冊時間: 2017-10-10
最后登錄: 2024-10-12
查看楓落云端的 主題 / 回貼
5樓  發(fā)表于: 2017-11-16 09:37
只能說樓主還沒有深刻理解PLC的循環(huán)掃描工作機制
潔白的月光
級別: 探索解密
精華主題: 0
發(fā)帖數(shù)量: 62 個
工控威望: 160 點
下載積分: 526 分
在線時間: 103(小時)
注冊時間: 2016-03-12
最后登錄: 2018-10-14
查看潔白的月光的 主題 / 回貼
6樓  發(fā)表于: 2017-11-16 09:42
是可以的,我都試過了。反正你把他包裝成一個快。讓他執(zhí)行一次就好了。
楓落云端
施主,腳抬一下
級別: 略有小成

精華主題: 0
發(fā)帖數(shù)量: 341 個
工控威望: 465 點
下載積分: 1595 分
在線時間: 409(小時)
注冊時間: 2017-10-10
最后登錄: 2024-10-12
查看楓落云端的 主題 / 回貼
7樓  發(fā)表于: 2017-11-16 09:46
前兩句只是PLC運行第一個掃描周期起作用,每一個FOR循環(huán),D20都會從0自加到99。D21=(1+2+...+99)*N個掃描周期,由于直接使用D21寄存器,默認(rèn)為16位的有符號整數(shù),最大只能到+32767,再加就會溢出到符號位,所以變成負(fù)數(shù),之后自加又變成正數(shù),繼續(xù)加又溢出變負(fù)數(shù),一直不斷地循環(huán)
本帖最近評分記錄:
  • 下載積分:+1(shangbinhou) 熱心助人!
  • 下載積分:+1(conchnit) 熱心助人!
    楓落云端
    施主,腳抬一下
    級別: 略有小成

    精華主題: 0
    發(fā)帖數(shù)量: 341 個
    工控威望: 465 點
    下載積分: 1595 分
    在線時間: 409(小時)
    注冊時間: 2017-10-10
    最后登錄: 2024-10-12
    查看楓落云端的 主題 / 回貼
    8樓  發(fā)表于: 2017-11-16 09:50
    我只是具體分析他的程序運行過程,產(chǎn)生這個現(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;
    楓落云端
    施主,腳抬一下
    級別: 略有小成

    精華主題: 0
    發(fā)帖數(shù)量: 341 個
    工控威望: 465 點
    下載積分: 1595 分
    在線時間: 409(小時)
    注冊時間: 2017-10-10
    最后登錄: 2024-10-12
    查看楓落云端的 主題 / 回貼
    9樓  發(fā)表于: 2017-11-16 09:53
    以上是M0 為ON時執(zhí)行一次循環(huán),如果只是想PLC開機自動算一次,那就變成
    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;
    conchnit
    級別: 略有小成
    精華主題: 0
    發(fā)帖數(shù)量: 131 個
    工控威望: 456 點
    下載積分: 6107 分
    在線時間: 69(小時)
    注冊時間: 2013-03-17
    最后登錄: 2024-11-03
    查看conchnit的 主題 / 回貼
    10樓  發(fā)表于: 2017-11-16 14:15
    引用
    引用第9樓楓落云端于2017-11-16 09:53發(fā)表的  :
    以上是M0 為ON時執(zhí)行一次循環(huán),如果只是想PLC開機自動算一次,那就變成
    MOV (SM402 ,K0,D20);
    MOV (SM402 ,K0,D21);
    IF SM402 THEN
        FOR D20 :=K0 TO K99    BY K1 DO
    .......



    三菱ST里,32位數(shù)據(jù)傳送 你是如何寫的?
    踏實走好每一步. 承接自動化項目.
    conchnit
    級別: 略有小成
    精華主題: 0
    發(fā)帖數(shù)量: 131 個
    工控威望: 456 點
    下載積分: 6107 分
    在線時間: 69(小時)
    注冊時間: 2013-03-17
    最后登錄: 2024-11-03
    查看conchnit的 主題 / 回貼
    11樓  發(fā)表于: 2017-11-16 14:20
    引用
    引用第7樓楓落云端于2017-11-16 09:46發(fā)表的  :
    前兩句只是PLC運行第一個掃描周期起作用,每一個FOR循環(huán),D20都會從0自加到99。D21=(1+2+...+99)*N個掃描周期,由于直接使用D21寄存器,默認(rèn)為16位的有符號整數(shù),最大只能到+32767,再加就會溢出到符號位,所以變成負(fù)數(shù),之后自加又變成正數(shù),繼續(xù)加又溢出變負(fù)數(shù),一直不斷地循環(huán)

    分析非常透徹 到位,是個高手
    踏實走好每一步. 承接自動化項目.