在调试Modbus RTU设备的时候,你是不是每次都得自己手动生成CRC16校验码?
敲一串命令还要去翻协议手册查表,搞错一位整个通讯就废了。
在调试的时候要一个个地去验证,折腾半天。
最近发现了一个开源的小工具,可以直接给它加上 CRC16 校验。
它叫 ModbusDebuger 。
是一个 Qt5 编写的 Modbus RTU 串口调试软件。
兼容 RS232 和 RS485 串口,变频器、仪表、PLC 都能调。
将校验码的计算也加入到发送过程中。
经常和 Modbus 设备打交道的工程师,应该懂。
下面我们看看它有哪些独特功能。
自动扫描串口,配置参数一键搞定。
启动软件之后点击刷新按钮,本机上所有的可用串口都会被列出。
波特率从300bps到256000bps,13 种常用选项全覆盖,下拉菜单直接选。
数据位、停止位、校验位等参数,在下拉框中都可以找到,不需要手动去填写。
上一次使用的配置会自动保存下来,在下次启动的时候就会恢复,这样就不需要每次都要重新设置了。
调变频器时波特率 9600,调仪表时改成 115200,来回切换很方便。
HEX和ASCII两种发送方式,一按就切换。
有的设备要使用十六进制指令,例如 01 03 00 00 00 01,查CRC表很麻烦。
有的设备要使用ASCII字符串来传输数据,例如发送配置参数等,手动转换格式很麻烦。
ModbusDebuger 有两种模式,在发送框的右上角有一个复选框,勾选了就是HEX,没有勾选就是ASCII。
输入 01 03 00 00 00 01,勾上 HEX 发送,实际发出的就是标准的 Modbus RTU 指令。
// HEX 发送示例输入:01 03 00 00 00 01实际发送:01 03 00 00 00 01 CRC_CRC在切换模式的时候,发送框里边的数据会自动转换,不需要手动去修改。
自动加上CRC16校验码,不需要再去翻手册查表了。
Modbus RTU 协议最后两位为CRC16校验码,在传统的调试方法中需要查表或者使用计算器来计算。
计算错误导致整个通信失败,变频器无反应、仪表无法显示数据,在现场调试的时候很麻烦。
在 ModbusDebuger 的发送框下面有一个“添加CRC16”的复选框,只要勾上就可以了。
输入命令为01 03 00 00 00 01,勾选上CRC16,工具会自动计算出校验码并添加上去。
实际发出的数据为01 03 00 00 00 01 CRC_CRC,完全符合协议要求。
以前调试 PLC 时要翻半天手册,现在输入指令直接发送,效率直接翻倍。
// CRC16 自动添加逻辑Algorithm::AppendCRC16(sendData);m_pModbusDevice->sendData(sendData);
定时发送功能,RS485 总线轮询时特别有用。
在 RS485 总线上有多个设备进行轮询的时候,要间隔着发送指令,手动一点一发很麻烦。
ModbusDebuger支持定时发送,在右边有一个定时器设置框,里面可以填入毫秒数作为间隔时间。
勾选上定时发送复选框后,工具就会按照你设置的时间间隔自动循环发送。
调节三台变频器的时候,设置 100ms 的时间间隔,依次发出读取命令,数据会自动更新。
原来需要手动点击几十次,现在设置好了之后让工具自己运行,节省了大半天的时间。
// 定时发送配置sendTimer->start(time); // 启动定时器// 每隔 time 毫秒自动调用 sendData()
独立线程接收数据,界面不卡顿。
传统的串口工具在接收数据的时候,界面会变得很慢,当数据量大的时候就更加明显了。
ModbusDebuger 使用单独的线程来接收数据,主界面始终保持流畅。
接收到的数据实时显示在下方文本框,带时间戳和方向标识(发送/接收)。
可以随时在HEX和ASCII显示模式之间进行切换,在右上角有一个“HEX显示”复选。
接收到的数据可以保存为txt文件,便于后面分析。
// 数据接收与显示QList<datainfo> lstFrames;m_pDataBuf->popAllFrames(lstFrames);for(int i=0; i<lstframes.size(); ++i)="" {[="" span][="" p][="" span]="" showframe(lstframes);="" 显示带时间戳[="" span]}[="" span][="" span][align="center]<img" src="https://mmbiz.qpic.cn/sz_mmbiz_png/jAS5Tm00b2hVp1ic6d9KPVE0zoscPb6CtMibM3SIMdMQl4QfEke20mDgM1946PMFyDROSs1vcLJQCniaoB527V2y1jic1DzmBV0DgLKz49IXQZc/640?wx_fmt=png&from=appmsg&watermark=1#imgIndex=5">
状态指示灯,连接状态一目了然。
在界面上方左侧有一个状态指示灯,当打开串口的时候是绿色的,如果关闭或者出现错误就变成红色。
不需要查看串口列表就可以知道现在的通信情况。
当串口被占用的时候,工具会弹出一个提示框,并且不会出现无响应、卡死的情况。
在调试设备的时候,通过观察指示灯的状态变化可以很快地发现故障。
看到这你想装上试试 ?
你可以从 GitHub Releases 页面下载可执行程序,解压就能跑。
不需要安装 Qt 环境,作者已经用 windeployqt 打包好了。
安装好之后打开软件,选择串口、波特率等参数,然后点击“打开”按钮,当指示灯变成绿色的时候就表示开始通信了。
发送框里输入指令,勾上 CRC16 和 HEX,点击发送,就能看到收发结果。
有兴趣的朋友可以尽快试一试。
开源地址:https://github.com/SantaJiang/ModbusDebuger </lstframes.size();></datainfo>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!