modbus协议之串行链路

目录

  • modbus协议之串行链路

    • 一、modbus简介
    • 二、modbus消息桢
    • 三、modus设备地址与功能码
    • 附录一、CRC校验与LRC校验
    • 附录二、功能码
    • 其它参考文档

modbus协议之串行链路

一、modbus简介

Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。


Modbus有下列三种通信方式

1、以太网,对应的通信模式是MODBUS TCP。

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

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

二、modbus消息桢

Modbus消息桢包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,RTU、ASCII消息桢用于异步串行传输通信,TCP通信方式的消息桢与RTU、ASCII消息桢也有关联,具体见《MODBUS-TCP》。 其中异步串行传输通信中RTU类型的消息桢最为常用。

2.1、通用消息桢

ADU: 应用数据单元 PDU: 协议数据单元

2.2、ASCII消息桢

1、消息以冒号(:)字符(ASCII码 3AH)开始,以回车换行符结束(ASCII码 0DH,0AH)。

2、其它域可以使用的传输字符是十六进制的0...9,A...F。网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。

3、消息中字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误。

 

//串行链路bit格式
十六进制,ASCII字符0...9,A...F
----消息中的每个ASCII字符都是一个十六进制字符组成 每个字节的位
1个起始位
7个数据位,最小的有效位先发送
1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)
LRC(纵向冗长检测) 

问:ASCII消息桢模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送,怎么理解?

答:实际上在ASCII模式下,所有的通讯数据都是ASCII码,包括帧结束用的也是ASCII码里的回车、换行。每个字节都作为一个ASCII码,这里说的有点歧义。应该说是两个ASCII码。比如要传送一个字节,字节内容是0x23,则实际传送的是两个ASCII码,即字符2(0x32)和字符3(0x33)。这种编码的好处是所有的字符都是可读的,不会出现0x00、0xFF这种不可读的,方便调试。缺点是效率低,把一个字节拆成两个ASCII码,数据量变大了。


追问:字节内容是0x23,这是几个字节,是几进制?

追答:0x23 这个是十六进制表示方法。这是一节字节的数据,是指MODBUS里面的数据,与传送无关。传送的时候,把一个字节拆成2个ASCII表示,0x32,0x33,这个是传送的过程中的一种变换,接收方在接收到后,需要重新拼接,还原成数据,即0x23。

2.3、RTU消息桢

