发表于:2008/12/19 8:55:00
#0楼
昨晚看到三菱论坛里有网友发贴求助,大意是数据寄器在使用一段时间后会出现不能清零现象。换地址也不可以。为此将程序上传请求帮助。
我打开程序查找该数据寄存器地址,第一地址为计数器赋值,采用加一指令,程序指令如下:
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
我打开程序查找该数据寄存器地址,第一地址为计数器赋值,采用加一指令,程序指令如下:
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编辑过]
汽车车桥生产在线检测设备;其它大批量零件生产过程检测,
承接:非标自动化设备设计、旧设备改良与维修; 单独非标项目合作。
承接:非标自动化设备设计、旧设备改良与维修; 单独非标项目合作。