软PLC开发系统的设计与实现

2012-08-26 08:05魏晓晴吴旭光腾林阳
制造业自动化 2012年18期
关键词:二叉树梯形图串口

魏晓晴,吴旭光,牛 云,郭 逸,腾林阳

WEI Xiao-qing, WU Xu-guang, NIU Yun, GUO Yi, TENG Lin-yang

(西北工业大学,西安 710072)

0 引言

随着计算机技术、通讯技术和微电子技术的迅速发展,软PLC技术己渐渐成为国内外工业控制技术研究的热点。软PLC是以标准的、通用的控制器硬件平台和专用控制卡作为硬件基础,基于工业控制计算机(IPC)或嵌入式PC(EPC),使用软件实现PLC功能的软逻辑控制系统。因此,软PLC既可提供传统PLC的相应功能,也具备PC机或嵌入式系统的各种优点,具有更强的兼容性和可扩展性。

软PLC开发系统实际上就是带有编译和调试功能的软PLC编程器[1],应当支持基于IEC61131-3[2]国际标准的编程语言。在IEC61131-3定义的5种语言中,梯形图和语句表应用最为广泛,梯形图便于工程人员编程,语句表便于控制器解析执行。因此,在软PLC开发系统中实现从梯形图到语句表的转换解算尤为重要。现有的解算方法有很多,但往往存在结构不清晰、建立过程繁琐、复杂节点判断困难等问题[3,4]。为此,本文提出了一种梯形图到语句表转换的新策略。

1 软PLC开发系统

本文研究并实现了一种软PLC开发系统。它运行在PC机上,既可以与软PLC执行系统组成一个完整的系统,又可以单独仿真运行。该开发系统按功能可分为梯形图编辑模块,编译解算模块,通信监控模块三大部分,以VC++编程实现。

2 梯形图编辑模块

2.1 设计组成

梯形图编辑模块即梯形图编辑器,主要功能包括梯形图图元的绘制、编辑、保存和读取,如图1所示。

图1 梯形图编辑模块设计组成

2.2 编辑功能的实现

梯形图元件包括常开触点、输出线圈等简单元件和定时器、计数器等复杂元件。由C++面向对象的继承特性,可以抽象出一个基类作为梯形图图元的总体接口,再以这个类为基础,派生出具体的图元子类。梯形图图元的基类定义如下:

因每个图元继承自同一个基类,拥有共同的属性,因此,界面上的所有图元可看作一个集合,称为集合类。对图元的各种操作,如绘制、选中、删除、存取等,都是通过对集合类的操作进行,这里用到的集合类为C++的CPtrArray类。

如绘制定时器图元的过程:程序响应鼠标左键消息,新建一个定时器子类对象,将该对象加入集合类并调用定时器子类的Draw( )函数实现绘制。示例代码如下:

3 编译模块

3.1 设计组成

梯形图的编译[6]是本系统的关键部分,主要包括编译解算和语法查错两部分。

编译解算即把用户编辑的梯形图程序,编译转换生成语句表。

语法查错即在编译过程中,按照梯形图编程语言规范,进行逻辑和语法分析,若发现梯形图有错误,便生成相应的错误提示信息,并显示到用户界面。

3.2 基于“节点势”的梯形图到语句表解算的新策略

将梯形图逻辑关系转换解算为语句表一直是软PLC开发中的重点和难点,本文提出了一种转换解算的新策略,它基于二叉树的转换解算方法,但不同于传统的扫描分割图形构造二叉树法,而是一种按“节点势”关系构造二叉树的方法,它的指导思想是将梯形图图元间逻辑关系抽象为数值关系,量化地显示出梯形图的层次,从而以之精确地解析出图元之间的串、并联等关系。

本文首次提出了“节点势”这一概念,可以将它类似于电路中的电势理解。节点,即梯形图各图元间的连接点。节点势,即节点的势值。因为梯形图每个图元都有左右两个节点,因此每个图元拥有左节点势和右节点势。如图2所示,I0.0的左节点势=0,右节点势=1。

梯形图到语句表的转换解算的过程大体分为以下四步。

1)定义梯形图的“节点势”。按从左→右,从上→下的顺序多次扫描梯形图,按一定规则给每个图元左右节点赋值。通过各图元节点势的确定,就将梯形图图元间逻辑关系抽象为数值关系了,如左右节点势都相等的图元互为并联关系。如图2所示,I0.1与I0.6左节点势同为1,右节点势同为2,两者是并联关系。

