一种图形逻辑组态的识别方法与流程

文档序号:17002447发布日期:2019-03-02 01:52阅读:590来源:国知局
一种图形逻辑组态的识别方法与流程

本发明涉及一种图形逻辑组态的识别方法,属于电气自动化技术领域。



背景技术:

逻辑组态是相对于逻辑编程而存在的一种技术,逻辑编程通过将固定的逻辑以高级语言控制语句的形式,编译成可执行程序,进而实现逻辑控制。比如avc子站的闭锁逻辑(plc、dcs、继电保护),如果使用硬编码方式计算闭锁信号,那么一旦闭锁逻辑发生改变(如引入新的闭锁条件),那么就要重新编写程序。这种通过硬编码形式的控制程序,一旦开发完毕,将无法更改,如果想对逻辑进行调整,就必须重新编写代码,并导入到设备中。重新编码会带来新的bug,并且开发成本极高。面对逻辑编程带来的问题,出现了一种通过编辑配置文件方式来进行逻辑配置的方法,起初是表格形式的逻辑组态,通过预先设置一系列可编辑的参数来开放给工程人员进行定制化的编辑。以发电厂额定有功功率为例,电厂a的额定有功功率为600mw,电厂b的额定有功功率为300mw,都是可以通过编辑这个配置表格中的参数,来实现各个电厂的定制化配置。表格式配置与硬编码相比,减少了程序代码编译的次数,如果程序测试充分,那么这个代码在很长时间内都可以保持稳定。这减少了设备厂家的开发成本和维护成本。但表格式的配置方法也存在很多不足,比如不够直观,有的逻辑配置参数很多,一屏看不全,要前后翻页。也很难理解各个参数间的关联关系,无法在一个屏幕上检查多个逻辑组态的内容。因此又有了图形逻辑组态,图形逻辑组态相比表格式逻辑组态,更直观,编辑更加灵活。通过添加输入节点、输出节点、运算符等元素,就可以生成复杂的逻辑表达式。以avc闭锁逻辑为例,如果需要加入一个通信状态异常引发的闭锁条件,只需将通信状态异常这个输入信号和原有的闭锁信号进行一个<或>运算就能够实现。现有的图形逻辑组态都是通过控制鼠标来进行节点选取和绘制连线的,整个配置工作必须都在计算机运行环境下进行。



技术实现要素:

本发明所要解决的技术问题是克服现有技术的缺陷,提供一种图形逻辑组态的识别方法,

为解决上述技术问题,本发明提供一种图形逻辑组态的识别方法,包括以下步骤:

1)绘制逻辑图,所绘制的逻辑图由逻辑节点和连接线构成,逻辑节点之间通过连接线连接;所述逻辑节点是一个封闭的矩形,在封闭的矩形内部标注信号类型标识符,在矩形的正下方标注信号名;

2)将绘制好的逻辑图进行拍照或扫描,生成一个图像文件;

3)对所生成的图像文件进行中值滤波和二值化处理;

4)识别图像文件中的逻辑节点,并将获取的每一个逻辑节点的信息保存,所述逻辑节点的信息包括:逻辑节点的信号类型标识符,信号名和逻辑节点id;

5)识别连接线,并将连接线两端的逻辑节点信息记录保存下来;

6)遍历逻辑节点,找到输出逻辑节点,求出该输出逻辑节点的逻辑表达式。

前述的步骤1)中,所述信号类型包括:遥信,遥测,输出和运算符,其中,遥信标识符采用d,遥测标识符采用a,输出标识符采用o,运算符的标识符采用惯用数学符号;所述信号名采用一对中括号包围的字符串表示。

前述的步骤4)中,识别图像文件中的逻辑节点具体过程如下:

41)使用knn算法对逻辑图中所使用的字体进行图形标记;

42)对二值化图像进行canny边缘检测,再进行统计概率霍夫变换,识别出所有完整线段;

43)遍历线段,识别出所有的矩形;

44)使用knn算法识别逻辑节点矩形内的标识符,并给逻辑节点一个唯一的id编号;

45)识别信号名;

46)计算每一个逻辑节点的矩形底边中点与每一个信号名顶部中点的距离,将距离最小的那对组合关联起来,即为逻辑节点及其对应的信号名。

前述的步骤45)识别信号名过程如下:

44a)识别所有的字符,将识别到的字符进行遍历,记录下所有的[字符;

44b)以每个[字符为起点,寻找y坐标与之相差2个像素内,x坐标大于该[字符x坐标,且x坐标相差最小的那个字符,并且将找到的字符标记为已完成;

44c)继续下一个字符,寻找y坐标与[相差2个像素内,x坐标大于步骤44b)找到的字符的x坐标,且x坐标相差最小的那个字符,并且将找到的字符标记为已完成;直到找到了一个]字符,则该信号名查找结束;

