问题描述:
项目上想用昆仑通态1031Nt和我们自研的微水仪按照标准的modbusRTU进行连接。遇到的问题有:
⑴ 开始调试,不知道如何监控。
⑵ 串口停止位和校验位的设定问题。
⑶ modbusRTU 命令码和响应码的对应关系。
⑷ 程序修改及32位浮点数大端对齐的选择问题。
解决过程:
⑴ 开始调试,不知道如何监控。
a、一开始,准备使用modbus poll 作为调试软件,先将poll和微水仪调通。再让微水仪和触摸屏联通,但是在尝试的时候遇到一个问题:modbus poll的CRC校验码的低位在前,高位在后。这和程序中使用的CRC校验码次序不一致。无奈只能放弃使用modbus poll。
b、后来,想了一个办法,使用com5串口让触摸屏和微水仪通讯。串口调试助手使用com6 串口监控com5的通讯线缆。这样就能在串口助手上看到命令码和响应码。这样就可以清楚触摸屏和微水仪的通讯状态。通过这个办法,保证命令码的正确性。但是还是看不到响应码。在触摸屏控制软件McgsPro上调节最小采集周期和通讯等待时间,能看到响应码。
c、最后触摸屏厂家技术人员给了一个AccessPort 串口抓包助手。使用这个软件可以看到:停止位、校验位、数据位个数、命令码长度和响应码长度。
使用这个软件确定了命令码和响应码的对应关系。
⑵ 串口停止位和校验位的设定问题。
在本次调试中,两位大佬给我说都使用的默认设定。即停止位:1位。数据校验:无校验。
上网查资料得知:无校验位时,使用两位停止位。
有奇偶校验时,使用一位停止位。
校验位和停止位总和为两位。
⑶ modbusRTU 命令码和响应码的对应关系。
在标准modbusRTU协议中,命令和响应有严格的对应关系。
比如我们的命令是:01 03 00 00 00 04 09 44 ,在这个命令中我们要的数据个数是4,按照标准modbusRTU协议,响应的数据字节个数为8,总字节数为
地址(1)+功能吗(1)+数据字节数(1)+数据字节(8)+校验码(2)=13字节。形如 01 03 08 XX XX XX XX XX XX XX XX CR CR 共9位。见AccessPort截图。
⑷ 程序修改及32位浮点数大端对齐的选择问题。
a、程序修改
{if(datgs==4) //datgs==2 --> datgs==4 20230628 wjc
b、32位浮点数大端对齐