拿到的通讯协议里,比如某个变量L寄存器的地址是0x3002,H寄存器的地址是0x3003,那么可以同时读取这两个地址的值吗?如果可以,数据帧该怎么表达呢?
这就协议中的截图,地址就是十六进制的,我想读取充电输出功率,存放在两个地址,这时候我该怎么办呢?
01 04 03 02 00 02 DF 0B
01 是设备地址
04 是功能码,图2已经明确指出使用0x04功能码。
3002 是地址
0002 是长度
DF0B 是校验
注意:读一个32位字,就应该是使用一条指令读,必须的,不能用两条指令读,两条指令读是存在出错可能的。
比如读一个32位字的计数器,分成两次读,
第一次读时,计数器的值是65535,即0x0000FFFF,读取低16位得到0xFFFF,
第二次读时,计数器的值是65536,即0x00010000,读取高16位得到0x0001,
两次的结果拼起来,得到0x0001FFFF,出错!