资源描述:
《基于“逻辑二叉树”的plc梯形图与指令表互换算法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于“逻辑二叉树”的PLC梯形图与指令表互换算法摘要:针对PLC梯形图各元件之间的与或逻辑关系,本文利用二叉树的原理实现了梯型图的遍历并成功将图形化的梯形图语言编译成了计算机容易识别的指令表语言,实现PLC梯形图语言与指令表语言的互相编译转换。详细介绍了如何把PLC梯形图构建成逻辑二叉树,然后对该树进行后序遍历得到指令表。给出一个转换实例,并介绍了算法思想及其具体实现步骤。 关键词:逻辑二叉树PLC梯形图指令表 :TP311:A:1007-9416(2011)04-0009-02 随着计算机技术和工业控制技术的发
2、展,可编程逻辑控制器(PLC)的应用越来越广泛,尤其在工业控制领域最突出。梯形图和指令表是PlC的常用编程语言。采用梯形图语言设计顺序控制逻辑,具有方便直观的优点,将控制系统的开关量逻辑与状态表示成梯形图,有利于系统维护与快速故障诊断[1]。但是梯形图不能直接被计算机识别、执行,需要先将它转换成指令表才能够执行。本文利用二叉树的原理实现了PLC梯形图语言与指令表语言的互相编译转换。 1、梯形图及二叉树的数据结构 图1(a)是一个梯形图实例,可以看出,梯形图就是由一些图符按照复杂的串并联逻辑关系组建而成的[2]。那么
3、可以将梯形图的图符抽象成结点,图符之间的连接关系抽象成结点的串并联关系以保存PLC梯形图的基本信息,其数据结构如下: structNode { inttype;//图符类型 intline;//图符所在行的位置 intcol;//图符所在列的位置 intsize;//图符所占的X格数 int;//图符所在的X络号 boolbehindbranch;//图符后面是否有向下线 boolbrontbranch;//图符前面是否有向上线 structTreeNode*next;//指向下一图符 structT
4、reeNode*prev;//指向上一图符 }; 二叉数是一种数据结构,是n(n≥0)个节点的有限集[3]。在任意一棵非空数中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树(Subtree)[4]。PLC梯形图各图符之间的串并联关系用二叉树来表示,定义二叉树结点的数据结构为: struetTreeNode { struetnode*left;//存储左子树图符指针 struet
5、node*right;//存储右子树图符指针 }; 2、梯形图与指令表互换思想和方法 2.1梯形图向指令表的转换 PLC梯形图程序由若干元件图符按上面所说规则连接而成,编译的顺序是从上到下,从左到右[5]。梯形图中的元件都可以看成是一个结点,那么每一级有序排列的梯级,都可以表示成一棵有序排列的二叉树,所以整个PLC梯形图都可以表示成一片有序排列的二叉树森林,通过对每棵二叉树的后序遍历,得到与之一一对应的指令集。 构造逻辑二叉树的主要思想是: (1)从梯形图的第一个梯级的母线开始自左往右,自上很下扫描,直到发
6、现向下线或最后一列停止,同时保存向下线的坐标和扫描经过的结点(梯形图元件)。然后根据扫描经过的结点数,建立逻辑二叉树结点。具体方法是每扫描到两个节点,则新建一个AND逻辑结点,它为父节点,扫描到的两个节点均为子结点,先扫描的结点为左子结点,后扫描的结点为右子结点。新建的AND逻辑结点作为一个左子结点,继续参与后面新结点的建立,并假定最后新建的AND逻辑结点为L1。 (2)从(1)保存向下线的坐标开始,自右向左,自下向上扫描,直到扫描到向上线为止。同时保存扫描经过的结点(梯形图元件)。每扫描到两个节点,则新建一个AND逻辑
7、结点,它为父节点,扫描到的两个节点均为子结点,先扫描的结点为右子结点,后扫描的结点为左子结点。新建的AND逻辑结点作为一个右子结点,继续参与后面新结点的建立,并假定最后新建的AND逻辑结点为L2。然后再新建OR逻辑结点,它为父结点,L1为左子结点,L2为右子结点。 (3)如果当前行还有向下线,则递归进行第(2)步,直到扫描完这一梯级。 梯形图的第一个梯级的逻辑二叉树就构建起来了,按照以上步骤依次构建后面梯级的二叉树,这样整个梯形图程序的逻辑二叉树森林就建立了。对二叉树森林进行后序遍历就可得到指令表。 2.2指令表向梯
8、形图的转换 指令表程序向梯形图的转换实质是梯形图向指令表转换的逆过程。指令表程序可以看成是二维表示的,其中一维是表示各指令,另一维是表示指令之间的逻辑关系[6]。所以转换的关键是分别提取指令代码中的这些信息。具体步骤是: (1)逐条读取指令,获取指令的操作数并将其压入堆栈中。然后获取指令的操作符,若