基于CNC的软PLC虚拟机中元件库的研究*

2015-06-11 00:45陆丽丽季建华
机械研究与应用 2015年3期
关键词:链表梯形图数据结构

陆丽丽,季建华

(江苏城市职业学院,江苏南通 226006)

0 引言

数控是用数字信息对机械运动和自动化加工过程进行控制的技术,是现代国家制造业信息化水平和国际竞争能力的象征,已有50多年的发展历史。如今,随着市场竞争日趋激烈,被加工零件的精益求精及微型计算机的迅猛发展,软PLC发展成为进一步提高数控技术、实现数控系统开放化的重要手段。软PLC能够充分利用工业控制计算机(IPC)或嵌入式计算机(EPC)的硬件和软件资源,改变传统硬件PLC繁琐、呆板的缺点,全部用软件灵活地来实现数控功能[1]。

1 软PLC虚拟机系统

在数控机床运行过程中,PLC是机床本体与数控装置之间的桥梁。它根据CNC内部标志以及机床的各控制开关、检测元件、运行部件的状态,按照程序设定的控制逻辑,完成对刀库运动、换刀机构、冷却液等的控制功能。

1.1 软 PLC

软PLC采取基于虚拟机的解决方案,分为开发系统和运行系统两部分。开发系统实际上就是编程器,完成调试和编译工作。运行系统是软PLC的核心,完成输入处理、程序执行、输出处理等工作,如图1所示。

图1 软PLC系统的总体结构

1.2 软PLC虚拟机

软PLC虚拟机是相对我们平常所用的实际的计算机而言的一个概念,它是一个假想的模拟实际计算机进行工作的软件系统,由编译器、解释执行器、元件库和管理模块组成,可以完成对图文件的编译、中间代码生成和解释执行,对PLC文件的加载和执行(见图2)。其中,元件库提供了梯形图元件的相关信息,作为一个单独的模块可动态升级,可根据用户的需要进行裁减。这种架构给PLC虚拟机带来了极大的灵活性和可扩展型,是数控系统实现开放化的关键技术。

图2 软PLC虚拟机的结构

2 软PLC中元件库模块的研究

2.1 元件及元件库

梯形图中的触点、线圈和用方框表示的功能块,把这些绘图元素叫做“元件”[2](见图3)。由于“元件”在梯形图中作为梯形图的绘图元素,因此元件中包括其所具有的自身参数(输入参数、输出参数)和功能函数(逻辑行为)。

图3 梯形图程序举例

所有的元件按照一定的分类规则组合在一起,称元件的组合为元件库。元件库是软PLC虚拟机中独立的模块,包含元件的绘图信息和行为信息,提供了一组对外访问的接口,其它模块通过这些接口获取希望获得的信息。

2.2 元件库的数据结构

由于标准中规定的元件数量较多,为了便于信息查找,可对其建模过程采用按类型分组的策略,功能相近的元件分在同一个元件组中,采用的数据结构是链表。每个元件库包含一个元件组链表,该链表的结点为元件组的信息,每个元件组又包含一个元件链表,结点为元件。标准元件库数据结构如图4所示。

2.3 开发语言及编程工具的选择

开发元件库,可以选择当今业界流行的C++语言,C++是C的派生,是C的超集,是一种面向对象的程序设计语言(Object-Oriented Programming Language,OOPL),具有封装性、继承性、多态性等独到之处,使程序结构更加清晰,更易于扩充和维护,更加灵活,程序设计者能更好地理解和管理庞大的复杂程序[3]。

图4 元件库的数据结构

3 标准元件库的创建

3.1 实现原则

元件库创建的过程中,采用了C++标准程序库,提供了容器和泛性算法。比如:实现元件库模型中的实体类时,使用了标准库中提供的元素,包括pair、wstring等类型和 list、vector等容器,直接调用容器类提供的成员函数,不但避免了自己设计链表、动态数组等数据结构容易产生的错误,而且对软件的可靠性有了很大的提高,大大提高了开发效率和程序质量。

