首页 > 范文大全 > 正文

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

开篇:润墨网以专业的文秘视角,为您筛选了一篇软PLC开发系统的设计与实现现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:介绍了软plc开发系统的构成和功能,并针对梯形图编辑到目标代码生成的过程,论述了编辑模块、编译模块和仿真模块的设计方案。首先,利用Visual Studio 2005建立梯形图编辑界面和梯形图组件库,实现组件调用和梯形图编辑功能;其次,根据梯形图的构成特点,通过一定的扫描规则来构成二叉树,并通过后序历遍算法来获得指令表;然后,为了实现编辑环境和运行环境的高效通信,通过查表的方式将指令表转换为较为简单的目标代码;最后,建立仿真环境来验证编程的正确性。

关键词:软PLC; 梯形图; 指令表; 二叉树

中图分类号:TN91934 文献标识码:A 文章编号:1004373X(2012)10001503

基金项目:国家863计划资助项目(2009AA04Z111);广东省重大科技专项项目(2010A080401006)0 引 言

传统PLC是一种高效可靠的自动化控制技术,被广泛应用于各种工业场合,然而开放性差、通用性差和价格昂贵等问题,成为了该技术发展的瓶颈。随着计算机技术的不断发展和PLC的IEC611313国际标准的制订[1],软PLC技术应用而生,突破了传统PLC的局限性,逐渐被应用于各种自动化控制领域。所谓软PLC技术,就是使用PC机作为硬件支撑平台,利用软件实现标准硬件PLC的基本功能,或者说,将PLC的控制功能封装在软件内,运行于PC的环境中[24]。

1 系统的结构及功能

如图1所示,软PLC系统由编辑环境和运行环境组成。其中,编辑环境运行于PC上,为用户提供PLC程序的开发条件,并生成目标代码;而运行环境以下位机为基础,对编辑环境生成的目标代码进行解析和执行,控制I/O完成动作。本系统以Windows XP 操作系统及Visual Studio 2005开发工具为软件平台,设计并实现了软PLC系统的编辑环境。

图1 软PLC系统构成该编辑环境主要由PLC梯形图语言编辑模块、编译模块和仿真模块组成。各模块的功能如下:

(1) 编辑模块:由梯形图组件库及梯形图编辑界面2部分构成,实现梯形图的管理和编辑(图元添加、删除、复制、剪切、粘贴、撤销、重复),存储和显示,以及语法查错等功能。

(2) 编译模块:扫描PLC梯形图程序,将其转换为指令表语言,并生成一定格式的目标代码。

(3) 仿真模块:模拟下位机执行程序的过程,验证梯形图程序的逻辑正确性。

PLC梯形图编辑环境采用MFC文档/视图结构,其编辑界面由工程管理窗口、梯形图编辑窗口、编译信息窗口和图元工具栏等部分组成,如图2所示。为实现上述各个部分的功能,本系统定义了框架类、视图类、文档类和组件库管理类,分别负责视图与文档的协调、梯形图的显示、梯形图图元信息的储存和恢复以及梯形图组件库的调用。

图2 梯形图编辑界面2.2 梯形图组件库的设计

梯形图组件库是根据IEC611313进行开发,其作用是为用户提供梯形图基本元素进行编程开发。梯形图的元素包括很多类型,其中包括基本类型(触点、线圈、定时器、计数器等)和特殊类型(计算功能块,运动控制块等)。

由于组件库中的梯形图元素均具有相似性,因此可以利用基类对所有元素进行封装,形成统一的编程接口,从而采用继承的方式表现各元素的多态性。

为了向编辑环境提供梯形图图元,实现PLC梯形图功能,本系统将采用动态链接库的形式进行组件库设计,编辑环境可通过动态链接库的相关函数,来调用组件库里面的基本元素。

主要的接口函数及功能如下:

(1) GetLDElementNum:获取组件库中梯形图元素数目;

(2) GetLDElementClass:获取组件库中梯形图动态类型,用于动态创建元素;

(3) GetLDElementMenuName:获取组件库中梯形图元素菜单名称,用于生成菜单栏;

(4) GetLDElementIcon:获取组件库中梯形图元素图标,用于生成工具栏;

(5) LDCreateFromString:获取组件库中元素创建函数,使元素能够从保存中恢复。

3 软PLC的编译模块

3.1 指令表转换

梯形图形象直观,与电气控制原理图相呼应,但对于PLC来说是不可执行代码,无法直接运行[5]。在完成梯形图编辑后,需要将其转换成更接近机器语言的指令表语言。由文献[6]可知,梯形图的“能流”是从左边母线出发依次通过各个元素流向右边的母线,具有“从左到右,从上到下”的特点。根据这一特点,可以将梯形图中每个元素看作是一个节点,而相邻两个元素之间的串联(或并联)可以抽象为两节点的连接关系,因此梯形图中的每个阶梯均可以看作是一棵顺序二叉树。构造二叉树的步骤如下:

(1) 通过从左到右从上到下扫描阶梯,判断元素是否有后竖线,如没有后竖线,则继续向右扫描,直到出现后竖线,记录该元素所在行列位置。扫描过的元素若含多个,则每扫描到两个就建立一个AND/ANI节点,且为父节点,而扫描到的两个元素均为子节点,先扫描的是左节点,后扫描的是右节点。该子树作为左子树,继续参与后面新节点的建立。若扫描到的节点为输出元素时,则输入节点与输出节点建立一个OUT或者其他输出标识的节点为父节点,非输出节点为左子节点,输出节点为右节点。

(2) 从当前行的下一行的前竖线出现位置开始向右扫描,当存在元素时,建立一个OR节点,并继续向右扫描,判断其是否有后竖线,当该元素后面出现后竖线则停止该行扫描。扫描过的元素若含多个,按照步骤(1)建立父节点及左右子节点。

(3) 若当前行的元素仍有后竖线,则递归执行第2步,直到扫描完这个阶梯。

通过上述过程,对整个梯形图程序的各个阶梯进行二叉树的构造,并执行二叉树的后序遍历算法即可得到指令表。