张亚斌,洪荣晶,张奥敏
(1.南京工业大学机械与动力工程学院,南京 211800;2.江苏省工业装备数字制造及控制技术重点实验室,南京 211800;3.合肥通用无损检测技术有限责任公司,合肥 230000)
我国是机床制造生产的大国,但数控技术的应用水平并不高,因此制造业的整体水平受到严重的影响。传统的数控系统,如FANUC 和SIEMENS 等系统大多是私有的硬件和软件,兼容性不强[1]。随着技术的进步和市场竞争的加快,该系统封闭的内部结构已不能满足制造业发展中功能的扩展需求,因此,开放式数控系统的研究已成为一种趋势[2–3]。近年来,数控系统的开放性已成为学者研究的热点[4–5]。数控系统的开放目的是实现模块化、可扩展、可移植、可重构,以此来提高数控系统的灵活性,更加方便客户根据具体需求进行二次开发,并可以快速地响应新的加工要求。对开放式数控系统的研究,在某种程度上解决了当前市场需求变化与传统封闭式数控系统之间的矛盾,为提高我国数控技术发展水平,提供了很好的机会。
本文中硬件部分以固高运动卡为核心,设计与实现了数控齿轮倒角加工自动编程系统[6]。由工控机搭配固高运动卡构成的开放式数控系统,增加了系统设计开发的灵活性和开放性。采用层次状态机技术(HSM)和量子框架(QP)技术实现数控倒角机控制系统软件的设计,层次状态机对倒角机控制系统进行规划建模,并利用量子框架技术对状态机的内部进行实现,从而完成对倒角机控制系统模型的逻辑控制[7–8]。开发的控制系统具有开放性、通用性、可移植的特点。
硬件控制系统(图1)主要包含工控机(IPC)、运动控制器(GTS 系列)、交流伺服电机以及各类反馈传感器。
工控机选用研华系列,主要负责设定各轴的运动参数、存储数据和人机界面交互功能;运动卡选用固高公司的 GTS–800–PCI–VB 系列控制卡,核心部分主要由数字信号处理器(DSP)和现场可编程门阵列(FPGA)组成,可以实现同时控制8 个运动主轴,实现各种复杂的多轴运动。运动控制卡通过PCI 插槽内嵌入工控机中,通过PCI 总线进行二者间的通信。程序开发设计过程中通过调用运动控制卡提供的DLL 文件,整合处理相关参数,生成高速脉冲指令,驱动伺服电机进行插补运动。
在运动控制器上执行运动程序和在主机上执行运动程序的不同之处在于,运动程序对GT 指令的调用不必再通过PCI 总线,因此具有更高的效率,而且能够脱离主机单独执行,这样主机就能够把CPU 资源分配给其他任务,从而将主机从繁琐的运动逻辑管理中解放出来。
2.1 量子框架和量子编程
量子框架是一种状态机的框架,能够完成从状态机到程序代码的转换[9–10]。开发人员在完成活动对象的状态图绘制后,可以利用量子框架的规则将其转变为程序代码(C++),实现设定的功能。层次状态机理论的表达方式更加抽象,被嵌套状态通过被隐藏和显现,减少了系统在某一个时刻需要处理的细节数量。
在不同的时刻,数控系统往往有很多不同的任务,其行为通常称为有限的状态。事件是可以引起活动对象的状态机产生相关的响应动作,各状态之间的转换只能通过事件来交换。由事件产生触发,活动对象接受量子框架传送的事件实例,产生相应的动作响应,响应可以改变状态机的状态,称为状态行为的转换。针对具有特定状态行为的系统建立模型,有限的状态机(FSM)是最直观而简洁的方法。
量子编程是针对嵌入式系统特性的编程方法,它集合了直观的习惯方式、设计模式、具体实现等,使用户可以立即着手使用而不需要再去研究复杂工具。量子编程不同于面向对象编程(Object-Oriented Programming),面向对象编程在编程过程中,涉及类的边界往往会突然地停止,而量子编程则是把各个类的内部实现都留给过程技术来完成。因此,在某种程度上量子编程已经超过了面向对象编程。
层次状态机往往需要在各种不同的环境下规划运行,因此建立起能够多次重复使用的基础结构是很有必要的,而量子框架很适合于此[11]。量子框架的量子平台软件框架见图2。
2.2 基于量子框架的齿轮倒角数控系统体系结构
基于量子框架的齿轮倒角数控系统的重点在于设计完成不同的但有一定相似性的应用程序时,有时会有很相似的方法。在量子框架中,面向上层应用模块的部分称为平台无关部分,面向下层实时操作系统(RTOS)的部分称为平台相关部分。基于量子框架的齿轮倒角数控系统的结构见图3。
2.3 齿轮倒角数控系统软件应用模块
齿轮倒角数控系统软件层是软件系统的最高控制层,能够为用户提供不同的功能服务。该层可以直观实时地显示各种反馈数据、发送指令操作、修改相关的参数等。针对用户实际需求,可以添加不同的应用模块。数控系统与操作系统没有其他任何的直接交互,唯一的通信是和量子框架进行事件实例的交换。
图1 控制系统硬件结构Fig.1 Control system hardware structure
图2 量子平台软件框架图Fig.2 Quantum platform software framework
齿轮倒角数控系统根据各部分的功能一般可以划分为主界面、参数设定、G 代码生成、G 代码解释、控制器驱动、绘图测试和数据库管理等模块。量子框架的最小单元是活动对象,因此在基于量子框架的齿轮倒角数控系统中,各个功能模块还需划分成具体的活动对象。
参数设定活动对象:齿轮工件选择设置、机床的选择设置等。将设置好的各种参数以事件实例的方式出版给量子框架,量子框架将该事件实例传送给订阅的活动对象。比如,G 代码生成活动对象,控制器驱动活动对象等,其简化状态图如图4所示。
G 代码解释活动对象:获取G代码文件事件实例,提取G 代码中的运动信息、R参数和自定义参数的配置、对运算循环部分进行处理、G代码程序的预读和错误分析。将解释完的程序以事件实例的方式出版给控制器驱动活动对象和主界面活动对象。G 代码解释活动对象接收从量子框架传送过来的事件实例,直接进入解释代码子状态,它将分段完成解释工作,并将代码存入解释代码缓存区,接着进入速度预处理状态,从解码缓存区取出数据,进行速度预处理计算,形成多个指令段,以事件实例的形式出版给量子框架,由量子框架分发给控制器驱动活动对象和主界面活动对象。最终,进行驱动指令生成和加工信息显示等动作,其简化状态图如图5所示。
插补活动对象:管理运动控制卡的插补工作,其简化状态图如图6所示。在插补空闲时间状态,状态机接收到INTERP_EVT 事件后,系统进入插补工作状态,事件会根据直线、圆弧算法以及预处理信息,计算出每个插补周期内向各个电机轴应该发送的脉冲数,完成插补工作后向位置控制活动对象发送事件实例,驱动伺服电机运行。
系统启动时,由初始伪状态进入插补空闲状态处理程序,然后插补活动对象向量子框架订阅各类事件,比如获取GT_SetCrPrm、GT_GetCrPrm、GT_LnXY、GT_ArcXYR 指令,进行下一步插补计算,将数据写入缓存区等。当接收到INTERP_EVT 事件后,系统进入插补工作状态,同样要向量子框架订阅和发布各类事件实例,如读取缓存区指令等。当插补暂停状态发送Q_START_SIG 事件时,状态机恢复插补工作状态。
图3 数控齿轮倒角机系统体系结构图Fig.3 CNC gear chamfering machine system architecture diagram
图4 参数设定活动状态图Fig.4 Parameter setting activity state diagram
由工控机和固高运动控制卡搭建的开放式控制系统,调用控制卡提供动态链接库文件,可实现各种复杂的运动。同时,面对客户频繁的需求变化时,可灵活地改变系统的结构,在原有基础上增加新的成熟的技术。在控制器上执行运动程序,节省出大量的CPU 资源,更便于上位机非实时性任务的执行。同时,也大大提高了加工的效率。
根据在量子框架的建模工具中规划的倒角机床的状态图,开发数控倒角机床加工软件。数控倒角机床主要用于齿轮齿廓的倒角。图7是试验平台软件图。图8是开发调试硬件平台,正在测试运行。
相较于传统的面向对象的设计思想,层次状态机(HSM)的方法可以更自然地呈现各模块状态之间的嵌套关系。最后,再利用量子框架技术将绘制好的状态图通过一些简单的编程规范转变成C++代码,从而完成整个系统模块的实现。该方法的优点可归纳为以下两点:(1)程序的层次分明、结构清晰、通俗易懂;(2)可以更便捷地排错、修改程序和移植模块。
设计了一套用于齿轮倒角加工自动编程控制系统。该系统充分利用工控机(IPC)和运动卡搭建的开放式数控系统的优势,设计和实现了用户管理、机床参数管理、倒角加工参数设置、绘图仿真等功能。测试结果表明:
(1)在基于量子框架的齿轮倒角数控系统中,可以针对具体的功能需求,很方便地调整控制系统的结构,包括添加或删除相应的子模块, 而不需要改动底层的实时操作系统,实现了控制系统应用层面上的开放。
(2)在规划活动对象的状态图时,量子框架中的建模工具使得规划工作更加便捷与清晰。同时,量子框架还有一套完整的基础代码,能够实现自动生成代码的功能,不需要编写大量冗余的程序。
图5 G代码解释活动对象状态图Fig.5 G code explaining activity object state diagram
图6 插补活动对象状态图Fig.6 Interpolation activity object state diagram
图7 数控倒角加工软件的示例测试Fig.7 Example test of CNC chamfering software
图8 开发调试硬件平台Fig.8 Development and debugging of hardware platform
(3)在量子框架的内部使用事件处理机制,解决了多线程过程中的并发问题,减少了系统运行出现死锁、竞争等问题,大大提高了编程控制系统的可靠性和安全性。