1 概述
现场总线是一种用于智能化现场设备和自动化系统的开放式、数字化、双向串行、多节点的通信总线。
在实际的生产建设中,我们将会经常遇到将不同现场总线的设备集成在一起或者在某一现场总线中利用其他现场总线协议的设备的问题。这就涉及到了不同的现场总线协议的协议转化。数据键路层的帧转换是这些协议转化中的一个很关键的问题。
在这里,我们以Profibus-DP和CAN这两种当今使用广泛的现场总线来研究现场总线的协议帧转化。
2 CAN现场总线的传输层协议简介
传输层是CAN协议的核心。它把接收到的报文提供给对象层,以及接收来自对象层的报文。传输层负责位定时及同步、报文分帧、仲裁、应答、错误检测和标定、故障界定。
报文路由:报文的内容由识别符命名。识别符不指出报文的目的地,但解释数据的含义。因此,网络上所有的节点可以通过报文滤波确定是否应对该数据做出反应。
报文传输由以下4个不同的帧类型所表示和控制:
·数据帧:数据帧携带数据从发送器至接收器。
·远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。
·错误帧:任何单元检测到一总线错误就发出错误帧。
·过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。
数据帧(或远程帧)通过帧间空间与前述的各帧分开。
在这里我们以数据帧为例来分析CAN的帧结构。
2.1 数据帧
数据帧由7个不同的位场组成,如图1所示:
(1)帧起始
它标志数据帧和远程帧的起始,由一个单独的“显性”位组成。
(2)仲裁域
仲裁域包括识别符(ID)和远程发送请求位(RTR)。
识别符(ID):识别符的长度为11位。这些位的发送顺序是从ID-10到ID-0。最低位是ID-0。最高的7位(ID-10到ID-4)必须不能全是“隐性”。
RTR位:该位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”
(3)控制域
控制域由6个位组成,包括数据长度代码和两个将来作为扩展用的保留位。所发送的保留位必须为“显性”。数据长度代码指示了数据域中字节数量,长度为4个位。
(4)CRC域
CRC域包括CRC序列,其后是CRC界定符,它包含一个单独的“隐性”位。
(5)应答域
应答域长度为2位,包含应答间隙和应答界定符。在应答域里,发送站发送两个“隐性”位。当接收器正确地接收到有效的报文,接收器就会在应答间隙期间发送ACK信号,向发送器发送一“显性”的位以示应答。
(6)帧结尾
每一个数据帧和远程帧均由一标志序列界定。这个标志序列由7个“隐性”位组成。
2.2 传输控制
(1)帧间空隙
对于不是“错误被动”的站,或者此站已作为前一报文的接收器,其帧间空隙如图4所示:
对于已作为前——报文发送器的“错误被动”的站,其帧间空间如图5所示:
其中,intermission是强制性的3个隐性位。
(2)位流编码
帧的部分,诸如帧起始、仲裁域、控制域、数据域以及CRC序列,均通过位填充的方法编码。无论何时,发送器只要检测到位流里有5个连续识别值的位,便自动在位流里插入——补码位。
数据帧或远程帧(CRC界定符、应答域和帧末尾)的剩余位域形式相同,不填充。错误帧和过载帧的形式也相同,但并不通过位填充的方法进行编码。其报文里的位流根据“不返回到零”之方法来编码。这就是说,在整个位时间里,位电平要么为“显性”,要么为“隐性”。
CAN协议范围只规定了“显性”和“隐性”两种逻辑值,而没有明确规定表示这些逻辑电平的物理状态。根据逻辑关系,我们可以设“显性”逻辑值为逻辑“0”,“隐性”逻辑值为逻辑1。
3 Profibus数据链路层帧格式及相关的地址规定
(1)帧字符(UART字符)
帧由帧字符组成
每个帧字符由11个位组成:1个开始位(ST);8个信息位;1个奇偶校验位(P);1个停止位。
(2)帧格式举例
Profibus的帧有4种
1)无数据字段的固定长度的帧
2)有数据字段的固定长度的帧
3)有可变数据字段长度的帧
4)令牌帧
其中:
SYN同步时间,所有的主动帧前都必须有。
SD1开始定界符,值l0H
SD2开始定界符,值68H
SD1开始定界符,值A2H
SD1开始定界符,值DCH LE信息字节长度。该长度包括DA, SA,FC和DATA_UNIT。
LEr重复信息字节长度。 DA目的地址
SA源地址 FC帧控制 DATA UNIT数据字段。在固定长度的帧中为8个字符,在可变数据字段长度的帧中由LE决定,最大246个字符。
FCS帧检查顺序 ED结束定界符,值16H。 SC短应答帧的单一字符,值E5H。
(3)地址
在帧首部的地址字符结构是这样的:
地址位组的低7位为其所指示的站地址。这样在不扩展的情况下就有127个站地址(0~126)可以提供给主站和从站(其中127是作为全局地址来用的)。
EXT位用来指示在DATA UNIT中有无地址扩展。为了效率的缘故,Profibus-DP的数据交换功能禁止了地址扩展。
(4)服务存取点SAP
ProfibuS-DP协议使用FDL的服务存取点SAP作为基本功能代码。这个SAP有点类似于我们熟悉的TCP/IP协议中的端口:
在Profibus-DP协议中通常使用的帧格式如下,其中地址栏的最高位是1
4 帧的内容的转化
一般说来,Profibus现场总线是主从结构的,Master和Slave之间是通过轮询来通讯的。CAN也有主从结构的,但它的通讯方式是优先级逐位仲裁的竞争式通讯(CSMA/MBA)。
如果把这两种现场总线连在一起的话,大多数情况下应该是把CAN段作为Profibus的Slave。
CAN的帧比较短,每个帧都有严格的差错控制,在每个CAN的帧中,数据域最长是8个字节;而Profibus常用的有可变数据字段的单帧数据容量可达246字节,但它的每个字节(UART字符)都有比较好的差错控制。在这种转化中我们需要集中考虑地址转化和帧的拆分问题。
4.1 地址转化
如前所述,Profibus-DP的站地址(DA/SA)在帧中用1个字节的低7位来表示;但是CAN协议的帧中却没有明显的地址位,它是利用仲裁域中的11位(CAN2. OA)或29位(CAN2.OB)表示符ID来表示帧的有关接收信息,让接受节点自己来确定是否接收。这样,实际上的地址信息就应当包含在ID中了。CAN协议没有规定信息标识符(ID)的分配,可以根据不同的应用使用不同的方法。确定标识符的分配非常重要,是高层协议、应用层协议的一个主要研究项目。
在本文中,为简单起见,我们只采用CAN2. OA格式的帧。首先我们来研究其标识符的分配方法。世界上已经有很多现场总线的高层协议是基于CAN协议的,如CANopen, Modbus,DeviceNET等。出于研究方便,现在我们就采用“HiLon协议B”,协议。
下面对“HiLon协议B”作简单介绍。
HiLon协议B是一个通用协议。该协议基于对称型多主网络结构,支持广播和点对点传送命令数据。命令数据包可长达256字节。
协议以CAN2. OA帧结构为基础。下图是帧报文格式,一个CAN2. OA标准帧由11位ID、1位RTR、4位DLC、数据区(最多8个字节)组成。
PRI:保留位(可作优先级位)。通常,保留位设置为1。保留位亦可作为优先级位,这时1为低优先级0为高优先级而剩余的优先级由源地址决定,低地址优先级高。该保留功能可有效支持紧急信息传送,如报警等。
source address:源地址,表示发送数据的节点地址,范围只能设定为0~125。
TYPE:帧类型。见下表中的帧类型说明。
DLC:每帧字节数(1~8)
destination address:目标地址,表示接收数据的节点地址,范围只能设定为0~125。
index:索引字节。对于单帧数据,该字节表示传输数据的第一个字节;对于多帧数据,此字节表示索引字节,即此帧数据在数据包中的位置。
data:数据。
Profibus有127个站地址,地址范围是0~126,127是全局地址。
两者的差距并不大。因为只是研究用,我们不妨把HilonB协议稍许修改,地址范围扩充到0~126,这样做,对整个CAN帧的长度和结构并无任何影响。
于是,我们就可以对所有的Profibus设备和CAN设备统一编址。整个系统里的站地址是唯一的,在帧转化时我们只要把相应位的地址信息直接拷贝进去就是了。
4.2 帧的拆分和合并
要把profibus的长帧装到CAN的短帧里去,就只能把Profibus的帧里的数据拆分成适合CAN的帧传输的长度。
CAN帧里的数据域的长度最大只有8个字节。而且在我们给定的高层协议HiLon B中,又在数据域里拿了两个字节作为目的地址和帧索引了,这样就只剩下6个字节给我们传输数据。在最长的Profibus数据帧中,有246个数据字节。那么容纳这个长帧的数据就需要246/6=41个CAN帧。刚才我们在CAN的帧里采用一个字节作为帧的索引字节。
我们在进行帧转化时,把Profibus的帧拆分成每部分6字节后,加上目的地址和帧索引,就可以成为CAN帧中的内容了。目的节点收齐这些帧之后再把它们连接还原,就得到了要传送给它的信息。
反向传输时,我们所要做的只是顺序完全相反的事情。
4.3 帧的控制信息的转换
Profibus数据帧中的其他控制信息还有 SD2 (68H),LE(数据长度),FC(帧控制八位组),FCS(帧检查序列),ED(16H),这些信息都是根据帧本身的数据计算出来的,用于接收方对数据的识别。所以在协议转换器正确的接收了帧之后,这些信息也就不需要了。接下来的工作就是把收到的信息编人CAN的帧,加上CAN的控制信息,计算出CRC序列,和在一起组成CAN的帧发到CAN节点上去;反过来,当协议转换器要把CAN的帧转换成Profibus的帧时,也是在正确地接收CAN的帧之后,只提取其数据内容,然后按照Profibus的协议生成一幅Profibus帧。
5 差错控制
每种现场总线通讯协议帧都有它自己的错误检测方式。我们在协议转换的两侧,要按照它们各自的方法去检测错误。我们的协议转换器如果检测到一个错误,应当拦截这个错误。
5.1 Profibus的错误检测及控制
如前所述,Profibus帧中用的是UART字符。第10位是奇偶校验位。检测到任何一个字符的奇偶校验出错,我们就知道该字符有错误了。
Profibus的数据帧中有一个FCS位,是通过计算DA,SA,FC 和DATA UNIT的算术和获得的一个检验八位组。这个八位组可供 我们在接收到一个帧时来检验数据的正确性。
另外,还有些能明显被发现的错误:如超时运行、有缺陷的开始定界符和结束定界符、无效的帧长度、相应次数等。协议转化器在Profibus总线一侧,就是作为一个Profibus的节点在运行。当它不正确地接收到一个主动帧时,将不处理、应答或回答。在此时隙 时间期满后,发起方将再重试此请求。仅在接收到一个有效回答或重试(多次)不成功后,发起方才算完成了此请求。同理,如果协议转换器发送主动帧后没有正确的收到一个应答帧,那么它也会不停的重试,直到一定次数,才会把对方标记为不运行。
5.2 CAN的错误检测及控制
5.2.1 错误类型
CAN协议列出了以下5种不同的错误类型。协议转换器必须捕捉并处理这些错误。
(1)位错误
站单元在发送位的同时也对总线进行监视。如果所发送的位值与所监视的位值不相符合,则在此位时间里检测到一个位错误(BIT ERROR)。
(2)填充错误
如果在使用位填充法进行编码的信息中,出现了第6个连续相同的位电平时,将检测到一个填充错误。
(3)CRC错误
CRC序列包括发送器的CRC计算结果。接收器计算CRC的方法与发送器相同。如果计算结果与接收到CRC序列的结果不相符,则检测到一个CRC错误(CRC ERROR)。
(4)形式错误
当一个固定形式的位域含有1个或多个非法位,则检测到一个“形式错误”(FORM ERROR)。
(5)应答错误
只要在ACK间隙(ACK SLOT)期间所监视的位不为“显性”,则发送器会检测到一个“应答错误”(ACKNOWLEDGMENT ERROR)。
5.2.2 故障界定状态
CAN定义了一个故障界定状态机制。一个节点可能处于下列三种错误状态中。
(1)错误主动当一个错误主动结点检测到上述某个错误时,它将发送一个错误主动帧,该帧由6个连续的显性位组成。这已发送覆盖其他任何同时发送的帧,并导致其他节点都检测到一个填充错误,并依次放弃当前帧。
(2)错误被动当一个错误被动节点检测到上述的某一个错误时,它将发出一个错误被动帧。该帧由6个连续的隐性位组成。这个帧会被同时出现的其他发送所覆盖,如果其他站点没有检测到这一错误,不会丢弃当前帧。
(3)离线
5.2.3 错误处理过程
为进行故障界定,我们的协议转换器也应当设两种计数器:发送错误计数器和接受错误计数器。然后,我们就可以把它作为一个普通的CAN接点参与到CAN网络的运行,故障的处理方法也是一样的。
(1)初始化错误计,数器的值等于0,节点开始错误主动状态,此时假设检测到的所有错误都不是由该节点引起的。
(2)根据检测到的错误类型使相应的计数器的值累加,有效的发送或接收又使这些计数器递减,直至0。
(3)当这些计数器中的任何一个超出CAN定义的阈值时,该节点进人错误被动状态。该节点被认为是导致错误的原因。
(4)当错误被动节点的发送及接收错误计数器值都减小到CAN定义的阈值以下时,节点重新进人错误主动状态。
(5)当发送错误计数值超过CAN定义的另一个阈值时,该节点进人离线状态。从离线状态再进人错误主动状态就需要人的干预了。
以上所述,是我们研究的现场总线协议转换器在两边各自的现场总线范围内的错误控制和处理方法。一定要先解决各自的错误,才能再进行帧的转换。
从Pfofibus的帧转换到CAN的帧时,就是在通过校验确认帧的内容无误后,才进行地址和内容的转换,然后还要计算出该帧的CRC序列,供CAN段通讯用。反过来也是一样。
6 结语
本文分析了Profibus和CAN的帧的特点,构思了在这两种总线之间实现帧转换的方法。但单纯的帧转换没有意义,帧转换只是现场总线的协议转换中的一环。要实现几种现场总线的协作,还有其他很多工作要做。
国际电工委员会IEC在1984年就开始筹备制定单一现场总线国际标准。然而,由于行业与地域发展等历史原因,加上各公司和企业集团受自身利益的驱使,围绕着现场总线技术的标准进行了一场大战,最后经过多方妥协,于1999年年底通过了包含FF,Profibus等八种总线在内的IEC61158,没有实现制定单一标准的目标。这个结局表明,在今后相当长一段时间内多种现场,总线将并存,控制网络的系统集成与信息集成会面临困难的复杂局面。无论是最终用户还是制造商,普遍都在关注现场总线技术的发展新动向,都在寻求高性能低成本的解决方案。