文档库 最新最全的文档下载
当前位置:文档库 › 关于PLC梯形图到指令表转换算法的研究

关于PLC梯形图到指令表转换算法的研究

关于PLC梯形图到指令表转换算法的研究
关于PLC梯形图到指令表转换算法的研究

文章编号:1009-2552(2012)06-0075-04中图分类号:TP273+.5文献标识码:A

关于PLC梯形图到指令表转换算法的研究

阳俊将,黄道平,刘少君

(华南理工大学自动化科学与工程学院,广州510640)

摘要:针对只有一条左侧母线且各个元器件及类型独立的梯形图,提出一种由可编程逻辑控制器(PLC)梯形图生成指令表的算法。在该算法中使用虚结点,先将梯形图转换为AOV图,然后根据结点类型和它们在AOV图中的拓扑排序将梯形图转化为指令表。该算法是一种能将任意复杂的梯形图转换为指令表的通用算法,它已经成功地应用于软PLC的设计。

关键词:AOV图;指令表;可编程逻辑控制器PLC;梯形图

Research on conversion algorithm for ladder diagram

to instruction list in PLC

YANG Jun-jiang,HUANG Dao-ping,LIU Shao-jun

(School of Automation Science and Engineering,South China University of Technology,Guangzhou510640,China) Abstract:The paper presents an algorithm for generation of instruction list(IL)code from programmable logic controllers(PLC)ladder diagram(LD)based on treating LD as a tree with single root left bar and treating LD component separately in accordance with their type.This algorithm uses virtual nodes.The LD is presented as an activity on vertex(AOV)diagram.Then it establishes activity on a vertex to transform LD to IL.The algorithm for transformation from any complex LD to IL.It has been applied in the design of a software PLC and successfully complied to IL.

Key words:AOV diagraph;instruction list;programmable logic controllers;ladder diagram

0引言

可编程控制器(PLC)起源于上世纪60年代,它是一种数字逻辑设备,早先它被用来替换自动化工业领域的继电器逻辑控制系统。最初的编程语言是梯形图,现在有多种初级编程语言,指令表就是其中一种用于嵌入式平台且能直接转化为二进制代码的汇编语言。IEC61131-3国际标准旨在统一规范PLC的编程语言,梯形图和指令表都包含在该标准内[1]。

本文提出一种从梯形图转化为指令集的算法,它的难点在于将梯形图网络转化为拓扑网络,因此采用双堆栈深度优先搜索算法遍历梯形图树。双堆栈深度优先搜索算法使用虚结点,也就是合并点和分裂点,并利用梯形图和对应指令集的语义关系来遍历梯形图并将梯形图转化为指令集代码,在此之前需要一个将梯形图网络转化为容易被该算法遍历形式的解析器。该算法简单但是能高效地生成代码。它不需要将梯形图拓扑图转换为其它的树,输入梯形图就能输出指令集代码。

1图的概述

图是由数据元素的集合及数据元素间的关系集合组成的一种数据结构:Graph=(V,E),其中V= {x|x∈某个数据对象}是数据元素的集合,一般被称为顶点(vertex)。E={(v,w)|v,w∈V}或E= {<v,w>|v,w∈V&&Path(v,w)}是数据元素之间关系的集合。图有不同的种类:有向图和无向图,加权图和不加权图,有环图和无环图。一个图可由矩阵M和它的邻接矩阵或邻接表表示[2]。

在图中,若顶点对(v,w)是无序的,则称此图为

收稿日期:2012-01-13

作者简介:阳俊将(1983-),男,硕士研究生,主要从事软PLC系统的研究。

无向图(undirected graph )。若顶点对<v ,

w >是有序的,则称此图为有向图(directed graph )。顶点对<v ,w >称为从顶点v 到顶点w 的一条有向边(又

称为弧),其中v 称为有向边<v ,

w >的始点(弧尾)。w 称为有向边<v ,

w >的终点(弧头)。有向图中,以顶点v 为始点的有向边的条数称为顶点v

的出度,记为OD (v )。以顶点v 为终点的有向边的条数称为顶点v 的入度,记为ID (v );有向图中顶点v 的度等于该顶点的入度与出度之和:TD (v )=ID (v )+OD (v )。

