我目前正在用modbus tcp挣扎,并且遇到了解释模块响应的问题。该响应包含两个值,这些值以三个UInt16
值的数组的位进行编码,其中r [0]的前8位必须被忽略。如何进行位移和连接以获得正确的结果?
比方说,UINT16数组称为r
和“最后”的价值观我想是val1
和val2
,那么我就必须做到以下几点:
在上面的例子中,对于输入值r[0]
= 768,r[1]
= 1536和r[2]
= 0,期望的输出值是val1
(= 3)和val2
(= 6),所有值都是UInt16。
我已经尝试过(逻辑上)8位右移r[0]
,但是高位会丢失,因为它们存储在r[1]
的前8位中。我必须先连接所有的r值,然后再进行位移吗?我怎样才能做到这一点?提前致谢!
你为什么用UINT16工作?该协议是基于(8位)字节设计的,这使得一切都更简单。你不能简单地使用字节吗? – DrKoch 2015-03-13 13:36:47
嗯,模块本身返回UINT16(通过Wireshark验证),我的modbus库也适用于这种类型...所以我会坚持。 – Robert 2015-03-13 13:41:38