首页> 中国专利> 一种图形语言程序的有序分解方法及有序分解器

一种图形语言程序的有序分解方法及有序分解器

摘要

本发明提供了一种图形语言程序的有序分解方法及有序分解器;所述方法包括:对各网络分别进行下述步骤:检查该网络中每个块,设置起点块和终点块;对该网络中各终点块,分别进行下述处理:将该终点块作为当前块,建立当前子图,然后执行下述处理,直到该终点块处理完成;依次检查当前块的各输入连接块,如果一个输入连接块既不是起点块也不是终点块,则将该输入连接块设置为当前块;如果当前块的输入连接块都已处理完成,则设置当前块属于当前子图;判断当前块是否为终点块,如果不是终点块,则将该当前块设置为处理完成,然后将其输出连接块作为当前块;如果是终点块,则该终点块处理完成。本发明能够提高图形类语言的编译效率和准确性。

著录项

  • 公开/公告号CN102508691A

    专利类型发明专利

  • 公开/公告日2012-06-20

    原文格式PDF

  • 申请/专利权人 北京和利时系统工程有限公司;

    申请/专利号CN201110394931.0

  • 发明设计人 刘立忠;施波;刘小树;

    申请日2011-12-02

  • 分类号G06F9/45(20060101);

  • 代理机构11262 北京安信方达知识产权代理有限公司;

  • 代理人栗若木;王漪

  • 地址 100096 北京市海淀区西三旗建材城中路10号

  • 入库时间 2023-12-18 05:34:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-12-18

    授权

    授权

  • 2012-07-18

    实质审查的生效 IPC(主分类):G06F9/45 申请日:20111202

    实质审查的生效

  • 2012-06-20

    公开

    公开

说明书

技术领域

本发明涉及工业控制领域,尤其涉及一种图形语言程序的有序分解方法及有序分解器。

背景技术

在工业控制领域中,典型的可编程控制系统(如PLC或DCS)都支持工程师通过逻辑编程或组态对被控对象进行控制;典型的可编程控制系统的结构如图1所示,包括上位机(也称工程师站)和下位机(也称控制站)部分,控制站通过IO模块和工业仪表相连,工程师可以在工程师站采用IEC组态软件进行逻辑编程,这些程序一般就是对被控对象的控制算法。可以应用此类可编程控制系统的工业现场以及被控对象数量和种类繁多,此处不一一列举。

一般来说,此类可编程控制系统的工程师站或上位机,都应包含一个支持用户进行逻辑编程和编译的系统,这个编译系统一般称之为组态软件或IEC编程器,本文中简称为“编程器”,而工程师可以用来进行逻辑编程的语言包括很多种:ST,C,LD,FBD,CFC,SFC,IL,因果表……等等。例如IEC61131标准列举了一些组态语言规范,如IL,ST,LD,FBD,SFC等。不同于一般的软件行业,这些编程语言既有文本语言(ST,C,IL等等),也有图形语言(LD,FBD,CFC,SFC等等)。在图形语言中,按照各个图形元素的顺序关系特点,又可分为:

(一)计算顺序明确的图形语言(如LD,SFC等);

(二)可能有多种计算顺序的图形类语言(如FBD,CFC)。

对于第二种图形类语言,图形结构可能会很复杂,给编译和其他处理带来难度,需要以编译为目标进行结构分析。另一方面,由于顺序不明确,一般需要人为指定顺序或自动排序与人为指定相结合,那么编译的结果就会不确定;而且由于图形类语言一般较大,编译时复杂度较高,花费时间较长,编译效率会比较低。

发明内容

本发明要解决的技术问题是如何提高图形类语言的编译效率和准确性。

为了解决上述问题,本发明提供了一种图形语言程序的有序分解方法,包括:

对各网络分别进行下述步骤:

S1、检查该网络中每个块,如果一个块的输入引脚没有连接其它块或没有输入引脚,则将该块设置为起点块;如果一个块符合下述条件之一,则将该块设置为终点块:输出引脚没有连接其它块或没有输出引脚;某个输出引脚连接的块的个数大于1;输出引脚的个数大于1;连接在输出引脚个数大于1的块的输入引脚上;

S2、对于该网络中的每个终点块,分别进行下述处理:将该终点块作为当前块,建立当前子图,然后执行步骤S21~S23,直到该终点块处理完成;

S21、依次检查当前块的各输入连接块,如果一个输入连接块既不是起点块也不是终点块,则进行步骤S22;如果一个输入连接块是终点块,则设置该输入连接块处理完成;如果一个输入连接块是起点块,则将该输入连接块设置为属于当前子图,并且设置该输入连接块处理完成;如果当前块的输入连接块都已处理完成,则进行步骤S23;