图2 节点势示例

2)定义二叉树数据结构

typedef struct Tree

{ int index;//索引值

int type;//类型

char *opr;//根节点内容

struct Tree *lchild;//左节点指针指向的二叉树

struct Tree *rchild; //右节点指针指向的二叉树

int lenode;//左节点势值

int rinode;//右节点势值

BOOL restruct;//二叉树屏蔽标志

} DTree;

3)按从左到右,从上到下的顺序扫描梯形图,对每个图元(横竖线除外),构建对应的二叉树。然后依据二叉树间的节点势关系,循环构建新二叉树,屏蔽旧二叉树。直到现有的二叉树数目等于输出元件个数时,停止循环,完成最终构建,现有二叉树为最终二叉树。

4)运用递归算法,遍历最终二叉树,生成语句表,显示在主界面上,同时生成编译数据及文件。

该策略基于二叉树的解算方法,但通过梯形图“节点势”的确定,将梯形图图元间逻辑关系抽象为数值关系,能大大降低二叉树算法的时间和空间复杂度,思路简单清晰,运行快速精确。并且能够解算多支梯形图及复杂的逻辑关系,在执行过程中对梯形图进行逻辑查错和规范检查,该解算方法还能够为其他类似图形关系的解算提供参考,具有普遍适用性。

4 通信监控模块

本系统既可以单独仿真运行,又可与软PLC执行系统组成一个完整的系统,为此,提供了与执行系统通信的串口,既可通过虚拟串口软件与基于PC的软PLC执行系统连接运行,也可通过实际串口与基于嵌入式的软PLC执行系统连接。串口通信采用事件驱动的接收方式,利用MSComm 控件进行串口初始化、接收数据、发送数据等串行通信管理。

本系统通过串口下载编译数据到执行系统,并与之进行联调。执行系统执行编译数据后刷新输出映像区,开发系统获取执行系统的运行状态并在梯形图界面上显示,以监控执行系统的工作状态。

图3 软PLC编程开发系统主界面

5 测试结果

该软PLC开发系统主界面主要有梯形图编辑区、指令区和信息输出区三部分。如图3所示,在中间编辑区绘制了两支简单的梯形图,经过编译解算,在右方指令区显示出它们对应的语句表程序,在下方信息输出区显示出对应的提示信息。当连接监控时,开发系统通过串口获取执行系统的工作状态并在梯形图界面上显示,某触点或线圈操作数为1时对应的图元加粗变红。该实例证明,本系统可以解算多支梯形图,并且实现定时器计数器等复杂元件的编辑及编译解算。

6 结束语

本文设计实现了一种软PLC编程开发系统,并提出了一种简单易用的梯形图到语句表转换的新策略。经过大量测试证明,该系统能够方便准确地完成梯形图程序的开发和解算,并且在执行过程中完成对梯形图的逻辑查错和规范检查。如今国外的软PLC编程系统是工控市场上的主流,国产的相对较少而且不成熟,因此,本文对推进软PLC的国产化有着重要意义。

[1]赵雨生, 高美凤. 一种梯形图编程系统的研究与实现方法[J]. 工业控制计算机, 2008, 21(6): 34-35.

[2]KONG Yaguang, WANG Wenhai. Realization of Control Algorithm Editor Based on IEC61131-3[J].Computer Engineering, 2006, (18): 283-284.

[3]石锐, 周雷, 杨正益. 软PLC梯形图到语句表转换新策略的研究[J]. 计算机工程与应用, 2010, 46(18): 244-248.

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

[5]王亚男, 陈婵娟. 基于Flex与Bison的软PLC编译模块的研究[J]. 制造业自动化, 2011, 33(17): 76-79.

猜你喜欢
二叉树梯形图串口
基于双向二叉树的多级菜单设计及实现
基于故障二叉树的雷达发射机故障诊断*
基于NPORT的地面综合气象观测系统通信测试方法及故障处理
二叉树创建方法
浅谈AB PLC串口跟RFID传感器的通讯应用
一种基于SVM 的多类文本二叉树分类算法∗
基于EM9000工控板高性能双串口通信模型设计与实现
PLC梯形图编程系统应用分析
船舶电子设备串口数据的软件共享方法
PLC编译功能的实现