本帖最后由 pcsms_qkPGovES 于 2019-4-27 17:32 编辑
char response[300]
short read_data[150]
//省略发送部分
INPORT(response[0], "MODBUS RTU Device", 21, return_value)// response[]储存从机返回的数据
SetData(response[3],"Local HMI", LW, 504,4)//观察用
read_data[0] = response[3] + (response[4] << 8)//合并为16bit数据
read_data[1] = response[5] + (response[6] << 8)
SetData(read_data[0],"Local HMI", LW, 506,2)//观察用
在触摸屏上放置两个数值显示元件,地址分别为LW504和LW506,数据格式设置为32bit HEX
按理说两者显示除了顺序应该完全相同,但是LW506高16bit始终比原始数据小1
如response[3-6]接收到0X8780,在LW504读到0X8087,但是在LW506却读到0X8680
经多次验证,这种情况只在response[5-6]大于等于0X80的情况下出现,如0X8000变为0XFF80;0XEEFE变为0XFDEE
而在response[5-6]为0X7F,0X7E等都是正常的,这是什么奇怪的bug?是程序中的移位操作不对吗?求高手解答! |