S22、将该输入连接块设置为当前块,返回步骤S21;

S23、设置当前块属于当前子图;判断当前块是否为终点块,如果不是终点块,则将该当前块设置为处理完成,然后将其输出连接块作为当前块,返回步骤S21;如果是终点块,则该终点块处理完成。

进一步地,所述步骤S1前还包括步骤:

S0、检查该网络是否满足以下条件,如果满足则进行步骤S1,否则不对该网络进行后续处理:

该网络内的任意两个块直接或间接被线连接到一起;

该网络内不存在环;

各线的两端为块;

块的每个输入引脚的连线条数小于或等于1;

各输出块在几何位置上可以区别。

进一步地,所述的方法还包括:

对各网络分别进行步骤S3:

S3、设置计数器的初始值;对于该网络中的每个输出块,按照预定顺序依次分别进行下述处理:将该输出块作为当前块,然后进行步骤S31~ S33,直到该输出块处理完成:

S31、检查当前块是否存在未获得顺序号的输入连接块,如果存在,则将当前块标记为“遍历中”,然后进入步骤S32;如果不存在则进行步骤S33;

S32、依次将该当前块的一个没有获得顺序号的输入连接块作为当前块,返回步骤S31;

S33、将计数器当前的值作为顺序号分配给当前块,将计数器的值加1,如果当前块有“遍历中”的标记则取消;判断当前块是否为输出块,如果当前块不是输出块,则将当前块的标记为“遍历中”的输出连接块作为当前块,返回步骤S31;如果是输出块,则该输出块处理完成。

进一步地,所述预定顺序是根据默认的或由用户设定的输出块的排序或排序模式得到的各输出块的顺序。

进一步地,所述的方法还包括:步骤S4;

对任一网络,当进行完步骤S1、S2和S3后进行步骤S4:

S4、将该网络中步骤S2分解得到的各子图按照其包含的终点块的顺序号从小到大进行排序,得到各子图的处理顺序。

本发明还提供了一种图形语言程序的有序分解器,其特征在于,包括:

主任务模块、起点终点模块、主分解模块及简单图查找模块;

所述主任务模块用于对各网络分别调用所述起点终点模块;

所述起点终点模块用于检查该网络中每个块,如果一个块的输入引脚没有连接其它块或没有输入引脚,则将该块设置为起点块;如果一个块符合下述条件之一,则将该块设置为终点块:输出引脚没有连接其它块或没有输出引脚;某个输出引脚连接的块的个数大于1;输出引脚的个数大于1;连接在输出引脚个数大于1的块的输入引脚上;设置完毕后,调用所述主分解模块对该网络进行处理;

所述主分解模块用于对该网络中的每个终点块分别进行下述处理:将该终点块作为当前块,建立当前子图,调用所述简单图查找模块处理当前块,直到该终点块处理完成;

所述简单图查找模块用于依次检查当前块的各输入连接块,如果一个输入连接块既不是起点块也不是终点块,则将该输入连接块设置为当前块,再调用所述简单图查找模块;如果一个输入连接块是终点块,则设置该输入连接块处理完成;如果一个输入连接块是起点块,则将该输入连接块设置为属于当前子图,并且设置该输入连接块处理完成;如果当前块的输入连接块都已处理完成,则设置当前块属于当前子图,并判断当前块是否为终点块;如果不是终点块,则将该当前块设置为处理完成,然后将其输出连接块作为当前块,调用所述简单图查找模块,如果是终点块则该终点块处理完成。

进一步地,所述的有序分解器还包括:

检查模块;

所述主任务模块用于在对一个网络调用所述起点终点模块前,先调用所述检查模块;

所述检查模块用于检查该网络是否满足以下条件,如果满足则调用所述起点终点模块,否则不对该网络进行后续处理:

该网络内的任意两个块直接或间接被线连接到一起;

该网络内不存在环;

各线的两端为块;

块的每个输入引脚的连线条数小于或等于1;

各输出块在几何位置上可以区别。

进一步地,所述的有序分解器还包括:

主排序模块及单轮排序模块;

所述主任务模块还用于对各网络分别调用所述主排序模块;

所述主排序模块用于设置计数器的初始值,对该网络中的每个输出块,按照预定顺序依次进行下述处理:将该输出块作为当前块,调用所述单轮排序模块;

