一种基于物流生产线控制的PLC梯形图到指令表的转换方法转让专利

申请号 : CN201810628722.X

文献号 : CN108614515B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张宝魏东梅李学敏杨涛陶栩卓亮庞毅飞张婧卞长智李欣朋

申请人 : 四川中烟工业有限责任公司西南科技大学

摘要 :

本发明公开了一种基于物流生产线控制的PLC梯形图到指令表的转换方法,包括:步骤S1:将采用双向链表存储梯形图信息,将双向链表抽象出AOV图中顶点信息和弧节点信息,映射成AOV图;步骤S2:采用阶梯快速扫描对AOV图构建逻辑树;步骤S3:对逻辑树的逻辑节点进行删除合并后进行遍历,生成指令表;步骤S4:输出所述指令表。本发明采用双向链表来存储梯形图图元,便于将梯形图映射为AOV图,采用阶梯快速扫描对AOV图构建逻辑树,减少重复,加快扫描速度,提高转化效率,在遍历逻辑树之前,对于逻辑节点进行了删除,对AOV图进行简化处理,可以进一步加快扫描速度。

权利要求 :

1.一种基于物流生产线控制的PLC梯形图到指令表的转换方法,其特征在于,包括:步骤S1:将梯形图映射成AOV图;

所述步骤S1具体包括:

步骤S11:建立用于记录编辑过程中的梯形图信息的双向链表,所述编辑过程中的梯形图信息包括由图元组成的行以及行与行之间的关系;

步骤S12:确定顶点信息,所述顶点信息包括顶点编号、顶点位置、顶点数目、顶点弧头、顶点弧尾、顶点类型和链接信息;

所述步骤S12具体包括:把梯形图的图元确定为顶点,把图元之间的链接线段看作弧,按照从左到右、从上到下的顺序依次扫描梯形图,即可以确定顶点信息步骤S13:确定每一个顶点的直接前驱和直接后继;

所述步骤S13具体包括按照顶点编号依次确定每一个顶点的直接前驱和直接后继,确定每个顶点的直接前驱和直接后继的步骤包括:步骤A1:先判断当前顶点的虚实,如果是实顶点,则跳到步骤A2;如果是虚顶点,则跳到步骤A3;

步骤A2:停止扫描,确定当前顶点为直接前驱,跳到步骤A4;

步骤A3:向左扫描,如果找到实顶点,则该实顶点为当前顶点的直接前驱;如果遇到并联分支或者结点则停止扫描,确定当前顶点为直接前驱,跳到步骤A5;

步骤A4:向右扫描,找到下一个实顶点,则此实顶点为当前顶点的直接后继;

步骤A5:向右扫描,直到查找到实顶点,则此实顶点为当前顶点的直接后继步骤S14:由步骤S13确定的顶点、顶点的直接前驱和直接后继,构建完整的AOV图;步骤S2:根据所述AOV图构建逻辑树;

步骤S3:对所述逻辑树进行遍历,生成指令表;

步骤S4:输出所述指令表。

2.根据权利要求1所述的一种基于物流生产线控制的PLC梯形图到指令表的转换方法,其特征在于,所述双向链表包括A双向链表和B双向链表,所述A双向链表用于存储梯形图中每一行的图元,所述B双向链表用于存储梯形图行与行之间的关系。

3.根据权利要求2所述的一种基于物流生产线控制的PLC梯形图到指令表的转换方法,其特征在于,所述A双向链表包括用于存储梯形图图元的基本单元以及用于将基本单元连接起来的前驱指针和后驱指针。

4.根据权利要求3所述的一种基于物流生产线控制的PLC梯形图到指令表的转换方法,其特征在于,所述B双向链表包括向上指针、向下指针和向右指针,所述向右指针用于链接所述A双向链表中的基本单元,所述向上指针、向下指针用于不同的B双向链表之间的链接。

5.根据权利要求1-4中任意一项所述的一种基于物流生产线控制的PLC梯形图到指令表的转换方法,其特征在于,所述步骤S2具体包括:步骤B1:将顶点数目赋值给变量,通过for循环遍历顶点,得到顶点的入度;

步骤B2:再做for循环遍历顶点的后继节点,建立一个顶点的单链表;

