【摘要】:根据OSI参考模型,数据链路层规定总线存取控制、数据安全性以及传输协议和报文的处理。在PROFIBUS-DP中,数据链路层(第2层)称为FDL层。图4-16 FDL层的报文帧格式PROFIBUS-DP的报文格式如图4-16所示。用户和FDL之间的交互过程是通过一种接口来实现的,在PROFIBUS规范中称之为服务原语。在图4-17中,两条竖线表示FDL层的界限,两线之间部分就是整个网络的数据链路层。本地FDL设备则通过原语FDL_DATA_ACK.confirm通知发起这项SDA服务的本地用户。
根据OSI参考模型,数据链路层规定总线存取控制、数据安全性以及传输协议和报文的处理。在PROFIBUS-DP中,数据链路层(第2层)称为FDL层(现场总线数据链路层)。
图4-16 FDL层的报文帧格式
PROFIBUS-DP的报文格式如图4-16所示。
1.帧字符和帧格式
(1)帧字符
每个帧由若干帧字符(UART字符)组成,它把一个8位字符扩展成11位:首先是一个开始位0,接着是8位数据,之后是奇偶校验位(规定为偶校验),最后是停止位1。
(2)帧格式
第2层的报文格式(帧格式)如图4-16所示。
图中,L为信息字段长度;SC为单一字符(E5H),用在短应答帧中;SD1~SD4为开始符,区别不同类型的帧格式:
SD1=0x10,SD2=0x68,SD3=0xA2,SD4=0xDC;LE/LEr为长度字节,指示数据字段的长度,LEr=LE;DA为目的地址,指示接收该帧的站;SA为源地址,指示发送该帧的站;FC为帧控制字节,包含用于该帧服务和优先权等的详细说明;DU为数据字段,包含有效的数据信息;FCS为帧校验字节,不进位加所有帧字符的和;ED为帧结束界定符(16H)。
这些帧既包括主动帧,也包括应答/回答帧,帧中字符间不存在空闲位(二进制1)。主动帧和应答/回答帧的帧前的间隙有一些不同。每个主动帧帧头都有至少33个同步位,也就是说每个通信建立握手报文前必须保持至少33位长的空闲状态(二进制1对应的电平信号),这33个同步位长作为帧同步时间间隔,称为同步位(SYN)。而应答帧和回答帧前没有这个规定,响应时间取决于系统设置。应答帧与回答帧也有一定的区别:应答帧是指在从站向主站的响应帧中无数据字段的帧,而回答帧是指响应帧中存在数据字段的帧。另外,短应答帧只作应答使用,它是无数据字段固定长度的帧的一种简单形式。
(3)帧控制字节
FC的位置在帧中SA之后,用来定义报文类型,表明该帧是主动请求帧,还是应答/回答帧。FC还包括了防止信息丢失或重复的控制信息,见表4-3。
表4-3 帧控制字节的定义
表中,Res为保留位(发送方将设置此位为二进制“0”);Frame为帧类型,1为请求帧,0为应答帧/回答帧;FCB(Frame Count Bit)为帧计数位,0、1交替出现(帧类型B6=1);FCV(Frame CountBit Valid)为帧计数位有效(帧类型B6=1),0表示FCB的交替功能开始或结束,1表示FCB的交替功能有效(后面有详细说明);Stn-Type为站类型和FDL状态(帧类型B6=0),其解释见表4-4;Function为功能码,其解释见表4-5和4-6。
表4-4 Stn-Type的定义(帧类型B6=0)
表4-5 主动帧的功能码(帧类型B6=1)
表4-6 响应帧的功能码(帧类型B6=1)
(4)扩展帧
在有数据字段的帧(开始符是SD2和SD3)中,DA和SA的最高位(第7位)指示是否存在地址扩展位(EXT),0表示无地址扩展,1表示有地址扩展。PROFIBUS-DP协议使用FDL的服务存取点(SAP)作为基本功能代码,地址扩展的作用在于指定通信的目的服务存取点(DSAP)、源服务存取点(SSAP)或者区域/段地址,其位置在FC字节后,DU的最开始的一个或两个字节。在相应的应答帧中也要有地址扩展位,而且在DA和SA中可能同时存在地址扩展位,也可能只有源地址扩展或目的地址扩展。注意:数据交换功能(data_exch)采用默认的服务存取点,在数据帧中没有DSAP和SSAP,即不采用地址扩展帧。
(5)报文循环
在DP总线上一次报文循环过程包括主动帧和应答/回答帧的传输。除令牌帧外,其余3种帧:无数据字段的固定长度的帧、有数据字段的固定长度的帧和有数据字段无固定长度的帧,既可以是主动请求帧,也可以是应答/回答帧(令牌帧是主动帧,它不需要应答/回答)。
2.FDL的4种服务
FDL可以为其用户,也就是为FDL的上一层提供4种服务:发送数据需应答(SDA),发送数据无需应答(SDN),发送且请求数据需应答(SRD)及循环发送且请求数据需应答(CSRD)。用户想要FDL提供服务,必须向FDL申请,而FDL执行之后会向用户提交服务结果。用户和FDL之间的交互过程是通过一种接口来实现的,在PROFIBUS规范中称之为服务原语。
(1)发送数据需应答
SDA服务的执行过程中原语的使用如图4-17所示。
在图4-17中,两条竖线表示FDL层的界限,两线之间部分就是整个网络的数据链路层。左边竖线的外侧为本地FDL用户,假设本地FDL地址为m;右边竖线外侧为远程FDL用户,假设远程FDL地址为n。
图4-17 SDA服务
服务的执行过程是:本地的用户首先使用服务原语FDL_DATA_ACK.request向本地FDL设备提出SDA服务申请。本地FDL设备收到该原语后,按照链路层协议组帧,并发送到远程FDL设备,远程FDL设备正确收到后利用原语FDL_DATA_ACK.indication通知远程用户并把数据上传。与此同时,又将一个应答帧发回本地FDL设备。本地FDL设备则通过原语FDL_DATA_ACK.confirm通知发起这项SDA服务的本地用户。
本地FDL设备发送数据后,它会在一段时间内等待应答,这个时间称为时隙时间TSL(Slot Time,可设定的FDL参数)。如果在这个时间内没有收到应答,本地FDL设备将重新发送,最多重复k=max_retry_limit(最大重试次数,是可设定的FDL参数)次。在重试k次仍无应答,则将无应答结果通知本地用户。
(2)发送数据无需应答
SDN服务的执行过程中原语的使用如图4-18所示。
图4-18 SDN服务
从图4-18中可以看出SDN服务与SDA服务的区别:①SDN服务允许本地用户同时向多个,甚至所有远程用户发送数据。②所有接收到数据的远程站不做应答。当本地用户使用原语FDL_DATA.request申请SDN服务后,本地FDL设备向所要求的远程站发送数据的同时立刻传递原语FDL_DATA.confirm给本地用户,原语中的参数L_status此时仅可以表示发送成功,或者本地的FDL设备错误,不能显示远程站是否正确接收。
(3)发送且请求数据需应答
SRD服务的执行过程中原语的使用如图4-19所示。
SRD服务除了可以像SDA服务那样向远程用户发送数据外,自身还是一个请求,请求远程站的数据回传,远程站把应答和被请求的数据组帧,回传给本地站。
执行顺序是:远程用户将要被请求的数据准备好,通过原语FDL_REPLY_UP-DATE.request把要被请求的数据交给远程FDL设备,并收到远程FDL设备回传的FDL_RE-PLY_UPDATE.confirm。参数Transmit用来确定远程更新数据回传一次还是多次,如果回传多次,则在后续SRD服务到来时,更新数据都会被回传。L_status参数显示数据是否成功装入,无误后等待被请求。本地用户使用原语FDL_DATA_REPLY.request发起这项服务,远程站FDL设备收到发送数据后,立刻把准备好的被请求数据回传,同时向远程用户发送FDL_DATA_REPLY.indication,其中参数updata_status显示被请求数据是否被成功地发送出去。最后,本地用户就会通过原语FDL_DATA_REPLY.confirm接收到被请求数据L_sdu和传输状态结果L_status。
图4-19 SRD服务
(4)循环发送且请求数据需应答
CSRD是FDL 4种服务中最复杂的一种。CSRD服务在理解上可以认为是对多个远程站自动循环地执行SRD服务。(www.chuimin.cn)
以上就是FDL层提供的4种服务。特别强调的是SDN服务和SRD服务,因为PROFIBUS-DP总线的数据传输依靠的是这两种FDL服务,而FMS总线使用了FDL的全部4种服务。
此外还有一点,4种服务显然都可以发送数据,但是SDA和SDN发送的数据不能为空,而SRD和CSRD则可以,这种情况其实就是单纯请求数据了。
3.以令牌传输为核心的总线访问控制体系
在PROFIBUS-DP的总线访问控制中已经介绍过关于令牌环的基本内容,为了更好地理解DP系统中的令牌传输过程,下面将对此进行较详细的说明。
(1)GAP表及GAP表的维护
GAP是指令牌环中从本站地址到后继站地址之间的地址范围GAP表(GAPL)为GAP范围内所有站的状态表。
每一个主站中都有一个GAP维护定时器,定时器溢出即向主站提出GAP维护申请。主站收到申请后,使用询问FDL状态的Request FDL Status主动帧询问自己GAP范围内的所有地址。通过是否有返回和返回的状态,主站就可以知道自己的GAP范围内是否有从站从总线上脱落,是否有新站添加,并及时修改自己的GAPL。具体如下:
1)如果在GAP表维护中发现有新从站,则把它们记入GAPL。
2)如果在GAP表维护中发现原先在GAP表中的从站在多次重复请求的情况下没有应答,则把该站从GAPL中除去,并登记该地址为未使用地址。
3)如果在GAP表维护中发现有一个新主站且处于准备进入逻辑令牌环的状态,该主站将自己的GAP范围改变到新发现的这个主站,并且修改活动主站表,在传出令牌时把令牌交给此新主站。
4)如果在GAP表维护中发现在自己的GAP范围中有一个处于已在逻辑令牌环中状态的主站,则认为该站为非法站,接下来询问GAP表中的其他站点。传递令牌时仍然传给自己的NS,从而跳过该主站。该主站发现自己被跳过后,会从总线上自动撤下,即从Active_Idle状态进入Listen_Token状态,重新等待进入逻辑令牌环。
(2)令牌传递
某主站要交出令牌时,按照活动主站表传递令牌帧给后继站。传出后,该主站开始监听总线上的信号,如果在一定时间(时隙时间)内听到总线上有帧开始传输,不管该帧是否有效,都认为令牌传递成功,该主站就进入Active_Idle状态。
如果时隙时间内总线没有活动,就再次发出令牌帧。如此重复至最大重试次数,如果仍然不成功,则传递令牌给活动主站表中后继主站的后继主站。依此类推,直到最大地址范围内仍然找不到后继,则认为自己是系统内唯一的主站,将保留令牌,直到GAP维护时找到新的主站。
(3)令牌接收
如果一个主站从活动主站表中自己的前驱站收到令牌,则保留令牌并使用总线。如果主站收到的令牌帧不是前驱站发出的,则认为是一个错误而不接收令牌。如果此令牌帧被再次收到,该主站则认为令牌环已经修改,将接收令牌并修改自己的活动主站表。
(4)令牌持有站的传输
一个主站持有令牌后,工作过程如下:
首先计算上次令牌获得时刻到本次令牌获得时刻经过的时间,该时间为实际轮转时间(TRR),表示的是令牌实际在整个系统中轮转一周耗费的时间。每一次令牌交换都会计算一个新的TRR;主站内有参数目标轮转时间TTR,其值由用户设定,它是预设的令牌轮转时间。一个主站在获得令牌后,就是通过计算TTR-TRR来确定自己可以持有令牌的时间。
(5)从站FDL状态及工作过程
为了方便理解PROFIBUS-DP站点FDL的工作过程,将其划分为几个FDL状态,其工作过程就是在这几个状态之间不停转换的过程。
PROFIBUS-DP从站有两个FDL状态:Offline和Passive_Idle。当从站上电、复位或发生某些错误时进入Offline状态。在这种状态下从站会自检,完成初始化及运行参数设定,此状态下不做任何传输。从站运行参数设定完成后自动进入Passive_Idle状态。此状态下监听总线并对询问自己的数据帧作相应反应。
(6)主站FDL状态及工作过程
主站的FDL状态转换图如图4-20所示。主站的工作过程及状态转换比较复杂,这里以3种典型情况进行说明。
1)令牌环的形成。假定一个PROFIBUS-DP系统开始上电,该系统有几个主站,令牌环的形成工作过程如下:
每个主站初始化完成后从Offline状态进入Listen_Token状态,监听总线。主站在一定时间Ttime-out(TTO,超时时间)内没有听到总线上有信号传递,就进入Claim_Token状态,自己生成令牌并初始化令牌环。由于TTO是一个关于地址n的单调递增函数,同样条件下整个系统中地址最低的主站最先进入Claim_Token状态。
最先进入Claim_Token状态的主站,获得自己生成的令牌后,马上向自己传递令牌帧两次,通知系统内的其他还处于Listen_Token状态的主站令牌传递开始,其他主站把该主站记入自己的活动主站表。然后该主站做一次对全体可能地址的询问(Request FDL Status),根据收到应答的结果确定自己的LAS和GAP。LAS的形成即标志着逻辑令牌环初始化的完成。
图4-20 FDL状态转换图
2)主站加入已运行的PROFIBUS-DP系统的过程。假定一个PROFIBUS-DP系统已经运行,一个主站加入令牌环的过程如下:
主站上电后在Offline状态下完成自身初始化。之后进入Listen_Token状态,在此状态下,主站听总线上的令牌帧,分析其地址,从而知道该系统上已有哪些主站。主站会听两个完整的令牌循环,即每个主站都被它作为令牌帧源地址记录两次。这样主站就获得了可靠的活动主站表。
如果在听令牌的过程中发现两次令牌帧的源地址与自己地址一样,则认为系统内已有自己地址的主站,于是进入Offline状态并向本地用户报告此情况。
在听两个令牌循环的时间里,如果主站的前驱站进入GAP维护,询问Request FDL Sta-tus,则回复未准备好。而在主站表已经生成之后,主站再询问Request FDL Status,主站回复准备进入逻辑令牌环,并从Listen_Token状态进入Active_Idle状态。这样,主站的前驱站会修改自己的GAP和LAS,并把该主站作为自己的后继站。
主站在Active_Idle状态下,监听总线,能够对寻址自己的主动帧作应答,但没有发起总线活动的权力。直到前驱站传送令牌帧给它,它保留令牌并进入Use_Token状态。如果在监听总线的状态下,主站连续听到两个SA=TS(源地址=本站地址)的令牌帧,则认为整个系统出错,令牌环开始重新初始化,主站转入Listen_Token状态。
主站在Use_Token状态下,按照前面所说的令牌持有站的传输过程进行工作。令牌持有时间到达后,进入Pass_Token状态。
特别说明,主站的GAP维护是在Pass_Token状态下进行的。如不需要GAP维护或令牌持有时间用尽,主站将把令牌传递给后继站。
主站在令牌传递成功后,进入Active_Idle状态,直到再次获得令牌。
3)令牌丢失。假设一个已经开始工作的PROFIBUS-DP系统出现令牌丢失,这样也会出现总线空闲的情况。每一个主站此时都处于Active_Idle状态,FDL发现在超时时间(TTO)内无总线活动,则认为令牌丢失并重新初始化逻辑令牌环,进入Claim_Token状态,此时重复第一种情况的处理过程。
4.现场总线第1/2层管理(FMA 1/2)
前面介绍了PROFIBUS-DP规范中FDL为上层提供的服务。而事实上,FDL的用户除了可以申请FDL的服务之外,还可以对FDL以及物理层(PHY)进行一些必要的管理。例如,强制复位FDL和PHY,设定参数值,读状态,读事件及进行配置等。在PROFIBUS-DP规范中,这一部分称为FMA 1/2(现场总线第1/2层管理)。
FMA 1/2用户和FMA 1/2之间的接口服务功能主要有:
·复位物理层、数据链路层(Reset FMA 1/2),此服务是本地服务。
·请求和修改数据链路层、物理层,以及计数器的实际参数值(Set Value/Read Value FMA 1/2),此服务是本地服务。
·通知意外的事件、错误和状态改变(Event FMA 1/2),此服务可以是本地服务,也可以是远程服务。
·请求站的标识和链路服务存取点配置(Ident FMA 1/2、LSAP Status FMA 1/2),此服务可以是本地服务,也可以是远程服务。
·请求实际的主站表(Live List FMA 1/2),此服务是本地服务。
·SAP激活及解除激活((R)SAP Activate/SAP Deactivate FMA 1/2),此服务是本地服务。
相关推荐