ADD指令问题

我的西门子1500程序里写了一段累加计数的程序,就是每一个信号上升沿加0.01,怎么加到262144就不再累加了,是怎么回事啊。ADD指令达到加上限了吗?

最佳答案

从你的表述看,内部计数是使用real(32位浮点数),加到一个大数后(262144),就进入到所谓的浮点数陷阱了。原因就是262144用浮点数表示后,其最小的有效位已经大于0.01了,导致后续累加数据不变。
请参考浮点数的国际标准。
可以在内部采用DINT数据格式,每次加1,输出结果=DINT*0.01。这样最大可以加到21474836.47
若还不够,可以采用64位的数据格式(Lint)。另外,使用64位双精度浮点数(Lreal),也可以延长进入陷阱的时间。S7-1500已经支持64位的数据了。
另外,用浮点数做累加,本身是一个不严谨的做法,这涉及到大数量级差的浮点数相加,从算法原理上,就是一个可能产生大误差的计算过程。

提问者对于答案的评价:
谢谢!答案非常满意!

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc165557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月10日 下午12:19
下一篇 2017年6月10日 下午12:19

相关推荐

  • 如何设置1500cpu的M区和DB数据块的数据掉电保持功能?

    如何设置1500cpu的M区和DB数据块的数据掉电保持功能? 最佳答案 M区是在变量表里设置,详细可以参加附图1DB块的数据,可以直接在DB块里设置。这里要注意的是DB块分为两类,…

    2017年6月9日
  • 1200

    博途v13 SP1 update8连接1200,出现IP地址处出现红色,然后下载按钮时灰色的,无法下载、在线时显示IP地址处设备不兼容、上传时显示上传失败停止上…

    2017年6月8日
  • S1500的TP生成脉冲

    当RLO从0变1时,TP开始运行,Q置1,直至时间结束,Q置0,这时将RLO由1变0,为什么TP有概率的开始运行?有时候会运行,有时候不会运行。 问题补充:我是S1500初学者,就…

    2017年6月8日
  • 使用MODBUS_MASTER通讯的问题

    第一次使用s7-1200做通讯   请问按照图片中的协议读取电池温度   modbus_master要怎么填写&nbsp…

    2017年6月5日
  • 博途V14 SP1 DVD1和DVD2

    各位大神请教下,博途V14和V14 sp1安装包里都有DVD1和DVD2。安装了DVD1就可以使用了。DVD2里面的有必要安装吗?安装和不安装有什么影响?如图 图片说明:…

    2017年5月29日
  • 基座怎样拆下

    红色方框内的固定夹子怎样拆下 图片说明:    最佳答案 这个是前连接器安装时的一个位置判断,目的是防止相邻2个前连接器误插。用小的尖嘴钳夹住,往外拉一下就可以…

    2017年6月3日
  • 两个1500之间的数据传递

    有两套1500设备,每套1500CPU采用PN的方式和触摸屏、变频器、ET200SP通讯。现在我想把其中一套1500的几个数据传输到另一套1500的CPU中,那问题来了,用什么通讯…

    SIMATIC S7-1500 2021年7月5日
  • DB块位 置位

    请教下:db0.dbx0.0我可以在程序中置位吗,为什么我在程序中置位不显示,交叉引用没用到这个点及db0.dbb0 最佳答案 看看DB0的属性里面是不是选上了优化的块访问,如果选…

    SIMATIC S7-1500 2017年6月1日
  • BLKMOV块移动

    这个程序原来在1500cpu里面 想要把它转到1200里面 可是发现1200不兼容 请问一下前辈这个怎么转换过来 最佳答案 1200有MOVE_BLK…

    SIMATIC S7-1500 2021年7月5日
  • s7-1500和s7-200做主从站应该如何接线

    求详细解答 最佳答案 DP  和MPI  西门子通信都是3-3  8-8 提问者对于答案的评价:感谢 专家置评 已阅,最…

    SIMATIC S7-1500 2017年5月29日