ModBus Poll中的ASCII协议的LRC校验计算方法

文章解释了LRC与VRC在工业领域Modbus协议中如何配合使用,通过ASCII模式计算字符校验码的方法,涉及数字转换、取反加一和异或操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上找了半天,刚开始也不太理解,后来到处看发现了,其实是LRC经常是与VRC一起使用,这样就会为每个字符校验码,在工业领域Modbus协议Ascii模式采用该算法。

计算方法是 每一位得出10进制的数,加起来然后取余256,然后取反加1

例子:

3A 30 31 30 36 30 30 30 35 30 30 30 35 45 46 0D 0A 

3A 30 31 30 33 30 30 30 30 30 30 30 41 46 32 0D 0A 

3A 30 35 30 33 30 30 46 46 30 30 30 31 30 30 30 34 46 34 0D 0A 

第一个例子

第一位3A不理,然后最后四位去掉 45 46是校验位换算成字符串就是EF,0D 0A是换行回车不管

30 31 30 36 30 30 30 35 30 30 30 35 换算成数字就是010600050005,加起来是17也就是0x11,取反是0xEE,加一是0xEF,换算成ASCII就是45 46

第二个例子同理

30 31 30 33 30 30 30 30 30 30 30 41 换算成数字就是01030000000A,加起来就是14,也就是0x0E,取反是0xF1,加一是0xF2,换算成ASCII就是46 32

第三个例子

050300FF00010004,全部加起来取余之后就是F4

正常的LRC校验是ASCII的时候就全部异或,具体怎么算我也不太清楚,不过这个是一搜就能找到的

### 使用 ModbusPoll 读取 Modbus 设备报文 为了通过 ModbusPoll 工具读取 Modbus 设备的数据,需先配置好工具并建立与目标设备的有效连接。ModbusPoll 可以作为 Master 来发起请求给 Slave 设备,并接收响应。 #### 配置环境 安装 ModbusPoll 后,在启动程序前要确认计算机已正确设置了用于通信的串口参数或网络接口(对于 Modbus TCP),这取决于所使用的 Modbus 协议版本[^1]。 #### 设置连接参数 打开 ModbusPoll 应用程序后,进入设置界面来指定连接细节: - **波特率**: 对于串行端口通讯而言,这是指每秒传输的最大位数。 - **数据位、停止位以及奇偶校验**: 这些选项定义了字符格式。 - **地址 (Address)**: 表明哪个节点是消息的目标;每个从站都有唯一的地址。 - **模式 (Mode)**: 选择 RTU 或者 ASCII 模式,依据实际需求而定。 针对 Modbus RTU 和 Modbus ASCII 的区别在于它们采用不同的校验方式:前者利用循环冗余检验(CRC),后者依赖纵向冗余校验(LRC)[^2]。 #### 发送查询命令 完成上述准备工作之后,可以构建具体的寄存器访问指令。例如,如果想要获取保持寄存器中的数值,则可以在软件界面上输入相应的功能码(比如03H表示读多个保持寄存器)连同起始位置和数量等信息。 下面是一个简单的 Python 脚本例子展示如何调用 `pymodbus` 库模拟 ModbusPoll 功能向远程服务器发送读取请求: ```python from pymodbus.client.sync import ModbusTcpClient as ModbusClient client = ModbusClient('192.168.1.17', port=502) if client.connect(): result = client.read_holding_registers(address=0, count=10, unit=1) print(result.registers) else: print("无法连接到服务器") client.close() ``` 这段代码尝试连接至 IP 地址为 '192.168.1.17' 的 Modbus TCP 服务端,并从中读取编号由 0 开始连续十个保持寄存器的内容。注意这里的 `unit=1` 参数代表的是目标设备的单元号或者说是从机 ID。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值