CN101364098B - 一种将梯形图转换为指令表程序及解释执行的方法与系统 - Google Patents
一种将梯形图转换为指令表程序及解释执行的方法与系统 Download PDFInfo
- Publication number
- CN101364098B CN101364098B CN2008101958991A CN200810195899A CN101364098B CN 101364098 B CN101364098 B CN 101364098B CN 2008101958991 A CN2008101958991 A CN 2008101958991A CN 200810195899 A CN200810195899 A CN 200810195899A CN 101364098 B CN101364098 B CN 101364098B
- Authority
- CN
- China
- Prior art keywords
- storehouse
- node
- summit
- program
- aov
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 238000010586 diagram Methods 0.000 claims abstract description 49
- 239000002243 precursor Substances 0.000 claims description 5
- 238000004458 analytical method Methods 0.000 claims description 2
- 238000006243 chemical reaction Methods 0.000 abstract description 19
- 238000013507 mapping Methods 0.000 abstract 1
- 238000011161 development Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 238000004804 winding Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000002592 echocardiography Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Landscapes
- Programmable Controllers (AREA)
Abstract
本发明公开了一种将梯形图转换为指令表程序及指令表解释执行方法与系统,该梯形图转换方法将梯形图映射为AOV图,并由其建立表示指令间的逻辑关系的二叉树,通过后序遍历二叉树实现梯形图与指令表的转换。本发明能实现各种复杂梯形图程序与指令表程序间的转换,特别是能正确有效解决含多输出的梯形图到指令表的转换,且转换所得的指令表程序采用后序表达的形式,有利于提高PLC主控制器解释执行的效率。
Description
技术领域
本发明涉及一种将梯形图转换为指令表程序及指令表解释执行的方法与系统。
背景技术
梯形图和指令表是可编程逻辑控制器(Programmable Logic Controller,PLC)的常用编程语言。梯形图语言起源于继电器逻辑和执行线图,用不同的图符表示不同的指令,用串、并联等概念组织图符的顺序位置表述控制逻辑。梯形图形象直观,与电气控制原理图相呼应,但对于PLC来说是不可执行代码,无法直接运行。指令表是一系列自定义的符合IEC61131-3标准的指令集合,类似于汇编语言。每条指令由操作码和操作数两部分组成,由这些指令构成的程序易于PLC识别与执行。因此,必须将形象化的梯形图控制程序转化为指令表程序。在PLC系统中,从上位机将由梯形图转换得到的以指令表形式表示的控制程序下载到PLC主控制器中,通过对指令表的编译或解释执行便可实现PLC程序的控制逻辑,经相应的I/O模块驱动现场设备执行控制任务。
经过多年的研究与发展,国外的PLC产品及其编程平台已相当成熟,大多集成开发环境都包含了梯形图与指令表程序互换的功能。然而,国内尚没有自己的PLC品牌,研制符合实际应用需求的国产化新型PLC系统及其开发平台具有重要的意义和应用前景,其中研究梯形图转换为指令表程序的算法是其中一个重要的问题。
已有的一种将梯形图程序转换为指令表程序的方法的流程图如图1所示,其特征在于包括如下步骤:a)生成梯形图(LD)程序中各网络内元件及其元件间连接关系的描述数据,形成各网络的LD元件集合和连接关系集合;b)分别从各网络的LD元件集合中的一个元件开始,依据各网络的LD元件集合和连接关系集合生成用节点的描述网络内元件之间的逻辑关系的二叉树;c)分别遍历各二叉树的所有节点,根据节点描述的逻辑关系生成各节点对应的指令列表(IL)程序命令。
该方法同现已公知的转换方案一样,只适用于含单输出的梯形图到指令表的转换,其不足之处是没有提及对含多输出的梯形图程序如何转换为指令表的方法,且对某些串并联逻辑关系比较复杂的梯形图不能很好的得到转换结果,也即并不适用于串、并联逻辑关系比较复杂的梯形图程序。
发明内容
本发明提供一种将梯形图转换为指令表程序及指令表解释执行方法与系统,以实现各种复杂梯形图程序与指令表程序间的转换,特别是能正确有效解决含多输出或逻辑关系复杂的梯形图到指令表的转换,且转换所得的指令表程序采用后序表达的形式,有利于提高PLC主控制器解释执行的效率。
实现本发明的技术方案如下:
一种将梯形图程序转换为指令表程序的方法,包括如下步骤:
a)将梯形图程序转换为AOV图:对梯形图进行从左到右,从上到下的扫描,记录梯形图中的图符和各图符前趋结点及后继结点,得到各图符的入度和出度,将梯形图中的并联线记录为虚结点,建立AOV图结构;
b)根据建立的AOV图,识别入度为零的顶点,将AOV图的每一行转化为相应的表示梯形图程序逻辑关系的二叉树结构;
c)采用后序遍历算法对二叉树进行遍历,为AOV图的每一行生成对应的指令表程序。
为了能实现多输出的梯形图程序的转换,本发明在AOV图中设置连接点P,将多输出的AOV图分割成单输出的AOV子图,所述的连接点是指连接多个输出分支的分叉点;各子图分别生成二叉树,再连结形成该行AOV图的完整的二叉树,即所述的步骤b),由AOV图转化为二叉树结构的方法,进一步包括以下步骤:
b1)对每一行AOV图确定输出节点(出度为零的顶点)的个数n;
b2)寻找多输出行的连接点P;
b3)若n为1,则该行AOV图生成一个子图;若n大于等于2,由连接点P将该行AOV图生成n+1个子图:从入度为零的顶点到连接点P生成一个子图,并将该子图中包含的连接点P的出度设为零;从连接点P到各个输出节点分别生成n个子图,并将各子图中包含的连接点P的入度设为零;
b4)上述生成的各子图分别生成二叉树,并将其相连成该行AOV图的完整的二叉树。
本发明还涉及一种指令表程序的解释执行方法,上述生成的指令表程序为一种后序表达的指令表程序,后序表达式对应的指令序列中已无复杂的块操作逻辑指令,在解释执行该程序时,不考虑块操作的对象,可采用如下技术方案:
一种解释执行梯形图程序后序表达的指令表程序的方法,包括如下步骤:
(1)建立输入值堆栈、输出变量堆栈以及单输出值堆栈,初始化为空;
(2)逐条读取指令并分析执行,将指令的执行结果存入输入值堆栈:
对AND或者OR指令,从输入值堆栈中弹出两个值进行“与”运算或者“或”运算,将运算的结果仍旧压入输入值堆栈;对OUT指令,将该指令的操作数存入输出变量堆栈,并在输入值堆栈中压入字符串“OUT:1”;
执行AND或者OR指令时,若弹出的值中一个为包含“OUT”的字符串,则“OUT”后面的操作数参与运算,且运算结果表示为字符串“OUT:运算结果”;
如果两个值均含为包含“OUT”的字符串,则将输入值堆栈栈顶包含“OUT”的字符串弹出,将其“OUT”后面的值存入单输出值堆栈,并在输入值堆栈中压入1,直到输入值堆栈栈顶为不含“OUT”字符串的值,压入1的个数等于弹出的包含“OUT”字符串的个数减一。
(3)当所有指令读取完后,按栈底到栈顶顺序交换输出变量堆栈中的变量顺序,并将输入值堆栈的数值与单输出值堆栈中的数值相“与”,结果赋给输出变量堆栈中的变量。
将上述梯形图转换为指令表程序以及指令表解释执行的方法应用于PLC系统及其开发平台,可以设计一种PLC系统或其开发平台,即
一种实现梯形图转换为指令表程序以及指令表解释执行的系统,包括用于处理数据的计算机装置,其特征在于该系统还包括以下装置:
(1)用于在上位机中生成和保存多行梯形图程序的装置;
(2)用于将梯形图程序转换为指令表程序的装置;
(3)用于在主控制器中调用命令解释程序解释执行指令表程序的装置。
所述的将梯形图程序转换为指令表程序采用上文所描述的方法,即建立与梯形图程序对应的AOV图,再将AOV图转化为二叉树,后序遍历二叉树生成指令表程序。所述的解释执行指令表程序,不考虑块操作的对象,采用上文所述的方法对指令表程序解释执行。
综上所述,本发明的将梯形图转换为指令表程序及指令表解释执行方法,能实现各种复杂梯形图程序与指令表程序间的转换,特别是能正确有效解决含多输出的梯形图及串并联逻辑关系复杂的梯形图到指令表的转换,且转换所得的指令表程序采用后序表达的形式,有利于提高PLC主控制器解释执行的效率。应用所述的方法可实现集成式PLC系统或其开发平台。
以下结合附图,通过具体实施方式对本发明进行详细描述。
附图说明
图1是现有梯形图程序转换为指令表程序方法的流程图;
图2是本发明转换方法的流程图;
图3是一个含复杂逻辑和多输出的梯形图程序;
图4是由图3的梯形图生成的AOV图;
图5是由AOV图生成二叉树的转换步骤流程图;
图6是由图4的AOV图转换得到的二叉树;
图7是图6经过整理后的二叉树。
具体实施方式
梯形图程序系由一个个图符按一定的规则连接而成,并按从上到下、从左到右的顺序执行,因此梯形图本质上对应一个有向图。在转换过程中,可以将PLC梯形图程序的图符抽象为AOV图的顶点,图符之间的连接关系抽象为AOV图的弧,并通过二叉树结构来表示图符之间的逻辑关系。定义二叉树的叶结点代表梯形图图符,而非叶结点表示其左右子树的逻辑关系(串联或并联),则PLC梯形图程序的每一行形成一棵二叉树,整个PLC梯形图程序是有序排列的二叉树森林。在生成梯形图程序对应的二叉树后,只需通过对二叉树的遍历便可实现梯形图程序向指令表程序的转换。
因此,实现梯形图转换为指令表程序涉及生成梯形图程序所对应的二叉树结构,在这一转换过程中需解决的两个关键问题,一是选择由梯形图生成AOV图结构采用的方法及所需信息,在具体实施方式上涉及确定AOV图的数据结构;二是寻找由AOV图生成二叉树的方法,以及确定二叉树结点的数据结构。
下面首先详细说明具体实施方式中采用的AOV图和二叉树节点数据结构的内容。
1.AOV图
在转换算法中,将梯形图程序的图符抽象为AOV图的顶点,图符之间的连接关系抽象为AOV图的弧。定义图符(AOV的顶点)的数据结构如下,用以保存PLC梯形图中各个图符的基本信息。
struct node
{int type;//图符类型(输入触点、输出线圈、横线、竖线等)
char name[20]; //图符变量名
char comment[30]; //图符注释
int rowposition; //图符所在行的位置
int colposition; //图符所在列的位置
int size; //图符所占的网格数
int accesstimes; //访问次数
struct node**pImportList; //存储与本图符直接相连的前趋图符
struct node**pOutportList;//存储与本图符直接相连的后继图符
};
其中**pImportList用于存储梯形图程序中每个图符顶点的直接前趋结点,该指针列表中对象的个数即为图符的入度;**pOutportList用于存储每个图符顶点的直接后继结点,该指针列表中对象的个数即为图符的出度。统计各图符顶点直接前趋及后继结点的具体规则为
若该图符顶点的行列位置坐标为(x,y)
(1)考察坐标为(x,y-1)、(x-1,y-1)、(x+1,y-1)处是否有图符,若存在,则将那些图符作为该顶点的直接前趋结点;
(2)考察坐标为(x,y+1)、(x-1,y+1)、(x+1,y+1)处是否有图符,若存在,则将那些图符作为该顶点的直接后继结点。
2.二叉树节点
PLC梯形图程序中各个图符指令之间存在串并联(“与”和“或”)的逻辑关系用二叉树来表示。其中二叉树的叶结点代表梯形图图符,而非叶结点表示其左右子树的逻辑关系(串联或并联)。
定义二叉树结点的数据结构为
Struct BiThrNode
{ struct node*left; //存储左子树图符指针
struct node*right; //存储右子树图符指针
};
如上文所述,本发明的转换过程分为3大步,首先建立与梯形图程序对应的AOV图,再将有向图转化为二叉树,进而生成指令表程序,其流程如图2所示。这种基于有向图表示和二叉树结构的梯形图转换,不但可以快速地实现梯形图程序到指令表程序的转换,并且方便进行语法逻辑错误检查。
下面详细说明转换过程中的具体方法和步骤。
转换的第一步对梯形图进行从左到右、从上到下的扫描,将每个梯形图图符记录为AOV图的顶点,其中相连的并联线抽象为一个虚结点,并统计各结点的前趋结点和后继结点,得到各结点的入度和出度,建立梯形图程序对应的AOV图。
例如对图3所示的梯形图程序,图符X1与X2之间连有并联线,X2与X4以及X4与X5之间也连有并联线,因此将这些相连的并联线合并成一个虚结点vp1,X1与X2右边相连的并联线合并成虚节点vp2,X4与X5右边相连的并联线合并成虚节点vp3;这样X1左边有节点vp1与其相连,则X1的前趋结点为vp1,入度为1;右边有节点vp2与其相连,则X1的后继结点为vp2,出度为1。
转换后的AOV图结构如图4所示,保存该AOV图各顶点的成员值如下:
变量值 | vp1 | X1 | X2 | vp2 | X3 |
type | 竖线 | 输入触点 | 输入触点 | 竖线 | 输入触点 |
name[20] | vp1 | X1 | X2 | vp2 | X3 |
comment[30] | 无 | 无 | 无 | 无 | 无 |
rowposition | 1 | 1 | 2 | 1 | 1 |
colposition | 1 | 1 | 1 | 2 | 2 |
size | 1 | 1 | 1 | 1 | 1 |
accesstimes | 0 | 0 | 0 | 0 | 0 |
pImportList | 无 | vp1 | vp1 | X1,X2 | vp2 |
pOutportList | X1,X2,X4,X5 | vp2 | vp2 | X3 | vp4 |
变量值 | X4 | X5 | vp3 | X6 | vp4 |
type | 输入触点 | 输入触点 | 竖线 | 输入触点 | 竖线 |
name[20] | X4 | X5 | vp1 | X6 | vp4 |
comment[30] | 无 | 无 | 无 | 无 | 无 |
rowposition | 3 | 4 | 3 | 3 | 1 |
colposition | 1 | 1 | 2 | 2 | 3 |
size | 1 | 1 | 1 | 1 | 1 |
accesstimes | 0 | 0 | 0 | 0 | 0 |
pImportList | vp1 | vp1 | X4,X5 | vp3 | X3,X6 |
pOutportList | vp3 | vp3 | X6 | vp4 | L1 |
变量值 | L1 | vp5 | X7 | X8 | X9 |
type | 横线 | 竖线 | 输入触点 | 输入触点 | 输入触点 |
name[20] | L1 | vp5 | X7 | X8 | X9 |
comment[30] | 无 | 无 | 无 | 无 | 无 |
rowposition | 1 | 1 | 1 | 2 | 3 |
colposition | 3 | 4 | 4 | 4 | 4 |
size | 1 | 1 | 1 | 1 | 1 |
accesstimes | 0 | 0 | 0 | 0 | 0 |
pImportList | vp4 | L1 | vp5 | vp5 | vp5 |
pOutportList | vp5 | Y1,Y2,Y3 | Y1 | Y2 | Y3 |
变量值 | Y1 | Y2 | Y3 | ||
type | 输出线圈 | 输出线圈 | 输出线圈 | ||
name[20] | Y1 | Y2 | Y3 | ||
comment[30] | 无 | 无 | 无 | ||
rowposition | 1 | 2 | 3 | ||
colposition | 5 | 5 | 5 | ||
size | 1 | 1 | 1 | ||
accesstimes | 0 | 0 | 0 |
变量值 | Y1 | Y2 | Y3 | ||
pImportList | X7 | X8 | X9 | ||
pOutportList | 无 | 无 | 无 |
转换的第二步由AOV图生成二叉树是本发明方法的关键步骤,如上文所述,对于多输出的AOV图生成为二叉树,通过寻找连接点P,将多输出的AOV图分割成单输出的AOV子图的方法实现。
寻找连接点P的步骤如下:
设置连接点指针P,初始化为第1个输出结点,设置堆栈,初始化为空;i的初始化赋值为1;
S1:如果i小于输出结点数目n,将第i个输出结点赋给指针P,转S2;否则结束程序,指针P指向的顶点即为多输出的连接点;
S2:P所指输出图符顶点的Accesstimes标志加1,若Accesstimes值大于等于该图符顶点的出度,则转到S3,否则转S4;
S3:如果P所指图符顶点的入度大于等于2,将P所指顶点的第二个往后的直接前趋顶点压入到堆栈中,并使P新指向当前P所指顶点的第一个直接后继顶点,然后转S2;如果P所指图符顶点的入度等于1,则使P新指向当前P所指顶点的直接后继顶点,然后转S2;
S4:如果堆栈为空,则当前P指向的顶点即为多输出的连接点,P所指图符顶点的后继结点中所有访问过的结点组成一个子图,i加1,转S1;如果堆栈不为空,从堆栈中弹出一个结点,并赋给P,转S2。
确定连接点P后,对每一行AOV图,若输出节点数n为1,则该行AOV图生成一个子图;若n大于等于2,由连接点P将该行AOV图生成n+1个子图:从入度为零的顶点到连接点P生成一个子图,并将该子图中包含的连接点P的出度设为零;从连接点P到各个输出节点分别生成n个子图,并将各子图中包含的连接点P的入度设为零。
将上述生成的各子图(单输出的AOV图)转换为相应的二叉树的流程如图5所示,其详细过程如下:
S1:创建两个堆栈,分别保存二叉树中的“与”和“或”结点,称为与堆栈、或堆栈,并初始化各堆栈为空;将图符顶点的访问标志Accesstimes清零;
S2:初始化图符顶点指针P1和二叉树结点指针P2,其中P1指向入度为零的顶点;
S3:如果P1为空,则算法结束,否则将P1所指图符顶点的Accesstimes标志加1,若Accesstimes值大于等于该图符顶点的入度,则转到S4,否则转S9;
S4:如果P1所指图符顶点的入度大于等于2,则转S5,否则转S6;
S5:从与堆栈中弹出“与”结点指针以及对应结点的出度,分别赋给t1和n1,并将当前P1所指图符顶点的入度赋给n2和n22;
若n2小于n1,如果此时或堆栈中为空,或者是或堆栈中不为空,但或堆栈关联的图符结点与与堆栈中关联的结点不同,就从与堆栈中读出“与”节点,从该“与”节点开始往下搜索到一个或节点为止,把该或节点往上的父与节点赋给s1;如果或堆栈不为空,且或堆栈关联的图符结点与与堆栈中关联的结点相同,则从或堆栈中读出“或”节点,并赋给s1;从s1的左结点开始或s1的右结点开始(若s1的左结点不为“或”结点,则从s1的右结点开始)向下连续左递归出n22个或结点(找不到n22个,则递归n22-1个),并将最后的结点赋给s2;若找到n22-1个或结点,则创建一个“与”结点,并赋给指针s3,s3的左结点指向s1的左子树,将s3作为s1的左结点,计算n1=n1-n2+1,将t1、n1压入与堆栈,s3赋给P2,转S6;若找到n22个或结点,创建一个“与”结点,并赋给指针s3,创建一个“或”结点,并赋给指针s4;3的左结点指向s1的左子树,s4的左结点指向s2的左子树,s4作为s1的左结点,s3作为s4的右结点,s2父结点的左结点指向s2的右子树;删除s2所指的“或”结点,计算n1=n1-n2+1,将t1、n1压入与堆栈,s3赋给P2,转S6;
若n2大于n1,从与堆栈中弹出“与”结点以及对应的入度,分别赋给t11、n11,并将t11赋给t1,分别计算n1=n1+n11-1,n22=n2-n1+1,直到n2不再大于n1;
若n2等于n1,则将t1赋给P2,转S6;
S6:如果P1所指图符顶点的出度大于等于2,则转S8,否则转S7;
S7:创建一个“与”结点,并将该结点赋给P3;
若P2结点的左子树为空,则将P3指向的结点作为P2的左子树,否则将P3指向的结点作为P2的右子树;
然后将当前P1指向的结点作为P3的左子树,并使P2新指向P3对应的结点,P1新指向当前P1所指顶点的第一个直接后继顶点(从上往下排序),转S3;
S8:创建两个“与”结点,分别将其赋给P3,P4,然后创建P1所指顶点的出度数减一个“或”结点,并将这些结点分别赋给P5,P6,...,Pn;
如果P2的左子树为空,则将P3指向的结点作为P2的左子树,否则将P3指向的结点作为P2的右子树;
然后将P4指向的结点作为P3的左子树,P1指向的结点作为P4的左子树,P5指向的结点作为P4的右子树,P6指向的结点作为P5的左子树,依此类推,Pn指向的结点作为Pn-1的左子树,并将P3和当前P1结点的出度一起压入与堆栈;
将结点P5至Pn同与之对应的P1所指顶点的直接后继顶点压入到或堆栈中,并使P1新指向当前P1所指顶点的第一个直接后继顶点,P2新指向Pn对应的结点,转S3;
S9:从或堆栈中弹出两个对象指针分别赋给P1,P2,转S3。
顺序执行上述9个步骤,便可将每一个AOV子图转换为相应的二叉树结构。最后通过“与”结点将各子图对应的二叉树从连接点P处相连成该行AOV图的完整二叉树。
在图4所示的AOV图中,连接点为vp5,入度为零的顶点为vp1,可划分为4个子图。由上述建立二叉树的算法得到对应的二叉树结构如图6所示,对生成的二叉树进行整理,去掉虚结点(竖线)和横线类型结点,并将只含一个分支结点的非叶子结点删除,将该非叶子结点的子树直接连接到其父结点上,最终得到的二叉树如图7所示。其中“*”为“与”结点,表示左右子树为串联关系;“+”为“或”结点,表示左右子树为并联关系。
根据图3所示的梯形图程序,我们可以看出,梯形图对应的控制流程可以用如下所示的指令表程序来表示:
LD X1
OR X2
AND X3
LD X4
OR X5
AND X6
ORB
LD X7
OUT Y1
LD X8
OUT Y2
LD X9
OUT Y3
显然,输出变量Y1对应的逻辑表达式为:
Y1=(((X1+X2)*X3)+((X4+X5)*X6))*X7
将该表达式改写为后序表达式形式,则得到以下结果:
Y1=X1X2+X3*X4X5+X6*+X7*
比较两者的差别,在后序表达式中,对应着指令表中块操作(块与(ANB)、块或(ORB))的括号已不存在,表明后序表达式对应的指令序列中已无复杂的块操作逻辑指令。这样,在主控制器解释执行这些指令时,无需考虑块操作的对象究竟是谁。因此,为了便于解释程序解释执行控制指令,在转换算法的第三步,我们对整理后的二叉树采用后序遍历,形成后序表达的指令表程序。二叉树的每一个叶结点生成一条图符对应的指令,非叶结点生成前后图符的逻辑关系(AND或者OR)。
图3所示梯形图程序转换得到的后序表达的指令表程序如下所示:
LD X1
LD X2
OR
LD X3
AND
LD X4
LD X5
OR
LD X6
AND
OR
LD X7
OUT Y1
AND
LD X8
OUT Y2
AND
LD X9
OUT Y3
AND
AND
AND
AND
LD等操作指令对应于后序表达式中的一个变量,AND指令对应于后序表达式中“与”操作,OR指令对应于后序表达式中“或”操作,OUT对应于“=”运算。由此看来,梯形图程序指令的执行顺序和后序表达式的顺序完全一致。
按照计算后序表达式的方法,首先建立输入值堆栈S1、输出变量堆栈S2以及单输出值堆栈S3,则对含多输出的梯形图指令解释的步骤为:
(1)逐条读取指令,分析执行指令,将指令的执行结果存入输入值堆栈。
(2)当发现AND或者OR指令,从输入值堆栈中弹出两个值进行“与”运算或者“或”运算,将运算的结果仍旧压入输入值堆栈。其中,若弹出的值中一个含有“OUT”(如:OUT:1),则“OUT”后面的值参与运算,且运算结果表示为“OUT:运算结果”;若弹出的值中两个都含有“OUT”,则表示此时运算到多输出的连接点处,需要观察输入值堆栈栈顶是否有含“OUT”的值,若有,则也将其弹出,直到输入值堆栈栈顶不含有“OUT”的值,分别将弹出的“OUT”后面的值存入单输出值堆栈,并在输入值堆栈中压入“1”,压入“1”的个数等于弹出的含“OUT”值的个数减一。
(3)当发现OUT指令,将该指令的操作数存入输出变量堆栈,执行结果值为1,并在输入值堆栈中压入字符串“OUT:1”。
(4)当所有指令读取完后,调整输出变量堆栈中的变量顺序,按栈底到栈顶顺序交换,并将输入值堆栈的数值与单输出值堆栈中的数值相“与”,结果赋给输出变量堆栈中的变量。
当然,对于单输出的梯形图指令解释步骤可以简化为:
初始化输入值堆栈、输出变量堆栈为空;
(1)逐条读取指令,分析执行指令,将指令的执行结果存入输入值堆栈;
(2)当发现AND或者OR指令,从输入值堆栈中弹出两个值进行“与”运算或者“或”运算,将运算的结果仍旧压入输入值堆栈;
(3)当发现OUT指令,将该指令的操作数存入输出变量堆栈,并在输入值堆栈中压入数值“1”;
(4)所有指令读取完后,将输入值堆栈的数值赋给输出变量堆栈中的变量。
上述生成的图3梯形图程序对应的后序表示的指令表程序的解释过程如下所示。
应用上述方法可形成一种PLC系统,除处理数据的计算机外,在该系统中集成生成和保存梯形图程序的装置、梯形图程序转换装置和指令表解释执行装置,所述装置涉及的硬件设备及程序,可按照上文所述的方法,在现有技术条件下进行设计。
Claims (3)
1.一种将梯形图程序转换为指令表程序的方法,包括如下步骤:
a)将梯形图程序转换为AOV图:对梯形图进行从左到右,从上到下的扫描,记录梯形图中的图符和各图符前趋结点及后继结点,得到各图符的入度和出度,将梯形图中的并联线记录为虚结点,建立AOV图结构;
b)根据建立的AOV图,识别入度为零的顶点,将AOV图的每一行转化为相应的表示梯形图程序逻辑关系的二叉树结构;
c)采用后序遍历算法对二叉树进行遍历,为AOV图的每一行生成对应的指令表程序;
上述步骤b)进一步包括以下步骤:
b1)对每一行AOV图确定输出节点的个数n;
b2)寻找多输出行的连接点P,所述的连接点是指连接多个输出分支的分叉点;
b3)若n为1,则该行AOV图生成一个子图;若n大于等于2,由连接点P将该行AOV图生成n+1个子图:从入度为零的顶点到连接点P生成一个子图,并将该子图中包含的连接点P的出度设为零;从连接点P到各个输出节点分别生成n个子图,并将各子图中包含的连接点P的入度设为零;
b4)上述生成的各子图分别生成二叉树,并将其相连成该行AOV图的完整的二叉树。
2.根据权利要求1所述的方法,其特征在于:所述的步骤b2)进一步包括以下步骤:设置连接点指针P,初始化为第1个输出结点,i的初始化赋值为1,设置堆栈,初始化为空;
S1)如果i小于输出结点数目n,将第i个输出结点赋给指针P,转S2;否则,指针P指向的顶点即为连接点;
S2)P所指输出图符顶点的访问次数标志加1,若访问次数大于等于该图符顶点的出度,则转到S3,否则转S4;
S3)如果P所指图符顶点的入度大于等于2,将P所指顶点的第二个往后的直接前趋顶点压入到堆栈中,并使P新指向当前P所指顶点的第一个直接后继顶点,然后转S2;
如果P所指图符顶点的入度等于1,则使P新指向当前P所指顶点的直接后继顶点,然后转S2;
S4)如果堆栈为空,则当前P指向的顶点即为多输出的连接点,P所指图符顶点的后继结点中所有访问过的结点组成一个子图,i加1,转S1;
如果堆栈不为空,从堆栈中弹出一个结点,并赋给P,转S2。
3.一种解释执行梯形图程序后序表达的指令表程序的方法,包括如下步骤:
根据权利要求1所述的方法将梯形图程序转换为指令表程序,再按以下步骤解释执行该指令表程序:
(1)建立输入值堆栈、输出变量堆栈以及单输出值堆栈,初始化为空;
(2)逐条读取指令并分析执行,将指令的执行结果存入输入值堆栈:
对AND或者OR指令,从输入值堆栈中弹出两个值进行“与”运算或者“或”运算,将运算的结果仍旧压入输入值堆栈;对OUT指令,将该指令的操作数存入输出变量堆栈,并在输入值堆栈中压入字符串“OUT:1”;
执行AND或者OR指令时,若弹出的值中一个为包含“OUT”的字符串,则“OUT”后面的操作数参与运算,且运算结果表示为字符串“OUT:运算结果”;
如果两个值均含为包含“OUT”的字符串,则将输入值堆栈栈顶含有“OUT”的字符串弹出,将其“OUT”后面的值存入单输出值堆栈,并在输入值堆栈中压入1,直到输入值堆栈栈顶为不含“OUT”字符串的值,压入1的个数等于弹出的含“OUT”字符串的个数减一。
(3)当所有指令读取完后,按栈底到栈顶顺序交换输出变量堆栈中的变量顺序,并将输入值堆栈的数值与单输出值堆栈中的数值相“与”,结果赋给输出变量堆栈中的变量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101958991A CN101364098B (zh) | 2008-09-12 | 2008-09-12 | 一种将梯形图转换为指令表程序及解释执行的方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101958991A CN101364098B (zh) | 2008-09-12 | 2008-09-12 | 一种将梯形图转换为指令表程序及解释执行的方法与系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101364098A CN101364098A (zh) | 2009-02-11 |
CN101364098B true CN101364098B (zh) | 2010-07-28 |
Family
ID=40390495
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101958991A Expired - Fee Related CN101364098B (zh) | 2008-09-12 | 2008-09-12 | 一种将梯形图转换为指令表程序及解释执行的方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101364098B (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101957745B (zh) * | 2009-07-16 | 2013-04-17 | 沈阳高精数控技术有限公司 | 梯形图语言转换为结构文本语言的方法 |
JP5404463B2 (ja) * | 2010-02-12 | 2014-01-29 | 三菱電機株式会社 | 制御装置及び管理装置 |
CN102354144B (zh) * | 2011-09-06 | 2013-07-03 | 北京联合大学 | 一种将梯形图转化成plc程序指令的方法 |
CN102508654B (zh) * | 2011-10-11 | 2014-07-02 | 江苏科技大学 | 嵌入式可编程控制器的梯形图编辑器设计方法 |
CN102736551B (zh) * | 2012-06-20 | 2015-11-25 | 深圳市矩形科技有限公司 | 一种plc梯形图代码软解题方法 |
CN103207903B (zh) * | 2013-03-26 | 2015-11-18 | 南京南瑞继保电气有限公司 | 一种可视化图形程序拓扑排序方法 |
CN103386685B (zh) * | 2013-08-02 | 2016-05-11 | 无锡信捷电气股份有限公司 | 一种机器人编程控制方法 |
CN103529749B (zh) * | 2013-10-29 | 2017-07-25 | 威海麦科电气技术有限公司 | 一种plc可编程控制器的梯形图程序开发系统及方法 |
CN103559727B (zh) * | 2013-11-20 | 2016-04-20 | 北京四方继保自动化股份有限公司 | 一种梯形图数据结构描述及扫描解析方法 |
CN103942081A (zh) * | 2014-03-07 | 2014-07-23 | 东莞市升力智能科技有限公司 | Plc梯形图il指令表生成方法 |
CN104238444B (zh) * | 2014-09-30 | 2017-01-11 | 郑州众智科技股份有限公司 | 一种基于发电机组控制器的plc梯形图的生成方法 |
CN104331314B (zh) * | 2014-10-31 | 2017-06-27 | 郑州众智科技股份有限公司 | 一种基于发电机组控制器的plc梯形图转指令表的方法 |
CN104460489B (zh) * | 2014-11-12 | 2017-04-12 | 郑州众智科技股份有限公司 | 一种基于发电机组控制器的plc指令表转梯形图的方法 |
CN104820393B (zh) * | 2015-03-17 | 2017-06-23 | 浪潮集团有限公司 | 一种基于plc梯形图矩阵编译解释方法 |
CN106200541B (zh) * | 2015-05-08 | 2020-04-14 | 杭州电子科技大学 | 一种将功能块图转换为aov结构的方法 |
CN105511393A (zh) * | 2016-01-25 | 2016-04-20 | 山东超越数控电子有限公司 | 一种plc梯形图的分析方法及装置 |
US10990073B2 (en) * | 2016-08-30 | 2021-04-27 | Mitsubishi Electric Corporation | Program editing device, program editing method, and computer readable medium |
US10915425B2 (en) * | 2016-09-09 | 2021-02-09 | Microsoft Technology Licensing, Llc | Automated performance debugging of production applications |
CN106773918B (zh) * | 2016-11-30 | 2019-04-16 | 国网江苏省电力公司盐城供电公司 | 一种基于单片机的控制器的用户梯形图语言控制方法 |
CN107193534B (zh) * | 2017-05-15 | 2020-05-22 | 华南理工大学 | 一种将plc梯形图转换成指令表并解释执行的方法 |
CN109188994B (zh) * | 2017-06-30 | 2021-06-08 | 沈阳新松机器人自动化股份有限公司 | 一种梯形图编译方法及相应的plc系统 |
CN107168298A (zh) * | 2017-07-03 | 2017-09-15 | 贵州大学 | 梯形图动态解析方法 |
CN107273097A (zh) * | 2017-07-20 | 2017-10-20 | 浙江奇赛其自动化科技有限公司 | 一种用于plc系统的梯形图转换成指令表的方法 |
CN107291038B (zh) * | 2017-07-27 | 2019-04-02 | 浙江奇赛其自动化科技有限公司 | 一种软件plc指令解析执行方法 |
CN107678393B (zh) * | 2017-08-30 | 2020-10-27 | 广东工业大学 | 一种基于软plc的智能喷涂控制系统及方法 |
CN108614515B (zh) * | 2018-06-19 | 2020-01-31 | 四川中烟工业有限责任公司 | 一种基于物流生产线控制的plc梯形图到指令表的转换方法 |
CN112180817B (zh) * | 2019-07-02 | 2021-11-16 | 北京东土科技股份有限公司 | 一种梯形图转换二叉树的方法、装置、设备及存储介质 |
CN112597045A (zh) * | 2020-12-29 | 2021-04-02 | 福州富昌维控电子科技有限公司 | 一种基于梯形图的plc指令质量检测方法与终端 |
CN113568365B (zh) * | 2021-09-22 | 2022-07-05 | 蘑菇物联技术(深圳)有限公司 | 控制工业控制器的方法、计算设备和计算机存储介质 |
-
2008
- 2008-09-12 CN CN2008101958991A patent/CN101364098B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101364098A (zh) | 2009-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101364098B (zh) | 一种将梯形图转换为指令表程序及解释执行的方法与系统 | |
CN102541521B (zh) | 基于结构化查询语言的操作指令自动生成装置及方法 | |
CN102915242A (zh) | 一种利用图形化操作实现代码编程的方法 | |
CN105608258B (zh) | 一种基于模型的系统设计及信息流可视化仿真系统及方法 | |
CN106648662B (zh) | 基于工程造价计算描述语言bcl的报表生成装置及生成方法 | |
CN112199086A (zh) | 自动编程控制系统、方法、装置、电子设备及存储介质 | |
CN104267654A (zh) | 梯形图程序转换成指令表程序及其编译的方法与系统 | |
CN104572072A (zh) | 一种对基于mvc模式的程序的语言转换方法与设备 | |
CN111241349A (zh) | 一种基于图形转换的接线图数据展示方法及系统 | |
CN100517222C (zh) | 支持转换引擎与映射规则相分离的模型转换装置及其方法 | |
CN104050543A (zh) | 流处理系统中的事件处理方法及流处理系统 | |
CN112214210A (zh) | 后勤业务规则引擎及其配置方法、装置、设备和存储介质 | |
CN106033370A (zh) | 64位Java虚拟机的实现方法及装置 | |
CN110673837A (zh) | 代码修复方法及装置、电子设备、计算机可读存储介质 | |
CN108874395B (zh) | 一种组件化流处理过程中的硬编译方法及装置 | |
CN111176980B (zh) | 调试环境和运行环境分离的数据分析方法、装置及系统 | |
CN117234939A (zh) | 程序定位方法、装置、电子设备、存储介质 | |
CN104503733A (zh) | 一种状态机的合并方法和装置 | |
CN106991191A (zh) | 商品筛选方法及装置、存储介质、电子设备 | |
CN105446788B (zh) | 一种信息处理方法及电子设备 | |
CN114443042A (zh) | 基于规则引擎的服务编排执行方法及相关设备 | |
CN114925591A (zh) | 基于多面体模型建模的自动并行策略搜索方法及相关设备 | |
CN104487938A (zh) | 利用开放执行器处理流数据 | |
CN110052029A (zh) | 一种基于Cocos引擎的轻量高效H5客户端框架 | |
CN107622070A (zh) | 一种数据库管理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100728 Termination date: 20170912 |