1、消息发送至少要以3.5个字符时间的停顿间隔开始。在网络波特率下多样的字符时间,这是最容易实现的(如下图的T1-T2-T3-T4所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0...9,A...F。

2、网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。

3、整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。

4、如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC域的值不可能是正确的。



//串行链路bit格式
8位二进制,十六进制数0...9,A...F
消息中的每个8位域都是一个两个十六进制字符组成
每个字节的位
1个起始位
8个数据位,最小的有效位先发送
1个奇偶校验位,无校验则无
1个停止位(有校验时),2个Bit(无校验时)
CRC(循环冗长检测) 

三、modus设备地址与功能码

3.1、设备地址域

消息帧的地址域包含两个字符(ASCII)或8Bit(RTU)。可能的从设备地址是0...247 (十进制)。单个设备的地址范围是1...247。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。地址0是用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式代替。

3.2、数据域起始地址

1、PLC地址和协议地址区别

PLC地址可以理解为协议地址的变种,在触摸屏和PLC编程中应用较为广泛。

2、寄存器PLC地址

寄存器PLC地址指存放于控制器中的地址,这些控制器可以是PLC,也可以使触摸屏,或是文本显示器。PLC地址一般采用10进制描述,共有5位,其中第一位代码寄存器类型。PLC地址例如40001、30002等。

3、寄存器协议地址

寄存器协议地址指指通信时使用的寄存器地址,例如PLC地址40001对应寻址地址0x0000,40002对应寻址地址0x0001,寄存器寻址地址一般使用16进制描述。再如,PLC寄存器地址40003对应协议地址0002,PLC寄存器地址30003对应协议地址0002,虽然两个PLC寄存器寄存器通信时使用相同的地址,但是需要使用不同的命令访问,所以访问时不存在冲突。

PLC每个块其实寄存器起始地址从1开始,一般看手册上说读某一地址的数据,给某一地址写数据,该地址指的都是寄存器的地址,并不是modbus报文中的数据的起始地址。modbus应用协议的中数据的起始地址从0开始。

3.3、功能码

参考文档:https://blog.csdn.net/lakerszhy/article/details/68927178?locationNum=4&fps=1

功能码:通讯传送的第二个字节。ModBus通讯规约定义功能号为1到127。本仪表只利用其中的一部分功能码。作为主机请求发送,通过功能码告诉从机执行什么动作。作为从机响应,从机发送的功能码与从主机发送来的功能码一样,并表明从机已响应主机进行操作。如果从机发送的功能码的最高位为1(比如功能码大与此同时127),则表明从机没有响应操作或发送出错。

3.3.1、Modbus寄存器


3.3.2、Modbus寄存器数据类型
数据名称 数据说明 数据类型 读写状态 应用举例
线圈状态 DI数字量输出 位变量 只读 电磁阀输出,MOSFET输出,LED显示等
离散输入状态 DI数字量输出 位变量 读写 拨码开关,接近开关等
保持寄存器 AO模拟量输出 16-bit类型 只读 模拟量输出设定值,PID运行参数,变量阀输出大小,传感器报警上限下限
输入寄存器 AO模拟量输入 16-bit类型 读写 模拟量输入

3.3.3、Modbus寄存器数据类型

Modbus中常用的功能码有8个,可以分为位操作和字操作两类,如表2.1所示:

附录一、CRC校验与LRC校验

附录二、功能码

功能码     名称               作用

1    读取线圈状态      取得一组逻辑线圈的当前状态(ON/OFF)

2    读取输入状态      取得一组开关输入的当前状态(ON/OFF)

3    读取保持寄存器    在一个或多个保持寄存器中取得当前的二进制值

4    读取输入寄存器    在一个或多个输入寄存器中取得当前的二进制值

5    强置单线圈        强置一个逻辑线圈的通断状态

6    预置单寄存器      把具体二进值装入一个保持寄存器

7    读取异常状态      取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定

8   回送诊断校验       把诊断校验报文送从机,以对通信处理进行评鉴

9   编程(只用于484)   使主机模拟编程器作用,修改PC从机逻辑

10  控询(只用于484)   可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送

11  读取事件计数        可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时

12  读取通信事件记录     可是主机检索每台从机的ModBus事务处理通信事件记录。如果某项事务处理完成,记录会给出有关错误

13  编程(184/384 484 584) 可使主机模拟编程器功能修改PC从机逻辑

14  探询(184/384 484 584)可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送

15  强置多线圈  强置一串连续逻辑线圈的通断

16  预置多寄存器  把具体的二进制值装入一串连续的保持寄存器

17  报告从机标识 可使主机判断编址从机的类型及该从机运行指示灯的状态

18 (884和MICRO 84) 可使主机模拟编程功能,修改PC状态逻辑

19  重置通信链路   发生非可修改错误后,是从机复位于已知状态,可重置顺序字节

20  读取通用参数(584L)  显示扩展存储器文件中的数据信息

21  写入通用参数(584L) 把通用参数写入扩展存储文件,或修改之

22~64  保留作扩展功能备用

65~72 保留以备用户功能所用

73~119 非法功能

120~127 保留 留作内部作用

128~255 保留  用于异常应答

其它参考文档

《MODBUS软件开发指南---杨更更》

https://blog.csdn.net/lakerszhy/article/details/68927178?locationNum=4&fps=1

https://blog.csdn.net/byxdaz/article/details/77892778

https://www.cnblogs.com/luomingui/archive/2013/06/14/Modbus.html

https://blog.csdn.net/ouyangxin95/article/details/78169380

http://www.doc88.com/p-3106325452452.html

原文地址:https://www.cnblogs.com/retry/p/9978756.html

时间: 2024-10-08 12:03:36

modbus协议之串行链路的相关文章

协议详解2——链路层

1.1 链路层 链路层作用: 为IP模块发送和接受数据包: 为ARP模块发送ARP请求和接受ARP应答(地址解析协议): 为RARP发送RARP请求和接收RARP应答(逆地址解析协议): 链路层协议: 以太网链路层协议,串行接口链路层协议(SLIP和PPP),回环(loopback)驱动程序 1.2 以太网和IEEE802封装 1.3 SLIP:串行线路IP SLIP:是一种在串行线路上对IP数据报进行封装的简单形式: SLIP协议定义的帧格式: SLIP缺陷: 1)每一端必须知道对方的IP地址

