1、Modbus 协议简介

Modbus协议是一种已广泛应用于当今工业控制领域的通用通讯协议。通过此协议,控制器相互之间、或控制器经由网络(如以太网)可以和其它设备之间进行通信。Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如PLC可编程控制器等。

Modbus通讯物理接口可以选用串口(包括RS232、RS485和RS422),也可以选择以太网口。其通信遵循以下的过程:

  • 主设备向从设备发送请求
  • 从设备分析并处理主设备的请求,然后向主设备发送结果
  • 如果出现任何差错,从设备将返回一个异常功能码 

此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 

    当在Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

Modbus的工作方式是请求/应答,每次通讯都是主站先发送指令,可以是广播,或是向特定从站的单播;从站响应指令,并按要求应答,或者报告异常。当主站不发送请求时,从站不会自己发出数据,从站和从站之间不能直接通讯。

  Modbus协议是应用层(协议层)报文传输协议,它定义了一个与物理层无关的协议数据单元(PDU),即PDU=功能码+数据域,功能码1byte,数据域不确定。

  Modbus协议能够应用在不同类型的总线或网络。对应不同的总线或网络,Modbus协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU,例如modbus tcp/ip------ ADU=MBAP+ADU。

2、Modbus 通讯方式 

  2.1、Modbus三种通讯方式

    Modbus有下列三种通信方式:

    (1)、以太网:对应的通信模式是Modbus TCP/IP

    (2)、异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等):对应的通信模式是Modbus RTUModbus  ASCII

    (3)、高速令牌传递网络:对应的通信模式是Modbus PLUS

    Modbus RTU和Modbus ASCII协议应用于串口链接(RS232、RS485、RS422),Modbus tcp/ip协议应用于以太网链接。

2.2、在Modbus网络上传输

       标准的Modbus口是使用RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem组网。 

       控制器通信使用主/从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。

         典型的主设备:主机和可编程仪表。

         典型的从设备:可编程控制器。 

      主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。

    Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。 

      从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。

2.3、在其它类型网络上转输

      在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。 

      在消息位,Modbus协议仍提供了主/从原则,尽管网络通信方法是“对等”。如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。

2.4、查询---回应

modbus rtu协议

 

 

 (1)、查询

    查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。

(2)、回应

     如果从设备产生正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。

MODBUS RTU 详细解释

 Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus 协议包括 RTU、ASCII、TCP。其中 MODBUS-RTU最常用,比较简单,在单片机上很容易实现。虽然 RTU 比较简单,但是看协议资料、手册说得太专业了,
起初很多内容都很难理解。
所谓的协议是什么?就是互相之间的约定嘛,如果不让别人知道那就是暗号。现在就来定义一个新的最简单协议。例如,
协议: “A” --“LED 灭”
“B” --“报警”
“C” --“LED 亮”
单片机接收到“A”控制一个 LED 灭,单片机接收到“B”控制报警,单片机接收到“A”控制一个 LED 亮。
那么当收到对应的信息就执行相应的动作,这就是协议,很简单吧。

 先来简单分析一条 MODBUS-RTU 报文,例如:01 06 00 01 00 17 98 04

01               06        00 01       00 17               98 04
从机地址 功能号 数据地址      数据             CRC 校验

 这一串数据的意思是:把数据 0x0017(十进制 23) 写入 1 号从机地址 0x0001 数据地址。
先弄明白下面的东西。

1、报文
一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,就像上面的一串数据。

2、CRC 校验
意义:例如上面的 98 04 是它前面的数据(01 06 00 01 00 17)通过一算法(见附录 2,很简单的)计算出来的结果,其实就像是计算累加和那样。(累加和:就是 010600010017 加起来的值,然后它的算法就是加法)。
作用:在数据传输过程中可能数据会发生错误,CRC 检验检测接收的数据是否正确。比如主机发出 01 06 00 01 00 17 98 04,那么从机接收到后要根据 01 06 00 01 00 17 再计算 CRC 校验值,从机判断自己计算出来的 CRC 校验是否与接收的 CRC 校验(98 04 主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。

3、功能号
意义:modbus 定义。 作用:指示具体的操作。
最常用功能码:
下面“线圈”“寄存器”其实分别直的就是“位变量”“16 位变量”
01 (0x01) 读线圈
02 (0x02) 读离散量输入
03 (0x03) 读保持寄存器
04(0x04) 读输入寄存器
05 (0x05) 写单个线圈
06 (0x06) 写单个寄存器
15 (0x0F) 写多个线圈
16 (0x10) 写多个寄存器
ODBUS-RTU
一、一个报文分析
先声明下我们的目的,我们是要两个设备通讯,用的是 MODBUS 协议。上面简单介绍了:“报文”“CRC 校验”“功能号”。
在单片机中拿出一部分内存(RAM)进行两个设备通讯,例如:
modbus rtu协议

 

 数组后面的注释,说明
OX[20] 代表是输出线圈,用功能码 0x010x050x0F 访问, 开头地址是 0 (这个后续说明)
IX[20] 代表是输入线圈,用功能码 0x02 访问, 开头地址是 1 (这个后续说明)
另外两个一样的道理。
注意:所谓的“线圈”“寄存器”就是“位变量”“16 位变量”,不要被迷惑。之所以称“线圈”我觉得
应该是对于应用的设备,MODBUS 协议是专门针对 485 总线设备(例 PLC)开发的。

1、主机对从机写数据操作
如果单片机接收到一个报文那么就对报文进行解析执行相应的处理,如上面报文:
01              06       00 01      00 17       98 04
从机地址 功能号 数据地址      数据     CRC 校验

假如本机地址是 1 ,那么单片机接收到这串数据根据数据计算 CRC 校验判断数据是否正确,如果判断数
据无误,则结果是:

HoldDataReg[1] = 0x0017;
MODBUS 主机就完成了一次对从机数据的写操作,实现了通讯。

2、主机对从机读数据操作
主机进行读 HoldDataReg[1] 操作,则报文是:
01              03       00 01        00 01        D5 CA
从机地址 功能号 数据地址 读取数据个数 CRC 校验

那么单片机接收到这串数据根据数据计算 CRC 校验判断数据是否正确,如果判断数据无误,则结果是:
返回信息给主机,返回的信息也是有格式的:
返回内容

01               03          02               00 17          F8 4A
从机地址 功能号 数据字节个数 两个字节数据 CRC 校验

MODBUS 主机就完成了一次对从机数据的读操作,实现了通讯。

 

 二、MODBUS 报文模型

以上了解到了 MODBUS 的一帧报文是如何通讯的,其实每个报文的格式都基本一样的。

modbus rtu协议

 

 这里两个缩略词以前不知道,但是现在要明白指的是什么,“ADU”“PDU
ADU: 应用数据单元
PDU: 协议数据单元

 三、MODBUS 数据模型
modbus rtu协议

 

 

modbus rtu协议

 

 

四、MODBUS 事务处理
下列状态图描述了在服务器侧 MODBUS 事务处理的一般处理过程。
modbus rtu协议

 

 五、MODBUS 请求与响应
MODBUS 协议手册,中文第 10 页开始,英文第 24 页开始。手册非常详细举例说明了 MODBUS协议各个功能号的请求与响应。

modbus 协议在单片机上实现过程
MODBUS 任务处理函数

modbus rtu协议

 

 函数中,RcvBuf 为串口接收缓冲区,如果接收了一个报文则,RcvBuf[0] 为从机地址,RcvBuf[0] MODBUS 功能号。根据功能号做出响应,而具体的操作根据功能号在各自的函数中执行,相当于解析接收到的数据。

modbus rtu协议

 

 

 

相关文章: