基于AOV图及因果图的梯形图与语句表互换算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于AOV 图及因果图的梯形图与语句表互换算法 摘要:在分析AOV 图的基础上,提出了一种新的数据结构因果图。
结合AOV 图与因果图提出了一种新的梯形图与语句表双向转换算法。
一方面,将梯形图转化为AOV 图,并利用AOV 图建立因果图,然后遍历因果图的节点生成PLC 所能识别的语句表;另一方面,将语句表转化为因果图,基于因果图生成梯形图。
经过实际编程证明,该算法简洁、实用性及通用性好,并成功应用于某国产化PLC 开发中。
关键词:PLC ;梯形图;语句表;AOV 图;因果图
Abstract: A new data structure cause and effect(CE) diagraph is proposed by analyzing the AOV diagraph. Transformation algorithm between the ladder diagram and the statement list based on the AOV diagraph and the cause and effect diagraph for programmable logic controller (PLC) systems is proposed. The ladder diagram is transformed to the AOV diagraph, then the statement list is created by traversing the node in cause and effect diagraph. On the contrary, the statement list is transformed to cause and effect diagraph, then the ladder diagram is generated based cause and effect diagraph. Proved by programming , the algorithm is compact, practical, universal, and it is used in the development of a domestic PLC system.
Key words: PLC; Ladder Diagram; Statement List; AOV Diagraph; Cause and Effect Diagraph ; 1引言
可编程控制器PLC 是一种专门为工业自动控制开发的通用自动控制装置。
经过多年的研究与发展, 国外的PLC 产品及其编程平台已相当成熟, 大多集成开发环境都包含了梯形图
与指令表程序互换的功能[1]。
国内尚没有树立起自己的PLC 品牌,国内厂家争相开发自己的
PLC 产品,PLC 的开发环境是否符合IEC61131的标准,是否符合用户习惯并易于使用,是一个PLC 产品能够立足市场的关键,因此研制PLC 上位机开发平台具有重要的意义和应用前景,其中梯形图与指令表程序互换算法是一个重要的研究课题。
本文提出一种基于AOV 图及因果图的新型梯形图与语句表的互换算法,该算法方法简单,易于移植,在某国产PLC 的上位机软件开发过程中证明了其有效性和可行性。
2 AOV 图与因果图
2.1 AOV 图
图是由数据元素的集合及数据元素间的关系集合组成的一种数据结构:
(,)Graph V E =
其中{|}V x x =∈某个数据对象是数据元素的集合, 一般被称为顶点(Vertex);{(,)|,}E v w v w V =∈或{(,)|,&&(,)}E v w v w V Path v w =∈是数据元素之间关系的集合。
若< ,> V R x y ∈, 则(,)x y 表示从x 到y 的一条弧(Arc )。
x 为弧尾(tail),y 为弧头(head),也叫边(Edge)集合; Path(,)v w 表示从顶点v 到顶点w 的一条单向通路。
在图中, 若顶点对(,)v w 是无序的, 则称此图为无向图。
若顶点对(,)v w 是有序的, 则称此图为有向图[2]。
顶点对(,)v w 称为从顶点v 到顶点w 的一条有向边(又称为弧),其中v 称为有向边(,)v w 的始点(弧尾),w 称为有向边(,)v w 的终点(弧头)。
有向图中,以顶点v 为始点的有向边的条数称为顶点v 的出度(OutDegree)。
以顶点v 为终点的有向边的条数称为顶点v 的入度(InDegree)。
用顶点表示活动,用弧(,)i j 表示活动i 必须在活动j 开始之前完成,这种有向图称为顶点表示活动的AOV 图。
对弧(,)i j ,i 是j 的直接前趋,j 是i 的直接后继。
AOV 图可以用来描述活动的先后顺序,为了使它能够描述根据能流概念建立起来的梯形图,作如下抽象:对不分先后可同时进行的活动或者活动块抽象为并联关系;对有先后顺序的活动或活动块抽象为串联关系。
基于以上抽象可以建立起与梯形图中与块、或块概念的对应。
2.2 因果图
在设计梯形图到语句表转化的算法的过程中,直接将AOV 图生成语句表比较困难,且不易于扩展。
本文采纳了一些高级语言的编译方法,在向语句表转化的过程中,首先将AOV 图生成中间结构因果图。
本文提出的因果图包含以下几个节点:与节点(AND ),或节点(OR ),因果节点(CE ,Cause And Effect )。
AND 节点含有两个或多个子节点,子节点之间是串联即AND 关系;OR 节点含有两个和多个子节点,子节点之间是并联即OR 关系。
CE 节点只有两个子节点,一个表示原因,对应梯形图中的输入,一个表示结果,对应梯形图中的输出。
基于以上几个节点,因果图不仅能表示与或逻辑关系,也能表示因果关系,因果关系是梯形图中输入输出关系的映射。
图1是一个简单的因果图,表示的逻辑关系是:
112()()Y X AND X
图1 因果图的例子
3 梯形图与语句表互换算法设计
3.1 梯形图到语句表的转化算法
基于VC++的MFC 类库实现了本文所述的转化算法,在转换算法中, 将梯形图程序的图符抽象为AOV 图的顶点,图符之间的连接关系抽象为AOV 图的弧,另外在编译过程中,利用AND 节点,OR 节点和CE 节点等表示输入输出节点间的逻辑关系。
3.1.1 梯形图向AOV 图的转化算法
文献[2]提供了一种转换算法,但该算法简单的通过梯形图外观来判断,比如工型连接,Ⅱ型连接等,显然不具有抽象性和通用性。
本文根据梯形图中能流的特性,采用另外一种算法,很好的解决了通用性的问题。
算法流程如图2所示。
图2 梯形图向AOV图转换算法
3.1.2 AOV图向因果图的转化算法
AOV图更接近于梯形图的能流概念,而语句表是梯形图与或关系的直接表达,但是从AOV图直接生成语句表并不是很方便,因此在转换中采用了中间结构因果图。
如何从AOV 图生成因果图是编译过程的一个重点和难点。
文献[2]中提出一种较好的思路,但是算法中没有对输出节点和输入节点做出区分。
本文充分利用了AOV图的遍历算法,并在其基础上提出了一种新的由AOV图生成因果图的方法。
具体算法描述如下:
第一步,建立一个节点堆栈,用来存放编译结果
第二步,遍历AOV图函数
找到AOV图入度为0的节点(每个梯形图都将从左母线对应的虚拟节点开始),将其放入堆栈中,跳到第三步调用堆栈处理函数,并将以它为流入节点的节点的入度减1,并对这些节点进行判断,如果节点的入度为0,那么以此节点为初节点嵌套调用编历AOV图函数。
第三步,堆栈处理函数
弹出堆栈的前两个节点,若只有一个节点则返回。
取得这两个节点的流入节点和流出节点链表,若是AND节点、或是OR节点,则将其做为一个AND块,或OR块来寻找它的流入节点链表和流出节点链表:
(1)若第一个节点的流入节点链表和第二个节点的流出节点链表相同,则两个节点是与的关系。
建立AND节点,并删除堆栈中弹出的两个节点,将它们插入到AND节点的节点链表中。
如果第一个节点是输出类型的节点,则建立CE节点,将第一个节点做为CE节点的结果节点,第二个节点做为CE节点的原因节点。
(2)假如第一个节点流入节点链表和第二个节点的流入节点链表相同,第一个节点流出节点链表和第二个节点的流出节点链表相同,则两个节点是或的关系。
建立OR节点,并删除堆栈中弹出的两个节点,将他们插入到OR节点的节点链表中。
(3)其他情况则不操作。
第四步,转换结束。
3.1.3 因果图到语句表的转换算法
从因果图到语句表的转换算法相对较简单,利用C++语言的多态特性,调用各个节点自身的编译方法即可实现。
节点的编译方法,简述如下:
CE节点:首先编译原因节点,然后编译结果节点。
AND节点:遍历编译每个子节点,并且通知子节点它们之间是AND关系。
OR节点:遍历编译每个子节点,并且通知子节点它们之间是OR关系。
普通节点:直接根据自身特性(比如常开或者常闭等),并结合节点之间的关系(通过AND节点,和OR节点得知),生成语句字符串,并插入到语句表中。
3.2 语句表到梯形图的转换算法。
语句表程序的各条指令和梯形图节点存在着逻辑上的对应关系,从语句表生成梯形图相对于梯形图生成语句表容易实现。
转换算法分以下几步完成:
第一步,循环扫描所有语句表,进行词法检查,检查是否有不存在的指令、操作数或者错误的对应关系。
第二步,建立结果堆栈,然后顺序读入每条指令,对各种指令分别进行处理:
一般指令:建立对应的节点,将其放入结果堆栈;
ANDLD指令:建立AND节点,取出堆栈中的前两个元素,插入到AND节点列表中去,将AND节点放入结果堆栈;
ORLD指令:建立OR节点,取出堆栈中的前两个元素,插入到OR节点列表中去,将OR 节点放入结果堆栈;
OUT指令:首先建立CE节点,并建立输出节点(OUT),作为因果节点的结果节点,取出堆栈中的第一个节点,作为因果节点的原因节点。
通过这一步就可以建立语句表所对应的因果图。
第三步:遍历因果图,根据因果图中蕴涵的逻辑关系,生成梯形图。
4梯形图和语句表的互换实例
在梯形图到语句表的编译过程中,一共用到四种结构,分别是梯形图、AOV图、因果图、语句表。
下面以一个典型的梯形图为例子,具体描述梯形图到语句表的转化过程。
图3 典型的梯形图
V X1
X3
X4
X2
X5
X6
Y1
图4 由梯形图生成的AOV图
CE
X1X3X4
X2X5X6
Y1
AND
OR
AND
OR
图5 由AOV图生成的因果图
图6 最终结果语句表
语句表到梯形图的转化过程是比较简单,中间不必经过AOV图,首先由图6直接生成因果图,即图5,由因果图直接生成梯形图,即图2。
5 结论
本文在深入理解梯形图原理的基础上,利用AOV图及因果图,提出了一种新的梯形图与语句表相互转换的算法。
经过实际编程验证,可以完成各种复杂梯形图的编译,证明了该算法的有效性、实用性。
该算法经过不断的测试、完善,已成功应用在国内某PLC的上位机软件的开发中,并取得了很好的效果。