微机改造液压万能试验机关键技术的研究
2011-10-21赵春雨王俊飞
赵春雨 王俊飞
(成都理工大学工程技术学院,四川 成都 614000)
微机改造液压万能试验机关键技术的研究
赵春雨 王俊飞
(成都理工大学工程技术学院,四川 成都 614000)
微机化改造后的液压万能试验机能实时、自动、精确地显示压力、位移等参数,并能在实验结束后保存实验数据和打印材料特性曲线,省去了人工计算的环节,利于工作效率的提高。文章就其中压力、位移等实验参数的测量及实验曲线绘制关键技术和算法进行研究阐述,分析了高速实时工作、串口通讯、曲线拟合等关键技术。
高速实时工作;串口通讯;曲线拟合
(一)前言
我国从上世纪50年代开始生产液压万能试验机,早期产品使用杠杆摆锤测力系统。1987年国家颁布了GB228—87《金属拉伸试验方法》新标准。旧试验机的测量系统不能满足新标准的要求。上世纪90年代已是电子信息时代,计算机已广泛地应用于各种行业。因而将计算机应用于试验机技术已成为当前重要的课题。
在数据采集上,采集速度快、测量精度高;在数据分析上,考虑得更加周全;在数据处理上,具有智能交互、图文并茂的特点,能以数值显示、图表、曲线等多种方式表现实验数据,并可根据教学要求对实验数据进行各种分析与处理。让试验机在信号检测、数据处理等方面更接近现代试验机发展水平,迎合了目前国内外的试验机发展面向智能化、准确化、操作简便、稳定可靠趋势的需要。
就我国的经济实力和现有的生产力水平,淘汰低档试验机是不必要的。只要选择改造的途径,利用微机对液压万能试验机进行压力、位移等试验数据的显示,利用软件对实验结果进行处理,都可以达到比较好的效果。目前很多单位已将微机用于低档试验机的改造。改造的系统框图如下图1。
图1 液压万能试验机微机化改造组成图
利用微机的液压试验机改造方法在wE-300液压试验机的油缸回油管与油缸之间加配一个三通接头,两头接油管,中间接一个30Mpa压力传感器,主要用于测量液压油路的压力。压力传感器接收到油压的模拟信号传到微机的数据采集卡。在油缸的工作行程位置上加装一个位移传感器,用来测量油缸行程的位移量,通过位移传感器测量到模拟信号传到微机的数据采集卡。改造后的试验机可配有标程为0~700mm不同规格的变形引伸计,可作金属材料的拉、压常规试验。
(二)关键技术研究
1.系统高速实时工作的实现
(1)FIFO缓存技术
FIFO存储器是近几年面市的一种特殊存储器件,通常用于数据的缓存和用于容纳异步信号的频率或相位的差异。FIFO的实现通常是利用双口RAM和读写地址产生模块来实现的。FIFO的接口信号包括异步的写时钟(wr_clk)和读时钟(rd_clk)、与写时钟同步的写有效(wren)和写数据(wr_data)、与读时钟同步的读有效(rden)和读数据(rd_data)。为了实现正确的读写和避免FIFO的上溢或下溢,通常还应该给出与读时钟和写时钟同步的 FIFO的空标志(empty)和满标志(full)以禁止读写操作。其特点是在同一个芯片里同一个存储单元配备有两个数据口,一个是输入口,只负责数据写入,另一个是输出口,只负责数据输出,就像数据管道一样,数据从管道的一头流入、从另一头流出,先进入的数据首先流出。另外对这种存储器进行读和写的操作时不需要地址线参与寻址,它的数据是按照一种环形结构依次进行存放的。FIFO存储器的另一个与传统存储器不同点是传统存储器的一个存储单元中只要写入一个数据后,这个数据将一直保存,直到被一个新的数据覆盖,无论这个存储单元中的数据被读取过多少次也是如此。而FIFO存储器中的存储单元则不是这样,写入的数据一旦被读取后,则这个数据再无法被读取,像永久消失一样。所以,FIFO存储器在操作时由“空”和“满”的标志位来表示FIFO存储器内部的状态。
采集板本身的动态链接库(PCI8335.dLL)中所有的函数均可以直接调用,从而就实现了保证了采集的高速实时操作。
(2)定时查询方法
一旦启动了A/D转换,A/D就开始不断地采集数据并存入到FIFO中,系统必须定时查询FIFO缓存器是否处于半满状态,以便下一步的存储操作。以本系统选用定时杏询的方法,被执行的时钟控件函数主要用来实现程序定时查询 A/D状态寄存器中的FIFO是否半满标志(HF),当FIFO中的数据超过一半后,一次读空FIFO中的数据。因为FIFO半满时的空间为2048个字,按照最大采集速度每秒100个数据,缓存器可以存储 2048/8*100=2.56秒的数据,由于定时器的时间处理频率直接来源于系统时钟18.2Hz的中断频率,这就决定了这种定时器的处理时间的周期是55ms的倍数,时钟控件定时采集间隔完全可以满足系统要求。
2.Delphi实现串行通讯的方法
Delphi在目前众多流行的面向对象开发工具中最具有吸引力的开发工具之一。由于Delphi具有编程效率高、功能强大而受到广大程序员的青睐。用Delphi实现串口通讯,可用使用通讯控件,如MSCOMM和SPCOMM,也可以使用API函数或者在Delphi中调用其它串口通讯程序。而利用API编写串口通信程序较为复杂,需要掌握大量通信知识,其优点是可实现的功能更强大,应用面更广泛,更适合于编写较为复杂的低层次通信程序。在本系统中,采用较为方便的MSCOMM通讯控件的方法。利用Delphi 7.0提供的MSCOMM通讯控件可以方便地访问串行口,MSCOMM控件提供了很多有用的属性和方法,通过它们用户可以很容易的对串口进行操作。MSCOMM的主要属性如表1所示。
表1 MSCOMM控件的主要属性
OnComm事件是通讯控件唯一的事件,此事件可用来处理所有与通讯有关的事件,无论何种事件发生,通讯控件只用一个 CommEvent的属性来处理。使用事件程序的好处是不需要一直让程序处于检测的状态下,只要事先将程序代码写好,一有事件发生,就直接执行相应的程序代码。下面给出串口的读写程序。从串口读二进制数据的程序如下:
var
SerialInput:Variant;
DataLength,intCnt,intTem:Integer;
…
begin SerialInput:=frmMain.MSComm.Input;
//读取串口数据
DataLength:=frmMain.MSComm.InBufferCount; //读取数据的长度
For intCnt:=1 to SerialDataLength-1 do
Begin
IntTem:= SerialInput[intCnt];
…
end;
end;
var
SerialOutput:Variant; Count,DataLength:Integer;
…
begin
Count:=1; SerialOutput:=VarArrayCreate([1,1],v arByte); SerialOuput[Count]:=intTmp[Count];
Inc(Count);
While (Count<DataLength) do
begin SerialOuput[Count]:=intTmp[Count];
Inc(Count); VarArrayRedim(SerialOutput,Count);
end;
frmMain.MSComm.Output:= SerialOuput;
end;
3.多线程机制实现
多线程的实现原理:
创建一个进程时,它的第一个线程称为主线程(Primary thread),由系统自动地生成。然后可以用这个主线程生成额外的线程,而这些线程,又可以生成更多线程。在运行一个多线程程序时,从表面上看,这些线程似乎同时运行。
而实际情况并不是这样,为了运行所有这些线程,操作系统为每个独立线程安排了一些CPU时间。单CPU操作系统时以轮转方式向线程提供时间片(Quantum),每个线程使用完时间片后交出控制,然后系统再将 CPU时间片分配给下一个线程。因为每个时间片足够短,所以就给人一种假象,好像这些线程同时运行。创建额外线程唯一目的就是尽可能地利用CPU时间。
虽然Windows 提供了比较多的多线程设计的API 函数,但是直接使用API 函数一方面极其不方便,而且使用不当还容易出错。利用Tthread 对象,来解决多线程设计上的困难,简化了多线程问题的处理。Tthread 对象没有实例的,它和界面的交流,主要依靠主窗体(主VCL线程)。
Tthread 对象的主要方法:
构造线程:
constructor Create(CreateSuspended:boolean)
其中:CreateSuspended=true 构造但不唤醒
false 构造的同时即唤醒
inheried Create(CreateSuspended:boolean)
挂起线程:
suspend
(把线程挂起的次数加一)
唤醒线程:
resume
析构(清除线程所占用的内存):destroy
终止线程(后面会具体讨论):Terminate
下面为在主线程区构造线程的方法是:
thread1:=mymath1.create;
thread2:=mymath2.create;
挂起:
thread1.suspend;
thread2.suspend;
唤醒:
thread1.resume;
thread2.resume;
析构:
thread1.destroy;
thread2.destroy;
线程的同步:
在使用多线程编程时,有一个非常重要的问题就是线程同步。线程同步是指线程之间在相互通信时避免破坏各自数据的能力。同步问题是由前面说到的Win32系统的CPU时间片分配方式所引起的。虽然在某一时刻,只有一个线程占用CPU(单CPU时)时间,但是没有办法知道在什么时候,在什么地方线程被打断,所以如何保证线程之间不破坏彼此的数据就显得非常重要。
利用Windows的API实现同步,Windows API函数提供了很多同步技术。使用线程的时候,遇到的一个基本的问题,就是多个线程访问同一个对象,比如访问相同的文件、DLL、相同的通讯资源,特别是数据库的访问,当多个线程对同一数据库字段写入的时候,其结果会出现不确定性。
临界区用于解决这个问题,它可以保证线程使用敏感数据的时候,阻赛其他的线程访问名干数据,使用时首先要初始化,其声明一个
TRTLCriticalSection类型的变量:
var
CS:TRTLCriticalSection;
初始化:
initializeCriticalSection(cs);
独占
EnterCriticalSection(cs);
解除独占
LeaveCriticalSection(CS);
使用临界区是比较方便而且概念比较清晰的的线程同步机制,应用比较广泛。
在曲线显示模块的设计中,其中主要采用的数学方法。
(三)曲线显示模块设计
液压万能试验机在数据采集过程中,所采集到的是一些离散数据点,这些离散的数据点中会存在误差较大和明显不正确的点,就需要分析和处理来提高数据准确性,保证能绘出光滑的数据曲线。特别在试验机启动和停止时,由于收到较大的电磁干扰等,采集的数据往往会产生突变。为了解决这些数据误差,本系统采用线性插值和最小二乘法曲线拟合等数学原理,进行去毛刺处理,对数据曲线处理以便得到光滑实验曲线,便于进行实验分析。
1.线性插值
已知函数 y=f(x)在节点 x0,x1有函数 y0=f(x0),y1=f(x1),求作一次多项式L(x)=a0+a1x,使它满足条件L(x0)=y0,L(x1)=y1。这种插值称为线性插值,在节点上插值的误差为0。
本系统由于采样频率比较高,两个相邻的采样点可以近似的看成直线,选用线性插值就可以完成。
本文采用Lagrange插值方法。
Lagrange插值是n次多项式插值,其成功地用构造插值基函数的方法解决了求 n次多项式插值函数问题。基本思想是将待求的 n次多项式插值函数 pn(x)改写成另一种表示方式,再利用插值条件确定其中的待定函数,从而求出杆值多项式。在区间[a,b]中已知 y=f(x)在该区间上有 n个不同点x1,x2,…,xn处的函数值 yi=f(xi)(i=1,2,…,n)。用 Lagrange插值公式计算指定点u处的函数近似值。
Lagrange插值多项式:
其中
Lagrange插值余项
2.最小二乘法拟合曲线
系统进行数据采集时,所采集到的数据为一些离散的数据点,为了使数据曲线平滑、准确,采用最小二乘法拟和曲线,产生一个多项式或已知函数来对这些离散的数据点进行逼近。
根据一组给定的实验数据(xi,yi)(i=0,1,…,m),求出自变量x与因变量y的函数关系y=s(x,a0,…,an)(n<m),这是ai为待定参数,由于观测数据总有误差,且待定参数 ai的数量比给定数据点的数量j少(即 n<m),因此它不同于插值问题。这类问题不要求 y=s(x)=s(x,a0,…,an)通过点(xi,yi)(i=0,1,…,m),而只要求在给定点 xi上的误差δi=s(xi)- yi(i=0,1,…,m)的平方和最小。当s(x)=span{ Φ0,Φ1…,Φn}时,即 s(x)= a0Φ0(x)+ a1Φ1(x)+…+ anΦn(x)这里Φ0,Φ1…,Φn∈C[a,b]是线性无关的函数族,假定在[a,b]上给出一组数据{(xi,yi)(i=0,1,…,m)},a≤xi≤b以及对应的一组权{ρi}0m,这里ρi>0为权系数,要求s(x)=span{ Φ0,Φ1…,Φn}使(a0,…,an)最小。
这就是最小二乘逼近,得到的拟合曲线为y=s(x),这种方法称为曲线拟合的最小二乘法。
I(a0, a0,…,an)实际上是关于 a0, a0,…,an的多元函数,求I的最小值就是求多元函数I的极值,由极值必要条件,可得
根据内积定义引入相应带权内积记号
则可得
这是关于参数a0,a0,…,an的线性方程组,用矩阵表示为
均方误差为
在实际拟合试验曲线时,取次数为 2的最小二乘拟合,得到拟合方程s(x)。
(四)结论
我国数万台低档试验机在国标GB228-87的促进下,必须改造。用电子和计算机技术改造试验机已经有了成功的例子。设计生产一种适台国情的中档材料试验机的新机型是我国目前市场的需要,应该受到有关部门和试验机厂家的重视。本文就其中的关键技术做了研究和阐述,旨在对微机控制液压万能试验机的推广应用提供有益的参考。
[1] 王勇.材料试验机的速率与数据采集技术的研究[R].北京工业大学硕士论文,1994(1):3-9.
[2] 曹少方.液压万能试验机自动测试装置拄术报告[J].北京工业大学,1989.
[3] 骆涵秀.试验机的电液控制系统[M].机械工业出版社, 1991.
[4] 沈红卫.RS一 232串行期通讯的实践探讨[J].计算机工程,1999(7):40-42.
TH123.+1
A
1008-1151(2011)06-0122-03
2011-03-10
赵春雨(1973-),男(满族),辽宁锦州人,成都理工大学工程技术学院助教,硕士,研究方向为机电传动;王俊飞 (1983-),男,山西太原人,成都理工大学工程技术学院助教,硕士,研究方向为液压传动。