现场总线的开关量I/O模块的设计:MODBUS 现场总线技术
扫描二维码
随时随地手机看文章
2 MODBUS现场总线技术综述
2.1 MODBUS总线技术简介和特点
MODBUS是Modicon公司1979年最先倡导的一种通信协议,经过许多公司的实际应用,逐渐被认可,成为一种应用于工业控制器上的标准通信协议,由于其功能比较完善而且协议开放,因此,被广泛应用于工业现场,在微机化测量设备之间实现双向串行多节点数字通信。连接单个分散的测量控制设备,使之可以相互沟通信息、共同完成自控任务的网络系统与控制系统,具有分散控制、使用简单、简化系统结构、数据易于处理、节约硬件设备、易于安装和维护等优点。
MODBUS串行链路协议是一个主/从协议。适用于半双工的RS-485总线。协议规定总线上有一个主机,多个从机,每个从机分配唯一的地址。工作时可以采用命令/应答的通讯方式。MODBUS通讯总是由主站发起请求,所有的从设备都接收并解析其中的地址信息,与地址不匹配的从站抛弃该请求帧,继续侦听总线;只有与地址相匹配的从设备对该请求帧进行进一步解析,并回应应答帧。若解析后校验的结果出错,从站向主机发送出错信号。一般情况下,当主机收到出错应答或在用户设定的时间内仍未收到响应报文时,主站就会立即重发信息给从设备。这种一问一答的通信模式,大大提高了通信的正确率。从站没有收到来自总站的请求时,将不会自动发送数据。从站之间也不能互相通信。在某一时刻主站只能启动一个MODBUS事务处理。
数据传输以帧为单位,将报文作为一帧数据,报文是由发送地址、控制信息、发送数据、校验信息按一定格式组成的一个数据单元。主设备发出的请求帧和从设备发出的应答帧都是以地址开头的。
2.2 MODBUS协议在串行链路层上的实现
串行链路上的MODBUS系统可以使用不同的物理接口作为其物理层标准。最常用的接口是RS485两线制接口,RS485四线制接口可作为附加选项用。当只需要短距离的点到点通信时,也可以使用RS232串行接口作为MODBUS系统的物理接口。图2.1给出了MODBUS协议与ISO/OSI网络模型的对应关系。
2.2.1 MODBUS主/从协议原理
MODBUS串行链路协议位于OSI模型的第2层,是一个主/从协议。基于串行链路实现的MODBUS系统中,有且仅有一个主节点(客户机、主站)能够向其他从节点发出请求报文并处理响应,从节点在没有收到主站的请求时并不主动向总线上发送数据,也不与其他从节点通信。
主站可通过单播和广播两种方式向从站发出MODBUS请求。在单播模式下,主站寻址单个从站。从站接收并处理完请求后,向主站返回一个应答。而对于广播模式的请求,主站可以向所用从站发送请求,但该请求必须是写命令,且从站没有应答返回。
2.2.2 MODBUS总线两种串行传输模式
传输模式定义了链路上串行传送报文域的位内容,并确定了信息是怎样打包为报文及如何解码。MODBUS有两种串行传输模式,即RTU模式和ASCII模式。
●ASCII传输模式
在ASCII模式中,用两个ASCII字符发送报文中的一个8位字节。报文中用特定的字符表示起始和结束。这种模式的主要优点是允许两个字符之间的时间间隔可达到1秒而不发送错误。如果出现更大的间隔,则正在接收的设备认为出现错误。表2.1所示为ASCII模式字符中的位序列。每个字节包括1个起始位(逻辑0)、7个数据位(首先发送最低有效位)、1个奇偶校验位和一个停止位(逻辑1 )。其中,奇偶校验位默认为偶检验,为保证最大兼容性,也可选择奇校验或无校验(用一个停止位填充)。
ASCII模式的错误校验采用纵向冗余校验(Longitudinal Redundancy Check-LRC)。报文以一个冒号(:)字符开始,即ASCII码3AH;并且以一个回车换行符(CRLF)结束,即ASCII码0DH和0AH.网络设备不断检测网络总线上的“:”字符,当一个冒号被接收到时,每个设备都解码下个域(地址域)来查明是否是被访问的设备。ASCII报文帧格式如表2 .2所示:
●RTU传输模式
在RTU( Remote Termina lUint -远程终端设备)模式下,一个报文中的每个字节包含两个4位的十六进制字符。这种模式的主要优点是:在同样的波特率下,它的高字符密度运行比ASCII方式传送更多的数据,具有比ASCII模式更高的吞吐率。在本设计中采用RTU传输方式。表2 .3所示为RT U模式字符中的位序列。每个字节包括1个起始位(逻辑0 )、8个数据位(首先发送最低有效位)、1个奇偶校验位和一个停止位(逻辑1 )。其中,奇偶校验位默认为偶检验,为保证最大兼容性,也可选择奇校验或无校验(用一个停止位填充)。
RTU报文帧格式如表2.4所示。典型的RTU报文帧没有起始位,也没有停止位,而是以至少3.5个字符时间的停顿间隔标志一帧的开始或结束。报文帧由地址域、功能域、数据域和CRC校验域构成。所有字符由16进制0-9,A-F组成。RTU报文帧格式如图2 .5所示:
在RTU模式中,整个报文帧必须作为一个连续的数据流传输。如果在报文帧完成之前有超过1.5个字符时间停顿间隔发生,接收设备将刷新未完成的报文并假定下一个字节将是一个新报文的地址域。同样地,如果一个新报文在小于3.5个字符时间内紧跟前一个报文开始,接收设备将认为它是前一个报文的延续。这些都会导致传输的报文错误。
消息帧的地址域包含一个8Bit.可能的从设备地址是0-247(十进制)。单个设备的地址范围是1- 247.主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。地址0是用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式代替。
2.3错误检测域
当选用RTU模式作字符帧,错误检测域包含一16 Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。故CRC的高位字节是发送消息的最后一个字节。
CRC-16错误校验程序如下:报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位( MSB )首选发送。报文先与X↑16相乘(左移16位),然后看X↑16 + X↑15 + X↑2 + 1除,X↑16 + X↑15 + X↑2 + 1可以表示为二进制数11000000000000101.整数商位忽略不记,16位余数加入该报文( MSB先发送),成为2个CRC校验字节。余数中的1全部初始化,以免所有的零成为一条报文被接收。经上述处理而含有CRC字节的报文,若无错误,到接收设备后再被同一多项式( X↑16+ X↑15 + X↑2 + 1)除,会得到一个零余数(接收设备核验这个CRC字节,并将其与被传送的CRC比较)。全部运算以2为模(无进位)。
习惯于成串发送数据的设备会首选送出字符的最右位( LSB -最低有效位)。而在生成CRC情况下,发送首位应是被除数的最高有效位MSB.由于在运算中不用进位,为便于操作起见,计算CRC时设MSB在最右位。生成多项式的位序也必须反过来,以保持一致。多项式的MSB略去不记,因其只对商有影响而不影响余数。
生成CRC-16校验字节的步骤如下:
(1) 16位CRC寄存器置成FFFFH
(2)第一个8位数据与CRC寄存器低8位进行异或运算,结果放入CRC寄存器;
(3) CRC寄存器向右移一位,HSB填零,检查LSB ;
(4)(若LSB为0 ):重复3,再右移一位。(若LSB为1 ):CRC寄存器与oxA001进行异或运算;
(5)重复3和4直至完成8次移位,完成8位字节的处理;
(6)报文的下一个字节重复2至5步,直至全部字节处理完毕
(7) CRC寄存器的最终值为CRC值;
(8)把CRC值放入信息时,高8位和低8位应分开放置。
CRC码生成流程图如图2 .2所示:
2.4 MODBUS应用层协议
2.4.1 MODBUS功能码
MODBUS功能码是MODBUS请求/应答PDU(Protocol Description Unit)的元素。PDU中用一个字节编码MODBUS功能码域,有效的码字范围是十进制1~255,其中128~255为异常相应保留。MODBUS定义了三类功能码:
(1)公共功能码:由Modbus.org确认的,被确切定义并保证唯一的功能码。此类功能码在MBIETFRFC中归档,可进行一致性测试。
(2)用户定义的功能码:十进制区间65~72和100~110为用户可自定义的功能码。在此区间内,用户无需Modbus组织的任何批准就可以选择和实现一个功能码,但不能保证被选功能码的使用是唯一的。用户可启动RFC将改变引入公共分类中,并且指配一个新的功能码。
(3 )保留功能码:某些公司在传统产品上使用的功能码,不作为公共使用。已定义的Modbus公共功能码按其功能可分为数据访问类和异常响应及诊断类两部分。数据访问类功能码实现对输入离散量、线圈的位访问,对寄存器、FIFO队列的16位访问以及对文件记录的读写。诊断类功能码提供了读异常状态、设备标识等功能。表2.5给出了Modbus公共功能码的定义。
2.4.2 MODBUS异常响应
当客户机设备向服务器设备发送请求时,主站的询问可能导致下列四种事件:
(1)服务器设备接收到无通信错误的请求,并且可以正常地处理询问,那么服务器设备将返回一个正常的响应。
(2)由于通讯错误,服务器没有接收到请求,那么不能返回响应。客户机程序将视之为超时。
(3)服务器接收到请求,但是检测到一个通信错误(奇偶检验、LRC、CRC等),那么不能返回响应。客户机程序将视之为超时。
(4)服务器接收到无通信错误的请求,但不能处理这个请求(例如,请求读一个不存在的寄存器),服务器将返回一个异常响应,通知客户机错误的实际情况。
异常响应报文时通过功能码域和数据域区别于正常响应。对于功能码域,正常响应的服务器复制原始请求的功能码,即所有功能码的MSB都为0;异常响应的服务器设置功能码的MSB为1,即使得异常响应中的功能码值比正常响应中的功能码值高80H.对于数据域,正常响应的服务器将返回请求中要求的信息;异常响应的服务器返回异常码。客户机通过响应报文中功能码的MSB识别异常响应,并能够检测数据域中的异常码。表2 .6给出了Modbus异常码及其含义。