开放式数控系统中软PLC系统的开发及应用*

2010-09-29 12:17裴海龙
制造技术与机床 2010年8期
关键词:梯形图小格数控系统

王 飞 裴海龙

(华南理工大学自动化科学与工程学院,广东广州 510640)

PLC是数控系统和数控机床间的常用接口,主要是处理各种开关量信息。它根据数控系统内部系统的状态和外部行程开关、传感器、按钮等开关量的状态,按照用户预先规定的逻辑关系,对机床的冷却、润滑、主轴等进行控制[1-2]。本文中的软 PLC系统基于RTLinux实时操作系统,采用IEC 1131-3标准,采用C语言和GTK语言进行代码的编写。该系统基于华南理工大学自动化学院的HL-B0408数控系统进行设计,并成功应用于该系统。实验表明,该系统可以满足现有数控系统的要求。

1 HL-B0408数控系统简介

正如上面提到的该软PLC系统是应用于HLB0408数控系统,在此对HL-B0408数控系统进行简单介绍。HL-B0408数控系统是由华南理工大学自动化学院开发的一款高精度、高性能的数控系统,系统由多个功能模块组成,分别为人机交互的图形用户接口模块,任务解析和调度模块,开关量传输模块,开关量输入输出及运动控制模块,各模块之间的结构如图1所示。

GUI(图形用户接口)的主要功能是提供一个友好的图形画面,显示诸如位置、模式、刀迹模拟等信息;同时实现了人机交互功能,接受外部用户指令,如文字输入,开关、按钮动作等。并且将用户的动作转化为相应的内部指令,然后传送给数控软件的主体程序并由主体程序来实现;同时,从图1还可以看到NC代码往任务解析模块发送也是通过GUI部分实现。

任务解析和调度模块由解析和调度两部分组成。任务解析模块主要由解析器组成,主要完成对GUI传送过来的NC代码队列的解析,把NC代码队列转化成开关量模块和运动控制模块能够识别的命令队列。任务调度模块主要完成的功能是把任务解析模块产生的开关量信息(冷却、润滑、回零等)和运动控制信息(进给量等)分别发到开关量模块和运动控制模块。

开关量输出和运动控制模块是一个实时模块,主要实现开关量输出和插补运算功能。根据插补运算和控制算法产生的加工轨迹,并通过驱动程序产生相应的脉冲信号驱动伺服电动机进行位置控制。

2 通过软PLC对HL-B0408数控系统进行改进

开关量输出和运动控制模块主要完成运动控制的功能,而运动控制要求很高的实时性,但原 HLB0408数控系统中因为加入了开关量的输出而对实时性造成了一定程度的影响。所以本课题便提出了利用软PLC实现开关量的输出,从而在一定程度上解放运动控制模块。改进前后系统软硬件接口分别如图2、3所示。

3 软PLC系统的设计开发

根据功能要求,该软PLC系统应该由以下两部分组成:梯形图编辑界面和驱动模块,下面分别介绍。

3.1 梯形图编辑界面的设计

按照硬件PLC所具有的功能[1],笔者认为该软件PLC梯形图编辑界面应具有以下基本功能:

(1)实现梯形图的绘制功能;

(2)实现新建、打开、保存和退出等功能;

(3)实现增加、删除、修改编程页面的功能;

(4)实现梯形图中元器件的属性修改功能;

(5)实现IO信号处理功能;

(6)实现手动控制触点开断功能。

根据以上功能要求,该平台需有以下几个功能模块:梯形图的绘制和显示模块,梯形图编辑模块,元器件属性修改模块,IO信号处理模块和触点控制模块。这些模块都由GTK实现其图形界面显示,并通过相应的存储算法保存梯形图信息。整个程序的流程如图4所示。

3.2 梯形图编辑界面各功能模块的实现

各功能模块的界面操作部分都是通过GTK+实现的。GTK+是一个图形用户编程的接口工具,可以和多种语言绑定,并且具有跨平台移植的能力[3]。要实现绘制、修改、显示梯形图等功能,首先要解决的问题就是指令库的问题。常用的PLC指令库包括输入触点、输出触点、定时器、触发器等,这些指令都是通过GTK+的画图功能画出。

生成指令库之后就可以在PLC编程页面编制梯形图,程序中把梯形图编程页面划分为6×10个小格,指令器件的大小都和每个小格成倍数关系。除定时器和触发器占用2×2个小格,比较器占用3×1个小格外,其他指令器件各占用一个小格。在后面我们将介绍之所以采用这种方式是为了方便存取梯形图文件。

完成了梯形图的绘制之后就要处理梯形图的保存和打开功能,这也是编辑界面功能的核心。对于梯形图文件的保存是采用写文件的方式,即用fprintf()函数把梯形图写入指定文件,在文件中数据存储时的顺序按上面提到的6×10个小格(用两层for循环实现)进行,数据存取的格式为data1-data2-data3-data4。其中data1代表元器件的类型,data2代表该元器件是否与上层元器件相连,data3代表该元器件的数据类型是bit还是word,data4则代表该类型元器件的编号。当然这样的存取方式对于像输入输出触点这样的简单元器件不会有任何问题,但是当存储例如定时器和触发器这样的“大元器件”时则会出现以下两个问题:

首先,对于像定时器和触发器这些“大元器件”,除了上面提到的基本信息之外,还需要存储另外的信息。以定时器为例,我们定义了如下结构体:

由上面的结构体就可以看出,对于定时器不但要存储它的基本信息,还要存储例如Base(基底即换算倍数)、Preset(预设值)、InputEnable(输入使能端信息)等。因此我们建立了一个新的文件timers用来保存 Base和 Preset,则 Value=Base*Preset,用来显示定时器的设定值。

其次对于“大元器件”它们占了不止一个小格,这就会导致存储时的重复存储,当下次读取时就会出现问题,将会出现元器件重叠的现象。在此采取的方法是当检测到“大元器件”时,只有左上角的小格保留信息,其它置空。

当进行加载已有梯形图操作时,首先利用下面一段代码读取梯形图信息:

其中FileName中保存着梯形图信息,操作完成后,梯形图信息存入指针Lineok中,接着再存入相应的结构体中即可。当然这要经过一系列的转换,例如如何从数字信息得到元器件的信息。在此不赘述。

完成了梯形图的绘制以后,如果没有信号处理功能,也只是把一堆毫无联系的东西放在了一起。下面就介绍该软件中是如何处理信号的。首先看一下保存元器件信息的结构体:

在处理信号的过程中,是通过检测上个元器件的输出即DynamicOutput是否为1来决定该元器件的DynamicInput,是 1,则 DynamicInput=1,否则 DynamicInput=0。对于简单的元器件DynamicOutput=DynamicInput,而对于定时器和触发器等较复杂的器件,则还需检测DynamicState和DynamicVarBak,才能确定输出。

3.3 软PLC系统驱动模块的实现

由图3可以看到,该系统的驱动模块主要是用来完成开关量的接收(来自数控系统上层模块)和发送(发至底层硬件模块)。

上层开关量信号的接收是通过RTLinux提供的mbuffer共享内存机制实现的。mbuffer实现了内核模块和用户空间之间内存的通信,在上层模块和驱动模块中分别定义一片起始地址相同的内存空间,即如下所示:

其中Commonbuffer是申请内存空间的起始标识,这样当上层模块向内存IO_buffer中写入命令时,便可以相应的从Plc_buffer中读出。

开关量的下发主要是读写总线的操作。该系统所用总线为PC104总线,在发数据时首先要发一个控制字,选通相应的寄存器,然后再发数据到寄存器,这两个操作都是通过RTLinux提供的rtl_outb函数实现的。这个函数实现了字节的发送(发往并口),但是因为开关量操作都是位操作的,所以当发送数据时,首先要屏蔽其他没有操作的位。这里使用以下代码实现屏蔽位的操作:

其中:index是要发的IO信息处于一个发送字节的第几位;value标示是发1还是发0;outByte是最终发往底层的数据。

4 软PLC系统在数控系统中的应用结果

对以上设计的软PLC系统进行编译,生成可执行程序(对应界面显示部分)和可加载模块(对应驱动部分),并在数控系统的启动脚本中加入以上两部分,就可以正常使用软PLC系统了。正常启动数控系统和软PLC系统的梯形图如图5所示(因全图比较大,这里只是显示部分梯形图)。

图5中I对应数控系统是I/O输出,对应该软PLC系统则为I/O输入,后面的数字是数控系统主板FPGA上为I/O输出提供的端口号,它在一定范围内是可变的,在这里44代表急停信号,45代表主轴制动信号,46为冷却,50代表超程,当数控系统刚启动时要求急停开(I44显示红色),主轴制动开(I45显示红色)。由图5很明显可以看到该软PLC系统实现了正常启动时I/O信号的发送。下面再做一个简单的测试,在数控GUI上关闭急停按钮,并输入测试G代码M8(代表冷却),可以得到图6所示结果。从图中可以看到急停关闭(I44红色消失),冷却打开(I46显示红色)。

通过实际的检验,该软PLC系统能准确、快速地实现I/O信号的处理,并且使原数控系统的实时性有了较大的提高。

5 结语

PLC在处理数控机床开关量方面具有重要的作用,但由于其高昂的价格,再加上不同PLC厂家的产品通用性较差,导致其使用受到了一定的限制。但该软PLC系统的提出解决了这一难题。该系统运用全软件实现PLC的功能,可移植性较好,不但提高了数控系统的可靠性,并且充分降低了生产成本,具有很高的实际用途。

[1]谢克明.可编程序控制器原理与程序设计[M].北京:电子工业出版社,2002.

[2]周凯.PC数控原理、系统及应用[M].北京:机械工业出版社,2006.

[3](美)洛根编著,战晓苏,等译.Gtk+程序设计(C语言版)[M].北京:清华大学出版社,2002.

[4]王强.基于RTLinux的软件 PLC系统研究[D].成都:四川大学,2005.

[5]赵鸿玢.开放式数控系统软PLC的设计与实现[D].沈阳:中国科学院沈阳计算机研究所.

猜你喜欢
梯形图小格数控系统
基于FANUC 32i A数控系统的外部测量设计
西门子840D sl数控系统在SC125大型车铣镗床技术改造中的应用
基于FANUC Oi mate TD数控系统的手动功能开发
数控系统中GUI软件平台设计和实现
林小格,下一站春暖花开
PLC编译功能的实现
林小格,下一站春暖花开
S7—200PLC基本编程教学案例
数控机床梯形图故障设置方法研究
PLC梯形图程序设计技巧及应用