一个无环的有向图称为有向无环图,简写为

DAG (directed acyclic graph ),像图顶点的拓扑顺序

为v1,…vi ,vj ,…,vn 且i <j 这种优先约束顶点的拓扑结构。

2梯形图及其表示

图1所示的为梯形图,它的详细语法分析见文献[3]。梯形图是由电路理论发展而来的,因此它的语法规则同电路相近,如电路中二极管正向电流方向不允许有反向电流,梯形图则规定左侧线为电源位置,电流方向从左到右

图1PLC 梯形图语言

梯形图语法简化了图的分析,由梯形图语句直

接转化产生的AOV 图如图2所示。以左侧起始线作为源结点,这样源结点就可以唯一确定,然后可以从左侧起始线开始遍历整个图。一个图中可以有若干个尾结点,尾结点的出度为零,入度为一;源结点的入度为零,出度大小由需要决定;其它结点的出度

和入度均为一;虚拟结点用来表示平行网络中的交

叉点,虚拟结点的出度和入度都可能大于等于一。大多数算法都是基于将梯形图转换为二叉树,然后用二叉树遍历算法如后序遍历算法,其他的算法则用二端串并联和二叉分解树。在二叉树中,所有的结点都是叶子结点。左侧起始线为二叉树的

图2梯形图的AOV 图

结点。如果AOV图中的某结点出度为一,说明该结点与它的后继结点为串联关系,在二叉树中用“AND”结点表示。如果该结点的出度大于等于二,说明该结点和它的几个后继结点的关系为并联关系,在二叉树中用“OR”结点表示。然后用后序遍历算法遍历生成的二叉树并且每个叶子结点生成一个指令集程序,但是AOV图中的虚拟结点不能生成任何指令[4]。AOV图被用来将梯形图直接编译成结构化文本语言。

本文则通过AOV图将梯形图直接编译成指令集。该算法降低了将梯形图编译为指令集的限制并得到两种语言间的一种简明直接关系,这解决了过去将梯形图转换为指令集或将指令集转换为梯形图的不灵活性问题[5]。本文使用深度优先搜索去遍历图并产生指令集,该算法运用了所有的结点的出度或入度都小于等于一的特点,除了虚拟结点的出度或入度可能大于一,而虚拟结点是用来表示并行网络。图2是基于图1变换而来,图2对各种不同的结点进行了标示。源结点用“sNODE”表示,终结点或尾结点用“tNODE”表示,虚拟结点用“xNODE”表示,函数块用“fNODE”表示,接触结点用“bNODE”表示。

3双堆栈深度优先搜索指令集代码生成算法

本文使用双堆栈深度优先搜索算法生成指令集,该算法用递归遍历给定的树和两个堆栈,这两个堆栈一个用于始结点,另一个用于尾结点。

输入:梯形图拓扑图或AOV图

输出:指令集

(1)初始化

初始化始结点堆栈为空,初始化尾结点堆栈为空以及其他变量的初始化。把梯形图的源结点以及结点的出度压入始结点堆栈,开始索引。从始结点堆栈弹出结点并将该结点的ID送给深度优先搜索算法处理,执行步骤(2)

(2)开始:得到该结点的未访问的相邻节点

While(用深度优先搜索算法处理,遇到bNODEs并产生指令代码,直到碰到tNODE或xNODE时跳出while循环)

If(遇到的结点是xNODE时)

执行步骤(3)

else if(遇到的结点是tNODE)

执行步骤(7)

else执行步骤(10)

(3)在xNODE检查结点状态

If(第一次碰到该xNODE)

执行步骤(4)

else(尾结点索引指向该xNODE并弹出尾结点堆栈)执行步骤(5)

(4)将该xNODE做为尾结点并将它的ID和入度压入尾结点堆栈,然后增加为索引,进入步骤(5)

(5)处理该xNODE并增加该结点的已处理入度计数

If(已处理入度计数和xNODE的入度相等)

进入步骤(6)

else if(始结点堆栈不为空)

从始结点堆栈中弹出始结点并得到始结点的ID,将该ID送给DFS并跳到步骤(2)

else跳到步骤(10)

(6)将该结点作为始结点处理,将它的ID和出度存入始结点堆栈

If(始结点堆栈不为空)

从始结点堆栈中弹出结点并将该结点的ID送给DFS,跳到步骤(2)

else跳到步骤(10)

(7)处理该tNODE

If(始结点堆栈为空)

跳到步骤(8)

else从始结点堆栈弹出结点并送给DFS,然后跳到步骤(2)

(8)If(尾结点堆栈为空并且统计检查为真)

进入步骤(9)

else进入步骤(10)

(9)代码生成成功

Exit(生成IL代码正常)

(10)代码生成失败,发生错误

Exit(生成IL代码失败)

在装载尾堆栈序列,如果尾结点堆栈使用数组并且xNODE的索引为5、入度为3,则每次将3个序列压入尾结点堆栈并增加尾结点索引。如果使用指针,三个序列都要包含并且每处理一个序列就增加一个指针,因而处理该xNODE时要弹出三次。本算法中用同样的方式处理始结点堆栈。

在该算法中字处理意味着写标签、操作码、操作数和注释并形成文件以产生指令集,其中还有少量布尔控制变量用来确保得到正确的指令集。他们帮助决定该使用哪些操作码和操作数,尤其在处理sNODE和xNODE时,但是他们与本文关系不大,因此在此不详加描述。每个结点都要保持它的元素类

型,这些都是梯形图的类型如输入、输出而不是跳跃,然后代码产生器会被植入到开关语句中。在IEC61131-3中的操作码如“OR”修饰符可以在xNODE中找到,ST、STN和JMP等操作符可以在tNODE找到,“AND”“ANDN”可以应用于特定的分支,“CAL”“CALC”可以在fNODE中找到,附加命令嵌入到功能模块,比如ADD,MUL,SQRT,DIV,GT,GE等。

4符合梯形图语义的统计检查

一旦遍历开始,尾结点(tNODE)只允许成功执行并退出,除非遇到错误。在代码生成过程中如果始结点堆栈为空,尾结点堆栈也为空并且也到达了一个尾结点,这表明其已经遍历整个图的每个结点,因此每次当遇到一个尾结点时就要检查始结点堆栈和尾结点堆栈是否为空。实际上,每次当从堆栈中弹出数据时都会检查堆栈是否为空。当遍历到尾结点时两个堆栈必须同时为空,否则从始结点堆栈弹出结点并从它开始用DFS算法遍历那些未访问的分支。如果有其他需要还可增加其他的检查机制,但是本文只用这个来保证整个图遍历的完整正确。

最终所有计数都要进行检查以确保正确以及生成的所有代码正确。用计数器统计各种已处理的结点的类型,分别是fNODEs,bNODEs,tNODEs和sNODEs,然后将这些统计结果与从梯形图向图转化产生的统计结果比较,二者应完全相同,否则错误。举例,如果在从梯形图向图转化的过程中有结点没有连接上,那么它就不会连接到树的根结点,如果另一个计数器正确的话,那么两个计数器的结果就不相等。

5结束语

本文提出的双堆栈深度优先搜索算法实现了从梯形图到指令表的转换,通过AOV图将梯形图直接编译成指令集,使梯形图跟指令表两种语言的关系更为简明直接。实践表明,该算法在PLC系统的开发中具有很重要的实用价值以及广阔的应用前景。参考文献:

[1]陈忠华.细说IEC61131-3[J].自动化博览,2003,20(6): 8-9.

[2]葛芬,吴宁.基于AOV图及二叉树的梯形图与指令表互换算法[J].南京航空航天大学学报,2006(12):26-30.

[3]郑凤翼.图解PLC控制系统梯形图和语句表[M].北京:人民邮电出版社,2010.

[4]谭锦洁,程良鸿,殷学鹏.嵌入式PLC中梯形图到AOV图的映射[J].计算机测量与控制,2004,12(10):993-995.

[5]Yan Y,Zhang Hangping.Compiling Ladder Diagram into Instruc-tion List to Comply with IEC61131-3[Z].2010Elsevier B.V.

All rights reserved.

责任编辑:

櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀櫀

肖滨

(上接第74页)

[4]Su S L,Tsai H C,Shen Y S.An iterative Multiuser Detection for LDPC Coded FFH/MFSK System[Z].16th IST Mobile and Wire-less Communications Summit,2007:1-5.

