第5部分Modbus通信协议简介_第1页
第5部分Modbus通信协议简介_第2页
第5部分Modbus通信协议简介_第3页
第5部分Modbus通信协议简介_第4页
第5部分Modbus通信协议简介_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5部分 Modbus通信协议简介 5.1 Modbus协议概述 5.2 Modbus协议规范 5.3 Modbus协议在串行链路的主站/从站通信原理 5.4 Modbus协议在串行链路寻址原则 5.5 Modbus帧结构 5.6 串行链路上Modbus帧的两种传输模式 5.7 Modbus协议数据模型 5.8 Modbus通信应用实例5.1 Modbus协议概述 1.Modbus协议的发展历史(1)Modicon公司提出的通信规约。(2)Modicon公司被施耐德电气公司收购。(3)施耐德将Modbus协议的所有权移交给IDA ,成立了Modbus-IDA组织 。(4)Modbus-RTPS

2、成为实时以太网标准(IEC61784-2 )。(5)Modbus协议已经成为国家标准(GB/T19582-2008)。2.Modbus协议的特点(1)标准、开放用户可以免费、放心地使用Modbus协议。 (2)灵活支持多种物理层标准,如RS-232、RS-485、以太网等。(3)简单Modbus的帧格式简单、紧凑,通俗易懂。 (4)使用广泛它是一种在工业领域被广为应用的真正开放、标准的网络通讯协议,已经成为一种电子控制器的通用语言,通过此协议控制器之间可以通讯,已成为一种工业标准。 不同厂商生产的控制设备通过Modbus协议可以连成通讯网络,在PLC、变频器、电器设备及自动化仪表等领域都广泛应

3、用Modbus协议。5.2 Modbus协议规范1. Modbus技术规范的关系Modbus是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。Modbus是一个请求/应答协议,并且提供功能码规定的服务。Modbus功能码是Modbus请求/应答PDU的元素。 Modbus 应用层 在 TCP/IP 上的 Modbus 映射 TCP/IP IETF RFC 793 IP IETF RFC 791 Ethernet II /802.3 IEEE 802.2 以太网物理层 TIA/EIA-232-F 串行链路主站/从站 TIA/EIA-485-A

4、 Modbus 协议在 TCP/IP 上的实现指南 Modbus应用协议规范 Modbus 协议在串行链路上的实现指南 5.2 Modbus协议规范2. Modbus通信栈Modbus是一种简单客户机/服务器应用协议:客户机能够向服务器发送请求,服务器分析请求,处理请求,向客户机发送应答。 TCP 基于 TCP的 Modbus Modbus应用层 IP 以太网 物理层 Ethernet II /802.3 EIA/TIA-232 或 EIA/TIA-485 主站/从站 物理层 MODBUS+ / HDLC 其它 其它 5.3 Modbus协议在串行链路的主站/从站通信原理 Modbus串行链路

5、协议是一个主/从协议。 在同一时刻,只有一个主节点连接于总线,一个或多个子节点(最大编号为247)连接于同一个串行总线。Modbus通信总是由主节点发起,子节点在没有收到来自主节点的请求时,从不会发送数据。子节点之间从不会互相通信,主节点在同一时刻只会发起一个 Modbus 事务处理。主站用两种模式向从站发出Modbus请求,分别为单播模式和广播模式。单播模式工作方式:由主站寻址单个从站,从站接收并处理完请求之后,向主站返回一个报文(一个应答)。在这种模式下,一个Modbus 事务处理包含2 个报文,一个是主站的请求,另一个是从站的应答。每个从站必须有唯一的地址(1247),这样才能区别于其它

6、站而被独立地寻址。广播模式工作方式:主站可以向所有的从站发送请求,对于主站广播的请求没有应答的返回,广播请求必须是写命令,所有设备必须接收写功能的广播,地址0被保留用来识别广播通信。单播模式单播模式广播模式广播模式 1. 客户机向服务器发请求,服务器分析并处理客户机的请求后返回响应。2. 1个主站(客户机),最多247个从站(服务器)。3. 可以采用单播模式和广播模式(0地址)。4. 产生错误,服务器返回通信异常码。5.3 Modbus协议在串行链路的主站/从站通信原理 5.4 Modbus协议在串行链路寻址原则Modbus寻址空间由256个不同地址组成。地址0为广播地址,所有从站必须识别广播

7、地址。Modbus主节点没有地址,只有子节点必须有一个地址。该地址必须在 Modbus串行总线上唯一的。1. 请求-响应周期(1)请求主设备查询消息中的功能代码告之被选中的从设备要执行何种功能,数据段包含了从设备要执行功能的任何附加信息。例如:功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。(2)响应如果从设备产生一个正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应,数据段包括了从设备收集的数据(例如寄存器值或状态)。如果有错误发生,功能代码将被修

