通过MODBUS-RTU读取的数据溢出,超过了32767,听说可以通过补位处理达到65535吗

smart通过MODBUS协议读取仪表的一个INT字,实际读取数据会超过溢出值。有位大佬告诉我说可以通过位运算把整形字的第一位(符号位)处理下,可实现最大65535的显示。有没有哪位做过相关的!

最佳答案

由于S7-200 SMART 中整数运算指令都是按照有符号类型设计的,对于无符号整数需要先转换下,不能直接把无符号整数存储值直接MOVE进有符号整数值,或直接作为有符号操作数使用,有可能会溢出。通常需要把无符号整数转换成更大长度的有符号整数再使用,如8位无符号(0~255)转成16位有符号(-32,768~+32,767),如8位无符号整数存储于MB0,直接把MB0 MOVE进16位有符号低字节;16位无符号转成32位有符号,如16位无符号整数存储于MW0,直接把MW0 MOVE进32位有符号低字;32位无符号转成小数(因为200 SMART只能处理最大32位整数值),64位也可以先转换成小数再使用。https://www.ad.siemens.com.cn/productportal/Prods/s7-200-smart-portal/200SmartTop/programming/Data_addressing.html

提问者对于答案的评价:
还没测试

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

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日 下午10:41
下一篇 2021年7月4日 下午10:42

相关推荐

发表回复

登录后才能评论