谢劲松,梁宏斌
(辽宁科技大学 机械工程与自动化学院,辽宁 鞍山 114051)
随着开放式数控系统的发展,采用软件控制缩小硬件规模、降低成本是目前高端数控机床的发展趋势。软PLC 以软件形式实现了传统PLC 的控制功能,具有开放的体系结构、强大的网络通讯功能和更强的数据处理能力等特点[1]。目前,国外已有成熟的软PLC 产品,如:Servo Works 软件中的PLC 引擎模块、SOFTPLC公司的SoftPLC、西门子的SIMATIC WinAC 等等。国内对软PLC 也进行了研究,取得了一些进展[2-3]。文献[4]给出了一种基于DSP/BIOS 嵌入式的软PLC 执行系统构架,文献[5]提出了一种基于μC/OS-II 的软PLC 的实现方法,从一定程度上提升了软PLC 的稳定性,但他们采用的是专用操作系统,不符合开放的要求和趋势,且软PLC 控制系统的功能和稳定性与国外相比有很大差距。
五轴数控铣床具有很高的加工精度和效率,能够一次性完成三轴铣床很难加工的大型、复杂的自由曲面[6],但需要其软PLC 控制系统更快地做出响应。因此,性能稳定的软PLC 和更快的数据传输速率非常重要。文献[7]提出了一种基于SERCOS 接口的软PLC 系统,但未对软PLC 运行系统深入 分析,文献[8]则详细描述了软PLC 多任务的实现方法,但未给出实现函数等细节。因此,本文针对上述问题对五轴数控铣床的软PLC 控制系统进行了研究。
与其它开放的操作系统相比,Windows 具有丰富的软件资源和极高的市场占有率,有利于多任务软件的开发。但它不是实时操作系统,无法满足软PLC 实时性的要求[9]。可向WindowsXP 系统内核嵌入实时扩展子系统RTX (Real-Time Extension)解决实这一问题。所以本文选用WindowsXP +RTX5.0 作为软PLC的开发和运行的软件平台,既符合开放的要求,又能满足数控系统和软PLC 的实时性。
五轴数控铣床软PLC 的控制流程如图1 所示。当有加工信息输入时,首先软CNC 进行分析、译码,然后将M、S、T 等开关量信息交由软PLC 进行处理,最后将CPU 处理完的开关量信息通过I/O 接口输出,通过控制主电路电器元件通断来驱动铣床部件动作。
图1 五轴数控铣床软PLC 的控制流程
软PLC 控制系统由开发系统和运行系统两部分组成。开发系统是一个标准通用的开发环境,采用国际标准IEC61131-3 中的五种开发语言编写用户程序,利用通信接口模块将可执行的目标代码传送给运行系统。运行系统是整个软PLC 控制的核心,负责解释和执行用户程序,将开关量控制信息输出给电气部分,以驱动设备动作。
合理的设计软PLC 的结构有利于提升控制系统的稳定性。根据软件组件的思想,可将软PLC 控制系统分为几个具有独立功能的模块,模块间定义规范的接口[10]。五轴数控铣床软PLC 控制系统总体结构如图2 所示。
由于软PLC 开发系统只是提供一个开发环境和控制方案,而目标代码的执行是由运行系统完成,因此下面重点对软PLC 运行系统各模块进行分析。
图2 软PLC 控制系统结构框图
系统管理模块是软PLC 运行系统的“大脑”,用于运行时分配系统资源,调度任务线程并监控系统的运行状态。在一个扫描周期内,如何调度各任务线程是保证软PLC 稳定运行的关键。本文利用RTXAPI 函数库中提供的RtSetThreadPriority()函数根据执行的先后顺序设定各任务线程优先级,当某一任务事件触发后,线程队列中等级最高的线程优先获得CPU 时间片被执行,从而实现任务线程的合理调度。任务线程执行过程如图3 图示。
图3 软PLC 任务线程执行过程
通讯接口模块用于建立软PLC 运行系统与开发系统、软CNC、人机操作面板以及其它应用程序进行数据通讯任务。其中,软PLC 开发系统与运行系统采用COM 组件方式进行通讯,即开发系统作为客户端向运行系统传送目标代码,运行系统作为服务器端接收目标代码并反馈软PLC 的运行状态。
软PLC 运行系统与软CNC、人机操作面板通过访问自创建的共享内存区单元PLC_CNCbuffer、PLC_Platebuffer 进行数据交换。由Communication 类来实现上述通信任务。
存储模块用来保存软PLC 运行过程中所需的数据、操作指令和数据地址,可表示为:存储模块= 数据地址 + 数据 + 操作指令,因此将其分为三个子模块:用户程序存储模块、数据存储模块和指令存储模块。
用户程序存储模块用于保存开发系统编译完成的目标代码。这些目标代码是C/C++ 语句;例如AND X0 操作对应如下C++代码[11]:
{strcpy(m_statement. m_basicorder. address[0],"X0"); //提取软元件X0 中保存的数据m_statement.m_basicorder.funcname =INSTRUCTION_AndBit;
//提供对数据X0 的操作p_execute - >pstru_funclist- >insertAtBack(m_statement); //更新链表数据域中的数据}
数据存储模块用于存储输入/输出端子的状态、内部继电器、定时器的状态和功能块逻辑运算的中间结果等数据。这些数据作为全局变量供软PLC 控制系统各模块进行访问和修改。在执行用户程序过程中,CPU 根据指令存储模块中指令参数的地址来访问数据存储模块区,获取数据进行逻辑运算。
指令存储模块用于存储PLC 指令。每条指令对应一个C++函数,函数中封装了对数据的操作。例如:逻辑与指令对应函数ReadInputAndBit(),具体实现如下:
程序执行模块用于解释和执行目标代码,通过调用相应的C++函数对堆栈进行操作,获取控制信息。下面以五轴数控铣床主轴正转梯形图程序(图4)说明软PLC 指令的执行过程。
图4 五轴数控铣床主轴正转梯形图程序
图3 所示梯形图程序执行过程如下:
第一步:清除堆栈stack,遇到X0 串联,将X0 压入栈顶;第二步:遇到X1 串联,弹出栈顶元素,将X1 和X0 逻辑或运算的结果压入栈顶;第三步:遇到并联分支点A;创建临时变量temp =0,将栈顶元素的值赋给temp,并弹出栈顶元素;第四步:遇到X3 串联,将X3压入栈顶;第五步:遇到X4 串联,弹出栈顶元素X3,将X4 与X3 进行逻辑或运算,结果压入栈顶;第六步:遇到并联分支点B,弹出栈顶元素,将栈顶元素与temp进行逻辑或运算,结果赋给temp;第七步:遇到Y0 串联,将Y0 压入栈顶;第八步:遇到Y1 串联,弹出栈顶元素Y0,将Y1 和Y0 逻辑与运算的结果压入栈顶;第九步:遇到并联分支点C;弹出栈顶元素,将栈顶元素与temp 进行逻辑或运算,结果赋给temp;第十步:遇到X2 串联,将temp 与X2 逻辑与运算的结果压入栈顶;第十一步:遇到Y0 线圈,将栈顶元素的值赋给Y0 并弹出堆栈;第十二步:将Y0值输出,清除堆栈stack。
程序执行模块不断循环解释执行软PLC 指令,直到执行END 指令。软PLC 程序执行模块工作过程如图5 所示。注意:这里的跳转指令不是指PLC 系统中的跳转指令,而是指梯形图程序中复杂的并联分支块引起的跳转。
图5 软PLC 解释和执行指令流程图
I/O 接口模块是软PLC 与输入输出设备进行数据交换的通道,用于将I/O 板卡采集到的机床信号写进输入映像寄存器,同时将输出映像寄存器中软元件的状态输出给端子。I/O 读写过程分为两步:第一,根据五轴数控铣床电气I/O 端口分配表在软PLC 系统内存中建立对应物理I/O 节点变量,完成端口配置;第二,调用I/O 接口模块内部的读写函数,在下一个扫描周期开始将软元件状态输出,完成数据交换。
为智能读取数据和进一步提高I/O 接口物理层的开放性,软PLC 采用图6 所示结构对I/O 数据存储区的变量统一编址。
I/O 接口模块采用按位、字节、字和双字的寻址方式向读写函数提供操作数地址,并把I/O 数据存储器变量区划分为6 个区域,每个区域存储相应变量数据。其中,按位寻址的尾部编址采用了字节号加分隔符加位号的形式。
图6 按字节、字和双字方式编址
SERCOS(Serial Real-time Communication System)
是一种用于CNC 和数字伺服传动系统之间通信的数字接口和数据交换协议,能够实现工业控制计算机与数字伺服系统、传感器和可编程控制器I/O 口之间的实时数据通信[12]。SERCOS-III 是SERCOS 发展的最新阶段,采用光纤传输,速率高达100Mbit/s;可利用软件SoftSERCANS 对主站进行控制,缩减了数控系统的硬件;此外还具有双环型拓扑结构[13],增强了系统的安全性。
软PLC 控制系统采用SERCOS-III 接口可缩减数据采集的时间,进一步提升系统的响应能力、开放性和可靠性。基于SERCOS-III 接口的开放式数控系统结构如图7 所示。
图7 基于SERCOS-III 接口的开放式数控系统结构
SERCOS-III 采用报文形式实现主从站的通讯,报文有三种类型:主站数据报文MDT、应答报文AT 和以太网报文。其工作时序如图8 所示[14]。
SERCOS-III 主站在接收到AT 后将所有报文信息存储到SoftSERCANS 创建的共享缓存区。软PLC 和软CNC 通过指针访问该存储单元获取所需数据。类CPLCIOControl 提供了访问该共享区域的接口。
图8 SERCOS-III 工作时序
软件平台为WindowsXP +RTX5.0,硬件平台为PC。
利用VC++6.0 编辑开发的软PLC 运行系统仿真界面如图9 所示。运行软PLC 运行系统,当点击主轴正转按钮时,所对应的软逻辑在输入映像区的状态发生改变,通过调用程序中的指令,将主轴正转控制信号输出,主轴正转指示灯亮。
经图10 所示五轴数控铣床测试,软PLC 控制系统实现了对五轴数控铣床开关量的控制。
图9 五轴数控铣床软PLC 运行系统仿真界面
图10 XKV715 五轴数控铣床
通过研究传统PLC 对五轴数控铣床开关量信号的控制,利用C++面向对象技术和模块化的思想编辑开发了软PLC 控制系统,实现了对五轴数控铣床开关量的控制,进一步增强了数控系统的开放性,促进了全软件开放式数控系统和软PLC 技术的进一步发展。
[1]罗燕华,何岭松,张登攀.一种软PLC 技术的研究与实现[J]. 计算机与数字工程,2007(35):168 -171.
[2]毕 辉,程良鸿. 关于软PLC 技术的研究及发展[J]. 机电产品开发与创新,2006,19(2):118 -119.
[3]张 磊,师 卫. 软PLC 运行系统的研究与实现[J].科技情报开发与经济,2008,18(11):164 -165.
[4]李建伟,赖乙宗,李 松等. 基于DSP/BIOS 的PLC 执行系统开发[J]. 电子设计工程.2013,21(5):163 -165.
[5]张小亮,成友东等. 基于μC/OS-II 的软PLC 的实现方法[J].机床与液压.2008(3):470 -473.
[6]任宝刚,刘杰,宋楠. 基于PMACII 开放式五轴数控机床的研究[J]. 机电工程技术,2007,36 (1):22 -24.
[7]白艳艳. 基于SERCOS 接口的开放式数控体系中的软PLC 系统[J]. 机械管理开发. 2005(8):78 -79.
[8]马雄波,韩振宇,王永章. 基于RTX 的软PLC 多任务系统研究[J]. 组合机床与自动化加工技术,2007(1):35-40.
[9]白江,王宇晗,金永乔. 数控系统软PLC 模块的研究与开发[J]. 机床设计与制造,2011(2):138 -140.
[10]黄延延,林跃,于海斌.软PLC 技术研究及实现[J]. 计算机工程,2004,30(1):165 -167.
[11]李爽. 基于开放式数控系统的软PLC 开发系统的研究及实现[D]. 哈尔滨:哈尔滨工业大学,2006.
[12]梁宏斌,王永章. SoftSERCANS 技术及其在数控系统中的应用[J]. 计算机制造集成系,2004(11):1433 -1436.
[13]杨土权,邓则名. SERCOS III 在数控系统中应用的初步探讨[J]. 制造技术与机床,2009(2):172 -174.
[14]http://www.sercos.de/sites/default/files/sercos_iii_2012_en_web_0.pdf. 2012.12.