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

PLC梯形图的一种数据结构描述方法

发布时间:2014-02-20 作者:裴元芳  来源:万方数据
关键字:PLC 梯形图 
本文针对目前PIC梯形图编辑软件中梯形图存储结构的复杂和不足,本文基于面向对象的方法,采用二叉树和双向链表相结合的数据结构来描述梯形图功能单元及其拓扑关系,并提出了相应的转换算法,然后简化为只含有功能单元的模型.使后续的指令表转换得到简化。这种模型结构简单、通用性强、易于用C++语言实现,在PLC梯形图编辑软件中应用效果良好。

  4.2二叉树的简化算法

  二叉树中含有大量的冗余信息,在其向指令表转化的过程中需要对je进行简化处理,采用对每棵二叉树进行一次先序遍历,对每一个图元结点对象进行判断处理。

  二叉树的简化主要是过滤掉梯形网中多余的连接图元,这里把主要对九种不同的图元对象做简化处理:(1)功能单元对象;(2)虚结点图元对象;(3)连接单兀包含七种:下分支、右分支、左分支、左转、右转、串联连接、和纵向连接。

  对于不同的图元类型进行不同的处理。

  这里,简化函数中列出了三种类型的图元的简化处理算法,其他类型处理类似。

  Predigcst(bTrccLink*p,int type)

  {swiIch(type)

  {case o://图元对象为功能单元

  Break;//功能单元保留

  casc l://图形对象为下分支

  p_,pareIlt,left=p-lcft;//去除连接结点

  if(p—right!-NUI.I。)//若右了.树存在

  p-1eft-right-p-right;//连接右子树

  brcak;//下分支连接单元简化处理

  case 2://图元对象为右分支

  p-parenl_-right-旷lcft;//去除连接结点

  p-1eft—right—p—right;//连接右f树

  brcak;//右分支连接单元简化处理

  case 8:{//纵向连接单元简化处理)

  ))

5转换实例

  图1所示的是一个具有复杂串并联关系的梯形图程序,其中包含的两个逻辑关系式如下所示:

公式

梯形图

  图2为该梯形图程序中的两个逻辑关系式对应的两棵二叉树,包含r梯形图中描述的所有信息,其中扫描中重复的结点我们定义为虚结点。

  上面得到的两棵二叉树是一个松散的结构,我们采用了二叉树双向链表将其链接起来,使之完整地描述梯形图的信息。图3给出了一个含有N棵二叉树结点的模型描述。

结构图

  bTree o~bTree挖一1为梯形图中所包含的二叉树,一般来说,双向链表结点中只需要保存二义树根结点的地址即可。prior和next为双向链表的前驱指针和后驱指针,其中prior指向前一棵二义树的根结点,next指向下一棵二叉树的根结点,head指针指向双向链表的第一个结点,current为当前指针,指向当前结点,tail指针为尾指针,始终指向链表的最后一个结点。

  在向指令表转换之前,我们对每一棵=义树结点进行了简化处理,采用4.2节描述的简化算法,得到如下的精简结构,如图4所示。

精简结构

  对上面得到的简化二叉树,我们只需要经过一次后遍历和一些判断处理,就町以得到相应的指令表序列。

6结束语

  本文介绍的这种二叉树双向链表的数据结构简单、清晰、算法易于实现,与项日具体相结合,采用r面向对象的方法并用C++语言来实现,实现了数据和方法的良好封装。同时,由于这种简捷的结构,使后续的由梯形图存储结构到语句表的转换算法的设计变得简单,只需要对二叉树双向链表遍历一次便叮以得到语句表序列。  

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