44d)返回步骤44b),将所有的信号名都找到。

前述的步骤5)连接线识别过程如下:

51)从识别的线段中取出一条线段,如果该线段没有标记为已完成,则将该线段与其余线段进行相交检测;

52)当选择的线段的任意一个端点与另一个线段的任意一个端点的坐标相等时,将选择的该线段的相交计数器加一;

53)循环遍历结束之后,如果线段的计数器等于0或1,则将该线段标记为端线段;

54)遍历相交计数器为0的端线段,创建一个连接线对象,检测每个端点和逻辑节点的相交情况,如果端点的坐标在逻辑节点的垂直线段上,则在连接线对象中保存该逻辑节点信息;

55)遍历计数器为1的端线段,检测端点与其余线段的相交情况,如果找到了一个线段与端线段相交,则将该线段标记为已完成,并且将该线段的另一个端点与其余线段进行相交检测,直到找到一个端线段为止,这样,就构成了一条连接线,遍历后,将所有相连的线段都标记为已完成;

56)检测步骤55)的连接线的端点和逻辑节点的相交情况,如果端点的坐标在逻辑节点的垂直线段上,则在连接线对象中保存该逻辑节点信息。

前述的步骤6)输出逻辑节点的逻辑表达式求解过程如下:

61)遍历逻辑节点,找到输出节点;

62)根据输出节点所在的连接线对象,找出与该输出节点对应的输入信号运算符逻辑节点;

63)对该运算符逻辑节点调用递归函数,并将该递归函数的返回表达式外部加一对括号,作为输出节点的表达式;

64)遍历所有的连接线对象,找出与该运算符逻辑节点对应的所有的输入信号逻辑节点,并对这些输入信号逻辑节点调用递归函数;如果逻辑节点为信号节点,则转入步骤65);如果该节点为运算符逻辑节点,则返回步骤64);

65)返回该逻辑节点的信号名;

66)将每个递归函数返回的表达式外部加一对括号;

67)将这些带括号的表达式使用步骤63)的运算符相连,即该逻辑图所要表达的逻辑表达式。

本发明所达到的有益效果:

本发明的逻辑图可以不受限于具体的图形组态软件,可以使用word、photoshop、cad等绘制图形的软件来制作逻辑图。本发明极大的减少重新组态的时间成本,并能够减少错误的发生。

附图说明

图1为本发明方法流程图;

图2为逻辑节点示例;

图3为逻辑节点的矩形的四种识别方式;

图4为连接线对象示意图;

图5为实施例中绘制的逻辑图。

具体实施方式

下面对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。

如图1所示,本发明的图形逻辑组态的识别方法,包括以下步骤:

步骤1:绘制逻辑图,所绘制的逻辑图由逻辑节点和连接线构成,逻辑节点之间通过连接线连接。参见图2,逻辑节点是一个封闭的矩形,在封闭的矩形内部标注信号类型标识符,在矩形的正下方标注遥信信号名或遥测信号名。

信号类型包括:遥信,遥测,输出和运算符,其中遥信标识符采用d,遥测标识符采用a,输出标识符采用o,运算符包括与、或、加减乘除、大于、小于、等,其标识符采用各自的惯用数学符号,如:+(相加)、-(相减)、*(相乘)、/(相除)、%(取余)、&(逻辑与)、|(逻辑或)、>(大于)、<(小于)等。

遥信信号名或遥测信号名采用一对中括号包围的字符串表示,如:[yx1]。

步骤2:将绘制好的逻辑图进行拍照或扫描,生成一个图像文件。

步骤3:对所生成的图像文件进行中值滤波和二值化处理。

步骤4:识别逻辑节点,并将获取的每一个逻辑节点的信息保存,逻辑节点的信息包括:逻辑节点的信号类型标识符和逻辑节点id,对于遥信信号和遥测信号还保存遥信信号名或遥测信号名。

逻辑节点的矩形的识别过程为:

41)使用knn算法对逻辑图中所使用的字体进行图形标记;

42)对二值化图像进行canny边缘检测,再进行统计概率霍夫变换,识别出所有完整线段。

43)根据线段的组合情况,识别出所有的矩形,参见图3,一共有4种识别过程。

431)从检测到的线段中,按顺序取出一个线段(未标记为已完成),如果该线段的两个端点的x坐标相等,那么该线段就为垂直线段,如果该线段的两个端点的y坐标相等,那么该线段就为平行线段。记录该线段为线段1。

432)然后寻找线段2,

对于线段1为垂直线段的情况,存在两种方式寻找线段2:

a、将线段1的顶部坐标x和y与所有未标记为已完成的水平线段的左侧端点坐标x和y进行对比,如果某个水平线段左侧端点坐标x与y,同线段1的顶部坐标x与y相比,坐标x相差在2像素内,坐标y相差2像素内,那么该水平线段就是所要检测的线段2,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则按照情况b的方式进行寻找。

b、将线段1的底部坐标x和y与所有未标记为已完成的水平线段的右侧端点坐标x和y进行对比,如果某个水平线段右侧端点坐标x与y,同线段1的底部坐标x与y相比,坐标x相差在2像素内,坐标y相差2像素内,那么该水平线段就是所要检测的线段2,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则跳过该线段1,返回步骤431)重新开始寻找,直至找到线段2或者遍历完所有的线段。

对于线段1为水平线段的情况,同样存在两种方式寻找线段2:

c、将线段1的右侧坐标x和y与其余未标记为已完成的垂直线段的顶部端点坐标x和y进行对比,如果某个垂直线段的顶部端点坐标x与y,同线段1的右侧端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该垂直线段就是所要检测的线段2,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则按照情况d的方式进行寻找。

d、将线段1的左侧坐标x和y与其余未标记为已完成的垂直线段的底部端点坐标x和y进行对比,如果某个垂直线段的底部端点坐标x与y,同线段1的左侧端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该垂直线段就是所要检测的线段2,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则跳过该线段1,返回步骤431)重新开始寻找,直至找到线段2或者遍历完所有的线段。

433)根据步骤432)的四种情况,继续寻找线段3。

a、将线段2的右侧端点坐标与其余所有未标记为已完成的垂直线段的顶部端点坐标进行比较,如果某个垂直线段的顶部端点坐标x与y,同线段2的右侧端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该垂直线段就是所要检测的线段3,本步骤结束,进入下一步骤;如果检测不到满足条件的垂直线段,则按照情况b的方式进行寻找。

b、将线段2的左侧端点坐标与其余所有未标记为已完成的垂直线段的底部端点坐标进行比较,如果某个垂直线段的底部端点坐标x与y,同线段2的左侧端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该垂直线段就是所要检测的线段3,本步骤结束,进入下一步骤;如果检测不到满足条件的垂直线段,则跳过该线段2,返回步骤431)重新开始寻找,直至找到线段3或者遍历完所有的线段。

c、将线段2的底部端点坐标与其余所有未标记为已完成的水平线段的右侧端点坐标进行比较,如果某个水平线段的右侧端点坐标x与y,同线段2的底部端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该水平线段就是所要检测的线段3,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则按照情况d的方式进行寻找。

d、将线段2的顶部端点坐标与其余所有未标记为已完成的水平线段的左侧端点坐标进行比较,如果某个水平线段的左侧端点坐标x与y,同线段2的顶部端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该水平线段就是所要检测的线段3,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则跳过该线段2,返回步骤431)重新开始寻找,直至找到线段3或者遍历完所有的线段。

434)根据步骤432)的四种情况,继续寻找线段4。

a、将线段3的底部端点坐标与其余所有未标记为已完成的水平线段的右侧端点坐标进行比较,如果某个水平线段的右侧端点坐标x与y,同线段3的底部端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该水平线段就是所要检测的线段4,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则按照情况b的方式进行寻找。

b、将线段3的顶部端点坐标与其余所有未标记为已完成的水平线段的左侧端点坐标进行比较,如果某个水平线段的左侧端点坐标x与y,同线段3的顶部端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该水平线段就是所要检测的线段4,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则跳过该线段3,返回步骤431)重新开始寻找,直至找到线段4或者遍历完所有的线段。

c、将线段3的左侧端点坐标与其余所有未标记为已完成的垂直线段的底部端点坐标进行比较,如果某个垂直线段的底部端点坐标x与y,同线段3的左侧端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该垂直线段就是所要检测的线段4,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则按照情况d的方式进行寻找。

d、将线段3的右侧端点坐标与其余所有未标记为已完成的垂直线段的顶部端点坐标进行比较,如果某个垂直线段的顶部端点坐标x与y,同线段3的右侧端点坐标x与y相比,x相差在2像素内,y相差2像素内,那么该垂直线段就是所要检测的线段4,本步骤结束,进入下一步骤;如果检测不到满足条件的水平线段,则跳过该线段3,返回步骤431)重新开始寻找,直至找到线段4或者遍历完所有的线段。

435)则将线段1到4标记为已完成,并使用knn算法识别该逻辑节点矩形内的标识符,标识符可以为a(遥测)、d(遥信)、+(相加)、-(相减)、*(相乘)、/(相除)、%(取余)、&(逻辑与)、|(逻辑或)、>(大于)、<(小于)、o(输出)等等,并给逻辑节点一个唯一的id编号。

