购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 Modbus通信协议

2.4.1 Modbus协议概述

1. Modbus协议

Modbus协议是一种Modicon公司开发的通信协议,最初目的是实现可编程控制器之间的通信。利用Modbus通信协议,可编程控制器通过串行口或者调制解调器联入网络。该公司后来还推出Modbus协议的增强型Modbusplus(MB+)网络,可连接32个节点,利用中继器可扩至64个节点。这种Modicon公司最先倡导的通信协议,经过大多数公司的实际应用,逐渐被认可,成为一种事实上的标准协议,只要按照这种协议进行数据通信或传输,不同的系统就可以通信。

Modbus协议定义了一种公用的消息结构,而不管它们是经过何种网络进行通信的。它制定了信息帧的格式,描述了服务端请求访问其他设备等客户端的过程,如怎样回应来自其他设备的请求,以及怎样侦测错误并记录。通过Modbus协议在网络上通信时,必须清楚每个控制器的设备地址,根据每个设备地址来决定要产生何种行动。如果需要回应,控制器将生成反馈信息并按照Modbus协议发出。标准的Modbus设备是使用RS-232串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或间接(经过Modem拨号)组网。控制器通信使用主—从技术,即只有一个设备(主设备)能初始化传输(查询)。其他设备(从设备)根据主设备查询提供的数据做出相应反应。典型的主设备有计算机主机和可编程仪表。典型的从属设备有可编程控制器、各种仪表等。

2. 主从查询—回应

Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据和错误检测域。从设备回应消息也由Modbus协议构成,包括确认要行动的域、要返回的数据和错误检测域。如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将建立错误消息并把它作为回应发送出去。图2.16所示为主从查询—回应过程,查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。如果从设备产生正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。

img

图2.16 主从查询—回应周期表

在实际的应用过程中,为了解决某一个特殊问题,人们喜欢自己修改Modbus协议来满足自己的需要(事实上,开发人员经常使用自己定义的协议来通信,虽然这不太规范)。更为普通的用法是,少量修改协议,但将协议格式附在软件说明书一起,或直接放在帮助中,这样就方便了用户的通信编程或设置。

2.4.2 常用Modbus协议

1.Modbus协议消息帧的定义

常用的Modbus通信协议有两种报文帧格式:一种是Modbus ASCII;另一种是Modbus RTU。一般来说,通信数据量少时采用Modbus ASCII协议,通信数据数据量大而且是二进制数值时,多采用Modbus RTU协议。

1)ASCII方式

如表2.3所示,当服务端设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8位的字节都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1s而不产生错误。

表2.3 ASCII方式数据帧的格式

img

在ASCII模式下,消息帧以字符冒号“:”(ASCII码3AH)开始,以回车换行符结束(ASCII码0DH,0AH)。其他区域可以使用的传输字符是十六进制的0~9,A~F。在传输过程中,网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。

2)RTU方式

如表2.4所示,当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8位的字节包含两个4位的十六进制字符。这种方式的主要优点是,在同样的波特率下,可比ASCII方式传送更多的数据。

表2.4 RTU方式数据帧的格式

img

使用RTU模式,消息帧的发送至少要以3.5个字符时间的停顿间隔开始。在网络波特率下是非常容易实现多样的字符时间(起始位的T1-T2-T3-T4)。网络设备不断地侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到后,每个设备都进行解码以判断是否发给自己的。在最后一个传输字符之后,至少用3.5个字符时间的停顿标定消息的结束。一个新的消息可在此停顿后开始。整个消息帧必须作为一连续的流传输。如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。但这将导致一个错误,因为在最后的CRC域的值不可能是正确的。

数据的效验的方式有两种,LRC(纵向冗余校验)和CRC(循环冗余校验)。

LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。

CRC是先调入一个数值是全“1”的16位寄存器,然后调用一过程将消息中连续的各当前寄存器中8位字节的值进行处理。仅每个字符中的8位数据对CRC有效,起始位和停止位以及奇偶校验位均无效。CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值相或,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。

2.Modbus/TCP

Modbus/TCP是Modbus协议族中的新成员,它是建立在标准的TCP协议基础上的Modbus协议扩展。借助于TCP对Internet的支持,可以实现PLC、I/O模块和其他控制设备的透明连接,为工业自动化领域的软硬件开发商提供一个网络时代的设备信息通信标准。由于公布较早并有广泛的应用开发基础,Modbus/TCP协议己经成为工业自动化网络时代的事实标准。Modbus/TCP在支持TCP/IP协议的Intranet或Internet设备上,传递Modbus信息报文。这种协议最常见的使用方式是作为网关连接PLC、I/O模块。目前已经有许多厂商提供控制层的硬件通信网关,可以为不同类型的控制设备的数据通信提供Modbus/TCP通信接口。传统的Modbus数据交换不需要事先申请,并且保证高抗噪声干扰能力,通信双方只需交换少量的维护信息。Modbus/TCP的最典型特征是面向连接。Modbus/TCP在Modbus基础上增加了连接操作,即涵盖数据交换和连接操作。在TCP中,一个连接请求很容易被识别并建立,一个连接可以承载多个独立的数据交换。此外,TCP允许大量的并发连接,连接发起者可以自由选择另外建立一个连接或保持一个长期连接。

Modbus/TCP方式数据帧的格式如表2.5所示,在消息中的每个8位字节包含两个4位的十六进制字符,消息数据长度不能超过256个字符。

表2.5 Modbus/TCP方式数据帧的格式 OkUre/r0jvI90xJ9DNZ55IQzYjnsLIIzRbE9iAAUFLYT5iD5sbtHGoCRHDgfQ5hF

img
点击中间区域
呼出菜单
上一章
目录
下一章
×