Modbus RTU和Modbus TCP

Modbus概要

https://www.bilibili.com/video/BV1LK4y1D776?zw

Modbus为PLC而生,是一个总线协议。

Modbus有以下几种协议(不全):Modbus RTU/Modbus Ascii/Modbus Tcp / ModbusRTUOverTcp

特性:

  • 开源免费
  • 在多种电气接口(RS232、RS485)以及通信介质(串口、以太网、蓝牙、4G)中使用
  • 报文帧简单紧凑

对于PLC而言,其存储区的数据类型可以分为 布尔量和寄存器,根据读写性又分为只读和读写。

于是可以分为以下四个区:

  • 读写布尔量:输出线圈 0区 40001-49999
  • 只读布尔量: 输入线圈 1区 10001-19999
  • 只读寄存器: 输入寄存器 3区 30001-39999
  • 读写寄存器: 输出寄存器 4区 40001-49999

功能码,则是对这些布尔量或寄存器进行读写操作的一个编号。比如 读取输出线圈是0x01

RTU和ASCII的区别:

  1. RTU发10会发0x0A,ASCII码会发0x31 0x30;
  2. RTU是CRC循环冗余校验,ASCII是LCR纵向冗余校验
  1. RTU是Modbus标准里的必备项

测试软件

ModbusPoll

ModbusSlave

VSPD——虚拟串口

串行链路报文格式

串行链路上的报文格式为:

从站地址:设备编号,Modbus一主多从

举例1 功能码 03 读取输出寄存器

发送报文:

接收报文:

注意到,读2个寄存器,返回的是4个字节,这是因为每个寄存器里的存储内容是2个字节的。

类库写法

读取寄存器分为五个步骤:

  1. 拼接报文

按照自己的需求拼接出问询报文,即从站地址+功能码+数据区+校验位

  1. 发送问询报文

  1. 接收回复报文

可以加个延时

  1. 验证报文
  2. 解析报文

TCP报文格式

38分钟开始为有效内容

https://www.bilibili.com/video/BV1R5411M7ys?zw

TCP本身就有校验,因此RTU原有的CRC校验位就不需要了。去除了设备地址,因为有ip地址这个概念了。

此外,TCP相比于DTU会多一个MBAP报文头。单元标识符默认固定为01。

  1. 读指令0x04对比

  1. 写指令0x10对比

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值