最新新闻
我要投稿
联系电话:027-87592219/20/21转188
投稿邮箱:tb@e-works.net.cn
您所在的位置:首页 > 智库 > 智能生产

数控系统中PLC梯形图与指令表的转换算法

发布时间:2014-05-30 作者:罗海据 吴永明 梁娟  来源:万方数据
关键字:数控系统 PLC 指令表 
为了满足数控机床系统中PLC梯形图向指令表转换的要求,将梯形图的构成形式分成母线、环、半环、环母线等结构元素,利用这些结构元素检验梯形图的合法性,分析梯形图和指令表之间的关系,设计梯形图向指令表快速转换的算法。应用实例表明:该算法效率高,实时性好,能满足数控机床系统的要求。

2 梯形图与指令表关系的分析

  按照梯形图的逻辑运算过程,当遇到环时先将之前的结果压栈,然后扫描环母线的触点。如果环母线的结果需要压栈就将环母线的扫描结果压栈,再扫描半环的结果,之后依次将之前的结果出栈,进行相对应的“与”、“或” 逻辑运算。这种执行方式也就是先进后出(FILO) 的堆栈处理方式。按照FILO 的堆栈处理方式,对应图1 的逻辑关系的指令表如表1 所示。

与图1对应的指令表

  在表1 的指令里,RDSTK 或RDNOTSTK 表示将之前的运算状态压栈并读入一个触点状态,RDSTK 或RDNOTSTK表示将上一个压栈弹出来,并和当前的结果进行“与” 或“或” 操作。考察指令表和梯形图的关系,用X 表示行号,Y 表示列号可以得出下面的结论:

  (1)左边靠最左竖线的触点并且在第一行的第一个触点,即坐标为(0,1 ) 的触点,是这个梯形图的第一个指令,应先读入该触点,对应指令RD,如RD X00000。

  (2)对于某一触点P(X,Y),如果坐标Q(X +1,Y -1)和Q(X -1,Y -1) 的元素不是竖线,表明该触点与之前的运算结果是“与” 关系;对应的指令为AND,如AND X00002。

  (3)对于某一触点P(X,Y),如果该触点所在的半环只有该触点,那说明该触点并联在环母线上,即Q(X,Y -1)是竖线,Q(X,Y +1) 是竖线但不是最右边的竖线,或者Q(X,Y +1 ) 不是竖线而Q(X,Y +2)是横线的图形。该触点与前面的运算结果之间的逻辑运算是“或” 关系,用OR表示,如OR X00020。

  (4)对于某一个触点P(X,Y),如果该触点是所在半环的起始触点,并且该半环的触点个数大于1,那么表示该半环并联在该环的环母线上,即Q(X,Y -1)是竖线, Q(X, Y +1 ) 不是竖线且Q(X,Y +2)是触点的图形。需要将前面的运算结果压栈,然后读入该触点,再执行该半环的后续逻辑运算,然后将前面的结果出栈,并进行“或” 运算。分别用如RDSTK 或RDNOTSTK表示,如RDSTKX00010 …OR STK,这里NOT表示取反。

  (5)对于某一个触点P(X,Y),只属于某一环的环母线的元素,并且是该环的环母线的第一个元素,坐标Y 大于1,那么计算机在执行完之前的操作后需要将结果压栈,然后读入该触点。在完成后续运算后将之前的结果出栈,和当前结果进行“与” 运算,分别用RDSTK和AND STK 表示。如RDSTKX00001…RDSTK;即Y >1,且Q(X+1,Y-1)是竖线的情形。

  (6)对于某一个触点P(X,Y),Q(X,Y+1)是最右的竖线,则是输出线圈,用WRT 表示,如WRT Y00000。

  当获得了触点的指令形式后,如何把这些指令正确地进行排序呢?将梯形图转换成指令表的过程中关键的地方是:

  (1) 将半环的指令表插入到环母线指令后面,最终将所有半环的指令插入到母线指令列表之间;

  (2)将OR STK或RDSTK这两个出栈指令正确地放在所在环的指令后面。所以在转换过程中首先要找到起始触点行号最大的半环。由于梯形图的半环是嵌套在另一个半环上,如果从上往下遍历某一半环就要遍历所有嵌套该半环的半环,但是从下往上扫描,就可以避免这个问题。

3 数据结构和转换算法

  3.1 数据结构

  对于梯形图的显示信息,设计了一种数据结构ARRAYCELL。ARRAYCELL 的成员inttye,分别用来标识当前元素的类型:横线、竖线、常开、常闭、输出、点,或表示当前位置没有元素。成员intaddr表示梯形图的地址空间(X,Y)等触点地址。

  用数据ARRAYCELL arrayCell [MAX_ROW][MAX_COL]表示梯形图数据,数组的行列下标刚好用来表示梯形图元素的坐标,对梯形图某一个元素(X,Y)的编辑和修改就变成了对变量arrayCell[X][Y]的type和addr的修改。成员pStr指向PMCCMDSTR 类型的数据,用pStr在这里存放转换信息。数据结构PMCCMDSTR 包括了成员cmd[],该成员用来存放转换过程中的指令, 如RD STKX00001 整个字符串。成员stack TYpe用来存放堆栈信息,如果当前触点没有堆栈信息就为空。成员pBefore 和pNext用来保存链表的前趋和后继。


 

本文为授权转载文章,任何人未经原授权方同意,不得复制、转载、摘编等任何方式进行使用,e-works不承担由此而产生的任何法律责任! 如有异议请及时告之,以便进行及时处理。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。