APP下载

PLC梯形图编程系统应用分析

2017-10-31陈瑞金

大陆桥视野·下 2017年11期
关键词:二叉树链表梯形图

陈瑞金

【摘 要】体系结构开放化是数控系统发展的必然趋势,软PLC技术采用软件实现传统PLC的功能,是实现数控系统开放性的关键技术之一。软PLC系统由编程开发系统及运行系统组成。其中,编程开发系统是实现具备PLC控制功能的控制系统必不可少的开发工具之一。本文通过深入分析梯形图中各单元之间关系,各功能的配置与实现,提出了一种新的梯形图编程系统的数据结构与实现方法。利用Windows平台下的Visual C++作为开发语言以期能够开发出更为简单实用的梯形图编程系统。

【关键词】PLC梯形图编程系统;应用分析

一、导言

软PLC系统由编程开发系统及运行系统组成。其中,编程开发系统是实现具备PLC控制功能的控制系统必不可少的开发工具之一。通过编写PLC程序并转换为可执行目标代码,下载到软PLC运行系统中执行,才能够实现系统的控制功能。然而,目前国内的PLC编程开发系统种类繁多、编程语言差异大,与IEC61131-3 PLC编程语言标准相差甚远、编译效率低、缺乏程序调试功能等问题突出,导致控制程序开发过程繁琐、调试困难、开发周期长、系统稳定性差,成为快速开发稳定可靠的控制程序的主要障碍。本文提出一种基于双向循环链表和十字链表的梯形图编辑和指令表生成算法,实现了一个软PLC开发系统,并分析了软PLC运行系统实现思想。

二、梯形图与指令表简介

梯形图(ladder diagram,LD)是一种图形化编程语言,引入了电气系统中电源轨线、继电器、触点、线圈等概念,以“能量流动”描述数据传递过程,直观性强,易于学习。一个电动机启保停控制逻辑梯形图示例如图1所示。

按动START触点对应的按钮,线圈MO-TOR对应的电动机将持续运转,直到按动STOP触点对应的按钮,电动机停止运转。由图1梯形图生成的指令表如图2所示。

指令表(IL,instruction list)以一系列指令作为编程语言,由操作符、修正符和操作数等组成。

LD指令读取相应触点状态,st指令将运算后的结果输出到线圈Motor对应的输出点,从而控制电动机启停。

三、双向循环链表与十字链表

双向循环链表每个节点中有2个指针,*next指向后继节点,*previous指向前驱节点,因此在查找前驱节点和后继节点时非常高效,如图3所示。

十字链表是表示正交关系的一种链式存储结构,可用于存储有向图和稀疏矩阵等,如图4所示。

四、梯形图的数据结构

(一)梯形图基本元素定义

梯形图的基本元素包括电源轨线、连接线、触点、线圈等,具体分类见表1所列。

为便于扩展梯形图基本元素,提高程序模块化程度,降低不同基本元素处理复杂度,可将所有梯形图基本元素的共同特征抽象为一个公共基类。基类中定义了基本元素的类型、输入输出参数、对应的变量名、在梯形图中的坐标等信息。同时以虚函数的方式定义了赋值函数、绘图函数和IL指令转换函数。每个基本元素继承自基类,并按照各自特點重新实现虚函数。如竖直连接线元素,不需要赋值,也不用输出IL指令,只需重写Draw()函数,在指定行列坐标画出该连接线即可。

(二)梯形图生成指令表实例

梯形图双向循环十字链表各节点命名如下:v[i]表示电源轨线和连接线,x[i],YO表示触点和线圈,如图5所示。

借助栈记录遍历过的电源轨线和连接线节点,编写梯形图outPutIL()遍历算法,按图5所示中箭头及标号顺序表示的路径依次访问节点。

分别调用各基本元素节点的toIL()方法输出该元素代表的具体IL指令,最终组成完整的指令表语言程序。

五、相关算法对比

梯形图的编辑和指令表转换,已有算法主要采用链表、二叉树、AOV网相结合的方式实现。

(一)链表与二叉树结合算法

以AOV网的节点表示梯形图元素,AOV网的弧表示梯形图元素间的连接关系,对梯形图进行存储;再将AOV网转换为二叉树,以二叉树的非叶节点表示梯形图串联、并联逻辑关系,对转换后的二叉树进行一定的裁剪,通过中序遍历输出指令表语句。以图1所示梯形图为例,该算法对应的存储结构和转换示意如图6所示。

此算法的AOV网将连接线元素统一作为虚节点,梯形图元素间的串联、并联逻辑关系隐含在节点的出度、入度信息中,需要对AOV网进行一次遍历,构建出二叉树,裁剪虚节点,才能进行指令表的转换。AOV网发生变化后,二叉树需要重建。

(二)双向链表与AOV网结合算法

以行双向链表作为梯形图数据结构,用于存储和显示数据;根据行双向链表生成AOV网,对梯形图节点进行拓扑排序,再转换为指令表语句。以图1所示梯形图为例,该算法对应的存储结构和转换示意如图7所示。

此算法的行双向链表仅保留了行内元素之间和行与行之间的逻辑关系,却丢失了处于不同行的元素之间的逻辑关系。因此在将梯形图转换为指令表前,需要对整个链表进行一次扫描,在适当位置添加虚节点(图7中的vp1节点),构建AOV网,再进行拓扑排序和输出。一旦对梯形图进行编辑,建立AOV网的过程需要重新进行。

(三)程序的传输

当用户编辑好梯形图程序之后,将程序生成为指令表形式。然后再把指令表程序转换为一系列的二进制指令,可以通过串口来实现程序指令从编程主机向硬件平台的传输。VC提供了MSComm控件,利用该控件可以很方便的实现应用程序的串行通信功能。另外要利用该控件必须使它寄生于某个对话框,所以首先要生成一个应用于串口传输的对话框类。如

IBCD VW132

Network 7

LD M0.0

MOVB VB121,VB140

MOVB VB123,VB141

MOVB VB125,VB142

Network 8

LD M0.0

MOVB VB127,VB143

MOVB VB131,VB144

MOVB VB133,VB145

Network 9

LD M1.6

ED

TODW VB140

六、结束语

本文提出一种基于双向循环链表和十字链表的梯形图数据结构,正确实现了梯形图编辑和梯形图生成指令表算法。该数据结构能直观地表现梯形图各元素间逻辑关系,对实现完整的软PLC控制系统具有一定意义。

参考文献:

[1]周峰,王新华.软PLC编辑系统的设计与实现[J].计算机工程与应用,2005,41(7):111-113.

[2]杉布,王蔚庭.IEC61131-3国际标准简介[J].国内外机电一体化技术,2001(1):54-57.endprint

猜你喜欢

二叉树链表梯形图
CSP真题——二叉树
二叉树创建方法
基于二进制链表的粗糙集属性约简
跟麦咭学编程
基于链表多分支路径树的云存储数据完整性验证机制
基于VC的梯形图编程软件开发技术
一种由层次遍历和其它遍历构造二叉树的新算法
继电器电路转为梯形图教学经验浅谈
PLC梯形图程序设计技巧及应用
链表方式集中器抄表的设计