Modbus协议

Modbus协议

1.起源

Modbus由Modicon公司于1979年开发,是一种工业现场总线协议标准。
Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是Modbus RTU、Modbus ASCII和Modbus TCP三种
其中Modbus TCP是在施耐德收购Modicon后1997年发布的

2.分类

1) Modbus RTU:
运行在串口上的协议,采用二进制表现形式以及紧凑型数据结构,通信效率高,应用广泛
2) Modbus ASCII:
运行在串口上的协议,采用ASCII码传输,并且利用特殊字符作为其字节的开始与结束标识,其传输效率要远远低于Modbus RTU协议,一般只有在通信数据量较小的情况下才考虑使用Modbus ASCII通信协议
3) Modbus TCP:
运行在以太网上的协议

3.优势

免费、简单、容易使用

4. 应用场景

Modbus协议是现在国内工业领域应用最多的协议,不只PLC设备,各种终端设备,比如水控机、水表、电表、工业秤、各种采集设备

5. Modbus TCP的特点

1)采用主从问答式通信
2)Modbus TCP是应用层协议,基于传输层TCP协议实现
3)Modbus TCP端口号默认502

Modbus TCP协议格式

ModbusTcp协议包含三部分:报文头、功能码、数据

1.报文头

在这里插入图片描述
事务处理标识符:主机发什么,从机回什么,没有限制
协议标识符:00 00(十六进制) 占2字节
长度:占两个字节,需要4位16进制来表示
单元标识符:从机ID

2.寄存器

包含四种:离散量输入、线圈、输入寄存器、保持寄存器
1) 离散量和线圈其实就是位寄存器(每个寄存器数据占1字节),工业上主要用于控制IO设备
线圈寄存器,类比为开关量,每一个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。比如控制外部8路io的高低。 线圈寄存器支持读也支持写,写在功能码里面又分为写单个线圈寄存器和写多个线圈寄存器。
对应上面的功能码也就是:0x01 0x05 0x0f
离散输入寄存器,离散输入寄存器就相当于线圈寄存器的只读模式,他也是每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,是不能够写的。比如我读取外部按键的按下还是松开。
2)输入和保持寄存器是字寄存器(每个寄存器数据占2个字节),工业上主要用于存储工业设备的值
保持寄存器
,这个寄存器的单位不再是bit而是两个byte,也就是可以存放具体的数据量的,并且是可读写的。比如我我设置时间年月日,不但可以写也可以读出来现在的时间。写也分为单个写和多个写
所以功能码有对应的三个:0x03 0x06 0x10
输入寄存器,这个和保持寄存器类似,但是也是只支持读而不能写。一个寄存器也是占据两个byte的空间。类比我我通过读取输入寄存器获取现在的AD采集值
对应的功能码也就一个 0x04

3. 功能码

在这里插入图片描述
寄存器PLC地址和寄存器的对应关系:
线圈: 00001-09999
离散量输入:10001-19999
输入寄存器:30001-39999
保持寄存器:40001-49999
具体协议分析可参考:
http://www.360doc.com/content/20/0804/12/43769266_928452485.shtml

Modbus RTU

1. 与Modbus TCP的区别

在一般工业场景使用modbus RTU的场景还是更多一些,modbus RTU基于串行协议进行收发数据,包括RS232/485等工业总线协议。
与modbus TCP不同的是RTU没有报文头MBAP字段,但是在尾部增加了两个CRC检验字节(CRC16),因为网络协议中自带校验,所以在TCP协议中不需要使用CRC校验码。
RTU和TCP的总体使用方法基本一致,只是在创建modbus对象时有所不同,TCP需要传入网络socket信息;而RTU需要传入串口相关信息。

2. Modbus RTU特点

ModbusRTU也是主从问答协议,由主机发起,一问一答
设置串口参数:
波特率:9600
8位数据位
1位停止位
无流控

3.ModbusRTU协议格式

ModbusRTU协议数据帧包含四部分:地址码、功能码、数据、校验码
从机ID:1-247
功能码:同Modbus TCP 协议
数据: 起始地址、数量、数据
校验码:2字节,对地址码、功能码、数据部分进行校验,调用函数生成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值