步骤B3:按照步骤B2的方法依次建立每个顶点的单链表,建立梯形图的邻接表;

步骤B4:将顶点数目赋值给变量,通过for循环遍历邻接表,得到顶点的出度信息;

步骤B5:采用阶梯快速扫描,对AOV图构建逻辑树。

6.根据权利要求5所述的一种基于物流生产线控制的PLC梯形图到指令表的转换方法,其特征在于,所述步骤B5具体包括:以入度为零的虚顶点作为起始点,从左到右扫描,如果遇到分支,先扫描向后直接相连的分支,扫描完成以后返回分支点扫描向下的分支,扫描完成以后返回分支点扫描向上的分支,扫描完成后建立第一个阶梯的树结构;

重复执行不同阶梯的扫描最终构建一个树结构。

7.根据权利要求6所述的一种基于物流生产线控制的PLC梯形图到指令表的转换方法,其特征在于,所述步骤S3具体包括:依次判断逻辑树上的每个逻辑节点,如果逻辑节点的类型与其父节点类型相同,则将逻辑节点的孩子节点直接追加为其父节点的孩子节点,并删除该逻辑节点;

采用for循环访问根节点,按照从左到右的次序先遍历根节点的每棵子树,如果遍历到子节点,判断子节点对应的元件是输入还是输出,若为输入再判断是否为父节点的第一个子节点,若是,则生成LD语句或者LDN语句,否则,生成与语句或者或语句;如果对应元件为输出,则生成OUT语句。

说明书 :

一种基于物流生产线控制的PLC梯形图到指令表的转换方法

技术领域

[0001] 本发明涉及PLC技术领域,具体的说,是一种基于物流生产线控制的PLC梯形图到指令表的转换方法。

背景技术

[0002] 物流生产线工业生产中重要组成部分,物流生产线通常采有PLC(可编程控制器)进行控制,PLC通常有五种语言,其中梯形图和指令表是最常用的两种语言。PLC在生成目标代码给物流生产线执行前,需要完成梯形图到指令表准换。往往会遇到大的和复杂的梯形图程序时候,转换效率低下,程序编译延迟,对控制的实时性遭到影响。

发明内容

