ModbusRTU(485)详细笔记

Modbus详细笔记

Modbus详细笔记

结合自己毕业以来一年的工作经验,记录下自己对Modbus485的理解和应用,方便自己学习使用,也可给广大网友学习参考,欢迎指正我的错误和补充不足。
更新记录

时间更新内容
2024/6/14更新异常反馈:错误码和异常码的认识

Modbus 简介

Modbus协议是一种用于工业自动化领域的通信协议,它是最常用的串行通信协议之一。Modbus协议最初是由Modicon(现在是施耐德电气公司的一部分)开发的,用于连接PLC(可编程逻辑控制器)和其他设备,现在单片机上也广泛应用。Modbus协议可以在串行通信(如RS-232、RS-485)和以太网通信(如Modbus TCP/IP)中使用。它可以通过简单的读写寄存器来传输数据,通常用于监控和控制设备之间的通信。

Modbus协议有三种不同的传输模式:

  • ASCII模式:ASCII模式使用可见字符来传输数据
  • RTU模式:RTU模式使用二进制数据传输,
  • TCP/IP模式:TCP/IP模式适用于网络通信。
    本文主要介绍Modbus RTU
    Modbus协议使用从站和主站的概念,主站负责发送请求并控制通信的流程,而从站则响应主站的请求并提供数据。modbus是一个 master 设备控制一个或多个 slave 设备;即一主多从。它支持多种数据类型的读写,如数字、浮点数、字符串等。
    注意!
    Modbus 是一种通讯协议,而 RS-485 是一种物理层通讯标准。Modbus 的不是物理层传输方式,Modbus 是数据格式,接收、应答和错误处理机制。Modbus 协议可以在 RS-485 物理层上运行,但也可以在其他物理层上运行,比如以太网,Wi-Fi等等,RS-485 是一种串行通讯标准,适用于远距离高速数据传输。在工业自动化领域,常常会将 Modbus 协议应用于 RS-485 物理层上,以实现各种设备之间的通讯。因此,可以说 Modbus 和 RS-485 是可以结合使用的,但它们之间的主要区别在于一个是通讯协议,一个是物理层标准。

为了便于理解我们直接自定义一些寄存器地址

Modbus 帧结构

寄存器地址字节数量byte数据格式名称范围单位传输
0x26002U16实时电流0-1000AHEX
0x26012U16实时电压0-1000VHEX
0x26022U16输入电流0-1000AHEX
0x26032U16输出电压0-1000VHEX

Modbus协议的帧结构

  1. Modbus RTU帧结构:
  • 起始符:1个字节,为冒号“:”。
  • 从站地址:1个字节,表示数据传输的目标设备地址。
  • 功能码:1个字节,指示数据的操作类型,如读操作、写操作等。
  • 数据域:N个字节,包含传输的数据。
  • CRC校验:2个字节,用于检测数据传输中是否出现错误。
  • 结束符:2个字节,表示帧的结束。

如读寄存器地址发送读多个寄存器:01 03 26 00 00 06 B7 0D

  • 01:从站地址;
  • 03:功能码;
  • 22 00:读取寄存器起始地址;
  • 00 06:读取寄存器数量;
  • B7 0D:CRC校验码;

返回:01 03 0C 00 2D 00 3E 00 4R 00 5Y 00 7U 00 8P 1D 2C

  • 01:从站地址;
  • 03:功能码;
  • 0C:读取寄存器起始地址;
  • 00 06:读取寄存器数量;
  • 00 2D 00 3E 00 4R 00 5Y 00 7U 00 8P:数据 每两个byte为一个,如00 2D是寄存器0x26 00的值;
  • 1D 2C:CRC校验码;

从这个例子中可以知道Modbus的要素

从站地址功能码起始地址 高位起始地址 低位数量 高位数量 低位CRC低位CRC高位
0x010x030x260x000x000x060xB70x0D

补充:从站地址(1字节) 功能码(1字节) 数据(0-252字节) CRC(2字节)
数据长度是有限制的

Modbus 功能码

