新人小白为了使用MODBUS协议遇到的疑问
现在我有一块已经和电脑接通的电压表,电压表是使用MODBUS协议的并使用485转232和电脑相连,期间还使用了串口工具证实了它和电脑是联通的,它的地址我已经设置为01,波特率设置为9600,现在要取出位于40022位置的寄存器数据,那我发送一个帧过去,要经历什么样的过程和格式的变换才能到达电压表呢?
我在SSCOM中使用HEX发送“01039C5600020A4B”,得到了“01 03 04 43 5B 8A 5E 78 FC”可是我看不懂啊我知道电压数据时219.6V
[解决办法]
01039C5600020A4B
你发送的请求时向站点01读取保持型寄存器 地址为0x9C56 数量为0x0020
返回数据
01 站号
03 读取保持型寄存器
04 总字节数
43 第一个值高位
5B 第一个值高位
8A 第二个值高位
5E 第二个值高位
78 FC 校验码
你读取的值 0x435B 以及0x8A5E
[解决办法]
假定3L的协议是正确的,那么
# include <stdio.h>
# include <string.h>
int main(void)
{
float v;
char a[] = { 0x5E, 0x8A, 0x5B, 0x43, };
memcpy(&v, a, sizeof(v));
printf("%f\n", v);
return 0;
}
219.540497