迟海龙,刘金伟,刘晓彤,龚传利
(1.北京中水科水电科技开发有限公司,北京 100038;2.中广核工程有限公司,广东 深圳 518100;3.中国水利水电科学研究院,北京 100038)
IEC60870-5-103[1](以下简称为103规约)继电保护通信规约采用FT1.2异步式字节传输(Asynchronous byte transmission)的帧格式。规约可以多种方式实现。通常采用的方法是在接收和发送两个端点上分别设置两个计算工作线程,通信过程就是两台设备的收发端点进行交互的过程。该方法一般可归为同步处理的信息交互方式,对平衡的通信模式比较适用。同步模式因具有程序简单明了的优点,被很多早期规约处理程序所采纳。但这种方式有明显的不足:①程序交互过程中为同步接受和发送的信息设置的大量等待时间导致处理程序对外界信息反应迟钝,严重时可导致信息遗漏。②当通信间隔装置在采用非平衡的一对多点轮询拓扑结构通信模式时,由于通信主站(以下简称主站)要面对大量被控站(以下简称从站),这使得主站在跟踪各从站的通信状态时需要大量辅助状态变量,程序处理比较繁杂。为此,需要采用新的方法予以解决,本文提出的可以跟踪主站以及从站通信状态的状态机模型方法,是解决这一问题方法之一,可以大幅降低程序开发和维护扩展的难度。本文主要讨论状态管理模型在103通信主站侧的实现。
规约的传输过程中的数据采集就是主站和从站之间通过若干个请求/确认或者指示/响应服务原语[2](REQ/CONF 或者IND/RESP)的周期性数据交换达到两端数据一致的过程。采集过程按照数据的多少可分单周期或者多周期时间完成。交互过程可通过过程图或者状态图表示。图1A、1B为交互的状态图,图1C为动作序列示意图。本文主要讨论主站端的有限状态机的实现方式,文中只给出通信过程的发送端状态图,其他图可以类似思路实现。
图1 交互过程状态图及序列图
103规约工作在单点对多点的主从Polling(轮询)方式。正常工作时,主站依次轮询从站的2级用户数据,如果从站产生1级数据,通过上送的2级数据报文控制域中的ACD标志位[2],请求主站查询1级数据。主站在接收到从站查询请求后可以马上发出再次1级数据召唤或者在下一次轮询周期内发出再次召唤1级数据直到从站将ACD复位0后不再请求召唤为止。通常主站查询完某个从站的1级数据后,则继续开始对下一个从站的查询。这是正常通信的一个基本过程。
主站在开始新一轮发送/确认服务时,改变下发报文控制域中帧计数位FCB的状态。如超时(等待时间50 ms)未收到从站发回的确认帧或响应帧,则不改变FCB状态重发原报文,最大重传次数为3次。如果重发3次后仍收不到应答报文,则首先发复位帧计数位(FCB)复位命令,如果仍收不到应答报文,则复位从站(CU)。复位帧计数位(FCB)复位把FCB置0、发送缓冲区不清零。复位从站把FCB置0、发送缓冲区清零。从站上电或复位后,待收到FCB或CU复位命令后,响应确认并请求访问1级数据。以ASDU5标识报文上送厂家名称等设备信息,参数传送原因项为FCB或CU。然后是时间同步(ASDU6)和总查询(ASDU7)。初始化时对时采用SEND /CONFIRM方式,分别对每一个从站对时。
主站周期地顺次对每个间隔单元召唤 2 级用户数据,从站以ASDU03或ASDU09上送遥测数据。这个过程的全部状态及动作序列如图1所示 。
从站的全遥信通过主站对从站的总查询上送。当主控或从站初始化过程中启动总查询,以收集带有总查询标志的信息。总查询过程:主站向从站发总查询命令(采用ASDU7),装置以确认帧回答后,在将总查询信息转成1级用户数据后,在当前上送报文里控制域的要求访问位(ACD)[3]置1。总控收到ACD=1后,向装置查询 1 级数据。装置以 ASDU 01(02)上送全遥信。运行正常以后,主站按一定时间间隔(约15 min)启动总查询。在两次总查询间隔过程中,总控轮询各装置2级数据,装置一旦检测到发生遥信变位,则把上送2级数据报文ACD置1,
通知主站查询1级数据。装置通过ASDU 01(01H)上送变位遥信和ASDU02(02H)上送SOE。
有两种标准的命令传输过程,即:①选择和执行命令;②直接命令。直接命令就是主站下达命令(IND原语)后,从站立刻执行并把结果通过RESP原语反馈给主站。这里重点讨论前者的状态过程。
主站给从站发送请求原语SELECT(REQ),从站接收后,如应用进程准备接收“选择命令”,它将产生“选择响应”,通过SELECT(RESP)选择命令响应原语返送给主站。主站接收后通过SELECT(CON)选择确认原语产生“选择确认”。 选择过程可由“撤消命令”停止执行。如选择命令得到确认,主站再以 EXCO(REQ)请求原语向从站发“执行命令”。 从站以 EXCO(IND)指示原语传递给应用进程功能, 将“执行响应”返回给控制站,产生肯定或否定的确认。详细的过程参见文献[3]。文献中给出了选择和执行命令传输过程序列图。本文给出主站端的命令传输的状态图(图2)。图中给出了命令发送端需要预置的3个相关状态(总状态的一个子集):①设备就绪(命令起始态),②命令选择态度,③命令下达状态。设备就绪态为起始态,每次命令下达都要从此处出发,完成传输后也要回归此态。命令选择态和命令下达为中间过渡态,命令选择态主要决定命令的下达与撤销的不同路径,命令下达态为设备等待命令执行的中间过渡过程。
图2 主站命令传输状态转换图
状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。状态机主要由状态构成,可以描述为一组状态事件集合和状态转换图。
状态集合是状态机的重要组成部分,是SM工作当中的主要依据,对其的设计需要考虑以下几个方面:状态的定义和使用的便利性。通常一个工业级的SM都会有大量的状态变量,状态变量的管理对SM的设计有很重要的作用,决定了自动机可维护性。状态的分组和继承。先设计顶层状态量然后通过继承的机制不断分化和细化顶层状态的细节状态并作为该顶层状态的各个子状态。按照1.2节中过程讨论103规约应该设置的状态如表1所示。
表1 状态定义
状态机的事件和各个槽函数如表2所示。具体过程描述参考状态转换图。
表2 事件及槽函数集合
状态转换图是状态机模型的动态工作的具体体现,这里主要讨论初始化过程和采集通信过程中的状态转换图的细节。
在主站端上电后或者发送请求报文超过3次收不到应答的情况下,系统会跳转到初始化阶段对通信链路进行重置。在这一状态下主要做复位、召唤链路、时钟同步等工作。状态图如图3所示。异常状态是设备在链路应答超时或者遇到通信错误时需要设置的状态,该状态负责设备从错误中复位的工作。
图3 初始化状态图
采集通信态主要负责遥测遥信采集和命令的传输。遥测遥信的采集过程状态图如图4所示。工作态由子状态s21至s25构成。s21为起始状态和稳定态,其他状态均为请求过程中的过渡状态。过渡状态中均有定时器负责超时后处理工作。采集主要负责规约中1级2级数据的召唤工作。
图4 采集通信状态图
IEC103通信程序主要由主控端、SM状态机模块和接口消息处理模块3个部分组成(图5)。主控模块主要负责系统上电自检复位以及正常顺序调度等工作。 SM模块是规约的具体执行模块,按照之前讨论的方式对各种通信的报文指令作出正确的判断及响应。消息处理作为单独一个作业任务,主要监视通信串口发过来的信息,并将信息进行分类判断后翻译成SM能够识别的事件和数据。
图5 IEC103通信主体框架
本文采用自定义框架的开发方式,同时借鉴了商用SM的成熟经验。从最顶层开始状态可设置为起始状态和中间过渡状态。两种状态的最大差别在于中间过渡状态中要加入定时器超时处理。具体做法是在状态State 类的onEnter()和onExit() 状态出入函数中加入定时器启停操作和状态在本状态的超时次数(Repetitions)的判断,如果在本状态中超时重复次数超过3次则需要向SM继续发送一条重复大于3次的事件,状态机转而到异常处理状态中。起始状态下派生出设备初始化状态s0和设备就绪工作态s21,中间过渡态包括了除了上面两个状态之外的其他状态。
状态机的核心是状态转移表的定义,在程序中可以定义为如下结构数组,其中第一列对应当前状态,第二列对应事件,第三列对应转移后状态,第四列为槽函数,最后为函数的参数定义。这里第一行定义了在通信采集状态下,遇到总召事件后要跳转到总召状态中,对应的处理函数为发送总召命令SendNegotiateDataCmd。该状态转移表为状态机工作的核心部分,状态机在每次遇到事件到达时都要首先查找这个转移列表来确定下一步的操作。当业务变化时只需修改这里的状态定义表即可,从而提高程序重用性。
本文先后讨论了IEC103规约主要通信过程的实现以及从SM的角度去实现规约的主要要求。通信过程一般分为多个阶段,每一阶段对应着不同的状态,因而有状态改变过程。状态机天然属性很好地满足了通信过程的这种特点,采用状态机模型主要有以下优点:
(1)面对非平衡传输模式传输的设备时,能够很好地记录下各个子站设备的当前工作状态并按照实时状态做出正确及时的响应,提高通信响应速度 。
(2)采用的状态机框架同时也符合程序设计中的状态模式,该模式不仅使程序更加结构化,避免大量分支语句带来的混乱,而且大大提高了程序的扩展和维护的便利性。