3.2 元件库的组类

元件的信息分成两部分描述[4]。一部分为静态信息,包括绘图信息和参数信息,抽象出元件基类CBaseUnit,具体的元件类都继承自元件基类,例如元件ID、元件大小、元件名称和参数表等属性的初始化和描述;另一部分为动态信息,也就是元件的行为信息,抽象出行为抽象基类CDictate,具体元件行为的描述都继承自该类,例如纯虚函数Run。通过两部分信息结合,完成对元件描述和类型声明。

由于元件较多,所以采取了分组策略,将标准中规定的功能相关的元件放在一组当中,产生元件组。

对元件组类的声明可以如下:

class CUnitGroup

{

public:

CUnitGroup();

virtual~CUnitGroup();

void AddUnit(CBaseUnit*pUnit);//向元件组中添加元件

成员函数定义略……

private:

unsigned int m_nID;//组ID

std::wstring m_szName;//组名称

std::list< CBaseUnit* > Units m_units;//元件组中包含元件链表

};

元件组实例对象可以通过调用AddUnit成员函数向元件组添加元件,使得元件组中成员变量链表的节点是元件对象的指针,对元件的操作可通过遍历元件组来实现。

3.3 标准元件库的实现

标准元件库中共包括触点组、线圈组、程序控制组、计数器指令组、定时器指令组、数学运算组、逻辑运算组等多个元件组,将标准中的元件按功能分配到相应的元件组中。在元件库中需要将具体的元件组组织起来,并且通过公有接口提供给系统中的其它模块。针对元件库的功能出元件库基类CBaseUnitTempl,在该类中包含成员变量std::list<CUnitGroup*>namedUnitGroups,该成员变量把元件组的指针作为链表的节点,可以把元件组对象的指针存放在该链表对象namedUnitGroups中。此外,该基类主要包含了一组虚函数,标准元件库继承该基类,并对继承的接口进行重写,元件库中接口按功能主要分为以下4类[4]:

(1)元件库信息相关接口,包括获取元件库ID号、是否是标准元件库等接口。

(2)元件组信息相关接口,包括获取元件组名称、各个元件组中元件的数量、创建新的元件组等接口。

(3)判断元件类型的接口,包括判断元件是否为直线、是否为触点等接口。

(4)元件信息相关的接口,包括获取元件参数类型、获取元件大小、获取元件名称等接口。

4 总结

开放式数控系统是当今数控技术的发展方向,软PLC因具有更好的数据处理能力、网络通讯能力和开放的体系结构,将传统的硬PLC替而代之。笔者以FANUC数控系统作为硬件平台,对软PLC技术进行分析,尤其是元件库模块进行了研究设计,提出了新的解决方案,解决了传统封闭式数控系统兼容性差、功能不易扩展等问题,提高数控系统的开放性、降低成本。

[1] 任玉田,包 杰,喻逸君,等.新编机床数控技术[M].北京:北京理工大学出版社,2005:1-2.

[2] 高钦和.可编程控制器应用技术与设计实例[M].北京:人们邮电出版社,2004:1-2.

[3] 马玉敏,樊留群,李 辉,等.软PLC技术的研究与实现[J].机电一体化,2005(3):14-27.

[4] 苏 中,李兴成,李 擎,等.基于PC架构的可编程序控制器[M].机械工业出版社,2005.

猜你喜欢
链表梯形图数据结构
基于二进制链表的粗糙集属性约简
跟麦咭学编程
基于链表多分支路径树的云存储数据完整性验证机制
基于VC的梯形图编程软件开发技术
继电器电路转为梯形图教学经验浅谈
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
高职高专数据结构教学改革探讨
PLC梯形图程序设计技巧及应用
链表方式集中器抄表的设计
TRIZ理论在“数据结构”多媒体教学中的应用