44)识别信号名,具体过程为:

44a)将识别到的字符进行遍历,记录下所有的[字符。

44b)以每个[字符为起点,寻找y坐标与之相差2个像素内,x坐标大于该[字符的x坐标,且x坐标相差最小的那个字符,并且将找到的字符标记为已完成。

44c)继续下一个字符,寻找y坐标与[相差2个像素内,x坐标大于步骤44b)找到的字符的x坐标,且x坐标相差最小的那个字符,并且将找到的字符标记为已完成。直到找到了一个]字符,则该信号名查找结束。

44d)返回步骤44b),将所有的信号名都找到。

44e)计算每一个逻辑节点的矩形底边中点与每一个信号名顶部中点的距离,将距离最小的那对组合关联起来,这就是逻辑节点及其对应的信号名。

步骤5:识别连接线,并将连接线两端的逻辑节点信息记录保存下来。由于组成矩形的线段已经全部被标记为已完成,剩下的线段就都是连接线了,连接线的起点与终点都是只和一条线段相交的。识别过程如下:

51)从识别的线段中取出一条线段,如果该线段没有标记为已完成,则将该线段与其余线段进行相交检测。

52)当选择的线段的任意一个端点与另一个线段的任意一个端点的坐标相等时,为该选择线段的相交计数器加一。

53)循环遍历结束之后,如果该选择线段的计数器等于0或1,则将该线段标记为端线段,回到步骤51),将所有的端线段找到。

54)遍历相交计数器为0的端线段,创建一个连接线对象,检测每个端点和逻辑节点的相交情况,如果端点的坐标在逻辑节点的垂直线段上,就在连接线对象中保存该逻辑节点的信息(逻辑节点信号类型和逻辑节点名和逻辑节点id)。

55)遍历计数器为1的端线段,检测端点与其余线段的相交情况,如果找到了一个线段与端线段相交,就将该线段标记为已完成,并且将该线段的另一个端点与其余线段进行相交检测,直到找到一个端线段为止,这样,就构成了一条连接线,遍历后,将所有相连的线段都标记为已完成。

56)检测连接线的端点和逻辑节点的相交情况,如果端点的坐标在逻辑节点的垂直线段上,就在连接线对象中保存该逻辑节点的信息(逻辑节点信号类型和逻辑节点名和逻辑节点id)。连接线对象的左侧存放的为输入信号,右侧为输出信号。具体参见图4。

步骤6:遍历逻辑节点,找到输出逻辑节点,求出该输出逻辑节点的逻辑表达式。

具体为采用递归求解的方式,具体如下:

61)遍历逻辑节点,找到输出节点;

62)根据输出节点所在的连接线对象,找出与该输出节点对应的输入信号运算符逻辑节点;

63)对该运算符逻辑节点调用递归函数,并将该递归函数的返回表达式外部加一对括号,作为输出节点的表达式;

64)遍历所有的连接线对象,找出与该运算符逻辑节点对应的所有的输入信号逻辑节点,并对这些输入信号逻辑节点调用递归函数;如果逻辑节点为信号节点,如a或d,则转入步骤65);如果该节点为运算符逻辑节点,如+或*,则返回步骤64);

65)返回该逻辑节点的信号名,如yc70020;

66)将每个递归函数返回的表达式外部加一对括号,如(yc70012+yc70321+yc70003);

67)将这些带括号的表达式使用步骤63)的运算符相连,即该逻辑图所要表达的逻辑表达式。

以图5为例,求解逻辑表达式的过程如下:

a)遍历逻辑节点,如果某逻辑节点为输出节点,即信号标识符为o的节点,从连接线对象中找到输出信号标识符为o的节点,即图5中的o1节点;

b)根据输出节点所在的连接线对象,找到对应的输入信号所对应的节点,即图5中,l1的输入信号对应的逻辑节点&1,对该节点调用递归方法,并将该递归方法的返回表达式外部加一对括号,作为输出节点o的表达式;

c)遍历所有的连接线对象,找出与该运算符逻辑节点对应的所有的输入信号逻辑节点,并对这些输入信号逻辑节点调用递归函数;

d)将步骤c)中每个递归函数返回的表达式外部加一对括号,即图5中,&1相连的l2、l3和l4及对应的输入信号|1、&2和&3的表达式,(d1|d2)、(d3&d4)和(d5&d6),再将这些带括号的表达式使用该数学运算符相连,并作为该数学运算符节点的表达式返回,即使用运算符&相连((d1|d2)&(d3&d4)&(d5&d6)),作为输出节点的表达式。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1