[0003] 本发明的目的在于提供一种基于物流生产线控制的PLC梯形图到指令表的转换方法,用于解决现有技术中复杂的梯形图转换为指令表时,转换效率低下,变异程序延迟的问题。
[0004] 本发明通过下述技术方案解决上述问题:
[0005] 一种基于物流生产线控制的PLC梯形图到指令表的转换方法,包括:
[0006] 步骤S1:将梯形图映射成AOV图;
[0007] 步骤S2:根据所述AOV图构建逻辑树;
[0008] 步骤S3:对所述逻辑树进行遍历,生成指令表;
[0009] 步骤S4:输出所述指令表。
[0010] 优选地,所述步骤S1具体包括:
[0011] 步骤S11:建立用于记录编辑过程中的梯形图信息的双向链表,所述编辑过程中的梯形图信息包括由图元组成的行以及行与行之间的关系;
[0012] 步骤S12:确定顶点信息,所述顶点信息包括顶点编号、顶点位置、顶点数目、顶点弧头、顶点弧尾、顶点类型和链接信息;
[0013] 步骤S13:确定每一个顶点的直接前驱和直接后继;
[0014] 步骤S14:由步骤S13确定的顶点、顶点的直接前驱和直接后继,构建完整的AOV图。
[0015] 优选地,所述双向链表包括A双向链表和B双向链表,所述A双向链表用于存储梯形图中每一行的图元,所述B双向链表用于存储梯形图行与行之间的关系。
[0016] 优选地,所述A双向链表包括用于存储梯形图图元的基本单元以及用于将基本单元连接起来的前驱指针和后驱指针。
[0017] 优选地,所述B双向链表包括向上指针、向下指针和向右指针,所述向右指针用于链接所述A双向链表中的基本单元,所述向上指针、向下指针用于不同的B双向链表之间的链接。
[0018] 优选地,所述步骤S12具体包括:把梯形图的图元确定为顶点,把图元之间的链接线段看作弧,按照从左到右、从上到下的顺序依次扫描梯形图,即可以确定顶点信息。
[0019] 优选地,所述步骤S13具体包括按照顶点编号依次确定每一个顶点的直接前驱和直接后继,确定每个顶点的直接前驱和直接后继的步骤包括:
[0020] 步骤A1:先判断当前顶点的虚实,如果是实顶点,则跳到步骤A2;如果是虚顶点,则跳到步骤A3;
[0021] 步骤A2:停止扫描,确定当前顶点为直接前驱,跳到步骤A4;
[0022] 步骤A3:向左扫描,如果找到实顶点,则该实顶点为当前顶点的直接前驱;如果遇到并联分支或者节点则停止扫描,确定当前顶点为直接前驱,跳到步骤A5;
[0023] 步骤A4:向右扫描,找到下一个实顶点,则此实顶点为当前顶点的直接后继;
[0024] 步骤A5:向右扫描,直到查找到实顶点,则此实顶点为当前顶点的直接后继。
[0025] 优选地,所述步骤S2具体包括:
[0026] 步骤B1:将顶点数目赋值给变量,通过for循环遍历顶点,得到顶点的入度;
[0027] 步骤B2:再做for循环遍历顶点的后继节点,建立一个顶点的单链表;
[0028] 步骤B3:按照步骤B2的方法依次建立每个顶点的单链表,建立梯形图的邻接表;
[0029] 步骤B4:将顶点数目赋值给变量,通过for循环遍历邻接表,得到顶点的出度信息;
[0030] 步骤B5:采用阶梯快速扫描,对AOV图构建逻辑树。
[0031] 优选地,所述步骤B5具体包括:
[0032] 以入度为零的虚顶点作为起始点,从左到右扫描,如果遇到分支,先扫描向后直接相连的分支,扫描完成以后返回分支点扫描向下的分支,扫描完成以后返回分支点扫描向上的分支,扫描完成后建立第一个阶梯的树结构;
[0033] 重复执行不同阶梯的扫描最终构建一个树结构。
[0034] 优选地,所述步骤S3具体包括:
[0035] 依次判断逻辑树上的每个逻辑节点,如果逻辑节点的类型与其父节点类型相同,则将逻辑节点的孩子节点直接追加为其父节点的孩子节点,并删除该逻辑节点;
[0036] 采用for循环访问根节点,按照从左到右的次序先遍历根节点的每棵子树,如果遍历到子节点,判断子节点对应的元件是输入还是输出,若为输入再判断是否为父节点的第一个子节点,若是,则生成LD语句或者LDN语句,否则,生成与语句或者或语句;如果对应元件为输出,则生成OUT语句。
[0037] 本发明与现有技术相比,具有以下优点及有益效果:
[0038] (1)本发明采用阶梯快速扫描对AOV图构建逻辑树,入度为零的虚顶点作为起始点的节点即母线开始从左到右扫描,如果遇到分支,先扫描向后直接相连的分支,扫描完成以后返回分支点扫描向下或者向上的分支,扫描完成后建立第一个阶梯的树结构。重复执行不同阶梯的扫描最终构建一个树结构,减少重复,加快扫描速度,提高转化效率。
[0039] (2)建立适合动态编辑的双向链表存储编辑过程的梯形图,可以把梯形图每个图元存储到双向链表的数据中,前后关系存储到指针域,行与行之间的数据交换也通过双向链表进行链接起来,利用编程的方法可以将双向链表抽象出AOV图中顶点信息和弧节点信息,在类的描述中有头顶点,尾顶点的编号,顶点所在的行,列以及顶点弧头和弧尾等信息,因此可通过从左到右,从上到下的扫描顶点数目等信息,得到顶点数目的确定和顶点直接前驱和直接后继的相关信息,就可以构建AOV图。
[0040] (3)由于遍历逻辑树之前,对于逻辑节点进行了删除,对AOV图进行简化处理,可以进一步加快扫描速度。

附图说明

[0041] 图1为本发明中双向链表的结构图;
[0042] 图2为本发明具体实施方式采用的实例梯形图;
[0043] 图3为图2中梯形图映射的AOV图;
[0044] 图4为本发明中构建的逻辑树。

具体实施方式

