h30631
级别: 略有小成
精华主题: 0
发帖数量: 90 个
工控威望: 230 点
下载积分: 812 分
在线时间: 339(小时)
注册时间: 2012-09-05
最后登录: 2018-04-17
查看h30631的 主题 / 回贴
楼主  发表于: 2012-12-19 17:54
請問各位大師們,為什麼用GX 模擬PLC 去跑程式時,DADDP 指令時,數字會亂跳,如圖片
但是實際上監控實體PLC 就不會有這個問題,請問是哪裡出錯了??

[ 此帖被h30631在2013-01-03 17:03重新编辑 ]
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5196 个
工控威望: 7419 点
下载积分: 158730 分
在线时间: 3159(小时)
注册时间: 2007-11-21
最后登录: 2024-11-18
查看sjm213的 主题 / 回贴
1楼  发表于: 2012-12-19 21:32
1,根本原因在于你用了DADDP,这是个32位的指令。实际计算过程是把[D351 D350]与[T1 T0]相加后放入了[D351 D350];
2,仿真与实机的区别在于,仿真默认扫描周期是100ms的,而实机的扫描周期会原低于这个数。这就造成仿真在T0计时到后,其输出触点驱动了T1计时,T1的数值马上变成了1,所以扫描到达T0的上升沿,执行加法处理时,就是00000000+00010014--》00010014(都用16进制表示)的计算过程,这个十六进制的数换成十进制就是65556;执行到第八遍的时候,这个数就是65556*8=524448。而因实机的扫描周期远低于100ms,则在实机上执行该程序,T0计时到达,扫描到T1时,该数值还没有累积到0.1S,所以T1的数值还是0没有变成1,继续执行加法处理时,就是00000000+00000014--》00000014的计算过程,这个十六进制的数换成10进制就是20,得到了想要的结果;
3,将DADDP指令换成16位的ADDP指令可以避免这种情况;
4,将T0上升沿后做加法运算这一句紧放在T0输出线圈这一句后面可以避免这种情况;T0输出线圈这一句放在RST T0这段后面更好。
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5196 个
工控威望: 7419 点
下载积分: 158730 分
在线时间: 3159(小时)
注册时间: 2007-11-21
最后登录: 2024-11-18
查看sjm213的 主题 / 回贴
2楼  发表于: 2012-12-25 14:01
今天在实机上调试了这个程序,现象与楼主所讲一样。
再仔细想了一下,在三楼讲的第二条有问题。
PLC中无论扫描周期如何修改,执行的结果都是楼主期望的那样,T1对ADD之后的D350不会产生影响,因为T0状态ON的这个扫描周期,T1才刚开始计时,PLC工作的原理是下一次扫描到T1输出触点时才会更新当前值,所以T1现在的值是0,不会影响到T0和D350值的相加。
仿真中,无论扫描周期如何修改,T1在T0为ON开始计时的这个周期都是已经有了一个数值“1”,这就对D350的数值产生了附图中显示的影响。
说明仿真和PLC实机运行是不一样的。
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5196 个
工控威望: 7419 点
下载积分: 158730 分
在线时间: 3159(小时)
注册时间: 2007-11-21
最后登录: 2024-11-18
查看sjm213的 主题 / 回贴
3楼  发表于: 2012-12-25 14:02
引用
引用第4楼h30631于2012-12-20 08:27发表的  :
感謝版主大師的指導~
依照指示,真的如板大所說,原來是時序的問題
所以我這種寫法會有編寫的順序問題,
可以在請問一下,執行 dadd這個指令 我知道的是會有一個D上位&D下位,與他相加的T也會自動有一個上位&下位嗎?
嬀 DADDP D0 T0 D0崀=D1 D0 +"T1 T0 " ??
.......


但是32位指令执行时是  D1  D0  +  T1  T0这是确确实实的。