一种基于发电机组控制器的plc指令表转梯形图的方法
【专利摘要】本发明提供一种基于发电机组控制器的PLC指令表转梯形图的方法,包括以下步骤:步骤1:根据PLC指令表构建中间树;步骤2:遍历中间树;步骤3:输出步骤2中生成的梯形图。本发明方法提供了一种由PLC指令表生成梯形图的方法,可自动检测错误和冗余,由PLC指令表生成中间树结构,然后由中间树生成梯形图。
【专利说明】—种基于发电机组控制器的PLC指令表转梯形图的方法
【技术领域】
[0001]本发明涉及一种指令表转梯形图的方法,具体的说,涉及了一种基于发电机组控制器的PLC指令表转梯形图的方法。
【背景技术】
[0002]PLC的编程语言一般采用梯形图语言(LD)、指令表语言(IL)、功能模块语言(FBD)、顺序功能流程图语言(SFC)和结构化文本语言(ST)五种,然而,在使用的过程中,有时候需要将现有的指令表转为梯形图,普通的方法在转梯形图的过程中不能纠错,并且容易出现翻译错误或者冗余。
[0003]为了解决以上存在的问题,人们一直在寻求一种理想的技术解决方案。
【发明内容】
[0004]本发明的目的是针对现有技术的不足,提供了一种易于实现,能自动检测错误和冗余的基于发电机组控制器的PLC梯形图转指令表的方法。
[0005]为了实现上述目的,本发明所采用的技术方案是:一种基于发电机组控制器的PLC指令表转梯形图的方法,包括以下步骤:
步骤1:根据PLC指令表构建中间树:
定义一个栈来保存节点,从上到下逐步翻译PLC指令表每一行的指令;
a、若是LD或LDNOT指令,新建一个叶子节点X,并将新建的叶子节点X推进栈;
b、如果碰到AND或ANDNOT指令,生成一个叶子节点X,然后判断栈顶节点的类型;如果是串联节点,将该叶子节点X设置为栈顶节点的子节点;如果栈顶节点是叶子节点或并联节点,则新建一个串联节点S,将生成的叶子节点X和栈顶节点设置为新建的串联节点S的子节点,栈顶节点出栈,新建的串联节点S进栈;
C、如果碰到OR和ORNOT指令,生成一个叶子节点X,然后判断栈顶节点的类型;如果是并联节点,直接将生成的叶子节点X设置为栈顶节点的子节点;如果是叶子节点或串联节点,新建一个并联节点P,将叶子节点X和栈顶节点设置为该并联节点P的子节点,栈顶节点出栈,该并联节点P进栈;
d、如果碰到ANDLD指令,新建一个串联节点S,将栈的前两个节点出栈,并将这两个节点设置为该串联节点S的子节点,该串联节点S进栈;
e、如果碰到ORLD指令,新建一个并联节点P,将栈的前两个节点出栈,并将这两个节点设置为该并联节点P的子节点,该并联节点P进栈;
f、碰到OUT指令,新建输出节点;
g、碰到END指令,则结束,中间树生成完成;
其中,所述中间树的节点包括叶子节点X和关系节点,所述关系节点为梯形图逻辑节点的父节点,包括串联节点S和并联节点P ;所述叶子节点X为梯形图中逻辑节点开关量;每个叶子节点X必须有个关系父节点,如果关系节点的子节点为关系节点,关系子节点不能与父节点类型相同。
[0006]步骤2:遍历中间树:
a、遍历中间树,如果是关系节点,那么继续递归下去,直到遍历到叶子节点X,则绘制成梯形图的一个逻辑节点;
b、遍历到下一个叶子节点X,该叶子节点X与上一个节点有一个共同的关系节点,判断该关系节点的类型,如果是串联节点S则绘制在上一个节点的X轴方向的后面,如果是并联节点P则绘制在上一个节点Y轴方向的下面;
C、依次遍历完中间树的所有叶子节点X,根据步骤a、步骤b将中间树中每一个叶子节点X都绘制成梯形图中的一个逻辑节点。
[0007]步骤3:输出步骤2中生成的梯形图。
[0008]本发明相对现有技术具有突出的实质性特点和显著进步,具体的说,本发明方法提供了一种由PLC指令表生成梯形图的方法,可自动检测错误和冗余,由PLC梯形图生成中间树结构,然后由中间树生成指令表。
【专利附图】
【附图说明】
[0009]图1是本发明方法具体说明的步骤e中依据采用的PLC指令表生成的中间树。
[0010]图2是本发明方法具体说明中依据采用的PLC指令表最终生成的中间树。
[0011]图3是本发明方法具体说明中依据采用的PLC指令表最终生成的梯形图。
【具体实施方式】
[0012]下面通过【具体实施方式】,对本发明的技术方案做进一步的详细描述。
[0013]一种基于发电机组控制器的PLC指令表转梯形图的方法,包括以下步骤:
步骤1:根据PLC指令表构建中间树:
定义一个栈来保存节点,从上到下逐步翻译PLC指令表每一行的指令;
a、若是LD或LDNOT指令,新建一个叶子节点X,并将新建的叶子节点X推进栈;
b、如果碰到AND或ANDNOT指令,生成一个叶子节点X,然后判断栈顶节点的类型;如果是串联节点,将该叶子节点X设置为栈顶节点的子节点;如果栈顶节点是叶子节点或并联节点,则新建一个串联节点S,将生成的叶子节点X和栈顶节点设置为新建的串联节点S的子节点,栈顶节点出栈,新建的串联节点S进栈;
C、如果碰到OR和ORNOT指令,生成一个叶子节点X,然后判断栈顶节点的类型;如果是并联节点,直接将生成的叶子节点X设置为栈顶节点的子节点;如果是叶子节点或串联节点,新建一个并联节点P,将叶子节点X和栈顶节点设置为该并联节点P的子节点,栈顶节点出栈,该并联节点P进栈;
d、如果碰到ANDLD指令,新建一个串联节点S,将栈的前两个节点出栈,并将这两个节点设置为该串联节点S的子节点,该串联节点S进栈;
e、如果碰到ORLD指令,新建一个并联节点P,将栈的前两个节点出栈,并将这两个节点设置为该并联节点P的子节点,该并联节点P进栈;
f、碰到OUT指令,新建输出节点;
g、碰到END指令,则结束,中间树生成完成; 其中,所述中间树的节点包括叶子节点X和关系节点,所述关系节点为梯形图逻辑节点的父节点,包括串联节点S和并联节点P ;所述叶子节点X为梯形图中逻辑节点开关量;每个叶子节点X必须有个关系父节点,如果关系节点的子节点为关系节点,关系子节点不能与父节点类型相同。
[0014]步骤2:遍历中间树:
a、遍历中间树,如果是关系节点,那么继续递归下去,直到遍历到叶子节点X,则绘制成梯形图的一个逻辑节点;
b、遍历到下一个叶子节点X,该叶子节点X与上一个节点有一个共同的关系节点,判断该关系节点的类型,如果是串联节点S则绘制在上一个节点的X轴方向的后面,如果是并联节点P则绘制在上一个节点Y轴方向的下面;
C、依次遍历完中间树的所有叶子节点X,根据步骤a、步骤b将中间树中每一个叶子节点X都绘制成梯形图中的一个逻辑节点。
[0015]步骤3:输出步骤2中生成的梯形图。
[0016]以下对上述PLC指令表转梯形图的方法做出具体说明:
PLC 指令表中的指令包括以下 10 种:LD、LDNOT, AND、ANDNOT, OR、ORNOT, ANDLD, ORLD,OUT、END。
[0017]具体说明时,拟采用如下表所示的PLC指令表:
LD Xl
LD X2 ORNOT X3 ANDLD OR X4 LD X5 LD X6 LD X7 OR X8 ANDLD ORLD
OR X9 ANDLD AND XlO OUT Fun#I
END。
[0018]a、定义一个栈来保存节点。
[0019]b、读取上述PLC指令表中的第一行“LD XI”,读取到LD指令,则新建一个叶子节点XI,叶子节点Xl进栈。
[0020]C、接着又读取到“LD X2”指令,同步骤b,新建一个叶子节点X2,叶子节点X2进栈。
[0021]d、读取到“0RN0T X3”,新建叶子节点X3。因为是ORNOT指令,所以要判断栈顶节点的类型,即X2节点的类型。由于X2节点为叶子节点,所以要新建一个并联节点P1,将X2节点和X3节点设置为并联节点Pl的子节点,X2节点出栈,并联节点Pl进栈,现在,栈中有两个节点:叶子节点Xl和并联节点Pl。
[0022]e、读取到ANDLD,新建一个串联节点SI,并将栈中的第一个和第二个节点设置为串联节点Si的子节点,即:将叶子节点Xl和并联节点Pl设置为串联节点SI的子节点,叶子节点Xi和并联节点Pi出栈,Si节点进栈,此时栈中只有一个串联节点SI。此时的中间树结构如图1所示。
[0023]f、继续读取指令“OR X4”,因为是OR指令,所以要判断栈顶节点的类型,由于SI为串联节点,所以要新建一个并联节点P2,将串联节点SI和叶子节点X4设置为并联节点P2的子节点,串联节点SI出栈,并联节点P2进栈。
[0024]g、读取指令“LD X5”、“LD X6”和“LD X7”,如步骤b,分别新建叶子节点X5、叶子节点X6和叶子节点X7,依次推入到栈中。
[0025]h、读取“OR X8”指令,新建叶子节点X8,判断此时栈顶节点类型,因为是叶子节点X7,所以要新建一个并联节点P3,将叶子节点X7和叶子节点X8设置为并联接点P3的子节点,叶子节点X7出栈,并联节点P3进栈。
[0026]1、读取“ANDLD”指令,新建串联节点S2,将栈中的第一个节点和第二个节点设置为串联节点S2的子节点,叶子节点X6和并联节点P3出栈,串联节点S2进栈。读取“0RLD”指令,新建一个并联节点P4,将叶子节点X5和串联节点S2设置为并联节点P4的子节点,叶子节点X5和串联节点S2出栈,并联节点P4进栈。
[0027]j、同步骤i直到读取到OUT指令,生成输出节点Fun#l。
[0028]k、读取END指令,指令表读取完毕,生成的中间树如图2所示。
[0029]1、遍历中间树,如果是关系节点,那么继续递归下去,直到遍历到叶子节点,则绘制成梯形图的一个逻辑节点。
[0030]m、遍历到下一个叶子节点,该叶子节点与上一个节点有一个共同的关系节点,判断该关系节点的类型,如果是串联节点则绘制在上一个节点的X轴方向的后面,如果是并联节点则绘制在上一个节点Y轴方向的下面。
[0031]η、依次遍历完中间树的所有叶子节点,根据步骤1、步骤m将中间树中每一个叶子节点都绘制成梯形图中的一个逻辑节点。
[0032]O、输出生成最终的梯形图。
[0033]最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制;尽管参照较佳实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的【具体实施方式】进行修改或者对部分技术特征进行等同替换;而不脱离本发明技术方案的精神,其均应涵盖在本发明请求保护的技术方案范围当中。
【权利要求】
1.一种基于发电机组控制器的PLC指令表转梯形图的方法,其特征在于,包括以下步骤: 步骤1:根据PLC指令表构建中间树: 定义一个栈来保存节点,从上到下逐步翻译PLC指令表每一行的指令; a、若是LD或LDNOT指令,新建一个叶子节点X,并将新建的叶子节点X推进栈; b、如果碰到AND或ANDNOT指令,生成一个叶子节点X,然后判断栈顶节点的类型;如果是串联节点,将该叶子节点X设置为栈顶节点的子节点;如果栈顶节点是叶子节点或并联节点,则新建一个串联节点S,将生成的叶子节点X和栈顶节点设置为新建的串联节点S的子节点,栈顶节点出栈,新建的串联节点S进栈; C、如果碰到OR和ORNOT指令,生成一个叶子节点X,然后判断栈顶节点的类型;如果是并联节点,直接将生成的叶子节点X设置为栈顶节点的子节点;如果是叶子节点或串联节点,新建一个并联节点P,将叶子节点X和栈顶节点设置为该并联节点P的子节点,栈顶节点出栈,该并联节点P进栈; d、如果碰到ANDLD指令,新建一个串联节点S,将栈的前两个节点出栈,并将这两个节点设置为该串联节点S的子节点,该串联节点S进栈; e、如果碰到ORLD指令,新建一个并联节点P,将栈的前两个节点出栈,并将这两个节点设置为该并联节点P的子节点,该并联节点P进栈; f、碰到OUT指令,新建输出节点; g、碰到END指令,则结束,中间树生成完成; 其中,所述中间树的节点包括叶子节点X和关系节点,所述关系节点为梯形图逻辑节点的父节点,包括串联节点S和并联节点P ;所述叶子节点X为梯形图中逻辑节点开关量;每个叶子节点X必须有个关系父节点,如果关系节点的子节点为关系节点,关系子节点不能与父节点类型相同; 步骤2:遍历中间树: a、遍历中间树,如果是关系节点,那么继续递归下去,直到遍历到叶子节点X,则绘制成梯形图的一个逻辑节点; b、遍历到下一个叶子节点X,该叶子节点X与上一个节点有一个共同的关系节点,判断该关系节点的类型,如果是串联节点S则绘制在上一个节点的X轴方向的后面,如果是并联节点P则绘制在上一个节点Y轴方向的下面; C、依次遍历完中间树的所有叶子节点X,根据步骤a、步骤b将中间树中每一个叶子节点X都绘制成梯形图中的一个逻辑节点; 步骤3:输出步骤2中生成的梯形图。
【文档编号】G05B19/05GK104460489SQ201410634281
【公开日】2015年3月25日 申请日期:2014年11月12日 优先权日:2014年11月12日
【发明者】冯斌, 朱伟燕, 刘晓东, 彭长泓, 刘霞丽 申请人:郑州众智科技股份有限公司