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