您现在所在的是:

PLC论坛

回帖:5个,阅读:1093 [上一页] [1] [下一页]
2618
lujianmei12
文章数:737
年度积分:44
历史总积分:2618
注册时间:2011/1/25
发站内信
发表于:2014/1/13 22:30:07
#0楼
附件 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位来,转存了一下。
小日本没时间来检查我的程序,就用我同事的,不过他的程序一团糟,当时检查问题多的,不说了。
就那个问题请教一下?????



7069
sjm213
文章数:164
年度积分:50
历史总积分:7069
注册时间:2005/7/11
发站内信
发表于:2014/1/13 22:51:11
#1楼
因为:
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,也不会使结果产生混乱。所以编程中为了节省实际寄存器地址,可用临时寄存器进行过程运算。
21891
yejingmao
文章数:12575
年度积分:50
历史总积分:21891
注册时间:2007/5/3
发站内信
2017春节活动(三)
发表于:2014/1/14 9:29:07
#2楼
分析下应该是扫描的时差
自学成才!
2618
lujianmei12
文章数:737
年度积分:44
历史总积分:2618
注册时间:2011/1/25
发站内信
发表于:2014/1/14 9:36:22
#3楼
非常感谢sim213的热心解答,谢谢!!!
让我茅塞顿开。
此帖发自手机工控论坛
2618
lujianmei12
文章数:737
年度积分:44
历史总积分:2618
注册时间:2011/1/25
发站内信
发表于:2014/1/14 13:12:16
#4楼
我想再问一下,结果占64位,数值高于32,监控显示的是最低16位;数值小于32位,监控显示的是最低32。
是这样的吧??
此帖发自手机工控论坛
2618
lujianmei12
文章数:737
年度积分:44
历史总积分:2618
注册时间:2011/1/25
发站内信
发表于:2014/1/16 14:49:16
#5楼
是这样的吧?
此帖发自手机工控论坛

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

46.8003