吴小俊,李上,于洋
(南京轨道交通系统工程有限公司,南京 210019)
综合监控系统或电力监控系统的顺控多采用调度顺控模式[1],是多个遥控命令的组合,调度操作员只需通过界面点击1个按钮即可以完成一系列控制的操作,操作过程简单,自动化程度高,但某些特定情境下也可能会存在一些风险。
顺控前置条件是在执行顺控遥控命令前的一系列逻辑闭锁或特定状态检测的一种有效手段,实现遥控防误闭锁[2]的功能。结合中缀表达式的应用,在执行遥控命令前,判断是否存在闭锁条件或闭锁条件是否满足[3],可提高顺控执行的安全性,同时各前置条件的结果会直观在界面上显示,操作员能根据显示结果尽量排查原因,减少人工故障检测时间。下面针对基于中缀表达式的前置条件设计实现进行介绍。
顺控是一系列遥控对象的集合,即顺控卡片,是电气操作票的倒闸过程[4],用户操作时,程序会按照预先配置的步骤依次进行命令下发,自动按照规则完成一系列遥控对象的操作[5],实现停送电道闸操作。
顺控模块包括顺控配置模块和顺控执行模块2个部分。
顺控配置模块主要是按照顺控卡片配置前置条件和遥控对象。顺控执行模块是根据顺控的配置检测前置条件和执行遥控操作命令。2个模块与系统平台的配置库和实时库数据交互的关系如图1所示。
图1 顺控与系统平台数据交互示意图
顺控配置模块通过读写配置数据库,根据预先定义的顺控卡片根据系统平台的数据点进行绑定和设置。
顺控操作的每一步骤在配置数据库中即1个顺控对象。顺控对象的配置主要包括顺控序号、顺控类型、顺控对象和顺控条件属性等字段。各主要字段说明如下。
(1)顺控序号:顺控执行步骤序号,由1开始,依次增加。
(2)顺控类型:顺控对象具有控制类型,控制类型包括条件与控制命令,用于区别顺控对象是前置条件还是遥控操作。
(3)顺控对象:对应系统中的遥信点、遥测点或遥控点。其中当顺控对象是条件时配置为遥信(DI)或遥测点(AI);当顺控对象是遥控命令时配置遥控点(DO)。
(4)顺控对象配置条件属性,针对顺控对象类型,配置的意义不同。
①当顺控对象类型是前置条件时,条件属性为条件算术表达式。
条件算术表达式采用比较运算符,==、!=、>、<、>=、<=。顺控对象是系统中的DI或AI点,通过比较运算符,建立每一个条件的比较结果。示例见表1。
表1 条件对象配置表
第1行表示第1个顺控对象为遥信点1011隔离开关,配置为前置条件,当隔离开关1011的值为1时(开关状态为分位),此顺控序号条件满足。
第2行表示第2个顺控对象为遥信点1012隔离开关,配置为前置条件,当隔离开关1012的值为2时(开关状态为合位),此顺控序号条件满足。
第3行和第1、2行配置类同。
采用DI遥信点状态作为条件是常见的做法,也可以对AI遥测点建立条件,如101进线电压>=34.5 kV等形式,但如果使用35.5 kV>=101进线电压>=34.5 kV这样条件形式,则需要将条件拆分为2个条件,35.5 kV>=101进线电压并且101进线电压>=34.5 kV,在后面配置中将2个条件使用逻辑运算&进行合并。
②当顺控对象类型为遥控命令时,条件属性为前置条件表达式。顺控对象为遥控点。
前置条件表达式为逻辑表达式,采用中缀表达式形式,使用逻辑运算符,与(&)、或(|)、非(!),操作符优先级为!>&>|[6],并可以使用括号(),括号具有最高优先级,使用括号可以使更好理解与配置表达式逻辑,避免配置与预期结果不一致。每一个运算分量是前置条件对应的顺控执行顺序,计算表达式的逻辑结果[7]。配置示例见表2。
表2 遥控对象前置条件配置表
第四行表示顺控对象是遥控命令对象,条件属性为1&2|3,表示第1个顺控对象1011隔离开关实时状态==1和第2个前顺控对象隔离开关1012状态==2或者第3个顺控对象隔离开关1013状态!=2时,前置条件结果才为真。
顺控执行模块首先从配置库中读取配置的数据,按照顺控序号根据获取的实时值逐一检测顺控对象。检测过程见表3。
表3 遥控对象前置条件执行表
第1个顺控对象为遥信点1011隔离开关为前置条件,执行模块通过实时数据库获取当前配置遥信点的实时值[8],当隔离开关1011的实时值为1时(开关分位),此顺控序号条件满足,否则提示不满足。
第2个顺控对象为遥信点1012隔离开关为前置条件,执行模块通过实时数据库获取隔离开关1012的值实时为2时(开关合位),此顺控序号条件满足,否则提示不满足。
第3个顺控对象为遥信点1013隔离开关,也为前置条件,执行模块通过实时数据库获取隔离开关1013的实时值!=1(不是开关分位),此顺控序号条件满足,否则提示不满足。
第4个顺控对象是遥控命令对象,顺控条件为1&2|3,执行模块在执行遥控命令前,需要通过表达计算前置条件的逻辑结果,在当第1个顺控对象1011隔离开关实时状态==1和第2个前顺控对象隔离开关1012实时状态==2或者第3个顺控对象隔离开关1013实时状态!=1时,顺控对象前置条件结果才为真,可以继续执行断路器101遥控命令,否则不能执行遥控命令,并给出顺控条件不满足的提示。
顺控前置条件采用中缀表达式形式,中缀表达式是一种统一的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间,很容易理解与分析,可方便配置人员进行配置。但计算机很难之间计算中缀表达式,通常需要将中缀表达式转换为前缀表达式[9]或后缀表达式[10-11],再对前缀或后缀表达式进行求值。
本方案采用中缀表达式转后缀表达式的方式,使用C++/Qt框架,利用Qt框架的QVector、QList、QStack等容器类实现。
顺控前置条件判断基本流程如图2所示。
图2 前置条件判断流程图
本方案中关键的流程包括以下3个步骤。
(1)使用splitExp(QString& sExp,QList<QChar>& listChar)函数将字符串性的表达式转换成QList<QChar>字符串列表,方便后续转换使用
(2)使用infixToSuffix(QString& sExp,QVector<QChar>& suffixExp)函数将QList<QChar>字符串列表的中缀表达式转换成QVector<QChar>后缀表达式
(3)使用calulateSuffix(QString sExp,QMap<int,bool>& conditionMap)函数将各顺控条件的逻辑结果值代入后缀表达式数组,计算最终前置表达式的结果。
工程应用中,调试人员根据预先设计的顺控卡片配置顺控对象,包括顺控序号、顺控对象、顺控类型、顺控动作(只针对遥控对象)、顺控前置条件和执行次数等。配置示例如图3所示。
图3 配置示例图
在进行电气倒闸操作时,调度操作员在点击执行按钮后,顺控执行模块依次检测各条件是否满足,再根据中缀表达式计算最终前置条件结果,如不满足则不执行,并显示错误提示信息,如满足则正常执行下一步遥控操作,下发遥控命令,执行界面效果示例展示如图4所示。
图4 执行示例图
采用中缀算术表达式作为顺控前置条件,工程调试人员可自由配置各类顺控执行条件,配置方式简单明了,方便实现不同顺控应用场景,同时,使用前置条件方式的顺控方案可防止运营调度人员误操作,执行前检测先决条件,提前告知顺控卡片可否执行,提高工作效率。适用于城市轨道交通和电气化铁路综合监控系统和电力监控系统,并可应用类似逻辑顺控判断如联动功能[12]等的工业控制领域。本设计方案已在城市轨道交通综合监控系统等多个类似系统中应用和实施,得到了很好的验证。