主要功能
- 请求命令生成:设置从站地址、功能码、起始地址以及读取数量或写入值,生成带有校验码的Modbus RTU请求帧,校验码为CRC。
- 响应报文生成:根据功能码构建正常响应、写入确认或异常响应,并设置寄存器读取响应的数据类型和字节序。
- 完整报文的解析:识别从站地址、功能码、数据区及CRC字段在RTU报文中的位置,并显示校验状态。
- 寄存器值的解析:通过自定义规则指定名称、起始字节、数据类型、字节序和数量,解析寄存器值。
- CRC的计算和验证:计算CRC-16,计算对象为不含CRC的数据帧,或验证完整报文末尾的校验码。
- 批量处理:请求生成、响应生成、CRC计算均提供逐行批量处理的入口。
- 本地设置的保存:常用的从站地址、数据类型、字节序和解析起始位置可以通过“保存设置”保留。
操作前的准备
- 生成请求命令时,准备从站地址、功能码、起始地址以及读取数量或对应的写入值。
- 生成响应报文时,准备从站地址、响应功能码、响应类型和寄存器返回值。对于寄存器读取响应,还需要确认数据类型和字节序。
- 解析报文时,输入完整的RTU十六进制报文,包括CRC字段。此页面支持使用空格、连字符、冒号或逗号分隔。
- 计算CRC时,输入不含CRC的数据帧。验证CRC时,输入已包含末尾CRC字段的完整报文。
- 此页面注明,数据在浏览器内处理,常用设置保存在本地。
操作步骤
-
进入操作区域并选择功能
打开工具后,向下滚动找到“工具使用”区域。页面上部有“请求生成、响应生成、报文解析、CRC校验”4个选项卡,可以根据当前工作直接切换。首次使用时可以从“请求生成”开始。如果需要重复使用常用参数,请在确认设置后点击右上角的“保存设置”,如果需要恢复页面的初始设置,请使用“恢复默认”。
图1:在工具使用区域选择请求生成、响应生成、报文解析或CRC校验 -
设置参数并生成请求命令
进入“请求生成”后,首先选择“单个生成”或“批量生成”。在单个模式下,依次输入从站地址、功能码、起始地址和读取数量。将功能码切换为写入命令后,页面会根据对应模式显示写入数据的设置。确认参数后,点击“生成请求命令”,右侧的“生成结果”区域用于显示完整报文、字段说明和CRC。如果需要继续检查报文,可以使用“发送到解析器”或“下一步:响应生成”。
图2:选择生成模式并输入请求参数,然后检查右侧的报文和CRC字段 -
设置并生成响应报文
点击“响应生成”选项卡,首先选择单个模式或批量模式,然后设置从站地址、功能码和响应类型。对于寄存器读取响应,还需要选择UINT16、INT16、UINT32、INT32或FLOAT32数据类型,并根据设备协议选择ABCD、DCBA、BADC或CDAB字节序。在文本框中输入寄存器返回值后,点击“生成响应报文”,页面右侧用于显示响应帧、字段说明和CRC。
图3:完成响应参数和返回值的设置后,查看页面提供的响应报文区域 -
输入完整报文并解析字段
进入“报文解析”,将包含CRC的十六进制报文输入“完整RTU报文”文本框。然后,设置默认数据类型、默认字节序和数据起始字节。页面说明,起始位置按照完整报文的字节编号从0开始计算。如果需要按业务字段拆分数值,请使用“添加规则”设置规则名称、起始字节、类型、字节序和数量。点击“解析报文”后,页面的解析结果区域用于显示CRC状态、功能码、数据区和解析出的寄存器值。
图4:输入完整报文,设置默认参数或自定义规则,然后解析字段 -
计算或验证CRC校验码
进入“CRC校验”后,可以在“不含CRC的数据帧”中输入原始字节并点击“计算CRC”。页面会按照Modbus RTU CRC-16规则,显示低字节在前的校验码和完整报文。如果已有完整报文,请将其放入“完整报文验证”,点击“验证CRC”。可以将多个不含校验码的数据帧在CRC批量区域中每行放置一个,使用“批量计算”进行处理。
图5:根据数据帧是否包含CRC,选择计算或验证入口
主要参数说明
| 参数 | 用途 | 建议 |
|---|---|---|
| 从站地址 | 指定Modbus从站编号。页面注明,0是广播地址,普通设备主要使用1-247 | 输入实际设备地址,仅在明确需要广播时使用0 |
| 功能码 | 请求支持01、02、03、04、05、06、15、16,对应线圈读取、输入读取、寄存器读取和写入操作 | 根据设备的寄存器类型和读写对象进行选择 |
| 起始地址 | 指定请求或解析开始的位置 | 在请求页面输入报文地址。页面注明,通常从0开始 |
| 读取数量 | 设置一次读取的线圈或寄存器数量 | 读取寄存器时,输入页面显示的1-125范围内的值 |
| 响应类型 | 切换正常响应和异常响应 | 根据需要模拟的设备返回状态进行选择 |
| 数据类型 | 支持UINT16、INT16、UINT32、INT32、FLOAT32 | 与设备手册中的寄存器数据定义保持一致 |
| 字节序 | 将32位数据的排列控制为ABCD、DCBA、BADC或CDAB | 优先使用设备文档中明确指定的顺序 |
| 数据起始字节 | 指定解析寄存器值时从完整报文的哪个字节开始 | 按照页面规则从0开始计数,避开地址和功能码等非数据字段 |
| 批量模式 | 逐行处理多个请求、响应或CRC数据帧 | 每行仅放置一个符合当前功能要求的输入 |
结果的查看和保存
请求生成页面和响应生成页面右侧的结果区域会列出完整报文、CRC和相关字段。报文解析页面会显示接收到的CRC值、校验状态、数据区和按自定义规则解析出的值。CRC页面会显示低字节在前的校验码、寄存器值和完整报文。如果需要进一步处理,可以使用页面提供的“复制结果”或“发送到解析器”。常用的从站地址、数据类型、字节序和解析起始位置可以通过点击上部的“保存设置”保留在本地。
常见问题和使用建议
CRC校验码的字节序是什么?
页面说明,CRC-16的结果在Modbus RTU中使用低字节在前、高字节在后的顺序。例如,当CRC寄存器值为0xCDC5时,报文末尾写为C5 CD。
功能码03和04有什么区别?
03用于读取保持寄存器,一般用于参数、设定值或可读写的数据。04用于读取输入寄存器,一般用于传感器测量值等只读数据。
如何选择ABCD、DCBA、BADC、CDAB?
这些选项用于32位数据的字节排列。首先确认设备手册中的字节序定义。如果文档未指定,可以在解析器中切换,检查数值是否与现场的测量范围一致。
为什么FLOAT32占用两个寄存器?
Modbus的寄存器宽度为16位,而FLOAT32是32位浮点数,因此需要两个连续寄存器,即4个数据字节。
通常,CRC校验失败是什么原因造成的?
页面列出的常见原因包括报文输入错误、缺少字节或多余字节、CRC字节序颠倒、通信干扰或设备使用非标准校验方法。可以先使用CRC功能重新计算,并比较最后两个字节。
批量请求生成的输入格式是什么?
读取和单个写入的格式为“从站,功能码,地址,数量或值”,例如1,03,0,10。多个寄存器写入的格式为“从站,16,地址,类型,字节序,值...”,例如1,16,0,FLOAT32,ABCD,3.14。