8、改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。011-247248-255广播地址从站某个地址保留地址5.5 Modbus帧结构串行链路上的Modbus帧结构见下图:(1)地址域在 Modbus串行链路,地址域只含有子节点地址,合法的子节点地址为十进制 0 247。每个子设备被赋予1 247范围中的地址。主节点通过将子节点的地址放到报文的地址域对子节点寻址。当子节点返回应答时,它将自己的地址放到应答报文的地址域以让主节点知道哪个子节点在回答。(2)功能码Modbus由公共功能码和用户定义的功能码组成,功能码指明服务器要执行的动作。

9、功能码后面可跟有表示含有请求和响应参数的数据域。(3)错误检验域错误检验域是对报文内容执行 冗余校验 的计算结果。根据不同的传输模式(RTU or ASCII)使用两种不同的计算方法。 附加地址 功能码 数据 差错校验 ADU PDU 1. Modbus事务处理(无差错)当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称为异常响应)。对于一个正常响应来说,服务器仅复制原始功能码。 功能码功能码 数据请求数据请求 客户机 服务器 启动请求启动请求 执行操作执行操作 启动响应启动响应 接收响应接收响应 功能码功能码 数据响应 5.5 Modbus帧结构2. Modb

10、us事务处理(异常响应)对于异常响应,服务器将原始功能码的最高有效位设置逻辑1后返回,异常码指示差错类型。3. Modbus PDU(数据单元)长度Modbus最初在串行链路上的实现(最大RS485 ADU=256字节),限制了Modbus PDU的长度。因此,对串行链路通信来说,Modbus PDU=256 - 服务器地址(1字节)- CRC(2字节)253字节。因此:RS232 / RS485 ADU = 253字节 + 服务器地址(1字节)+ CRC(2字节)= 256字节。TCP/IP Modbus ADU = 253字节 + MBAP(7字节)= 260字节。 客户机 服务器 启动请

11、求启动请求 在操作中检测差错在操作中检测差错 启动差错启动差错 异常功能码异常功能码 接收响应接收响应 异常码异常码 功能码功能码 数据请求数据请求 5.5 Modbus帧结构4. Modbus PDU(数据单元)结构(1)Modbus请求PDUmb_req_pdu = function_code, request_data,function_code - 1字节 Modbus功能码,request_data - n字节。(2)Modbus响应PDUmb_rsp_pdu = function_code, response_ data ,function_code - 1字节 Modbus功能码

12、,response_data - n字节。(3)Modbus异常响应PDUmb_excep_rsp_pdu = function_code, exception_code ,function_code - 1字节 Modbus功能码 + 0 x80 exception_code 1字节。5.5 Modbus帧结构5.6 串行链路上Modbus帧的两种传输模式 Modbus帧的两种串行传输模式有RTU模式 和ASCII模式。它定义了报文域的位内容在线路上串行的传送。它确定了信息如何打包为报文和解码Modbus串行链路上所有设备的传输模式和串行通信接口的参数必须相同。尽管在特定的领域ASCII模式

13、是要求的,但达到Modbus 备之间的互操作性只有每个设备都有相同的模式。所有设备必须必须实现 RTU 模式,ASCII传输模式是选项。5.6 串行链路上Modbus帧的两种传输模式 1. RTU传输模式当设备使用 RTU模式在Modbus串行链路通信,报文中每个8位字节含有两个4位十六进制字符。这种模式的主要优点是较高的数据密度,在相同的波特率下比 ASCII 模式有更高的吞吐率。每个报文必须以连续的字符流传送。(1)RTU模式每个字节(11位)的格式编码系统:8位二进制;报文中每个8位字节含有两个4位十六进制字符(09,AF)。Bits per Byte:1个起始位; 8数据位,首先发送最

14、低有效位; 1位作为奇偶校验; 1位停止位。注意:一般使用偶校验,其它模式(奇校验,无校验)也可以使用。默认校验模式必须为偶校验。如果无奇偶校验,将传送一个附加的停止位以填充字符帧。见下图:有奇偶校验的有奇偶校验的RTURTU模式位序列模式位序列无奇偶校验的无奇偶校验的RTURTU模式位序列模式位序列5.6 串行链路上Modbus帧的两种传输模式 (2)Modbus报文RTU帧结构由发送设备将Modbus报文构造为带有已知起始和结束标记的帧。这使设备可以在报文的开始接收新帧,并且知道何时报文结束。不完整的报文必须能够被检测到而错误标志必须作为结果被设置。在RTU 模式,报文帧由时长至少为3.5