所述单轮排序模块用于检查当前块是否存在未获得顺序号的输入连接块,如果存在,则将当前块标记为“遍历中”,然后依次将该当前块的一个没有获得顺序号的输入连接块作为当前块,调用所述单轮排序模块;如果不存在则将计数器当前的值作为顺序号分配给当前块,将计数器的值加1,如果当前块有“遍历中”的标记则取消,并判断当前块是否为输出块;如果不是输出块则将当前块的标记为“遍历中”的输出连接块作为当前块,调用所述单轮排序模块,如果是输出块则该输出块处理完成。

进一步地,所述的有序分解器还包括:

输出得值排序模块,用于按照默认的或由用户设定的输出块的排序或排序模式,得到所述主排序模块处理各输出块的顺序。

进一步地,所述的有序分解器还包括:

子图排序模块;

所述主任务模块用于当对一个网络调用的主分解模块和主排序模块都处理完后,调用所述子图排序模块;

所述子图排序模块用于将该网络中所述主分解模块分解得到的各子图按照其包含的终点块的顺序号从小到大进行排序,得到各子图的处理顺序。

本发明的技术方案对有多种计算顺序且结构复杂的图形类语言程序或类似的图形结构进行预处理,将其分解成多个图形,不仅保证分解出的各个图均为最简图,且能保证分解得到的最简图的个数最少,并在此基础之上,对这些最简图进行排序。这样可以很容易的解析每个网络的图形结构,进而对复杂的图形程序进行化简、编译或其他处理,能大大提高编译的效率和准确性;本发明所提出的最简图的概念,是满足以下条件的图:(1)图中任意块的任意输出引脚的连线个数小于或等于1;(2)图中没有输出引脚个数大于1的块,或该图仅由一个输出引脚个数大于1的块构成。

本发明的优化方案以网络为单位,对各个块的先后被计算顺序进行排序,进一步对分解出的各最简图进行排序,这样编译时可以不用人工指定编译顺序,并且编译顺序是唯一的。

本发明的又一优化方案在分解前先对图形语言程序的合法性进行检验,从而进一步加强了后续处理的可靠性。上述最简图还需要满足本发明所提出的合法性要求(详见具体实施方式中的步骤S0)。

附图说明

图1是典型的可编程控制系统结构示意图;

图2是图形语言POU程序部分的一个网络的示意图;

图3是实施例一的图形语言程序的有序分解方法的流程示意图;

图4是实施例一的例子中网络的原始图;

图5是图4分解完成后的示意图;

图6是实施例一中步骤S31~33的流程示意图;

图7是图4排序完成后的示意图;

图8是图4分解完成并排序后的示意图;

图9是实施例二的图形语言程序的有序分解器的示意框图。

具体实施方式

下面将结合附图及实施例对本发明的技术方案进行更详细的说明。

需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

为便于论述,本文几个缩略语如下:

编程器:如无特别说明,下文中提到的“编程器”指可以支持上述第二类图形语言编辑和编译的组态软件。

图形语言:如无特别说明,下文中提到的“图形语言”指上述第二类图形语言,即可能有多种计算顺序的图形类语言,典型如FBD,CFC等。

POU:图形语言程序的组织单位,详细定义参见IEC61131国际标准。

网络:本文中提到的“网络”一般是指图形语言POU程序部分的组成部分,一个POU的程序部分一般由一个或多个网络组成,每个网络的内容由图形元素互相连接而成;比如图2就是FBD语言程序中一个网络的示意图。

块:图形语言程序中的图形元素称之为块,块有具体的含义(如+、-、*、/、函数调用、跳转等等)和若干个输入、输出引脚,比如图2中的AND、OR、and1、or1、or2、A_V、A_Q、B_V、B_Q 、C_V、C_Q 、result_V、result_Q、result_Diag及DI3CH。

一个块的输入引脚:默认为该块左侧的引脚。

一个块的输出引脚:默认为该块右侧的引脚。

一个块的输入连接块:为该块输入引脚所连接的块;比如图2中AND的输入块就是and1和OR。

一个块的输出连接块:为该块输出引脚所连接的块;比如图2中AND的输出块就是DI3CH。

线:块与块之间的连接部分,比如图2中AND和OR之间的连线、A_V和DI3CH之间的连线等;线的一端连接块的输出引脚,另一端连接另一块的输入引脚;由于流向是从一个块的输出引脚到另一个块的输入引脚,因此也可以没有箭头。

实施例一,一种图形语言程序的有序分解方法,包括:

对各网络分别进行如图3所示的下述步骤:

S1、检查该网络中每个块,如果一个块的输入引脚没有连接其它块(即没有输入连接块)或没有输入引脚(为方便叙述,后文中称这种块为输入块),则将该块设置为起点块;如果一个块符合下述条件之一,则将该块设置为终点块:

输出引脚没有连接其它块(即没有输出连接块)或没有输出引脚(为方便叙述,后文中称这种块为输出块);

某个输出引脚连接的块的个数大于1(为方便叙述,后文中称这种块为多输出块);

输出引脚的个数大于1(为方便叙述,后文中称这种块为功能块);

连接在输出引脚个数大于1的块的输入引脚上(为方便叙述,后文中称这种块为功能输入块,即功能块的输入引脚连接的块);

也就是说,本实施例中起点块就是输入块;输出块,多输出块,功能块或功能输入块均为终点块;输入引脚、输出引脚都没有被线连接的块既是输入块也是输出块,因此终点块可能仅是终点块,也可能既是终点块又是起点块;起点块亦如此;多输出块一定不是输出块;功能输入块可能是输入块,也可能不是输入块;同样,功能输入块可能是多输出块,也可能不是多输出块;类似的推论只要不违背上述的定义均成立。另外,为了方便叙述,本文中将至少有一个输入引脚和一个输出引脚被线连接的块称为中间块。

S2、对于该网络中的每个终点块分别进行下述处理,从而可将该网络中的所有块和线分解为子图:将该终点块作为当前块,建立当前子图,然后进行步骤S21~S23,直到该终点块处理完成;

S21、依次检查当前块的各输入连接块,如果一个输入连接块既不是起点块也不是终点块,则进行步骤S22;如果一个输入连接块是终点块,则设置该输入连接块处理完成;如果一个输入连接块是起点块,则将该输入连接块设置为属于当前子图,并且设置该输入连接块处理完成;如果当前块的输入连接块都已处理完成,则进行步骤S23;

S22、将该输入连接块设置为当前块,返回步骤S21;

S23、设置当前块属于当前子图;判断当前块是否为终点块,如果不是终点块,则将该当前块设置为处理完成,然后将其输出连接块作为当前块,返回步骤S21;如果是终点块,则该终点块处理完成。

本实施例中,由于有多个输出引脚的块(即本文所称的功能块),或一个输出引脚连接多个块的块(即本文所称的多输出块)都为终点块,因此步骤S23中如果当前块不是终点块,则必然只有一个输出连接块。

可以看出,上述步骤是依次从每个终点块开始获取一个完整的子图,一个终点块处理完成后,将会找到该终点块所属子图的所有块;本实施例中所指的子图是一个复杂图内多个块和这些块之间的连线构成的图,即子图是一个复杂图的部分或全部;本实施例中所指的复杂图是一个网络内所有块和连线构成的图形。

本实施例中,有多少个终点块,原网络的图就会被分解为多少个子图,而且每个子图都是最简图;各最简图有且只有一个终点块,该终点块是该最简图的唯一的输出块,因此本实施例中可以用终点块代表它所属的最简图。本实施例中所指的最简图是一种子图,其中任意块的任意输出引脚的连线个数小于或等于1,且功能块个数小于或等于1,且当功能块个数为1时子图必然仅包含该功能块。

本实施例的有序分解方法是一种最简分解,本实施例中所谓的最简分解是指复杂图P的一个一般分解,满足每个子图都是最简图,且子图数量最小。本实施例中所谓的一般分解是指能得到满足下述情况的子图的分解:集合{P(i) | i=0,…k; P(i)是一个复杂图P的一个子图; 任取复杂图P中的一个块x,存在一个i, 满足块x在P(i)中,且任取j不等于i,块x不在P(j)中}。

下面以对一个网络的处理为例具体说明本实施例;该例子中的网络的原始图如图4所示,包括块A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P。其中,块C除了具有连接块B的输入引脚、和连接块D的输出引脚以外,还具有两个悬空(即未连接其它块)的输入引脚和一个悬空的输出引脚,块M除了连接块L的输入引脚、和连接块N的输出引脚以外,还具有悬空的输入引脚和悬空的输出引脚各一个。其它块没有悬空的输入/输出引脚。

在步骤S1中,确定该网络中终点块包括:块B、C、D、E、F、K、L、M和O;起点块包括:块A、F、L、P。

步骤S2中,由于一共有9个终点块,因此一共要进行9次步骤S21~S23,将图4所示的复杂图分成9个子图,如图5所示,其中不同子图用不同的填充图案表示;当然,对于有的终点块,由于不满足执行条件,因此未必会执行全S21、S22和S23。