[5]Perez-Slolano J J,Feliei-Castell S,Rodriguez-Hcrndndez M A.Nar-rowband interference suppression in frequency-hopping spread spec-trum using undecimated wavelet packem tran sform[J].IEEE Tran-sactions on Vehicular Technology,2008,57(3):1620-1628.[6]Teh K C,Kot A C,Li K H.Error Probabilities of an FFT-based FFH/BFSK Linear-combining Receiver with Partial-band Noise Jam-ming and AWGN[C].IEEE51st Vehicular Technology Conference Proceedings,2000,2:1410-1414.

[7]Teh K C,Kot A C,Li K H.Performance Analysis of FFH/BFSK Product Combining Receivers under Multi-tone Jamming[J].IEEE Transactions on Vehicular Technology,November1999,48:1946-1953.

[8]Jiang C,Wang J Z.Performance Analysis of FFH/MFSK Receivers with Self-normalization Combining in the Presence of Multi-tone Jamming[J].IEEE Transactions on Vehicular Technology,2002,51(5):1120-1127.

[9]Teh K C,Kot A C,Li K H.Performance Study of an FFH/BFSK Clipper Receiver with Multi-tione Jamming over a Rician Fading

Channel[C].IEEE International Conference on Communications,1999,1:305-308.

[10]Han Y,Teh K C.Performance Study of Suboptimum Maximum-likelihood Receivers for FFH/MFSK Systems with Multi-tone Jam-ming over Fading Channels[J].IEEE Transactions on Vehicular Technology.2005,54(1):82-90.

[11]Wu T M.A Suboptimal Maximum-Likelihood Receiver for FFH/ BFSK systems With Multitone Jamming Over Frequency-Selective Rayleigh-Fading Channels[J].IEEE Transactions on Vehicular Technology,2008,57(2):1316-1322.

[12]Ahmea S,Soon X N,Yang L L,et al.Iterative Decoding and Soft Interference Cancellation in Fast Frequency Hopping Multiuser Sys-tem Using Clipped Combining[C].IEEE Wireless Communications and Networking Conference,2007:723-728.

[13]Wu X F,Zhao C M,You X H,et al.Robust Diversity-Combing Receivers for LDPC Ceded FFH-SS with Partial-Band Interference [J].IEEE Communications Letter,2007,11(7):613-615.[14]Milstein L B.Interference rejection techniques in spread spectrum communications[J].Proc.IEEE,1988,76:657-671.

责任编辑:肖滨

快速学看PLC梯形图和语句表

快速学看PLC梯形图和语句表 第一章认识PLC 1.1 PLC的基本组成 1.1.1 PLC的面板介绍 1.1.2PLC的基本结构与组成 1.2 PLC的工作原理 1.3 PLC的编程语言 1.3.1 梯形图(LD) 1.3.2 指令语句表(IL) 1.3.3 顺序功能图(SFC) 1.3.4 功能模块图语言(FBD) 1.3.5 结构化文本语言(ST) 1.4编程软件安装与使用 1.4.1 STEP7-Micro/WIN V4.0 SP3编程软件的基本功能 1.4.2 STEP7-Micro/WIN V4.0编程软件的安装 1.4.3 STEP7-Micro/WIN V4.0编程软件的主界面 1.4.4 计算机与PLC通信连接 1.4.5 程序编辑与调试运行 第二章识读西门子S7-200系列PLC 编程元件及寻址方式 2.1 识读西门子S7-200系列PLC的编程元件 2.1.1输入继电器(I) 2.1.2 输出继电器(Q) 2.1.3 辅助继电器(M) 2.1.4特殊继电器(SM) 2.1.5 顺序控制继电器(S) 2.1.6 变量存储器(V) 2.1.7 局部变量存储器(L) 2.1.8 定时器(T) 2.1.9计数器(C) 2.1.10 模拟量输入映像寄存器(AI)与模拟量输出映像寄存器(AQ)2.1.11 高速计数器(HC)

