数控系统内部控制逻辑是由通用或内装式可编程控制器(PLC)来实现的。目前,PLC的编程方法主要有专用编程器和基于PC的软件编程器两种。当前,华中数控系统PLC控制是基于DOS环境使用C语言而设计的,该软件已经不太符合现代计算机大多采用Windows操作系统的实际要求,设计人员使用起来不直观、不方便,而且使用C语言编程同使用梯形图编程相比,对编程人员要求较高。根据这些情况,有必要研发一个基于个人计算机的能为用户提供直观、方便、高效的编程环境的PLC软件开发平台,使数控实验台在最大程度上发挥它的积极效用,使学生能够直观、方便地了解和掌握数控系统中PLC的编程和仿真操作。
1 华中数控系统中的可编程控制器
华中数控世纪星采用的是“内装型”PLC。和CNC共用一个CPU、输A./输出、电源。该PLC是从属于CNC装置的一部分,与CNC之间的信号传送在CNC内部实现,PC与机床侧的信息传送则通过CNC的I/O接口电路实现。由于CNC的功能和PLC的功能一起考虑,因而这种类型的系统在硬件和软件的整体结构上合理、实用、性能价格比高。PLC和CNC之间没有多余的连线,而且PLC上的信息可以在CNC的显示器上显示,PLC的编程更为方便,故障的诊断功能也有所提高。
2 数控PLC编程系统的整体设计
2.1 整体设计方案
数控机床的控制。PLC主要完成与逻辑运算有关的一些动作,没有轨迹上的具体要求,它接受CNC的控制代码M、S、T等顺序动作信息。对其进行译码,转换成对应的控制信号控制辅助装置完成机床相应的开关动作,如工件的装夹、刀具的更换等一些辅助动作;它还接受机床操作面板的指令,一方面直接控制机床的动作,另一方面将一部分指令送往CNC用于加工过程的控制。PLC内嵌在数控装置中,可以进行读写操作,借助CNC系统的全部硬件资源,具有友好的界面接口,便于用户编程和操作。基于Windows系统的图形开发系统,进行图形化编程。
在数控器系统中,CNC和PLC协调配合共同完成对2.2 开发工具的选择
根据设计需要选择C++Builder 5.0为开发工具,该工具是基于Microsoft公司的32位Windows系列操作系统的可视化开发工具,使用的程序语言是C++语言,既可进行过程化程序设计,又可进行面向对象的程序设计,强调对高级抽象的支持,用它开发出的应用程序具有可重用的特点。采取面向对象技术,高质量的代码能有效降低软件的复杂度和提高开发效率。
2.3 数据结构的选择
数据结构类型的选择首先要满足对于待处理的数据元素及其关系的描述;其次在能够完整描述问题空间所有数据元素及它们之间关系的基础上,应采用尽可能简单的数据结构,以避免复杂数据结构带来的复杂操作;同时,应考虑与其他模块之间数据结构的通用性。基于以上考虑,作者采用具有线性特性的数据结构来实现梯形图编辑过程中元件添加、删除及修改时设计数据的保存和读取数据的高效性。
系统采用了标准模板库(STL)中的标准顺序容器list来存储设计过程中涉及到的梯形图数据,主要对象容器定义如下:
(1)梯级链表:Tyr,edef list<CRung*>CRungList;
(2)行链表:Typedef list<CRow*>CRowList;
(3)元件链表:Typedef list<CElement*>CEle—mentList o
通过list容器模板自带的push—back成员函数将要加入的对象压入到相应种类容器中,通过这样的操作把各对象逐一地放人容器中,再通过其他成员函数如ecase、insert等对它们进行操作,实现各对象数据的集中管理。
当用梯形图编程系统绘制梯形图时,每在计算机屏幕上画一个梯级,就会生成该梯级类的一个对象,同时程序把该对象加入到梯形图类中的CRungList链表当中;每画一个行,就会生成该行类的一个对象,同时程序把该对象加入到对应的梯级对象中的CRowList链表当中;每画一个元件,就会生成该元件类的一个对象,同时程序把该对象加入到对应行对象中的CElementList链表当中。所以,在CElementList链表中的一个结点对应梯形图中一个水平连线、元件或功能块等。
3 数控PLC编程系统中的梯形图元件基类设计
梯形图一般由多个不同的梯级组成,每一个梯级又可以由“一行”或“数行”组成,每行由一个或几个输入元件及一个输出元件组成。输出元件应出现在梯级的最右边,而输入元件则出现在输出指令的左边。
从计算机角度看,梯形图是一幅位图,它由一个个像素组成。计算机没有能力分析梯形图并判断出每个元件之间的逻辑关系,所以,需要找到一种描述方法,让计算机能“看懂”梯形图。为此,作者采用面向对象设计方法来开发梯形图编辑器。
首先分析和识别梯形图中的不同对象。根据对象的性质和功能抽象归并为不同类,建立类的层次结构。面向对象软件设计主要是类的设计,而不是对象的设计,因为各种对象是在梯形图对应的编辑过程中动态产生的。通过对系统的梯形图对象、梯级对象、行对象及元件对象进行抽象,建立了梯形图编程系统的类层次结构,其类层次结构中六大类对象为:梯形图类、梯级类、行类、梯形图画布类、梯形图文档类。元件库模型的基类CElement是从梯形图编程系统所支持的所有元件抽象出来的一个类,它定义了其他类的共有操作接口和属性,是其他图元类的父类。模块中所有的元件子类都根据C++的继承机制继承了基类的属性,并根据自己支持的图元形状有选择地重载基类相应的操作,以满足子类的需要。所以基类的定义在梯形图编辑模块的实现过程中是非常关键的一步。