cctv197910
级别: 探索解密
精华主题: 0
发帖数量: 26 个
工控威望: 129 点
下载积分: 396 分
在线时间: 17(小时)
注册时间: 2017-11-06
最后登录: 2024-05-16
查看cctv197910的 主题 / 回贴
楼主  发表于: 2019-07-17 14:15
图片:
图片:
图片:
FX3U的PLC,其中寄存器D600被使用多次,会根据不同导通条件传送入不同的值,使用一段时间后其它的D600值不会根据当前输入值改变而变为-64094,更换新的寄存器地址后正常,但使用十几天时间后又和以前一样,现在只能每半个月更换一次地址。求大神们帮忙解惑。
zhangqi_1234
级别: 略有小成
精华主题: 0
发帖数量: 336 个
工控威望: 487 点
下载积分: 4001 分
在线时间: 246(小时)
注册时间: 2013-03-22
最后登录: 2024-05-14
查看zhangqi_1234的 主题 / 回贴
1楼  发表于: 2019-07-17 21:49
1、两个32位字元件的乘积,存四个地址连续的16位字元件(64位)。用DMUL指令,表示用D334-D335这2个16位字元件组成的32位数(D334存低16位,D335存高16位,其中最高位为符号位,最高位为1表示负数,负数以补码形式存储),与K100相乘后的乘积,存D600-D603中,D600存最低16位,D603存最高16位。同样,最高位为符号位。因此,在使用带D的乘积指令时,要保证相邻若干的寄存器,不得受到其它指令的影响。32位寄存器的取值范围:-2147483648~+2147483647。64位的取值范围:-9223372036854775808 ~+ 9223372036854775807。2、用M8000这个触头执行DMUL指令,表示PLC处于RUN状态时,每一个扫描周期都执行乘法指令。也就是说,是循环不断地执行。这样会导致运算结果溢出。3、其它诸如:SUB指令,也是在触头条件满足的每一个扫描周期都执行。也可能导致运算结果溢出。
[ 此帖被zhangqi_1234在2019-07-18 01:37重新编辑 ]
本帖最近评分记录:
  • 下载积分:+1(mylover132) 热心助人!
    zhangqi_1234
    级别: 略有小成
    精华主题: 0
    发帖数量: 336 个
    工控威望: 487 点
    下载积分: 4001 分
    在线时间: 246(小时)
    注册时间: 2013-03-22
    最后登录: 2024-05-14
    查看zhangqi_1234的 主题 / 回贴
    2楼  发表于: 2019-07-18 23:45
    补充:问题出现在D375上,[DMOV D374 D600]功能是把D374-D375存储的32位数据,赋值给D600-D601。D374存低16位,D375存高16位,D375的最高位是1,因此被认为是负数。程序中应该是有其他指令对D375的值作了改变。