2.1.12 累加器(AC) 2.2 识读S7-200PLC存储器的数据类型与寻址方式2.2.1 基本数据类型 2.2.2 寻址方式 第三章识读西门子S7-200系列PLC基本指令3.1 识读基本逻辑指令 3.1.1 位触点及线圈指令 3.1.2置位与复位指令 3.1.3 立即I/O指令 3.1.4 边沿脉沖指令 3.2识读定时器与计数器 3.2.1定时器 3.2.2 计数器 第四章识读PLC常用基本控制程序 4.1 识读梯形图 4.1.1 如何识读梯形图 4.1.2 识读梯形图的具体方法 4.2 识读指令语句表 4.2.1 如何识读指令语句表 4.2.2 识读指令语句表的具体方法 4.3 识读PLC常用基本控制程序 4.3.1 启保停控制程序 4.3.2 联锁控制程序 4.3.3 延时通断控制程序 4.3.4 顺序延时接通控制程序 4.3.5 顺序循环接通控制程序 4.3.6 长时间延时控制程序 4.4.7 脉冲发生器控制程序 4.4.8 多地控制程序 第五章识读步进顺序控制与编程 5.1识读顺序功能图

PLC 指令与梯形图速查手册

PLC 指令与梯形图速查手册目录 第 1 章位逻辑指令 1.1 LD 指令:载入常开触点 1.2 A 指令:串联常开触点 1.3 O 指令:并联常开触点 1.4 LDN 指令:载入常闭触点 1.5 AN 指令:串联常闭触点 1.6 ON 指令:并联常闭触点 1.7 LDI 指令:立即载入常开触点 1.8 AI 指令:串联立即常开触点 1.9 OI 指令:并联立即常开触点 1.10 LDNI 指令:载入立即常闭触点 1.11 ANI 指令:串联立即常闭触点 1.12 ONI 指令:并联立即常闭触点 1.13 NOT 指令:改变使能位输入状态 1.14 EU 指令:上升边缘检测 1.15 ED 指令:下降边缘检测 1.16 ALD 指令:触点块串联 1.17 OLD 指令:触点块并联 1.18 LPS、LRD、LPP 指令:逻辑堆栈操作1.19 =指令:线圈输出 1.20 =|指令:立即线圈输出 1.21 S 指令:线圈置位 1.22 SI 指令:线圈立即置位 1.23 R 指令:线圈复位 1.24 RI 指令:线圈立即复位 1.25 NOP 指令:空操作 1.26 X 指令:异或操作 第 2 章比较指令 2.1 LDB=指令:载入字节等于 2.2 AB=指令:与运算字节等于 2.3 OB=指令:或运算字节等于 2.4 LDB 指令:载入字节不等于 2.5 AB 指令:与运算字节不等于 2.6 OB 指令:或运算字节不等于 2.7 LDB=指令:载入字节大于或等于 2.8 AB=指令:与运算字节大于或等于2.9 OB=指令:或运算字节大于或等于2.10 LDB=指令:载入字节小于或等于 2.11 AB=指令:与运算字节小于或等于2.12 OOB=指令:或运算字节小于或等于2.13 LDB 指令:载入字节大于 2.14 AB 指令:与运算字节大于 2.15 OB 指令:或运算字节大于 2.16 LDB 指令:载入字节小于 2.17 AB 指令:与运算字节小于第 3 章转换指令 3.1 BTI 指令:字节转换至整数 3.2 ITB 指令:整数转换至字节 3.3 ITD 指令:整数转换至长整数 3.4 ITS 指令:整数转换至字符串 3.5 DTI 指令:长整数转换至整数 3.6 DTR 指令:长整数转换至实数 3.7 DTS 指令:长整数转换至字符串 3.8 ROUND 指令:取整为长整数 3.9 TRUNC 指令:截断为长整数 3.10 RTS 指令:实数转换至字符串 3.11 BCDI 指令:BCD 码转换为整数 3.12 IBCD 指令:整数转换为 BCD 码 3.13 ITA 指令:整数转换至 ASCII 码 3.14 DTA 指令:长整数转换至 ASCII 码 3.15 RTA 指令:实数转换至 ASCII 码 3.16 ATH 指令:ASCII 码转换至十六进制数字3.17 HTA 指令:十六进制数字转换 ASCII 码3.18 STI 指令:字符串转换至整数 3.19 STD 指令:字符串转换至长整数 3.20 STR 指令:字符串转换至实数 3.21 DECO 指令:解码 3.22 ENCO 指令:编码 3.23 SEG 指令:七段显示转换 第 4 章计数器指令 4.1 CTU 指令:向上计数 4.2 CTD 指令:向下计数 4.3 CTUD 指令:双向计数 4.4 HDEF 指令:定义高速计数器 4.5 HSC 指令:高速计数器 第 5 章浮点型数学运算指令 5.1 +R 指令:实数加 5.2 -R 指令:实数减 5.3 *R 指令:实数乘 5.4 /R 指令:实数除 5.5 SQRT 指令:求平方根 5.6 SIN 指令:求正弦值 5.7 COS 指令:求余弦值 5.8 TAN 指令:求正切值 5.9 LN 指令:求自然对数 5.10 EXP 指令:求指数值