功能码异常功能码(功能码+0x80)中文名称位操作/字操作操作数量
0×010x81读线圈状态位操作单个或多个
0×020x82读离散输入状态位操作单个或多个
0×030x83读保持寄存器字操作单个或多个
0×040x84读输入寄存器字操作单个或多个
0×050x85写单个线圈位操作单个
0×060x86写单个保持寄存器字操作单个
0×0F0x8F写多个线圈位操作多个
0×100x90写多个保持寄存器字操作多个

Modbus 异常反馈

Modbus错误码常见有以下几种:

错误码名称意义
01Illegal Function Code功能码不合法,表示Modbus主机请求使用了不支持的功能码。
02Illegal Data Address数据地址不合法,表示Modbus主机请求的数据地址超出范围或者不存在。
03Illegal Data Value数据值不合法,Modbus主机请求的数据值不符合规范,例如超出最大值或者格式错误。
04Slave Device Failure从机设备故障,表示从机设备出现了故障或者无法响应Modbus主机的请求。
05Acknowledge从机设备收到了请求但是无法完成处理,从机设备正在处理其他请求无法立即响应。
06Slave Device Busy从机设备忙,通常表示从机设备正在处理其他请求无法立即响应。
08Memory Parity Error内存奇偶校验错误,通常表示从机设备的内存数据校验错误。
0AGatewayPathUnavailable网关路径不可用 专用于Modbus网关。表示网关配置错误。
0BGatewayTargetDeviceFailedToRespond网关目标设备未响应 专用于Modbus网关。表示未收到目标设备的响应。

Modbus错误码的帧格式通常是一个8字节的字节序列,包含了以下几个字段:

  1. 地址码(Address):1个字节,表示Modbus从机设备的地址,范围为1-247。

  2. 异常码(Function Code):1个字节,表示Modbus主机请求功能码对应的异常响应码。

  3. 错误码(Exception Code):1个字节,表示Modbus从机设备返回的错误码,报错原因。

  4. 错误数据(Exception Data):1个字节,包含了导致错误的相关数据,通常用于详细描述错误原因。

  5. CRC校验(CRC Check):2个字节,用于校验报文的完整性和准确性。

  6. 结束符(End of Frame):2个字节,标识报文的结尾。
    如下是错误码
    在这里插入图片描述
    01: 从站地址 (Slave Address),表示响应来自地址为1的设备。
    90: 异常码 (Error Code),表示功能码0x10的异常响应。
    02: 错误码 (Exception Code),表示非法数据地址 (Illegal Data Address)。
    CD C1: CRC校验码 (CRC Checksum),用于错误检测。

总体来说,Modbus错误帧格式是一个固定长度的8字节字节序列,其中包含了地址码、功能码、错误码、错误数据、CRC校验和结束符等字段。通过解析错误帧格式,可以帮助用户快速定位和解决通信问题。

这些错误码通常会在Modbus通信过程中出现,通过查看错误码可以排查通信问题并进行相应的解决。

RS485介绍

RS-485是一种串行通信标准,通常用于在工业控制系统和自动化设备中进行数据通信。RS585s 差分传输信号线路,半双工,多点通信的标准。RS485 仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。RS-485具有较高的抗干扰能力和较远的传输距离,通常可以覆盖数千英尺的距离。由于其可靠性和稳定性,RS-485常被用于工业环境中对稳定数据通信要求较高的场合。RS-485的数据最高传输速率为10Mbps RS485需要 2 个匹配电阻。
在这里插入图片描述
在RS-485通信中,串口控制器和收发器起着重要的作用:

  • 串口控制器:串口控制器通常是一种集成电路,负责控制串行通信的各个方面,包括数据的发送和接收、波特率的设定、数据格式的处理等。串口控制器可被用来配置和控制RS-485通信,确保数据能够准确地被发送和接收。
  • 收发器:RS-485是一种差分信号传输标准,要与传统的单端信号通信设备进行通信时,需要使用收发器进行信号的转换和适配。收发器主要负责将串行数据转换成差分信号发送,并将接收到的差分信号转换回串行数据。收发器在RS-485通信中起到了信号转换和隔离的作用,确保数据能够在不同设备之间稳定传输。

参考文章:

还在不断补充中。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值