[0045] 下面结合实施例对本发明作进一步地详细说明,但本发明的实施方式不限于此。
[0046] 实施例1:
[0047] 一种基于物流生产线控制的PLC梯形图到指令表的转换方法,包括:
[0048] 建立梯形图向AOV图的映射,梯形图如图2所示,首先建立用于存储编辑过程中的梯形图的双向链表,梯形图是动态编辑的过程,需要修改和查找等操作,而双向链表适合动态编辑。如图1所示,双向链表每个节点有后继指针和前驱指针,且后继指针和前驱指针各自构建自己的循环链的链表。因此,可以把梯形图每个图元存储到双向链表的数据中,将图元的前后关系存储到指针域,这样每行梯形图就存储起来,梯形图行与行之间的数据交换也可通过双向链表进行链接起来;其次,利用编程的方法从双向链表中可以抽象出AOV图中顶点信息和弧节点信息,在类的描述中有头顶点,尾顶点的编号,顶点所在的行,列以及顶点弧头和弧尾等相关信息,因此可通过从程序的起点从左到右,从上到下的扫描顶点数目等信息;再次,确定顶点的直接前驱和直接后继,在扫描中首先判断顶点的虚实,如果是实顶点则停止扫描,该顶点为直接前驱,如果是虚顶点继续向左扫描,直到找到实顶点为止,如果遇到并联分支或者结点则停止扫描,该虚顶点为直接前驱。直接后继的判断,若当前顶点为实顶点,向右扫描存在实节点,则此顶点为直接后继:当前顶点为虚顶点,向右方向查找到有效顶点,则此有效顶点为当前顶点的直接后继;最后,经过扫描得到顶点数目的确定和顶点直接前驱和直接后继的相关信息,就可以构建AOV图,如图3所示。
[0049] 根据AOV图构建逻辑树,首先采用邻接表存储梯形图映射成的AOV图:将顶点数目赋值给变量,通过for循环遍历顶点,得到顶点的入度,再做for循环遍历顶点的后继节点,建立一个顶点的单链表,其次重复执行建立每个顶点的单链表,建立梯形图的邻接表,最后再做一个for循环得到顶点的出度信息;其次,采用阶梯快速扫描对AOV图构建逻辑树:根据梯形图程序的特点采用阶梯快速扫描,从母线的节点开始从左到右扫描,如果遇到分支,先扫描向后直接相连的分支,扫描完成以后返回分支点扫描向下或者向上的分支,扫描完成后建立第一个阶梯的树结构,重复执行不同阶梯的扫描最终构建一个逻辑树结构,如图4所示,相比串并联扫描,过程简单,重复率低。
[0050] 对逻辑树的逻辑节点简化并遍历逻辑树,输出指令表:依次判断逻辑树上的每个逻辑节点,如果逻辑节点的类型与其父节点类型相同,则将逻辑节点的孩子节点直接追加为其父节点的孩子节点,并删除该逻辑节点;采用for循环访问根节点,按照从左到右的次序先遍历根节点的每棵子树,如果遍历到子节点,判断子节点对应的元件是输入还是输出,若为输入再判断是否为父节点的第一个子节点,若是,则生成LD语句或者LDN语句,否则,生成与语句或者或语句;如果对应元件为输出,则生成OUT语句,输出指令表如下:
[0051] LD I0.0
[0052] A  I0.1
[0053] LD I0.5
[0054] AN I0.6
[0055] OLD
[0056] O  I1.1
[0057] LD I0.2
[0058] A  I0.3
[0059] LD I0.7
[0060] A  I1.0
[0061] OLD
[0062] ALD
[0063] AN I0.4
[0064] = Q0.0
[0065] 其中,LD,取指令,表示一个与输入母线相连的常开接点指令,即常开接点逻辑运算起始;
[0066] LDN,取反指令,表示一个与输入母线相连的常闭接点指令,即常闭接点逻辑运算起始;
[0067] A,与指令,用于单个常开接点的串联;
[0068] AN,与非指令,用于单个常闭接点的串联;
[0069] O,或指令,用于单个常开接点的并联;
[0070] OLD,串联电路块的并联连接指令,无操作目标的指令;
[0071] ALD,并联电路块的串联连接指令,无操作目标的指令;
[0072] ON,或非指令,用于单个常闭接点的并联。
[0073] 尽管这里参照本发明的解释性实施例对本发明进行了描述,上述实施例仅为本发明较佳的实施方式,本发明的实施方式并不受上述实施例的限制,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。