梯形图的转换过程分两步完成:第一步:先从下往上,再从左到右遍历梯形图的元素,按照上面的约束条件扫描梯形图的准确性。如果遍历到竖线,接下来的触点便是起始触点,按照上面提及6 种类型判断便可得到相应的指令和压栈关系,申请PMCCMDSTR 变量pStr,将对应指令写入指向pStr 变量的成员cmd和stack TYpe之中。
第二步:采用同第一步的扫描方法,梯形图转换的流程图如图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 结束语
研究探讨了梯形图的结构,用环、半环、环母线、母线等概念对梯形图进行析构,对梯形图的形状作出了约束,分析梯形图和指令之间的关系,并设计出转换算法。该算法已运用在中高档的数控系统上,体现了该算法的方便快捷的特点,对于工作人员在现场调试机床功能起了一定作用,受到用户的认可。