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 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所示:
上一篇:现场总线的开关量 I/O 模块的总体方案设计
下一篇:现场总线的开关量 I/O 模块的设计总述及基本名词解释
推荐阅读最新更新时间:2024-05-02 22:40