S7-20050多个正数相加得出负数。 点击:312 | 回复:3



Lambert4

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2019年8月27日
发表于:2019-10-11 11:55:12
楼主











如图,此前已在中断程序中读取了500个电机转动模拟量数据,并且每次感应到光电开关时将数据写为17000,以此来分隔开每个转动周期的数据。这里写的程序是求第一个转到周期数据的和。第一个周期由50多个正数,每个都是20000多到30000不等。因为用字相加会溢出,所以用双字相加,但如VD2950所示是-948749909。(下面的字传送只是我用第二周期数据做对比,但也只有16000多)


6.png

然后将上面双字的相加和传送全部换成浮点数相加和传送,则变成负的60000多。


想请教下各位怎样处理才可以相加得到正确正数。





请叫我王老湿

  • [版主]
  • 精华:0帖
  • 求助:0帖
  • 帖子:622帖 | 8531回
  • 年度积分:91
  • 历史总积分:332562
  • 注册:2011年4月25日
发表于:2019-10-11 13:11:41
1楼

你监控一下是不是数据长度超过了,将符号位0变成1了,默认0是代表正数,1是表示负数

Lambert4

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 13回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2019年8月27日
发表于:2019-10-11 14:07:27
2楼


回复内容:

对: 请叫我王老湿 你监控一下是不是数据长度超过了,将符号位0变成1了,默... 内容的回复!

-------------------------

有符号的VD最大可以到21亿多,而即使50个30000相加也就150万。长度应该是不会超过的。

主要是AC0和AC1相加这里,AC0中数据的类型是字,但因为累加器是32位的,我就直接用的双字来相加,不知道是不是因为这样造成的负数。

schenyeah

  • 精华:0帖
  • 求助:13帖
  • 帖子:24帖 | 111回
  • 年度积分:4
  • 历史总积分:828
  • 注册:2015年3月06日
发表于:2019-10-17 14:03:54
3楼

实型到整型不需要转换吗?



热门招聘
相关主题

官方公众号

智造工程师