登录
首页 机电一体化
回帖 发帖
正文

主题:PLC程序故障排除的一个小经验

点击:3193 回复:14

昨晚看到三菱论坛里有网友发贴求助,大意是数据寄器在使用一段时间后会出现不能清零现象。换地址也不可以。为此将程序上传请求帮助。
我打开程序查找该数据寄存器地址,第一地址为计数器赋值,采用加一指令,程序指令如下:
ANDD<   D62   K999999999    /      DINCP         D660
另一个清零指令 LD    T66   MOVP   K0    D660   /  RST   D660
上面的程序来看,是看不出多少问题,后面的rts指令我估计是楼主没办法的情况下加上去,但是就这样也是不能清零。
我发现一个问题就是:前面加一信号用了32位,这说明数据很大,应该是大于32767.而后面清零指令只用了16位。也就是说清零只能清除16以下,大于32767的数据将不能清零。
为了证实我的想法。进行模拟仿真。将d660赋值大于32767.为了调方便,做了一点小更改:
LDP  X0    DMOV    k45000   D660   /   LD  X1  MOVP   k0   D660
按上述程序调试并清零,当数据小于32767以下,也就是16位数据位程序能清零,当把45000传进去以后,程序不能清零,且数据变为负值。这就证实我了是论证,于是将清零程序改写为32位
LD  X1     DMOVP   k0 D660
再进行清零动作,OK
在程序编写的时候,一定要注意32位和16位的区别,当赋值大于32位时,清零同样也要用32.否则只能清除16位以下数据。
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=71902&Name=wushulin
最后修改:2008-12-19 9:01:39
08-12-19 08:55
可以在RST660之后再加一条RST661;
也可以达到同样的效果;
08-12-19 09:07
请问:但是如果余数仍然大于-32768    这种情况还能清吗?
08-12-19 09:25
32位的还是用带32位的指令去做规范些
这样的数在乘法指令的时候要用到,初学者会忽略位数的变化
08-12-19 09:33
LD  X1     DMOVP   k0 D660
与LDP X1   RST D600
               RST D601的作用应当是一样的;
08-12-19 10:04
用三菱的编程时一定要注意这个问题的,有时我编的程序里用到计算,有时在指令前写了“D”,有时忘了写,就会看到里面的数字不对了。
08-12-19 12:17
证明:用RST  D661  是不行的
附件
附件
08-12-19 14:57
ZRST D660 D661
08-12-19 14:58
安全起见,我写的时候,不管数据长短,都是用双字,呵呵
08-12-19 15:04
更正:采用 RST   D661  这种方式清零也是可以。
但是建议不要采用,各位新手老手知道就是了
本贴本来己锁定,但是又觉得可以在此讨论一些另外的经验,但是要求有一定的质量,否则扣分
最后修改:2008-12-19 16:18:10
08-12-19 15:12

上一页下一页

工控新闻

更多新闻资讯