基于VC的西门子840D数控系统人机界面开发方法

2013-08-01 11:37张卫青王兴龙
关键词:人机界面数控系统对话框

金 陵,张卫青,王兴龙

(重庆理工大学汽车零部件制造与检测教育部重点实验室,重庆 400054)

随着数控机床的高速发展,数控系统的通用功能已不能满足高档机床的特殊需求,对开放式的数控系统进行二次开发已成为当今数控技术的研究热点[1-2]。

目前,我国大部分高端机床均采用西门子840D数控系统,为了适应个性化市场的需要,国内学者针对各种机床不同的控制要求,对西门子840D数控系统的二次开发方法进行了一系列研究。其中,大部分学者利用 HMI Programming Package开发工具,通过HMI Advanced标准软件开发标准应用程序Regie及Sequence Control的嵌入式应用软件,但其开发方式存在一定局限性,一些标准类模板及窗体都不允许更改,语言动态链接库的建立也较为烦琐。而单独采用VC++开发标准的Windows应用软件则能很好地解决这些问题,且所开发的人机界面更加人性化、自由化、美观化。因此,本文利用西门子数控系统提供的HMI软件包,研究利用面向对象的编程语言VC进行高端机床的专用人机界面制作,并开发了适用于840D数控系统的人机界面[3]。

1 人机界面总体框架

根据相关机床的加工特点及功能要求,设计整个界面的总体框架,如图1所示。图1中显示了界面中各窗口的调用关系及各软件与窗口状态的联系[3]。

图1 界面总体框架

图1中,主界面为状态监控,包括各坐标轴坐标实时显示以及报警服务、循环、余程、加工状态等框架;数据管理主要完成机床加工数据文件的导入导出,实现数据文件中各项参数的查看、编辑等功能;程序主要控制零件程序的运行、显示和编辑功能;结果分析是对相关数据的处理及结果的显示。用户可以根据实际要求在主界面上继续添加框架,每一个框架都是一个界面,每一个界面都是由数个对话框组成,它们之间都是相互联系、协同工作的。

2 基于VC的界面开发方法

界面采用MFC基于对话框形式完成设计及数据通讯服务。通过数控通讯服务器(NCDDE Server)、数控内核(NCK)、可编程序控制器(PLC)等组件实现人机界面交互功能。开发前,只需在PC机上安装VC++编程软件,所开发出的标准Windows应用程序即能在西门子数控系统下运行。

根据相关机床的实际要求编辑各对话框界面,并且在VC环境下直接与NCU、PLC建立连接,实现界面与840D数控系统的通讯。所开发软件的主要功能包括:人机界面上各软件定义及与机床操作面板上键盘响应;对NCU中各种变量的访问,如轴坐标值、进给率、余程等;NCU文件读取及对R参数的访问;对PLC中各种变量的访问,如I/O口、标志区M、数据块DB等。各个应用模块都另行开发且脱离于西门子HMI Programming Package开发框架,即独立于西门子数控系统的主控制和顺序控制之外。与传统的VB语言开发相比较,其通用性更强、开发更加自由,并且语言动态显示更加简便[4-8]。

2.1 多语言显示

PC机上独立开发的人机界面在数控系统中运行时,控件的文本不能显示中文。不同于传统开发方式,在VC环境下无需创建DLL语言动态链接库,采用UNICODE编程就可以在西门子系统下动态显示中文,并且能使界面同时支持多种语言。VC++6.0中,具体设置步骤:打开[工程]->[设置…]对话框,在 C/C++标签对话框的“预处理程序定义”中去除_MBCS,加上_UNICODE,UNIC-ODE,然后需要设置Unicode专用的程序入口点,即在Link页的Output类别的Entry-Point里填上wWinMainCRTStartup。一般情况下输入字符时加上_T宏,则能兼容ANSI和Unicode字符。

2.2 人机界面信息与NCU/PLC中变量的传递