各终点块的执行顺序不限,下面分别列举几个典型的情况进行说明。

将块B作为当前块,建立当前子图B(本文中以终点块来代表子图,因此采用一样的标记),对于块B执行步骤S21~S23:

S21、检查块B的输入连接块,只有块A;由于块A是起点块,因此将块A设置为属于当前子图B,并设置块A处理完成;此时,块B的输入连接块都已处理完成,进行步骤S23;

S23、设置块B属于当前子图B;块B是终点块,该终点块处理完成。

得到包含块A和B的子图B,图5中填充图案为横竖线网格的块属于子图B。

将块D作为当前块,建立当前子图D,对于块D执行步骤S21~S23:

S21、检查块D的输入连接块,只有块C;由于块C是终点块,因此设置块C处理完成;此时,块D的输入连接块都已处理完成,进行步骤S23;

S23、设置块D属于当前子图D;块D是终点块,该终点块处理完成。

得到仅包含块D的子图D,图5中填充图案为嵌套矩形的块属于子图D。

对于终点块C、F、K、L和M均可类似处理,分别得到只包含一个块的子图C、F、K、L和M,分别为图5中填充图案为嵌套椭圆、右高左低斜线、斜线网格、左高右低斜线、竖线的块。

将块E作为当前块,建立当前子图E,对于块E执行步骤S21~S23:

S21、检查块E的输入连接块,只有块J;由于块J既不是起点块也不是终点块,因此执行步骤S22。

S22、将块J设置为当前块,返回步骤S21。

S21、检查块J的输入连接块,只有块I;由于块I既不是起点块也不是终点块,因此执行步骤S22。

S22、将块I设置为当前块,返回步骤S21。

S21、检查块I的输入连接块,包括块K和块H,按序将先检查块H,由于块H既不是起点块也不是终点块,因此执行步骤S22。

S22、将块H设置为当前块,返回步骤S21。

S21、检查块H的输入连接块,只有块G;由于块G既不是起点块也不是终点块,因此执行步骤S22。

S22、将块G设置为当前块,返回步骤S21。

S21、检查块G的输入连接块,只有块F;由于块F是终点块,因此设置块F处理完成;此时,块G的输入连接块都已处理完成,进行步骤S23。

S23、设置块G属于当前子图E;块G不是终点块,将其设置为处理完成,并将其输出连接块H设置为当前块,返回步骤S21。

S21、检查块H的输入连接块,都已处理完成,进行步骤S23。

S23、设置块H属于当前子图E;块H不是终点块,将其设置为处理完成,并将其输出连接块I设置为当前块,返回步骤S21。

S21、检查块I的输入连接块,此时应检查块K,块K是终点块,设置为处理完成,至此块I的输入连接块都已处理完成,进行步骤S23。

S23、设置块I属于当前子图E;块I不是终点块,将其设置为处理完成,并将其输出连接块J设置为当前块,返回步骤S21。

S21、检查块J的输入连接块,都已处理完成,进行步骤S23。

S23、设置块J属于当前子图E;块J不是终点块,将其设置为处理完成,并将其输出连接块E设置为当前块,返回步骤S21。

S21、检查块E的输入连接块,都已处理完成,进行步骤S23。

S23、设置块E属于当前子图E;块E是终点块,对该终点块处理完成。

得到包含块E、J、I、H和G的子图E,图5中填充图案为空白的块属于子图E。

对于终点块O可类似处理,得到包含块O、N和P的子图O,图5中填充图案为横线的块属于子图O。

可见,图4所示的复杂图被分解成了9个最简图,如图5所示。

本实施例中,所述步骤S1前还可以包括步骤:

S0、检查该网络是否满足以下条件,如果满足则进行步骤S1,否则不对该网络进行后续处理:

该网络内的任意两个块直接或间接(即:通过了该网络中其它块)被线连接到一起(即:不存在不和网络中其它块连接的单独的块);

该网络内不存在环(所谓环是指存在一个块和一些线,从该块出发,沿着这些线,能回到这个块);

各线的两端为块;

块的每个输入引脚的连线条数小于或等于1;

各输出块在几何位置上可以区别(即:各输出块的指定点(如左上角定点)位置不重合)。

本实施例中,将上述条件称为合法性要求;不仅本实施例中涉及的复杂图应该满足合法性要求,按照本实施例所分解得到的最简图也都将满足合法性要求。

本实施例中,对各网络还可以分别进行步骤S3:

S3、设置计数器的初始值;对于该网络中的每个输出块,按照预定顺序依次进行下述处理,从而为该网络中的所有块分配顺序号:将该输出块作为当前块,然后执行如图6所示的步骤S31~ S33,直到该输出块处理完成;

S31、检查当前块是否存在未获得顺序号的输入连接块,如果存在,则将当前块标记为“遍历中”,然后进入步骤S32;如果不存在则进行步骤S33;

S32、依次将该当前块的一个没有获得顺序号的输入连接块作为当前块,返回步骤S31;

S33、将计数器当前的值作为顺序号分配给当前块,将计数器的值加1,如果当前块有“遍历中”的标记则取消;判断当前块是否为输出块,如果当前块不是输出块,则将当前块的标记为“遍历中”的输出连接块作为当前块,返回步骤S31;如果是输出块,则该输出块处理完成。

本实施例中,所述计数器的初始值可以但不限于为0;该计数器的实现方式有很多,例如,可以设置一个全局变量或静态变量作为计数器。

本实施例中,当步骤S32中的当前块存在多个没获得顺序号的输入连接块时,可以但不限于按照输入引脚从上到下的顺序将未获得顺序号的输入连接块作为当前块;本实施例中步骤S32和步骤S22的“依次”指的都是按照输入引脚从上到下的顺序,当然实际应用时也可采用其它顺序。此步骤中,采用不同的顺序对各输出块进行步骤S31~S33会影响最终的所有块的顺序结果。因此整个使用过程中,应该按照选定的一种方式进行,从大部分应用要求来看,从上到下应是最普通、最常用的选择。

可以看出,在一个网络中,有多少个输出块,排序过程就有多少轮。经过上述步骤S3后,网络中所有的块都获得了顺序号。

本实施例中,所述预定顺序可以是根据默认的或由用户设定的输出块的排序或排序模式得到的各输出块的顺序;比如排序模式可以设定为以下8种模式之一:

模式a:先上后下,先左后右(也可称为从上到下,从左到右;后几种模式也一样);即:先以位置在上的输出块作为当前块,执行步骤S31~S33,再以位置在下的输出块作为当前块执行;对于上下位置相同的输出块,先以位置在左的输出块作为当前块,执行步骤S31~S33,再以位置在右的输出块作为当前块执行;后几种模式以此类推;

模式b:先上后下,先右后左;

模式c:先下后上,先左后右;

模式d:先下后上,先右后左;

模式e:先左后右,先上后下;

模式f:先左后右,先下后上; 

模式g:先右后左,先上后下;

模式h:先右后左,先下后上;

由于各个输出块的几何位置均不相同,因此按照设定或默认的模式,所有的输出块的执行顺序是显然且唯一的。

下面以图4所示的复杂图为例,说明一个网络中如何进行步骤S3。

图4中的输出块包括块E、D、O三个,假设按照模式a,则处理顺序为块E、D、O,图7中的“一”、“二”、“三”表示了这种处理顺序。当然,对于有的输出块,由于不满足执行条件,因此未必会执行全S31、S32和S33。

设置计数器为0,然后先将块E作为当前块,执行步骤S31~S33:

S31、检查块E的所有输入连接块,块J没有获得顺序号,则将块E标记为遍历中,然后进入步骤S32。

S32、将块J作为当前块,返回步骤S31。

S31、检查块J的所有输入连接块,块I没有获得顺序号,则将块J标记为遍历中,然后进入步骤S32。

S32、将块I作为当前块,返回步骤S31。

S31、检查块I的所有输入连接块,块H和块K都没有获得顺序号,则将块I标记为遍历中,然后进入步骤S32。

S32、将块H作为当前块,返回步骤S31。

S31、检查块H的所有输入连接块,块G没有获得顺序号,则将块H标记为遍历中,然后进入步骤S32。

S32、将块G作为当前块,返回步骤S31。

S31、检查块G的所有输入连接块,块F没有获得顺序号,则将块G标记为遍历中,然后进入步骤S32。

S32、将块F作为当前块,返回步骤S31。

S31、块F没有输入连接块,因此块F不存在未获得顺序号的输入连接块,进入步骤S33。

S33、将计数器当前的值0作为顺序号分配给块F,将计数器的值加1;块F不是输出块,其输出连接块包括块B、G、K,但其中只有块G标记为遍历中,因此将块G作为当前块,返回步骤S31。

S31、此时,块G不存在未获得顺序号的输入连接块,进入步骤S33。

S33、将计数器当前的值1作为顺序号分配给块G,将计数器的值加1,取消块G的遍历中标记;块G不是输出块,其输出连接块包括块H,且标记为遍历中,因此将块H作为当前块,返回步骤S31。

