一种可视化图形程序拓扑排序方法

文档序号:6401006阅读:408来源:国知局
专利名称:一种可视化图形程序拓扑排序方法
技术领域
本发明涉及可视化编程领域图形化程序的拓扑排序。
背景技术
首先介绍拓扑排序中的几个基本概念,可同时结合图1a和图1b所示:拓扑排序:由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。在代码生成中指根据符号的连接关系,决定符号的调用顺序。偏序:若集合X上的关系R是自反的、反对称的和传递的,则称R是集合X上的偏序关系。全序:设R是集合X上的偏序,如果对每个x,y G X必有xR y或者yRx,则称R是集合X上的全序关系。直观地看,偏序指集合中仅有部分成员之间可比较,而全序指集合中全体成员可比较。AOV-网:图中顶点表不程序符号块(活动),有向边(弧)表不先决条件,如符号a是b的先决条件,则图中有弧〈a, b>。这种用顶点表示活动,用弧表示活动间优先关系的有向图称为顶点表示活动的网(Activity On Vertex NetWork),简称AOV-网。在网中,若从顶点a到顶点b有一条有向路径,则a是b的前驱,b是a的后继。若<a,b>是网中一条弧,则a是b的直接前驱,b是a的直接后继。可视化编程是一种面向对象的图形化软件开发方法,为了实现应用功能,用各种的编程符号搭建程序模型和配置数据流,用原理图表示程序语言。图形化程序的符号执行顺序是代码生成的关键技术,已经公开的排序算法有:全部人工指定顺序、或者完全根据位置坐标来排序。人工指定顺序存在的问题是当可视化页面数量很多时,设置维护的工作量很大,例如在编程中间插入一个符号时,需要手工调整后续符号的排序值。按照位置坐标的方法,是把可视化页面X坐标划分成几个区间,在单个区间内按照从上到下的顺序输出,这种方法的问题是没有考虑到两个区间内符号的数据流依赖关系,而且同一个区间内只能画一排垂直符号,不能绘制平行符号,单页程序的符号数量有限,单个功能往往需要拆分为多个页面实现。在AOV网中,不应该出现有向环,这意味着某项活动应以自己为先决条件,而对程序的数据流图来说,则表明存在一个死循环。目前还缺乏针对可视化闭环图形程序的有效合理的智能解决方法,为此设计了一个破环符号,由程序编辑人员指定破环点。基于上述分析,本发明人针对现有图形程序的拓扑排序方法的不足之处进行深入研究,本案由此产生。

发明内容
本发明的目的,在于提供一种可视化图形程序拓扑排序方法,其可减少人工干预过程,解决闭环死锁依赖,以数据流依赖关系形成执行分支,提高程序运行效率。
为了达成上述目的,本发明的解决方案是:一种可视化图形程序拓扑排序方法,包括如下三部分:第一部分,先将符号按照先横向X坐标进行升序排列,X坐标相同的按纵向I坐标升序排列,即按照从上到下、从左到右的Z字型扫描顺序,形成初步顺序,按照坐标排序符合可视化页面程序的机器视觉;按照位置坐标进行初次排序,可以解决当两个符号都同时满足出栈条件时(0输入点或所有输入点都已知),那个符号优先自动出栈的问题。由于可视化图形程序的符号存储是按照先绘制先存储的原则,按照位置坐标的排序可以解决符号先绘制、后删除、再绘制时存储顺序变化导致排序结果不同的问题;第二部分,设计闭环图形网络中的破环符号BreakLoop,把与闭环符号输出点相连接的后继符号的输入点置为已知,可去除死锁依赖;针对存在反馈闭环的图形程序,设计了破环符号,该符号为单输入单输出,变量类型可设置,输出值等于上一个周期的输入点值,把与破环符号输出点相连接的后继符号的输入点自动置为已知状态,从而去除死锁依赖,所有的破环符号的代码执行放在最后,提供了一种简单直观的图形化设置破环的方法,提高了灵活性;第三部分,按照深度优先和数据流依赖关系进行拓扑排序,定义拓扑排序出栈的规则,当一个符号没有输入点或者所有输入点都处于已知状态时,该符号可以置为已知状态优先出栈,并置和该符号输出点相连接的后继符号的输入点已知;并且根据输入输出点相连接的数据流依赖关系,优先判断紧随该符号的后继符号状态是否已知,把有数据流依赖关系的符号按分支遍历排序,这样形成的运行代码效率高,提高了 CPU的扇入扇出命中率;根据输入输出相连接的数据流依赖关系,形成有向无环图,根据依赖关系形成符号的前驱后继分支,然后按照深度优先的遍历原则,形成符号的执行顺序。采用上述方案后,本发明先以位置视觉进行初步排序,然后针对闭环进行检测和破环处理,最后按照数据流依赖关系形成运行效率高的符号执行调用顺序,减少了人工设置的工作量,在多个特高压直流保护控制的可视化程序中进行了应用,取得较好的应用效果。