15、个字符时间的空闲间隔区分。在后续的部分,这个时间区间被称作t3.5。消息发送至少要以3.5个字符时间的停顿间隔开始。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0.9,A.F。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。5.6 串行链路上Modbus帧的两种传输模式 整个报文帧必须以连续的字符流发送。如果两个字符之间的空闲间隔大于 1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。见下图:注意:RTU接

16、收驱动程序的实现,由于t1.5和t3.5的定时,隐含着大量的对中断的管理。在高通信速率下,这导致CPU负担加重。因此在通信速率等于或低于19200bps时,这两个定时必须严格遵守。对于波特率大于19200bps的情形,应该使用2个定时的固定值:建议的字符间超时时间(t1.5)为750s,帧间的超时时间(t1.5)为1.750ms。5.6 串行链路上Modbus帧的两种传输模式 (3)Modbus报文RTU传输模式状态图注:主节点 和 子节点 的不同角度均在相同的图中表示。5.6 串行链路上Modbus帧的两种传输模式 (4)Modbus报文RTU帧的CRC 校验 在 RTU模式包含一个对全部报

17、文内容执行的基于循环冗余校验(CRC)算法的错误检验域。CRC 域检验整个报文的内容。不管报文有无奇偶校验,均执行此检验。 CRC包含由两个8位字节组成的一个16位值。CRC域作为报文的最后的域附加在报文之后。计算后,首先附加低字节,然后是高字节,CRC高字节为报文发送的最后一个子节。附加在报文后面的CRC 的值由发送设备计算。接收设备在接收报文时重新计算CRC的值,并将计算结果于实际接收到的 CRC 值相比较。如果两个值不相等,则为错误。CRC的计算,开始对一个16位寄存器预装全,然后将报文中的连续的8位子节对其进行后续的计算。只有字符中的8个数据位参与生成CRC的运算,起始位,停止位和校验

18、位不参与CRC计算。CRC的生成过程中,每个8位字符与寄存器中的值异或。然后结果向最低有效位(LSB)方向移动(Shift)1位,而最高有效位(MSB)位置充零。 然后提取并检查LSB:如果LSB 为,1则寄存器中的值与一个固定的预置值异或;如果LSB为 0, 则不进行异或操作。这个过程将重复直到执行完8次移位。完成最后一次(第 8 次)移位及相关操作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8次。当所有报文中子节都运算之后得到的寄存器忠的最终值,就是 CRC。 当 CRC 附加在报文之后时,首先附加低字节,然后是高字节。注:CRC 生成的详细示例请参考相关的资料。5

19、.6 串行链路上Modbus帧的两种传输模式 2. ASCII传输模式当Modbus串行链路的设备被配置为使用ASCII模式通信时,报文中的每个8位子节以两个ASCII字符发送,当通信链路或者设备无法符合RTU模式的定时管理时使用该模式。由于一个子节需要两个字符,此模式比RTU效率低。例如:子节0 x5B会被编码为两个字符,0 x35和0 x42(ASCII 编码0 x35 =5,0 x42 =B)。(1)ASCII模式每个字节(10 位)的格式编码系统:十六进制,ASCII 字符0-9、A-F。 报文中每个ASCII字符含有1个十六进制字符。 Bits per Byte:1 起始位;7 数据

20、位;首先发送最低有效位;1位作为奇偶校;1停止位。注意:偶校验是要求的,其它模式( 奇校验,无校验)也可以使用。为了保证与其它产品的最大兼容性,同时支持无校验模式是建议的。默认校验模式必须为偶校验。使用无校验要求2个停止位。字符的传送方式:每个字符或字节均由此顺序发送(从左到右),最低有效位(LSB). . . 最高有效位(MSB) 。有奇偶校验的有奇偶校验的ASCII模式的位序列模式的位序列无奇偶校验的无奇偶校验的ASCII模式的位序列模式的位序列5.6 串行链路上Modbus帧的两种传输模式 (2)Modbus ASCII报文帧结构由发送设备将Modbus报文构造为带有已知起始和结束标记的

