0 引言
气体压力的自动化测试和控制是一个古老而又不断更新的课题,随着自动控制和计算机技术迅猛发展,给气体压力控制技术带来了深刻的影响。精密气压的产生与控制技术应用越来越广泛,特别是应用于液压和气动设备的检验,对气压的控制精度和控制稳定性提出了越来越高的要求。目前,现代工业生产日益复杂化,为满足生产条件和产品精密的要求,必须不断改进信号采集和控制的方式方法,向更加快捷、高效、准确、实时以及远程控制的方向发展。气体控制是利用各种控制元件(各种阀、缸等)和控制器,组成控制回路,以进行自动控制。
在某型装备测试操作中,需要往高压气瓶中注入高压工作气体,高压气体在注入的过程中出于安全起见需要精确控制充气速度。因此,本文采用闭环控制系统通过计算机对气体管路进行实时控制,在装置运行过程中根据压力表反馈的数据,动态调节阀门的开启度,控制充气速度在合适的范围。
1 整体方案设计
对气阀的流速做出控制,最简单易行的方法就是改变进气时气流流通的横截面积,可以通过在进气道中设置一锥形活塞,通过精确控制锥形活塞的行程来改变进气道流通面积,而精确控制锥形活塞的行程可以通过步进电机带动丝杆传动系统,做出精确位移来实现。
整个闭环控制系统由PC系统、气体管路系统和步进电机系统构成。在VC++2005环境下,由PC系统控制压力表实时采集管路的压力值,实时数据经过Matlab的多项回归处理,得出压力的实时变化快慢来闭环控制步进电机调节精密阀门开度,实现气阀充气速度的自动控制。
1.1 硬件设计
系统以ICOP最近推出的一款功能齐全完美的PC104单板电脑VDX-6354为核心,主板采用标准PC104结构,小尺寸并拥有完整性的功能,运算时的稳定度高,执行速度快,功耗低,-40~+85℃的军工级工作温度。
步进电机控制系统选用RORZE系列,通过RS 232总线和电脑通信,包括RD-023MS驱动器、RC-002电平变换器和RC-233定位主控器、RM2414 S步进电机。该系列步进电机系统,以程序取代人的操作,配备功能强大的编码器,利用RD-023MS驱动器,不需要外接脉冲信号和驱动电路,通过程序指令控制电机实现正转、反转、加速、减速、查询、定位等功能。RC 233定位主控器可以有80,320,1,64,50,400几种细分,满足不同速度的需求。
压力表选用ACD-2精密数字压力表,它是一款高精度智能测量仪表,由压力传感器和信号处理电路组成。压力传感器采用进口传感器,性能优越,具有精度高、抗腐蚀、抗冲击、抗震动、高稳定性等优点,可靠性高。压力表通过RS 485接口与电脑通信连接,驱动和控制程序简单,气压表12 V直流电压供电。由于RS 485串行接口属于一种差分标准,允许1对双绞线上1个发送器驱动多个负载设备,RS 485通信多用在主从式多机通信中,但其作为一种半双工的通信方式,在1条通信电缆上挂许多设备时,一定要保证在总线上只有1台设备处于发送状态,其他设备一定要处于接收状态;而一旦同时2台设备都处于发送状态,必然会出现总线冲突的现象。针对上述问题,解决的关键是一定要控制好各台设备的接收与发送状态即RS 485接口器的收发状态,本系统中两个压力表工作时间不同步,可以避免这种收发冲突。
气体管路组件选用宁波星箭航天机械厂的过滤器、截止阀、阀门和导管,硬件系统示意图如图1所示。
1.2 软件设计
软件部分通过网络接口实现远程编程,在其他电脑上Windows XP环境下用VC++2005和Matlab混合编程,最后将可执行文件以静态库的形式移植到单板电脑上运行,分为主程序模块、硬件驱动模块、数据处理模块三个部分,后两个部分均以类的形式封装。VisualC++是Windows平台下强有力的高级编程语言,能够方便快速地开发出界面友好,执行速度快,易于维护升级的系统软件。然而Visual C++只提供了一些基本的数学函数库,当遇到复杂的数值运算时,重新编写程序代码延长软件开发周期,增加软件开发成本。Matlab拥有独立的数学函数库,包含有大量优化了的数学函数,同时提供了对C++语言的函数接口,用户可以方便地在VC++的集成开发环境中调用。但Matlab的应用程序接口并不是很强大,它不能传输除了数值之外的其他数据,而VC++却具有强大的程序接口,能传输任何数据,但其进行复杂计算的能力不是很强。因此,若将两者结合起来,协同工作,必将提高软件开发效率。程序流程图如图2所示,初始状态把阀门定在完全关闭的状态,规定电机逆时针为正。
1.2.1 主程序模块
主要是声明成员变量,调用硬件驱动模块和数据处理模块的已经定义好的类函数。主程序根据气压表模块输出的压力值,然后用数据处理模块进行数据分析,根据压力值的变化来闭环控制步进电机转动的方向,压力变化过快,则需要减小精密阀门开度,电机反转,压力变化过慢则电机正转,使压力上升速度在一个安全高效的范围内。
1.2.2 硬件驱动模块
硬件驱动模块用于对硬件设计部分主要仪表的控制和驱动,主要包括气压表模块、步进电机模块和串口模块,各分模块也是均以类的形式进行封装。
气压表模块,表1和表2在气压表内部可以进行初始设定编号01,02,表1负责放气时的气压读数,表2负责充气。气压表实时监测高压管路的压力值,实际上一秒最多可采集数据20次,PC机通过串口模块实时向气压表发送命令“@01!”、“@02!”,通过MFC对话框的形式实时接收气压表返回的压力值,经过数据处理,得出压力值变化的速度来闭环控制步进电机,使充放气速度在一个安全高效的范围。
步进电机模块,直接发送程序指令来控制电机实现各个动作。电机步距角为1.8°/步,细分50时,转动一圈需要10 000个脉冲,在导轨上从原点至终点共需6.5圈65 000个脉冲。这里将平面直角坐标系引入模块中,将步进电机的行程65 000个脉冲均分为100份,坐标原点设为阀门完全关闭点,坐标100处阀门完全打开。在步进电机控制中引入坐标系,可以通过对坐标点的标定来定位电机,有以下几大好处:
(1)利于闭环控制程序的编写。闭环控制可用一个循环程序来实现,有了坐标系,就可以方便定义一个位置变量,以压力变化快慢作为循环条件,位置变量作相应的增减,即可控制电机的正反转,改变精密阀门的行程,调节阀门开度实现气压控制;
(2)限制步进电机的行程。步进电机的活动范围限制为坐标0~100之间,在不可见系统中解决步进电机失步碰撞问题,可以替代接近开关的作用;
(3)实时查询步进电机的位置。查询锥形活塞所处点的坐标,根据坐标和阀门旋转螺旋间距,就可以得出电机的位移,相当于一个位移传感器。
串口模块,在VC++2005对话框编辑框中添加ActiveX控件Microsoft Communication Control,给该控件命名并在对话框属性框里设置相应的参数,即可以直接调用串口。
1.2.3 数据处理模块
数据处理部分采用的是VC++和Matlab混合编程的方法,VC作为客户端,利用其能够简单地同底层硬件资源进行通信的优点,将数据读入到内存中,再将数据送到Matlab中进行数据处理,通过调用Matlab下数字信号处理工具箱中的函数以及自己所写的函数进行分析。选用Matl-ab的C/C++编译器mcc,这种混合编程方式将.m源文件转化为C/C++等各种不同类型的源代码,并在此基础上根据应用需要生成MEX文件、独立可执行应用程序等文件类型,大大提高程序的运行速度,以及代码的执行效率。由于气压表每秒采集数据20次,为了精确地实现闭环控制,把20组数据进行多项式最小二乘法曲线拟合,建立第1s内气压随时间变化的函数模型:
在Matlab中调用回归命令:A=polyfit(T,P,n),其中:T=O:O.05:1;P=[p0,p1,…,pn。]可以通过气压表的读数得到;A=[an,…,a1,a0],是多项式(1)的系数;n为多项式的次数。
预测气压的变化速度:
多项式拟合数据的模型随着阶次n的选择不同而不同。虽然n+1个数据点可以确定惟一的n阶多项式,但实践证明并不是阶次越高拟合越好,有时会发生阶次越高越不精确的情况。曲线拟合时应该根据实际情况凭借经验及观察选择拟合次数,注意检验结果,比如观察曲线是否平滑、拟合误差是否足够小等,力求准确全面地描述输入数据之间的关系。由每秒的模型得出连续的气压模型函数和气压变化速度函数,根据气压变化速度函数在各个时间点上的值来判断步进电机正转还是反转。数据处理模块也是以类的形式封装起来,供主函数调用。
2 实验与分析
气体压力闭环控制装置已经应用于某型装备故障检测中,对高压充气速度进行控制,在试验时,装置连接在管路中,通过对电机的控制实现对充气速度的调节,从而完成所需试验数据的采集。通过多次试验,验证了系统的稳定可靠性和高精度的控制充气速度。
3 结论
气体压力闭环控制系统的设计在某型装备故障检测中已得到较好的实现。设计中无论是硬件还是软件系统中都采用模块化的设计方法,这使得系统扩展起来比较方便,系统可移植性高,增加了系统的灵活性和可靠性,具有广泛的适应性。坐标系引进步进电机行程的方法,可以成功解决步进电机失步碰撞问题,能够确保系统正常运行。