图1a是拓扑排序的偏序关系不意图;图1b是拓扑排序的全序关系不意图;图2是本发明的流程图;图3是破坏符号Breakloop的示意图;图4是存在闭环的排序前图形程序示意图;图5是排序后执行顺序不意图。
具体实施例方式以下将结合附图,对本发明的技术方案进行详细说明。如图2所示,本发明提供一种可视化图形程序拓扑排序方法,包括如下四个部分:第一部分,基于位置的初步排序过程,导入读取可视化页面文件,形成符号列表,记录符号的顶点坐标,包括输入块、常量块、输出块和功能块,其中,输入块和常量块是0输A I输出的图形符号,在排序中该符号已经满足状态已知的条件,可优先出栈。可视化页面的坐标起点设置为左上角,X坐标从左到右递增,y坐标从上到下递增,按照插入排序算法,先将符号按照X坐标进行升序排序,当符号的X坐标相同时,按照符号的I坐标升序排列,实现图形符号的按照从上到下、从左到右的快速初步排序,符合可视化图形程序的机器视觉和图形程序开发人员的主观意愿。第二部分,可视化页面程序的闭环检测和破坏处理。利用符号间输入输出点的连接线信息形成符号的前驱链表和后继链表,通过某符号的后续链表递归遍历,如果可回溯到源符号,则存在闭环,如图3所示,若闭环网络中没有BreakLoop符号,则提示报错,退出排序过程。如果存在BreakLoop符号,定义如下处理原则:I)和破环符号输出点相连接的后继符号的输入点自动置为已知状态,解除输入点和破环符号输出的逻辑依赖;2)从排序符号链表中删除破环符号,把破环符号的执行顺序放在最后;3)符号为单输入单输出,变量类型可设置,输出值等于上一个周期的输入点值,符合自动控制的反馈离散化计算原理。按照数据流依赖关系,形成符号的输入输出依赖链表。符号之间的输入输出通过连接线连接,连接线记录了连接起始符号的ID和起始输出点名字、连接终端符号的ID和终端输入点名字,每个符号有前驱链表和后继链表。前驱链表记录的是每个输入点的相连接的源输出符号,后继链表记录的是和输出点相连接的终端符号。链表记录符号指针索引,形成了基于数据流的拓扑图,可以通过后继链表,遍历数据流分支,可以通过前驱链表,回溯到源端顶点。如果某符号的输入点未连接,则该符号不可排序,退出排序过程。第三部分,基于数据流的二次排序处理,将破环处理后的符号列表形成AOV网,按照数据流依赖关系形成前驱链表和后继链表,如果符号的输入点未连接,则给出错误提示,退出排序过程。拓扑排序规则:1)在AOV图中以深度优先的法则选一个没有前驱的顶点并输出;2)从图中删除该顶点和所有以它为尾的弧。检测并处理闭环,将拓扑图转换为有向无环AOV网。通过符号的后继链表递归遍历,如果可回溯到源符号,则表明图形程序存在闭环,当存在闭环并且没有BreakLoop时,给出错误提示,退出排序过程。如果闭环存在BreakLoop时,贝U先把BreakLoop放到链表尾部,然后遍历BreakLoop的后继链表,把后继符号相连接的输入点直为已知,如图4所不,和BreakLoop.0ut相连接的OR.1n2、N0T.1n、MAX3.1nl、MAX2.1ni共4个输入点可置为状态已知。第四部分,依次遍历判断符号列表,一个符号能否执行计算功能即状态已知的判决条件:这个符号所有输入变量的来源(其它符号的输出)已经有计算结果,即所有输入变量已知或者没有输入变量(例如常量块)。当符号状态已知时,依次递归遍历每个输出点的后继,判断紧密相连的后继符号是否状态已知,如果状态已知,继续遍历后继,如果状态未知,则返回遍历前驱符号。按照上述原则循环遍历,直至所有符号的执行顺序都设置。按照深度优先遍历顺序,判断符号的输入点状态,将满足条件的符号放到可执行顺序链表中。如果符号没有输入点或者所有输入点都已知,则该符号状态置为已知,优先出栈。如图5所示,符号的执行顺序如下:OR、NOT、MAX3、MAX2、ABS、BreakLoop。以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
权利要求
1.一种可视化图形程序拓扑排序方法,其特征在于包括如下三部分: 第一部分,先将符号按照先横向X坐标进行升序排列,X坐标相同的按纵向I坐标升序排列,形成初步顺序; 第二部分,设计闭环图形网络中的破环符号BreakLoop,把与闭环符号输出点相连接的后继符号的输入点置为已知; 第三部分,按照深度优先和数据流依赖关系进行拓扑排序,定义拓扑排序出栈的规则,当一个符号没有输入点或者所有输入点都处于已知状态时,该符号置为已知状态优先出栈,并置和该符号输出点相连接的后继符号的输入点已知;并且根据输入输出点相连接的数据流依赖关系,优先判断紧随该符号的后继符号状态是否已知,把有数据流依赖关系的符号按分支遍历排序。
2.如权利要求1所述的一种可视化图形程序拓扑排序方法,其特征在于:所述第三部分中,根据输入输出相连接的数据流依赖关系,形成有向无环图,根据依赖关系形成符号的前驱后继分支,然后按照深度优先的遍历原则,形成符号的执行顺序。
全文摘要
本发明公开一种可视化图形程序拓扑排序方法,先将符号按照先横向x坐标进行升序排列,x坐标相同的按纵向y坐标升序排列,形成初步顺序;设计闭环图形网络中的破环符号,把与闭环符号输出点相连接的后继符号的输入点置为已知;按照深度优先和数据流依赖关系进行拓扑排序,定义拓扑排序出栈的规则;并且根据输入输出点相连接的数据流依赖关系,优先判断紧随该符号的后继符号状态是否已知,把有数据流依赖关系的符号按分支遍历排序。此方法可减少人工干预过程,解决闭环死锁依赖,以数据流依赖关系形成执行分支,提高程序运行效率。
文档编号G06F17/30GK103207903SQ20131010132
公开日2013年7月17日 申请日期2013年3月26日 优先权日2013年3月26日
发明者冯亚东, 陈宏君, 刘克金, 曹冬明, 王国栋, 周强, 邱大为 申请人:南京南瑞继保电气有限公司, 南京南瑞继保工程技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1