21、帧。这使设备可以在报文的开始接收新帧,并且知道何时报文结束。不完整的报文必须能够被检测到而错误标志必须作为结果被设置。报文帧的地址域含有两个字符。在ASCII模式,报文用特殊的字符区分帧起始和帧结束。一个报文必须以一个“冒号”( :)(ASCII 十六进制3A)起始,以 “回车-换行”(CRLF)对(ASCII十六进制0D 和0A)结束。 对于所有的域,允许传送的字符为十六进制 09,AF(ASCII编码)。设备连续的监视总线上的 “冒号” 字符。 当收到这个字符后,每个设备解码后续的字符一直到帧结束。下图显示了一个典型的报文帧。注 : LF 字符可以通过特定的Modbus应用命令(参见Mod

22、bus应用协议规范)改变。每个字符子节需要用两个字符编码。因此,为了确保ASCII模式 和RTU模式在Modbus应用级兼容,ASCII数据域最大数据长度为(2x252)是RTU数据域(252)的两倍。 必然的, Modbus ASCII帧的最大尺寸为513个字符。 报文中字符间的时间间隔可以达到一秒。如果有更大的间隔,则接受设备认为发生了错误。 起始 地址 功能码 数据 LRC 结束 1 个 字符 : 2 个字符 2 个字符 2 个字符 2 个字符 CR、LF 0 至 2x252 个字符 5.6 串行链路上Modbus帧的两种传输模式 (3)Modbus报文的ASCII输模式状态图 注: “

23、主节点和 “子节点” 的不同角度均在相同的图中表示。5.6 串行链路上Modbus帧的两种传输模式 (4)Modbus报文ASCII帧的LRC校验 在ASCII模式,包含一个对全部报文内容执行的,基于纵向冗余校验(LRC)算法的错误检验域。LRC 域检验不包括起始“冒号”和结尾CRLF对的整个报文的内容。不管报文有无奇偶校验,均执行此检验。LRC域为一个子节,包含一个8位二进制值。LRC值由发送设备计算,然后将LRC附在报文后面。接收设备在接收报文时重新计算LRC的值,并将计算结果于实际接收到的LRC值相比较。如果两个值不相等,则为错误。LRC 的计算,对报文中的所有的连续8位字节相加,忽略任

24、何进位,然后求出其二进制补码。执行检验针对不包括起始“冒号”和结尾CRLF对的整个ASCII报文域的内容。在ASCII模式,LRC的结果被 ASCII编码为两个字节并放置于ASCII模式报文帧的结尾,CRLF之前。注:LRC生成的详细示例请参考相关的资料。5.6 串行链路上Modbus帧的两种传输模式 3.Modbus帧的ASCII和RTU传输模式的特性 特性 ASCII(7位)RTU(8位)编码系统 十六进制(使用ASCII可打印字符:09,AF)二进制每一个字符的位数 开始位1位1位数据位(最低有效位第一位)7位8位奇偶校验(任选)1位(此位用于奇偶校验,无校应则无该位)1位(此位用于奇偶

25、校验,无校应则无该位)停止位1或2位1或2位错误校验LRC(即纵向冗余校验)CRC(即循环冗余校验)5.7 Modbus协议数据模型Modbus以一系列具有不同特征表格上的数据模型为基础。四个基本表格见下表:对于基本表格中任何一项,协议都允许单个地选择65536个数据项,而且设计那些项的读写操作可以越过多个连续数据项直到数据大小规格限制, 这个数据大小规格限制与事务处理功能码有关。 很显然,必须将通过Modbus处理的所有数据放置在设备应用存储器中。但是,存储器的物理地址不应该与数据参考混淆。要求仅仅是数据参考与物理地址的链接。Modbus功能码中使用的Modbus逻辑参考数字是以0开始的无符

26、号整数索引。基本表对象类型访问类型注释离散量输入单个位只读 I/O系统可提供这种类型数据线圈单个位读写 通过应用程序可改变这种类型数据输入寄存器16位字只读 I/O系统可提供这种类型数据保持寄存器16位字读写 通过应用程序可改变这种类型数据5.8 Modbus通信应用实例1. 主站发送命令:主站发送命令:设备地址设备地址 命令号命令号01 起始寄存器地址高起始寄存器地址高8位位 起始寄存器地址低起始寄存器地址低8位位 读取的寄存器数高读取的寄存器数高8位位 读取的寄存器数低读取的寄存器数低8位位 CRC校验的低校验的低8位位 CRC校验的高校验的高8位位。例:。例:110100130025CRC低低CRC高高。意义如下:(1)设备地址:在一个485总线上可以挂接多个设备,此处的设备地址表示想和哪一个设备通讯。例子中为想和17号(十进制的17是十六进制的11)通讯。(2)命令号01:读取数字量的命令号固定为01。(3)起始地址高8位、低8位:表示想读取的开关量的起始地址(起始地址为0)。比如例子中的起始地址为19。(4)寄存器数高8位、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论