您的位置:控制工程论坛网论坛 » PLC与PAC » PLC程序故障排除的一个小经验(转)

wj321

wj321   |   当前状态:离线

总积分:1211  2025年可用积分:0

注册时间: 2003-05-12

最后登录时间: 2009-11-05

空间 发短消息加为好友

PLC程序故障排除的一个小经验(转)

wj321  发表于 2008/12/25 17:05:50      1145 查看 3 回复  [上一主题]  [下一主题]

手机阅读

昨晚看到三菱论坛里有网友发贴求助<寄存器不能清零,求助 >,大意是数据寄器在使用一段时间后会出现不能清零现象。换地址也不可以。为此将程序上传请求帮助。

我打开程序查找该数据寄存器地址,第一地址为计数器赋值,采用加一指令,程序指令如下: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位以下数据。

1楼 0 0 回复
  • ruiruirui

    ruiruirui   |   当前状态:在线

    总积分:588  2025年可用积分:0

    注册时间: 2008-10-01

    最后登录时间: 2011-11-17

    空间 发短消息加为好友

    ruiruirui   发表于 2008/12/19 21:24:43

    2楼 回复本楼

    引用 ruiruirui 2008/12/19 21:24:43 发表于2楼的内容

  • jinxiaolei66

    jinxiaolei66   |   当前状态:离线

    总积分:266  2025年可用积分:0

    注册时间: 2008-08-11

    最后登录时间: 2011-01-24

    空间 发短消息加为好友

    jinxiaolei66   发表于 2008/12/22 18:50:54

    细节决定成败,经典案例之一;值得借鉴
    3楼 回复本楼

    引用 jinxiaolei66 2008/12/22 18:50:54 发表于3楼的内容

  • hege377

    hege377   |   当前状态:在线

    总积分:6784  2025年可用积分:0

    注册时间: 2007-07-23

    最后登录时间: 2020-05-16

    空间 发短消息加为好友

    hege377   发表于 2008/12/25 17:05:50

    同时还要注意,16位乘法/除法指令的结果占用的也是32位的寄存器。
    4楼 回复本楼

    引用 hege377 2008/12/25 17:05:50 发表于4楼的内容

总共 , 当前 /