S31、此时,块H不存在未获得顺序号的输入连接块,进入步骤S33。

S33、将计数器当前的值2作为顺序号分配给块H,将计数器的值加1,取消块H的遍历中标记;块H不是输出块,其输出连接块包括块I,且标记为遍历中,因此将块I作为当前块,返回步骤S31。

S31、块I还存在未获得顺序号的输入连接块K,因此进入步骤S32。

S32、将块K作为当前块,返回步骤S31。

S31、块K的输入连接块F已经获得顺序号,因此块K不存在未获得顺序号的输入连接块,因此进入步骤S33。

S33、将计数器当前的值3作为顺序号分配给块K,将计数器的值加1;块K不是输出块,其输出连接块包括块I和N,但只有块I标记为遍历中,因此将块I作为当前块,返回步骤S31。

S31、此时,块I不存在未获得顺序号的输入连接块,进入步骤S33。

S33、将计数器当前的值4作为顺序号分配给块I,将计数器的值加1,取消块I的遍历中标记;块I不是输出块,其输出连接块只有块J,且标记为遍历中,因此将块J作为当前块,返回步骤S31。

S31、此时,块J不存在未获得顺序号的输入连接块,进入步骤S33。

S33、将计数器当前的值5作为顺序号分配给块J,将计数器的值加1,取消块J的遍历中标记;块J不是输出块,其输出连接块只有块E,且标记为遍历中,因此将块E作为当前块,返回步骤S31。

S31、此时,块E不存在未获得顺序号的输入连接块,进入步骤S33。

S33、将计数器当前的值6作为顺序号分配给块E,将计数器的值加1,取消块E的遍历中标记;块E是输出块,对块E的处理完成。

对于输出块D和O的处理流程可以类推,这里不再赘述;需要注意的就是,在对一个网络的处理中,计数器的值是不清零的,也就是说当接下来对输出块D执行时,第一次分配顺序号时的值是7。排序后的图如图7所示。

本实施例中,对于一个复杂图,无论先进行步骤S3,后进行步骤S1和S2,还是先进行步骤S1和S2,再进行步骤S3,都可以获得对该复杂图的同一种充分分析。另外为了结果的正确和可靠,无论S3与S1+S2哪个先进行,都应先进行步骤S0。

本实施例中,所述方法还可以包括步骤S4;

对任一网络,当进行完步骤S1、S2和S3后进行所述步骤S4。

S4、将该网络中步骤S2分解得到的各子图按照其包含的终点块的顺序号从小到大进行排序,得到各子图的处理顺序。

比如图4所示的复杂图,当分解后得到如图5所示的9个子图B、C、D、E、F、K、L、M和O,排序后各块得到如图7所示的顺序号,其中块B、C、D、E、F、K、L、M和O的顺序号分别是:8、9、10、6、0、3、11、12、15;那么,步骤S4中排出的子图的处理顺序如下:子图F、子图K、子图E、子图B、子图C、子图D、子图L、子图M、子图O,如图8所示。

步骤S4中所得到的处理顺序对将来可能的编译或其他处理都提供了很可靠,方便的支持。

实施例二,一种图形语言程序的有序分解器,如图9所示,包括:

主任务模块、起点终点模块、主分解模块及简单图查找模块;

所述主任务模块用于对各网络分别调用所述起点终点模块;

所述起点终点模块用于检查该网络中每个块,如果一个块为输入块,则将该块设置为起点块;如果一个块为输出块、多输出块、功能块或功能输入块中的至少一种,则将该块设置为终点块;设置完毕后,调用所述主分解模块对该网络进行处理;

所述主分解模块用于对该网络中的每个终点块分别进行下述处理:将该终点块作为当前块,建立当前子图,调用所述简单图查找模块处理当前块,直到该终点块处理完成;

所述简单图查找模块用于依次检查当前块的各输入连接块,如果一个输入连接块既不是起点块也不是终点块,则将该输入连接块设置为当前块,再调用所述简单图查找模块;如果一个输入连接块是终点块,则设置该输入连接块处理完成;如果一个输入连接块是起点块,则将该输入连接块设置为属于当前子图,并且设置该输入连接块处理完成;如果当前块的输入连接块都已处理完成,则设置当前块属于当前子图,并判断当前块是否为终点块;如果不是终点块,则将该当前块设置为处理完成,然后将其输出连接块作为当前块,调用所述简单图查找模块,如果是终点块则该终点块处理完成。