关于PLC梯形图到指令表转换算法的研究

文章编号:1009-2552(2012)06-0075-04中图分类号:TP273+.5文献标识码:A 关于PLC梯形图到指令表转换算法的研究 阳俊将,黄道平,刘少君 (华南理工大学自动化科学与工程学院,广州510640) 摘要:针对只有一条左侧母线且各个元器件及类型独立的梯形图,提出一种由可编程逻辑控制器(PLC)梯形图生成指令表的算法。在该算法中使用虚结点,先将梯形图转换为AOV图,然后根据结点类型和它们在AOV图中的拓扑排序将梯形图转化为指令表。该算法是一种能将任意复杂的梯形图转换为指令表的通用算法,它已经成功地应用于软PLC的设计。 关键词:AOV图;指令表;可编程逻辑控制器PLC;梯形图 Research on conversion algorithm for ladder diagram to instruction list in PLC YANG Jun-jiang,HUANG Dao-ping,LIU Shao-jun (School of Automation Science and Engineering,South China University of Technology,Guangzhou510640,China) Abstract:The paper presents an algorithm for generation of instruction list(IL)code from programmable logic controllers(PLC)ladder diagram(LD)based on treating LD as a tree with single root left bar and treating LD component separately in accordance with their type.This algorithm uses virtual nodes.The LD is presented as an activity on vertex(AOV)diagram.Then it establishes activity on a vertex to transform LD to IL.The algorithm for transformation from any complex LD to IL.It has been applied in the design of a software PLC and successfully complied to IL. Key words:AOV diagraph;instruction list;programmable logic controllers;ladder diagram 0引言 可编程控制器(PLC)起源于上世纪60年代,它是一种数字逻辑设备,早先它被用来替换自动化工业领域的继电器逻辑控制系统。最初的编程语言是梯形图,现在有多种初级编程语言,指令表就是其中一种用于嵌入式平台且能直接转化为二进制代码的汇编语言。IEC61131-3国际标准旨在统一规范PLC的编程语言,梯形图和指令表都包含在该标准内[1]。 本文提出一种从梯形图转化为指令集的算法,它的难点在于将梯形图网络转化为拓扑网络,因此采用双堆栈深度优先搜索算法遍历梯形图树。双堆栈深度优先搜索算法使用虚结点,也就是合并点和分裂点,并利用梯形图和对应指令集的语义关系来遍历梯形图并将梯形图转化为指令集代码,在此之前需要一个将梯形图网络转化为容易被该算法遍历形式的解析器。该算法简单但是能高效地生成代码。它不需要将梯形图拓扑图转换为其它的树,输入梯形图就能输出指令集代码。 1图的概述 图是由数据元素的集合及数据元素间的关系集合组成的一种数据结构:Graph=(V,E),其中V= {x|x∈某个数据对象}是数据元素的集合,一般被称为顶点(vertex)。E={(v,w)|v,w∈V}或E= {<v,w>|v,w∈V&&Path(v,w)}是数据元素之间关系的集合。图有不同的种类:有向图和无向图,加权图和不加权图,有环图和无环图。一个图可由矩阵M和它的邻接矩阵或邻接表表示[2]。 在图中,若顶点对(v,w)是无序的,则称此图为 收稿日期:2012-01-13 作者简介:阳俊将(1983-),男,硕士研究生,主要从事软PLC系统的研究。

相关文档