基于win98的气辅注气实时控制方案
匡唐清,柳和生,周国发,张庸夫
(南昌大学机电工程学院,江西南昌 330029)
摘要:本文针对气体辅助注塑成型注气控制这样一个实时性要求较高的计算机控制系统,分析了控制系统的任务要求。通过分析基于Win98平台进行实时控制的技术限制,指出采用Win98的定时器不能满足实时控制要求,并提出了实现高精度实时控制的几种方案。通过对这几种方案的分析比较,并根据实际情况,确定在本注气控制系统中采用WINDOWS系统的多媒体扩展库所提供的多媒体定时函数来实现实时控制要求。本文介绍了使用该函数编写控制软件应注意的问题。该控制系统在气体辅助注塑成型注气控制系统上能可靠运行并达到了预期目标。
关键词:气体辅助注塑成型;实时系统;Windows98;多媒体定时函数;Visual C++6.0
中图分类号:TQ320.662 文献标识码:A 文章编号:1009–797X(2002)04–0048–05
1 前言
气体辅助注塑成型(Gas-Assisted Injection Molding—GAIM)技术是在传统的注塑成型和结构发泡成型基础上发展起来的一种新型的注塑成型工艺。它突破了结构发泡过程的主要限制,同时综合了两个过程的主要优点。GAIM技术是把高压氮气经气辅主控制器(分段压力控制系统)直接注塑入模腔内制件的厚壁部位的塑化塑料里,使塑件内部膨胀而造成中空,从而完成充填过程。由于这种工艺利用气体实现保压,可以消除制品缩痕,仍然保持产品表面和外形完整无缺,因而可产生明显的效益。GAIM技术因此被誉为是对传统注塑成型的一场技术革命。虽然气体辅助注塑成型技术同传统的注塑技术相比具有众多优点,但是新的工艺也引进了新的工艺参数。和气体有关的工艺参数有气体起射时间、气体起射延迟时间、气体射入压力及压力变化速率、气体射入时间及气体保压压力。这些参数对气辅产品的质量有很大影响。要得到理想的气辅产品就必须对气辅注气系统进行精确控制。
Win98以其美观的用户界面、对抢先式多任务的支持及强大的功能受到普遍的欢迎,也得到包括测控工作者在内的科技人员的广泛使用。由于实时控制中有时也涉及图形图像的实时显示及人机交互功能,越来越多的工控用户也要求其控制系统提供良好的用户界面。因此基于Win98平台来开发控制系统也成为一种需要。因此笔者选用Win98操作系统来作为气辅注气控制系统的操作平台。选用的开发工具是Visual C++6.0,因其可方便地开发出漂亮的界面并可以很好地组织应用系统的各个部分。
2 气辅注气控制系统的实时控制要求
由于气辅注塑过程较短,一般为几秒钟的时间,要提高气辅注塑产品的质量,就要求实时控制气体压力及其变化速率。保压段气体压力的控制对实时性要求不大,升降压段压力的控制则要求要有较高的实时性。由于计算机输出信号实际上是阶梯型信号,所以要实现对升降压段的斜率控制,只有缩短采样周期,通过采样点的增加来逼近预置斜率。升降压段时间较短,只有几百毫米,而本控制系统的控制对象——电磁比例阀反应时间为30ms,因而采用的采样周期为40ms。即要求系统每40ms 对输出气压进行一次检测,并通过分析处理再输出控制信号。每40ms一次的数据采集及处理对Win98这个实时多任务系统的实时性提出了很高的要求。实际上Win98本身是没能力满足这一实时要求的。因而本控制系统的核心技术之一就是如何在Win98下完成这一高实时性的任务。
3 基于Win98平台进行实时控制的技术限制
实时是对实时控制系统的最基本要求。控制系统的数据采集、传输、控制计算和数据输出都必须
作者简介:匡唐清,南昌大学机械设计及理论专业99级硕士研究生。
postthreadmessage收稿日期:2001-06-01
在确定的时间开始,在有效的规定时间内完成。控制效果的好坏不仅取决于控制算法,还取决于数据采入与输出的时间。因此实时控制系统首先要求能获得精确的时间。在满足这个前提条件后就要求程
序能及时处理时间事件,反应时间越短,就越能准确捕捉系统的当前状态,实时性越好,控制精度也相应越高。
在Windows中,可以通过调用SetTimer函数为应用程序分配一个系统计时器。当指定了一个时间间隔以后,Windows系统将每隔指定的时间向应用发送一条WM_TIMER消息,从而使应用程序能够实现许多与时间相关的动作。但此方法存在两个问题:首先Win98是一基于消息响应机制的多任务操作系统,计时器的优先权太低,由系统发给应用程序的WM—TIMER消息并不是异步的,这条消息只有在所有的消息(除了消息 WM_PAINT)被处理后才能被处理。并且计时器消息不会被加起来,如果队列里已有计时器消息,Windows就不会把同样的计时器消息再放到队列中。另一个问题就是计时器的最大分辨率是 55 ms[3],比如设定计时40ms,实际要过55ms才发送一条WM_TIMER消息,设定计时60ms,实际要过110ms才发送一条WM_TIMER消息。也就是说应用程序每秒最多只能接收到 18条WM_TIMER消息。因此,这两个问题的存在对那些需要精确时间间隔的应用(如某些监控程序)来说是致命的。
4 高精度实时控制方案及其比较
为解决实时控制系统的实时性问题,常用的方法一般有以下几种:
(1)通过从计算机外部引入一套定时精度更高的时钟信号代替内部时钟,用外部的时钟信号对小于55ms
的时间段进行高精度分频,从而提高计时器的分辨率。这种方法常用于高精度测频中[3]。
(2)对硬件直接编程。在计算机系统进入Windows前对8253重新编程,将周期为18.2s改为所希望的周期。修改INT8中断服务程序,每次定时时间到就调用另一新中断号,并累计时间,若为55ms者则转入旧INT8中断服务程序的入口,进入Windows以后挂接新的时钟中断即可实现所要求的定时时钟。这种方法要求程序员对Windows 内核比较清楚,难度较大,且易给系统带来隐患,可能使系统不稳定[2]。
(3)采用WINDOWS系统的多媒体扩展库MMSYSTEM.LIB提供的多媒体定时函数。[1]、[2]这种方法实际上也是通过挂定时时钟中断回调函数来实现。回调函数必须放在一个固定的段中。在WINDOWS系统本身所带的函数说明中指出通过timeSetEvent()设置的定时器定时时间可达到1ms 的精度。但在Microsoft公司出版的书中指出,这些函数对于Intel芯片的精度为16ms,对于MIPS 芯片的精度为10ms。总的说来这种方法比Windows98定时器的精度要高许多,能满足工业上的一些实时性要求相对较高的实时任务。
(4)编写基于Win9x操作系统的虚拟设备驱动程序(Virtual Device Driver—VxD),将其以DLL的形式嵌入Windows操作系统的核心层(ring0)。因为Windows的特点之一就是由操作系统统一管理系统的软硬件资源,以便多个应用程序的共享。它通过设备驱动程序和外部设备打交道,为用户提供标准的接口。它提供用户不要经过Windows而直接访问内存或输入输出设备。并且在Windows中系统对中断向量进
行了屏蔽。由于Windows系统多任务在硬件上就是通过硬件的虚拟化来实现的,所以利用这种方法来实现中断的处理符合Windows 系统本身的原则,既简单又方便,也有利于系统的稳定。但是VxD也能造成问题,因为VxD按优先0运行,一个错误的VxD会造成整个系统的崩溃。因而要求程序员必须编写出稳定、可靠的VxD程序。VxD程序的好坏取决于程序员对系统的了解程度,并在很大程度上与程序员的代码有关。正是这一情况使得VxD的开发充满了困难[1]。
(5)利用Windows的SYSTEM.DRV驱动程序中提供的几个鲜为人知的系统计时器函数(这几个函数未写入Windows.h中,但却被SYSTEM.DRV 输出了)。这几个函数可以帮助我们获得精确计时器服务,即系统计时器。这其中最重要的是CreateSystemTimer()和KillSystemTimer(),这两个函数允许我们安装异步计时器的回调函数(Callback),有些类似于在DOS环境中截取INT 8中断处理程序。这个回调是真正异步的,完全避开了Windows的消息工具,因而具有重要意义。事
实上,Microsoft Excel和Windows COMM驱动程序都用到了系统计时器,而由SetTimer()安装的一般计时器也是由系统计时器来实现的。其中,KillSystemTimer()用于撤销一个已安装的系统计时器。CreateSystemTimer()用于安装一个系统计时器回调函数,SYSTEM INT8处理程序将按函数参数中指定的时时间间隔调用此回调函数。但是,这个指定的回调频率也是有限的,同SetTimer()一样,每秒钟调用回调函数次数不能超过18.2次,即其计时精度为55ms。[2]
5 高精度实时控制方案的选择
通过对以上解决实时性方案的分析可知,5种方案中实时性最好的是第四个方案——编写基于Win98操作系统的虚拟设备驱动程序(VxD),但除在上面所提到的困难外,该方案的具体实施还有个
硬件要求,那就是中断源的提供。因为VxD程序是由硬件定时器产生的中断信号直接触发。该中断源一般是由A/D采集卡上的定时器单元产生。几种方案中较容易实现的是第五种——利用Windows 的SYSTEM.DRV驱动程序中提供的系统计时器函数,但其计时精度受到55ms的限制。
本气辅注气控制系统要求的计时精度为40ms,Windows计时器是不能满足这种计时要求的。本控制系统所采用的采集卡为IPC5000系列工业控制机带DC/DC光电隔离多功能板(IPC5472),其上没有定时器单元。结合控制系统的实时性要求、硬件条件和具体实现难易程度等因素,在本控制系统中拟采用第三种方案——采用WINDOWS 系统的多媒体扩展库所提供的多媒体定时函数timeSetEvent,利用其回调函数来实现实时控制。
6 高精度实时控制方案的具体实现程序框架
整个气辅注塑成型注气系统的控制流程如附图所示:
控制程序是由设在注塑机料筒内壁的位置传感器信号触发。然后在计时器的控制下实现周期性的采样、数据处理和输出控制。
在源文件头加入如下代码:
#include <windows.h>
#include <mmsystem.h>
附图气辅注塑成型注气控制系统控制流程图
#define STEPCTRLMSG_TIMER (WM_USER +50)
在控制程序的触发响应函数先初始化控制状态,同时还初始化多媒体计时器。调用函数time BeginPeriod来设置计时器的最小分辨率,在本控制系统中为 40ms。接着调用函数timeSetEvent设置一个周期性的计时器,每40ms触发一个事件,在事件发生时,系统调用回调函数CatchMM- Timer。部分代码如下:
void CGasCtrlView::OnControlProcess()
{
……//初始化
hWnd=GetSafeHwnd();
if(timeBeginPeriod(40)==0)
timerId=timeSetEvent(40,40,CatchMMTimer,(D WORD)hWnd,TIME_PERIODIC);
……//设置控制开始标志
}
添加函数CatchMMTimer。此函数是一个回调函数,用来接收多媒体计时器的事件通知。注意不能在此回调函数中来实现具体控制。因为在计时器的回调函数中,代码应该越简单越好。尽管多媒体计时器事件不再象早期的WINDOWS版本那样是中断事件,但仍然会影响系统的效率。在计时器的
是
输出控制(D/A)
结束否?
开始
回调函数中,不要执行一些消耗时间的操作。实际上,在计时器的回调函数中,Microsoft只建议使用下列API函数:
EnterCirticalSection PostThreadMessage
midiOutLongMsg timeGetTime
OutPutDebugString timeKillEvent
LeaveCirticalSection SetEvent
MidiOutShortMsg PostMessage
timeGetSystemTime imeSetEvent
在此函数中,仅仅实现了传送消息给窗口。此回调函数结束后,当系统再分配时间给程序时,消息将被处理。函数 CatchMMTimer代码如下:void CALLBACK CatchMMTimer(UINT IDEv- ent, UINT uReserved, DWORD dwUser, DWORD dwReserved1, DWORD Reserved2)
{
PostMessage((HWND)dwUser,STEPCTRLMS-G_TIMER,0,0);
}
添加函数MainWndProc。这个函数是一个回调函数,用来处理传送给主窗口的消息,此函数只处理一部分消息,其余的消息交给API函数DefWindowProc()来处理。
此函数响应用户定义消息STEPCTRL- MSG_TIMER。每次计时器回调函数Catch- MMTimer被调用时都发送此消息。响应消息时调用函数stepctrl(),该函数为控制主函数,其内部调用其它控制子函数,一起完成采样、滤波、数据处理、输出和控制效果实时图形显示等功能。函数MainWndProc代码如下:
LPARAM CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA- M lParam)
{
switch(message)
{
case MYMSG_TIMER:
stepctrl();
break;
case WM_DESTROY:
if(timerId)
timeKillEvent(timerId);
timeEndPeriod(40);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wP aram, lParam);
}
return 0;
}
7 实时效果
由于Windows是一个多任务的操作系统,因此基于API调用的计时器的精度都会受到其它很多因素的干扰。到底这种计时器的精度如何,我们利用实际控制过程来进行验证并同SetTimer函数作比较:设置整个注气控制过程时间长为4 800ms,计时器的定时间隔定为40ms(即采样周期);经过长时间的计时,计时器的误差会被累计下来,然后同预置控制时间相比较,就可以得到它们的精度。
利用_ftime函数分别获得注气控制开始和结束时的时间,其差值即为整个控制过程总时间。通过测试得知:采用多媒体计时器,整个控制过程时间为4 840ms,计时误差为0.83%,这么小的计时误差对本控制系统来说是可以接受的;采用SetTimer函数,整个控制过程时间为6 980ms,计时误差达到45.4%。必须说明的是本人计算机配置是赛扬466、128M内存、精英P6STP-FL主板(集成声显卡),装载windows98(第二版)操作系统。通过以上测试说明多媒体计时器比Windows计时器计时精度高得多,显然计时精度必然影响控制效果。所以也进一步证实在此控制系统中不可用Windows计时器来进行实时控制,而利用多媒体计时器则可以满足该控制系统的实时控制要求。
8 结束语
对实时性要求较高的控制系统,使用多媒体计时器是比较好的选择。多媒体计时器在气辅注气控制系统中的应用使得该控制系统在实际控制中获得了预期效果并能在Win98平台上长时间可靠实时工作,完成了该方案设计时的既定目的。而对实
时性要求很高的控制系统则应当采用文中所列的第四种方案——编写VxD程序。
参考文献:
[1] 裴景玉. 基于Windows95平台的实时控制技术,工业控制计算机,2000,13(3).
[2] 张正勇,熊清平等.WINDOWS系列平台下的实时控制研究.电工
技术.1999,(3).
[3] 李训铭,王崇骏等.Win9x下高速数据采集技术及应用.工业控制
计算机.2000,(6).
[4] (美)David J. Kruglinski 著. 潘爱民,王国印译.Visual C++技术内
幕(第四版).清华出版社.
(XS-02)
用于防噪音及防震动的
橡胶-金属部件
随着越来越严格的防噪音要求,迫使机器与电机制造者改进构件,在机器运转过程中明显减少噪音和振动。在此提供由橡胶与金属制成的复合材料作为解决的办法。由于橡胶-金属部件属于最有利的粘性介质,以便消除振动和噪音的产生。
Civak橡胶技术公司提供了一种由这些橡胶-金属部件制成的一较大托盘。土耳其的这家中等企业生产不同的构件,而重量为30~30×103g。在此,人们实现多种不同的几何形状和连接方案:带有单头螺纹或双头螺纹栓,带有单面螺纹套的锥体,带有单面螺纹杆的盘。这些构件的主要使用范围为机器、设备及车辆结构上以及压缩机工业。
Givak橡胶-技术公司最重要的销售市场是德国。橡胶所使用的基本材料是天然胶、胶、丁苯胶及三元乙丙胶。作为骨架材料,采用的复合-轻金属件,但也有高级合金钢(V2A)这类经过电镀处理或涂漆的橡胶-金属缓冲件也包含有其它产品类别,如橡胶-金属滑道、防撞击缓冲器及档板等。
RP-01编译自《GAK》,2001.4
(XS-02)
俄罗斯Nizhnekamsk计划投资
6千万美元建新的乘用胎生产线
俄罗斯最大的轮胎厂——Nizhnekamsk计划投资6千万美元新建年产2百万条钢丝带束子午线乘用胎的厂房设备,新增能力将于2002年年初使这个厂的生产乘用胎能力每年达700万套。
第二阶段,为现代化设计阶段,据说,该公司指望增长载重钢丝子午线轮胎新的生产线。其轮胎规格为17.5″、21.5″和22.5″主要用于国内市场。
Nizhnekamsk的总产量估计每年大约为1 200万套。其中7百万套为乘用胎,4百万套为载重胎,1百万套为农用胎和农机具轮胎。
设备将从荷兰、德国、斯洛伐克和其他国家购买。资金来自俄国四大石油公司。
RP-01编译自《ERJ》,第183卷,2001.4
(XS-02)
来自西门子的轮胎压力监测系统
西门子汽车公司开发出一种轮胎压力监测系统(TPMS),该系统可适用于所有标准的原装胎和样胎。
西门子TPMS监测系统可监测内侧轮胎的压力和温度,也能根据车轮旋转测定轮胎的有限加速度。该系统还可监测轮胎转速,并把每个轮胎的转速与操作参数、安全参数进行比较协调。它亦可在车轮旋转过程中对单条轮胎进行整修。
西门子的轮胎压力监测系统是将压力传感器和发送器安装于每个车轮的轮辋凸缘上,其中传感器可装在标准的原装轮辋上,接收器和控制装置装在汽车驾驶室前壁,而信息的收集和处理方式则可根据安装于车轮上的发送器的信号而定。
轮胎压力监测系统可与西门子的无键远程输入系统匹配,匹配时使用天线或接收装置均可。
直观的报警信号象报警灯一样,提醒司机出现故障,或在上置式控制台详细全面地显示压力、温度和测点。
姚琳编译自Tyres & Accessories, 2001 (Mar- ch):62
(XS-02)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论