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

来源:万方数据 作者:罗海据 吴永明 梁娟

点击:2001

A+ A-

所属频道:新闻中心

关键词:数控系统 PLC 指令表

      在中高档的数控机床系统或者数控加工中心里,可编程逻辑控制器(PLC) 是一个不可缺少的配置。梯形图和指令表是PLC的常用编程语言。将控制系统的开关量逻辑与状态表示成梯形图,采用梯形图语言设计顺序控制逻辑,具有方便直观的优点,有利于系统维护与故障快速诊断。

      梯形图不能直接被计算机识别和执行,需要先将它转换成指令表才能够执行。目前梯形图转换为指令表的算法主要有两种:其一是基于二叉树的PLC梯形图转化为指令表的算法,该方法借助二叉树进行翻译,但存在编译效率不高的问题;其二是将梯形图映射到AOV图,该方法需要搜索链表,能够翻译复杂的梯形图,需要经过多次的扫描,实现起来比较复杂。

      一些商用PLC的梯形图结构比较复杂,如西门子S7-200、三菱等品牌的PLC功能强大,一般在个人计算机或专用的编程设备完成对梯形图的编辑和修改等操作。但对于数控机床系统而言,梯形图的编辑和修改一般在工厂车间的机床上完成,用户在现场直接修改调试,而且梯形图运行环境和数控系统内部关联比较大。另外在零件加工时,修改和编辑梯形图不能对数控系统其他模块造成影响,如译码、插补等实时性要求很高的模块,对梯形图的合法性检测和将梯形图转换成指令表的算法效率显得相当重要。因此,数控机床系统的PLC模块,要能够在屏幕上显示和修改梯形图,对梯形图的互换算法要求比较快。本文作者将梯形图的构成形式分成母线、环、半环、环母线等结构元素,利用这些结构元素检验梯形图的合法性,分析梯形图和指令之间的关系,并以此设计梯形图向指令表转换的算法。

    1 梯形图的构成分析

      一个完整的数控系统的PLC梯形图由若干个独立功能的块组成,不仅包括了基本的输入触点和输出线圈,还包括了针对数控应用的特殊功能指令。PLC的梯形图由触点、输出线圈、功能指令、横线、竖线、点等基本元素构成。梯形图中触点之间的竖线占一个显示位置,那么触点之间非竖线的显示用点连接,这个点不影响梯形图的逻辑,但在用二维数组表示的梯形图形式时,它确实存在并且占用一个数据内存。因篇幅所限,文中只对不包含功能指令构成的梯形图进行讨论,如图1所示。

    图1 CNC用PLC基本梯形图

      梯形图元素的位置用梯形图的行列位置坐标来表示,依次从左到右,从上到下遍历,并且认为竖线的位置是从第二行起,第一行是点元素。令最左边的竖线的列号是0,最上一行的行号是0,那么图1中左上角的触点X0000.0的坐标就是P(0,1)。因此,有如下定义:

      定义1:梯形图里由行的下标为0的所有的元素组成的集合称为梯形图母线,也就是梯形图的第0行。很明显,除第0行之外的触点都要直接或间接通过竖线连在母线上。

      定义2:从某一个触点起,按逆时针遍历梯形图回到当前触点,其中遍历元素个数最小,遍历路径的元素构成一个四边形,将所有这些遍历过的元素组成的集合称作环。在图1 里, 集合{竖线(1,2 ),X0001.0(1,3),点(1,4),X0001.1 (1,5),竖线(1,6),点(0,6),X00002(0,5),点(0,4),X00001(0,3 ), 点(0,2 )}构成一个环, {竖线(2,4 ),X00020(2,5),竖线(2,6),点(1,6),X00011(1,5),点(1,4)}组成一个环。

      定义3:在一个环里,行号最大、列号最小的触点称为环的起始触点,如上面两个环中,X00010、X000020 是起始触点。

      定义4:跟环的起始触点行号相同的所有元素组成的集合称为半环。如集合{竖线(1,2),X00010(1,3),点(1,4),X0001.1(1,5),竖线(1,6)}构成一个半环,{竖线(2,4),X00020(2,5),竖线(2,6)}组成一个半环。很明显,环的起始触点也是半环的起始触点。

      定义5:在某一个环里,除去半环的元素剩下的元素的集合称环母线。如{点(0,6),X00002(0,5),点(0,4),X00001 (0,3),点(0,2)},{点(1,6),X0001.1(1,5),点(1,4)}是环母线。很明显,一些元素属于某一个环母线,也属于某一半环。

      综上所述,梯形图块就是由母线和若干个半环构成的简单图形。为了保证梯形图逻辑的准确性和方便转换,作如下的约束:

      (1)一个梯形图块只能有一条母线;

      (2)一个半环内至少包含一个触点;

      (3)一条环母线内至少包含一个触点;

      (4)一个触点的左边不能是横线,实际上触点是可以和它左右两边的横线互换位置而不影响其逻辑的;

      (5)一个梯形图块里只有一个输出线圈串联在母线上,其他输出线圈只能并联到该线圈上;

      (6)如果某环的半环属于另外某环,但环母线不属于其他环,可以将环母线移动到半环下面,变成标准型。如图2 所示可以将X0001.0 移动到X00021的下方,转化为图3 的形状而不影响梯形图的逻辑;

      (7)如果环与环之间存在交集,那么交集元素所属的半环或环母线的所有元素的行号只能是包含关系。如图4 所示,起始元素是X0002.0 和起始元素是X00011 的环存在歧义的,可以在梯形图转换的时候直接报错提示用户修改。

    图 4有歧义的梯形图

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


      按照梯形图的逻辑运算过程,当遇到环时先将之前的结果压栈,然后扫描环母线的触点。如果环母线的结果需要压栈就将环母线的扫描结果压栈,再扫描半环的结果,之后依次将之前的结果出栈,进行相对应的“与”、“或” 逻辑运算。这种执行方式也就是先进后出(FILO) 的堆栈处理方式。按照FILO 的堆栈处理方式,对应图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用来保存链表的前趋和后继。
     

      
      

    3.2 转换算法的实现

      梯形图的转换过程分两步完成:第一步:先从下往上,再从左到右遍历梯形图的元素,按照上面的约束条件扫描梯形图的准确性。如果遍历到竖线,接下来的触点便是起始触点,按照上面提及6 种类型判断便可得到相应的指令和压栈关系,申请PMCCMDSTR 变量pStr,将对应指令写入指向pStr 变量的成员cmd和stack TYpe之中。

      第二步:采用同第一步的扫描方法,梯形图转换的流程图如图5 所示。

    图5 转换流程图

      3.3 转换算法的特点

     与二叉树和AOV图的转换算法相比,文中研究的数据结构和算法具有如下特点:

      (1)该算法自下至上扫描梯形图,将半环的指令链接到环母线的指令后面,并利用数据结构中的pStr成员保存,符合梯形图的执行顺序。与从上到下的扫描方式相比,减少重复扫描梯形图的次数和指令列表的频繁搜索、插入过程;

      (2)该算法主动改变X,Y 扫描某个触点的周围连接情况,与二叉树相比更容易得到单个触点的指令,算法实现过程简单;

      (3)如果每个元素的pStr 不是NULL,需要进行MAX_ROW MAX_COL 的指针链表的添加操作,存在浪费时间的缺点。但是在编辑梯形图时可以用变量保存梯形图的最大行号和列号从而极大减少遍历时间,在一定程度避免了这一个缺点。

      (4) 用数组arrayCell储存梯形图的元素,如果是空元素则存在浪费内存的情况,如果将arrayCell[MAX_ROW][MAX_COL]改为存放指针arrayCell[MAX_ROW][MAX_COL]的变量则会改善内存浪费的情况。

      综合看来,该算法增加了系统的内存消耗,但避免了AOV和二叉树算法复杂度高、转换时间长的缺点,同时采用自下往上扫描梯形图的方法,算法实现简单,适合用于机床或实时要求比较高的设备。


    4 结束语

      研究探讨了梯形图的结构,用环、半环、环母线、母线等概念对梯形图进行析构,对梯形图的形状作出了约束,分析梯形图和指令之间的关系,并设计出转换算法。该算法已运用在中高档的数控系统上,体现了该算法的方便快捷的特点,对于工作人员在现场调试机床功能起了一定作用,受到用户的认可。

    (审核编辑: 沧海一土)