本实施例中,有多少个终点块,原网络的图就会被分解为多少个子图,而且每个子图都是最简图;各最简图有且只有一个终点块,该终点块是该最简图的唯一的输出块,因此本实施例中可以用终点块代表它所属的最简图。本实施例中所指的最简图是一种子图,其中任意块的任意输出引脚的连线个数小于或等于1,且功能块个数小于或等于1,且当功能块个数为1时子图必然仅包含该功能块。

本实施例的有序分解方法是一种最简分解,本实施例中所谓的最简分解是指复杂图P的一个一般分解,满足每个子图都是最简图,且子图数量最小。本实施例中所谓的一般分解是指能得到满足下述情况的子图的分解:集合{P(i) | i=0,…k; P(i)是一个复杂图P的一个子图; 任取复杂图P中的一个块x,存在一个i, 满足块x在P(i)中,且任取j不等于i,块x不在P(j)中}。

本实施例中,所述有序分解器还可以包括:

检查模块;

所述主任务模块用于在对一个网络调用所述起点终点模块前,可以先调用所述检查模块;

所述检查模块用于检查该网络是否满足以下条件,如果满足则调用所述起点终点模块,否则不对该网络进行后续处理:

该网络内的任意两个块直接或间接(即:通过了该网络中其它块)被线连接到一起(即:不存在不和网络中其它块连接的单独的块);

该网络内不存在环(所谓环是指存在一个块和一些线,从该块出发,沿着这些线,能回到这个块);

各线的两端为块;

块的每个输入引脚的连线条数小于或等于1;

各输出块在几何位置上可以区别(即:各输出块的指定点(如左上角定点)位置不重合)。

本实施例中,将上述条件称为合法性要求;不仅本实施例中涉及的复杂图应该满足合法性要求,按照本实施例所分解得到的最简图也都将满足合法性要求。

本实施例中,所述有序分解器还可以包括:

主排序模块及单轮排序模块;

所述主任务模块还用于对各网络分别调用所述主排序模块;

所述主排序模块用于设置计数器的初始值,对该网络中的每个输出块,按照预定顺序依次进行下述处理:将该输出块作为当前块,调用所述单轮排序模块;

所述单轮排序模块用于检查当前块是否存在未获得顺序号的输入连接块,如果存在,则将当前块标记为“遍历中”,然后依次将该当前块的一个没有获得顺序号的输入连接块作为当前块,调用所述单轮排序模块;如果不存在则将计数器当前的值作为顺序号分配给当前块,将计数器的值加1,如果当前块有“遍历中”的标记则取消,并判断当前块是否为输出块;如果不是输出块则将当前块的标记为“遍历中”的输出连接块作为当前块,调用所述单轮排序模块,如果是输出块则该输出块处理完成。

本实施例中,所述计数器的初始值可以但不限于为0;该计数器的实现方式有很多,例如,可以设置一个全局变量或静态变量作为计数器。

本实施例中,“依次”指的都是按照输入引脚从上到下的顺序,当然实际应用时也可采用其它顺序。所述主排序模块采用不同的顺序处理各输出块会影响最终的所有块的顺序结果。因此整个使用过程中,应该按照选定的一种方式进行,从大部分应用要求来看,从上到下,从左到右(即模式a)应是最普通、最常用的选择。

可以看出,在一个网络中,有多少个输出块,调用所述单轮排序模块就有多少轮。经过所述主排序模块的处理后,网络中所有的块都获得了顺序号。

本实施例中,所述有序分解器还可以包括:

输出得值排序模块,用于按照默认的或由用户设定的输出块的排序或排序模式,得到所述主排序模块处理各输出块的顺序。

所述排序模式可以设定为实施例一中的8种模式之一。

所述主任务模块用于在对一个网络调用所述主排序模块前,先调用所述输出得值排序模块。

由于各个输出块的几何位置均不相同,因此按照设定或默认的模式,所有的输出块的执行顺序是显然且唯一的。

本实施例中,对于一个网络,所述主任务模块可以先调用起点终点模块,再调用主排序模块,也可以反过来,结果都是一致的。如果存在检查模块,则应先调用检查模块,确认网络满足合法性要求后再调用主排序模块或起点终点模块。

本实施例中,所述有序分解器还可以包括:

子图排序模块;

所述主任务模块用于当对一个网络调用的主分解模块和主排序模块都处理完后,调用所述子图排序模块;

所述子图排序模块用于将该网络中所述主分解模块分解得到的各子图按照其包含的终点块的顺序号从小到大进行排序,得到各子图的处理顺序。

其它具体实现细节可同实施例一。

当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号