第7章 处理串行线路和帧中继连接故障

第7章 处理串行线路和帧中继连接故障 一.处理串行线路故障 1.HDLC封装 High-level Data Link Control(HDLC)是用于串行链路的一种封装方法,HDLC是Cisco路由器串行接口的缺省封装方法. 处理串行链路故障的第一步就是查看链路两端要使用相同的封装类型. Show interface serial 1 :查看接口信息 Clear counters serial number :复位接口的计数器到0 正常情况下,接口和line都是up的. 线缆故障.载波故障和硬

2.RapidIO串行物理层的包与控制符号

转自https://www.cnblogs.com/liujinggang/p/9932150.html 一.RapidIO串行物理层背景介绍 上篇博文提到RapidIO的物理层支持串行物理层与并行物理层两种,由于Xilinx 部分FPGA内部已经集成了串行高速收发器,所以用FPGA实现RapidIO大多都是基于串行物理层的.本文将主要讨论一下RapidIO串行物理层的包格式与控制符号. RapidIO串行物理层,通常称为串行RapidIO,简称为SRIO(Serial-RapidIO). 串行

3.RapidIO串行物理层的包传输过程

转自https://www.cnblogs.com/liujinggang/p/10005431.html 一.引言 前几篇文章已经谈到RapidIO的协议,串行物理层与控制符号. RapidIO协议包括读事务(NREAD),写事务(NWRITE),流写事务(SWRITE),有响应的写事务(NWRITE_R),原子操作(ATOMIC),维护操作(MAINTENANCE),门铃事务(DOORBELL)和消息(MESSAGE)这几种. RapidIO的串行物理层是基于SERDES的,关于SERDES

linux总结应用之三 安装和配置串行,并行链路

 (一)远程站的设置: 最简单的做法是在远程的机器专为拨号连接建立PPP 登陆项 : ppp:off:700:700:ppp acount:/home/ppp:home/ppp/ppplogin 为账号建立起始目录; # mkdir   /home/ppp #  chown  ppp. /home/ppp 注意在新加的行中,将下列程序作为登陆的shell: /home/ppp/ppplogin 实际上,它不是shell程序.而是在远程机上用来启动pppd守护程序的script. 它的典型形式如下

SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK).串行数据输出(SDO).串行数据输入(SDI).SPI总线可以实现多个SPI设备互相连接.提供SPI串行时钟的SPI

RAPIDIO高速串行协议

RapidIO是由Motorola和Mercury等公司率先倡导的一种高性能. 低引脚数. 基于数据包交换的互连体系结构,是为满足和未来高性能嵌入式系统需求而设计的一种开放式互连技术标准.RapidIO主要应用于嵌入式系统内部互连,支持芯片到芯片.板到板间的通讯,可作为嵌入式设备的背板(Backplane)连接. RapidIO协议由逻辑层.传输层和物理层构成.逻辑层定义了所有协议和包格式.这是对终端进行初始化和完成传送的很有必要的信息.传输层为数据包从一个终端到另一个终端通道的必要信息.物理层

TCP/IP协议简介(二) 之 链路层介绍

链路层介绍 一.简介 上一节已经介绍过,网络层协议的数据单元是 IP 数据报 ,而数据链路层的工作就是把网络层交下来的 IP 数据报 封装为 帧(frame)发送到链路上,以及把接收到的帧中的数据取出并上交给网络层. 为达到这一目的,数据链路必须具备一系列相应的功能,主要有: 将数据封装为帧(frame),帧是数据链路层的传送单位: 控制帧的传输,包括处理传输差错,调节发送速率与接收方相匹配: 在两个网络实体之间提供数据链路通路的建立.维持和释放的管理. 数据帧的结构是这样的: 二.控制帧的传输

串行RapidIO:高性能嵌入式互联技术--【转贴】

串行 RapidIO: 高性能嵌入式互连技术 作者: 德州仪器技术应用工程师 冯华亮/ Brighton Feng/ [email protected] 摘要 串行RapidIO针对高性能嵌入式系统芯片间和板间互连而设计,它将是未来十几年中嵌入式系统互连的最佳选择.本文比较RapidIO和传统互连技术的优点:介绍RapidIO协议架构,包格式,互连拓扑结构以及串行RapidIO物理层规范.介绍串行RapidIO在无线基础设施方面的应用. RapidIO 与传统嵌入互连方式的比较 随着高性能嵌入式