如何识别与Modbus锅炉通信的协议和端口设置

How to recognize protocol and port settings in communication with Modbus boiler

这是我的第一个问题。 我正在尝试 on/off 我的暖气用 arduino。首先,我必须弄清楚如何与它通信。我的恒温器有 4 根线(3V、GND、A+、B-),这是典型的 2 线 RS-485 + 3V 电源,用于为恒温器供电。 我已经将 RS-485 连接到以太网转换器以监控协议并找出我的实际恒温器使用的命令,以便用 arduino 复制它们(并自动执行一些任务)。 我从一个 modbus 监视器(串行端口监视器)开始,一些数据包有一个 OK 校验码,一些数据包有一个 BAD 校验码。 我不知道端口的配置,所以我尝试了一些 9600 8 位无奇偶校验,9600 8 位偶校验,9600 8 位奇校验,结果是一样的。 似乎数据包有时适合 modbus 结构,但并非总是如此。 我可以假设通信协议是 modbus 吗?为什么有些数据包或多或少有 30% 的校验码是 OK 而 70% 的校验码是 BAD?

[2019 年 10 月 23 日 19:57:51]
Modbus 响应 (COM4)
地址:7
功能:15 (0x0f) - 写入多个线圈
起始地址:1 数量:4

校验和:1454(正常)

[2019 年 10 月 23 日 19:57:52]
Modbus 响应 (COM4)
地址:7
功能:1 (0x01) - 读取线圈 字节数:0
值:

校验和:32174(正常)

[2019 年 10 月 23 日 19:57:52]
Modbus 响应 (COM4)
地址:7
功能:1 (0x01) - 读取线圈 字节数:1
值:00
线圈 0-7:00000000

校验和:20736(正常)

[2019 年 10 月 23 日 19:57:52]
Modbus 响应 (COM4)
地址:7
功能:15 (0x0f) - 写入多个线圈
起始地址:1 数量:4

校验和:33660(正常)

[2019 年 10 月 23 日 19:57:52]
Modbus 响应 (COM4)
地址:7
功能:15 (0x0f) - 写入多个线圈

校验和:1(错误)

[2019 年 10 月 23 日 19:57:52]
Modbus 响应 (COM4)
地址:0
功能:4 (0x04) - 读取输入寄存器

校验和:1454(错误)

[2019 年 10 月 23 日 19:57:53]
Modbus 响应 (COM4)
地址:7
功能:1 (0x01) - 读取线圈

校验和:0(错误)

[2019 年 10 月 23 日 19:57:53]
Modbus 响应 (COM4)
地址:0
功能:7 (0x07) - 读取异常状态

校验和:32174(错误)

[2019 年 10 月 23 日 19:57:53]
Modbus 响应 (COM4)
地址:7
功能:1 (0x01) - 读取线圈

校验和:256(错误)

[2019 年 10 月 23 日 19:57:53]
Modbus 响应 (COM4)
地址:7
功能:15 (0x0f) - 写入多个线圈
起始地址:1 数量:4

校验和:256(错误)

您认为正在使用的协议是 modbus 还是我应该尝试其他协议? 如何确定端口通信设置(9600 8位偶校验)是否正确?

谢谢大家!

我解决了这个问题。问题是我正在使用 RS485 到以太网设备来读取总线。该设备一直在缓冲帧,直到缓冲区达到 1024 字节,然后将数据打包到 UDP 数据包中并将其发送到我的 PC。那打破了 modbus 帧。 一个 modbus 帧由一个符号的 3.5 倍的静默期分隔。 我将缓冲区配置为 0 字节,以便设备立即将数据发送到我的 PC,所有 CRC 现在都正常,数据有意义。现在我必须对 modbus 发送的数据进行逆向工程,但这是另一个话题。 谢谢!