登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:用电脑监控的程序,请教一下

点击:1124 回复:5

附件 DSC_0024.jpg
32位的整数相乘,结果是64位。
如图,DMUL D4602 K4 D4642,结果占D4642-D4645,看图上的数据,这个时候D4644,D4645为0,上面的D4644,D4645监控结果是为0,但是D2084怎么还有数值呢???
别的地方没有占用D2084和D2085。
如果把9008步右边的程序,和9049步右边的程序调一下顺序,
就和9090右边的与9131右边的程序一样,监控时都有结果了。
结果数据没超过32767,用16相乘最好了,免的被别的地方占用,不过这个程序一直没出现什么问题,就这样了,
之前我改过一次,都改过来了,数据超过32767的就那么一两个,用别的寄存器空出64位来,转存了一下。
小日本没时间来检查我的程序,就用我同事的,不过他的程序一团糟,当时检查问题多的,不说了。
就那个问题请教一下?????
14-01-13 22:30
因为:
32位的整数相乘,结果是64位。
PLC程序是自上而下执行的,9008段的程序已经执行完毕了,即使它后面的状态再怎么变化,也不会改变此段的结果。
这一段的DMUL D4604 K2 D4644已经把数据保存在了D4647 D4646 D4645 D4644,接下来的DMOV D4644 D2084就把此时的数据传输到了D2085 D2084。
下一段中DMUL D4602 K4 D4642确实把D4645 D4644的数据清零了,但已经不能改写D2085 D2084。
而PLC的监控是实时显示当前数据状态,所以D4645 D4644显示是0,D2085 D2084显示是400。
-------------------------
如果把9008步右边的程序,和9049步右边的程序调一下顺序,那么首先保存数据的是D4645 D4644 D4643 D4642,D4643 D4642在后面的程序中未曾被占用,所以它的显示数据看起来是正常的。
-------------------------
这些地址中本来储存的就是“过程值”,即使相乘的结果全部设为D4642,也不会使结果产生混乱。所以编程中为了节省实际寄存器地址,可用临时寄存器进行过程运算。
14-01-13 22:51
分析下应该是扫描的时差
14-01-14 09:29
非常感谢sim213的热心解答,谢谢!!!
让我茅塞顿开。
14-01-14 09:36
我想再问一下,结果占64位,数值高于32,监控显示的是最低16位;数值小于32位,监控显示的是最低32。
是这样的吧??
14-01-14 13:12
是这样的吧?
14-01-16 14:49

工控新闻

更多新闻资讯