1 引言
PLC即可编程逻辑控制器,是用来取代用于电机控制的顺序继电器电路的一种器件。梯形图语言是PLC程序设计中最常用的编程语言,它是与继电器线路类似的一种编程语言,梯形图用不同的图符表示不同的指令,用串、并联等概念组织图符的顺序位置表述控制逻辑。梯形图形象直观,与电气控制原理图相呼应。采用梯形图语言设计顺序控制逻辑,具有方便直观的优点,将控制系统的开关趋逻辑与状态表示成梯形图,有利于系统维护与快速故障诊断。由于电气设计人员对继电器控制较为熟悉,因此梯形图编程语言得到了广泛的应用。但是,梯形图不能由计算机直接执行,需要将它转换成计算机能够识别的命令才能够执行。在这个转换的过程中,本文提出了二叉树双向链表的数据结构来表尔梯形图功能元件及其拓扑关系,使后续的指令表序列的生成得到简化。
2 梯形图及数据结构
2.1梯形图基本介绍
在梯形图的图形编辑界面中,用不同的图符表示不同的指令。通常,梯形图的组成中有功能单元、连接单元和空单元。功能单元,如常开指令、脉冲指令、输出指令等;连接单元为并联连接(下分支、右分支、左分支、左转、右转)、串联连接和纵向连接。典型的梯形图如图1所示。采用动态增加梯形图的行和列的方法,初始的显示图形的区域为2×n,程序,F始标志(start)和结束标志(End)各占1行,n是一个不超过编辑界面宽度的合适的初始值。梯形图的编辑也有相应的规则和限制,添加这蝗限制和规则是为了简化后续的数据结构和算法设计。
梯形图编辑遵循的规则如下:(1)所有的功能单元都必须画在水平线上,不能l画在乖A分支f:,按照由左向右、由上到下的绘图原则;(2)由几个并联回路组成的串联同路中,包含功能单元最多的并联网路放在最左边,在由几个串联回路组成的并联l川路中。包含功能单元最多的串联回路放在最上边;(3)不能将功能单元画在输fl{指令的右边,即输出指令只能放在一行的最右边。一个简单的梯形图如图1所示。
2.2二叉树及二叉树双向链表
树是一种数据结构,数据元素之间有明显的层次关系。树(Tree)是n(n≥o)个结点的有限集。在任意一棵非宅树巾:(1)有且仅有一个特定的称为根(Root)的结点;(2)当,n>l时,其余结点可分为m(m>o)个互小相交的有限集T1,T2,?,L,j£巾每一个集合本身又是一棵树,并且称为根的子树(Subtree)。
二叉树是一种树型结构,它的特点是每个结点至多只有二棵子树(即二叉树中不存在度大于2的结点),并且二义树的子树有左右之分,其次序不能任意颠倒。
双向链表可以克服单链表单阿陛的缺点,在舣向链表的结点中有两个指针域,其一指向汽接后继,另一指向直接前趋。二叉树双向链表中以每棵:叉树作为一个链结,将一个二义树森林以一定的顺序连接起来,其中的每个链表结点需要保存对应的二叉树根结点的地址信息。