在VC环境下,人机界面可直接利用西门子数控系统服务器提供的接口访问 NCU、PLC、MMC103中的变量和文件,实现需要的NCK/PLC变量存取。同时,在执行程序时,直接通过VC程序向数控系统发出指令,指示机床动作。

2.2.1 NCK/PLC 变量存取

在人机界面上,需要实时更新采集到的数据,把NCK中的变量及数据的有关信息及时反映到显示屏上,从而使操作者能对机床状态进行管理和操作。NCK中采集的变量和数据主要包括系统变量、系统状态数据、通道专用数据、轴状态数据、驱动状态数据、刀具和刀具库数据、机床和设定数据、参数、伺服、诊断数据等。

1)根据动态数据交换技术(DDE)的优点及具体要求,在VC环境下通过DDE来建立连接,获取当前各轴的坐标值、进给速度、余程等数据。首先需要对 DDE连接进行初始化,以 ncdde/nuc840d作为连接的服务器名称和主题,通过建立函数来读取各轴数据。下面是在VC中读取1个轴当前坐标值时用到的程序代码:

还需通过DdeClientTransaction()函数向数控系统服务器发送数据请求,服务器必须通过DDE回调函数处理请求并返回DdeCreateDataHandle()来发送数据。同时可以调用DdeGetData()来获取实时数据,并动态显示在界面上。

2)由于VC++6.0的MFC中已集成了COM组件开发工具ATL(活动模板库),因此在VC中选择使用 OPC协议,通过与 OPC Alarm&Event Server建立连接实现报警数据读取。OPC是OLE for Process Control的缩写,它采用客户/服务器体系,是基于Microsoft的OLE/COM技术,为硬件厂商和应用软件开发者提供了一套标准的接口。

首先,需要在MFC程序的StdAfx.h文件中添加ATL中心模块类CComModule,并创建一个全局实例_Module,它的实现位于 atlbase.h和 atlimpl.cpp中,因此在程序中必须包含这2个文件。报警数据显示的对话框所产生的类,命名为CAlarm类。同时,为了实现回调对象的接收,还需添加一个派生于IOPCEventSink(事件订阅的接收器接口)及 CComObjectRoot(内部 ATL函数实现)的类,命名为COPCEvent- Sink。

在VC中,ATL主要处理引用计数的实现以及IUnknown的成员函数QueryInter-face()的功能,为此,必须在COPC-EventSink类中插入COM地图。COM地图主要描述了哪些接口会被回调对象使用并且可以通过 QueryInterface()返回。在COPCEventSink类中,相应的声明代码如下:

除了这些接收器接口以外,在COPCEv-entSink类中,使用成员函数Connect()建立回调对象与OPC server的连接点的连接,利用成员函数Initialize()对回调对象进行初始化,即建立一个报警数据变量。

相应地,还需在CAlarm类中添加相关函数才能从OPC Alarm&Event Server中接收报警信号,并在对话框中显示。具体步骤:

①创建OPC服务器实例,并建立连接。通过成员函数ConnectServer()与服务器建立连接,连接之前客户端需要服务器的 CLSID,可以通过CLSIDFromProgID()函数来获取信息,其中ProgID为OPC.S-inumerik Events。这样通过 CLSID及Co-CreateInstance()函数便可创建服务器实例,其中以IUnknown作为请求接口。

②请求数据订阅操作接口。通过成员函数GetInterfaces()实现,以 IUnknown的成员函数QueryInterface()获取。

③在OPC服务器上创建报警数据订阅,并连接到接收器对象。通过成员函数CreateSubscription()实现,其中利用 IOPCEventServer::CreateEventSubscription()函数创建一个报警数据订阅。若创建成功,即与服务器中一个接收对象连接,此时,当有一个新的报警产生时客户便可以接收到服务器返回的数据。同时,通过 CComObject::CreateInstance()函数创建一个COPCEventSink类的实例,此时,服务器返回的回调对象便在COPCEventSink类中的成员函数Initialize()中进行初始化,然后通过成员函数Connect()将回调对象与创建的数据订阅接口连接。

最后,通过COPCEventSink类中的成员函数OnEvent()将所创建的报警数据订阅所返回的信号(数据)显示在对话框的List Control控件上。所显示的报警数据在界面上实时更新,包括报警时间、来源、报警号、消息等。

2.2.2 文件传递及程序调用

人机界面在进行齿面测量时,必须将某些程序和文件复制并存到NCK中,反之亦然。在VC环境下同样利用COM组件技术,创建一个派生于IDispatchImpl及 CComObject- Root的类,命名为CMCDomainCallback,添加的COM地图声明代码如下:

在所用的对话框类中,添加成员函数ConnectToDomainServer(),创建IMC中的DomainServer实例,并建立连接。以CopyNC()以及MapACC_NC()函数发送复制文件请求。其中,向系统服务器中复制文件的详细代码如下:

CopyNC(bstrSourceFile,bstrTargetFile,MCDOMAIN_COPY_NC);

相应地,同样利用 COM组件创建 IMC中Command实例,从而实现对NC/PLC的程序调用服务。如通知NCK执行一个指令,VC中代码为:#PI_START,/NC,201,/_N_MPF_DIR/_N_123_MPF,_N_SELECT#。

将所有的功能集成在每一个对话框中。对话框设计完成后,就可以生成VC的标准Windows应用程序,并在数控系统开发平台中运行。

3 结果验证

本研究根据上节描述的开发方法,以锥齿轮磨齿机在机测量软件开发为例,在VC环境下制作了人机界面,并将所开发的人机界面在840D数控系统上进行模拟。如图2、3所示,NCK变量存取、报警服务、多语言等均显示成功,验证了基于VC的840D数控系统人机界面开发方法的正确性。

图2 主界面监控状态

图3 人机界面调整参数编辑界面

4 结束语

本文研究了VC环境下高端机床专用人机界面制作方法,采用UNICODE编程实现界面多语言显示,使用DDE技术及OPC协议来对NCK/PLC变量进行存取,利用COM组件技术进行文件传递以及程序调用。根据此方法,以锥齿轮磨齿机在机测量软件开发为例制作了人机界面,并将人机界面在840D数控系统中进行模拟,验证了基于VC的840D数控系统人机界面开发方法的正确性。

[1]赖国庭,吴玉厚,富大伟.开放式数控系统的发展及性能研究[J].机械与电子,2003(2):3-5.

[2]魏巍.开放性的西门子840D在数控磨齿机中的应用[J].制造技术与机床,2006(1):99 -101.

[3]张明德,张卫青,郭晓东.全数控锥齿轮铣齿机软件开发[J].制造技术与机床,2009(11):102-105.

[4]SIEMENS.User’s Manual for SINUMERIK 840D/840Di HMI Programming Package[Z].[S.l.]:Siemens,2004.

[5]向筱,黎勇,张卫青.基于西门子840D数控系统的锥齿轮研齿机的人机界面开发[J].重庆工学院学报:自然科学版,2008,22(3):111 -113.

[6]吴艳花,雷俊杰.基于840D数控系统的人机界面二次开发[J].机床与液压,2011(10):118-121.

[7]余英,梁刚.Visual C++实践与提高 COM和COM+篇[M].北京:中国铁道出版社,2001.

[8]Smith J.Understanding and Using COM Threading Models[M].WA:MicrosoftCorp,1998.

猜你喜欢
人机界面数控系统对话框
正常恢复虚拟机
Bootlace Worms’Secret etc.
What Is Beauty?
基于FANUC 32i A数控系统的外部测量设计
西门子840D sl数控系统在SC125大型车铣镗床技术改造中的应用
基于FANUC Oi mate TD数控系统的手动功能开发
数控系统中GUI软件平台设计和实现
CBTC系统车载人机界面的设计与实现
基于PLC与人机界面的经编机电子横移控制系统研究
浅谈VB的通用对话框《CommonDialog》控件的使用