趙春雨 王俊飛
(成都理工大學(xué)工程技術(shù)學(xué)院,四川 成都 614000)
微機(jī)改造液壓萬能試驗(yàn)機(jī)關(guān)鍵技術(shù)的研究
趙春雨 王俊飛
(成都理工大學(xué)工程技術(shù)學(xué)院,四川 成都 614000)
微機(jī)化改造后的液壓萬能試驗(yàn)機(jī)能實(shí)時(shí)、自動(dòng)、精確地顯示壓力、位移等參數(shù),并能在實(shí)驗(yàn)結(jié)束后保存實(shí)驗(yàn)數(shù)據(jù)和打印材料特性曲線,省去了人工計(jì)算的環(huán)節(jié),利于工作效率的提高。文章就其中壓力、位移等實(shí)驗(yàn)參數(shù)的測量及實(shí)驗(yàn)曲線繪制關(guān)鍵技術(shù)和算法進(jìn)行研究闡述,分析了高速實(shí)時(shí)工作、串口通訊、曲線擬合等關(guān)鍵技術(shù)。
高速實(shí)時(shí)工作;串口通訊;曲線擬合
我國從上世紀(jì)50年代開始生產(chǎn)液壓萬能試驗(yàn)機(jī),早期產(chǎn)品使用杠桿擺錘測力系統(tǒng)。1987年國家頒布了GB228—87《金屬拉伸試驗(yàn)方法》新標(biāo)準(zhǔn)。舊試驗(yàn)機(jī)的測量系統(tǒng)不能滿足新標(biāo)準(zhǔn)的要求。上世紀(jì)90年代已是電子信息時(shí)代,計(jì)算機(jī)已廣泛地應(yīng)用于各種行業(yè)。因而將計(jì)算機(jī)應(yīng)用于試驗(yàn)機(jī)技術(shù)已成為當(dāng)前重要的課題。
在數(shù)據(jù)采集上,采集速度快、測量精度高;在數(shù)據(jù)分析上,考慮得更加周全;在數(shù)據(jù)處理上,具有智能交互、圖文并茂的特點(diǎn),能以數(shù)值顯示、圖表、曲線等多種方式表現(xiàn)實(shí)驗(yàn)數(shù)據(jù),并可根據(jù)教學(xué)要求對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行各種分析與處理。讓試驗(yàn)機(jī)在信號(hào)檢測、數(shù)據(jù)處理等方面更接近現(xiàn)代試驗(yàn)機(jī)發(fā)展水平,迎合了目前國內(nèi)外的試驗(yàn)機(jī)發(fā)展面向智能化、準(zhǔn)確化、操作簡便、穩(wěn)定可靠趨勢的需要。
就我國的經(jīng)濟(jì)實(shí)力和現(xiàn)有的生產(chǎn)力水平,淘汰低檔試驗(yàn)機(jī)是不必要的。只要選擇改造的途徑,利用微機(jī)對(duì)液壓萬能試驗(yàn)機(jī)進(jìn)行壓力、位移等試驗(yàn)數(shù)據(jù)的顯示,利用軟件對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行處理,都可以達(dá)到比較好的效果。目前很多單位已將微機(jī)用于低檔試驗(yàn)機(jī)的改造。改造的系統(tǒng)框圖如下圖1。
圖1 液壓萬能試驗(yàn)機(jī)微機(jī)化改造組成圖
利用微機(jī)的液壓試驗(yàn)機(jī)改造方法在wE-300液壓試驗(yàn)機(jī)的油缸回油管與油缸之間加配一個(gè)三通接頭,兩頭接油管,中間接一個(gè)30Mpa壓力傳感器,主要用于測量液壓油路的壓力。壓力傳感器接收到油壓的模擬信號(hào)傳到微機(jī)的數(shù)據(jù)采集卡。在油缸的工作行程位置上加裝一個(gè)位移傳感器,用來測量油缸行程的位移量,通過位移傳感器測量到模擬信號(hào)傳到微機(jī)的數(shù)據(jù)采集卡。改造后的試驗(yàn)機(jī)可配有標(biāo)程為0~700mm不同規(guī)格的變形引伸計(jì),可作金屬材料的拉、壓常規(guī)試驗(yàn)。
1.系統(tǒng)高速實(shí)時(shí)工作的實(shí)現(xiàn)
(1)FIFO緩存技術(shù)
FIFO存儲(chǔ)器是近幾年面市的一種特殊存儲(chǔ)器件,通常用于數(shù)據(jù)的緩存和用于容納異步信號(hào)的頻率或相位的差異。FIFO的實(shí)現(xiàn)通常是利用雙口RAM和讀寫地址產(chǎn)生模塊來實(shí)現(xiàn)的。FIFO的接口信號(hào)包括異步的寫時(shí)鐘(wr_clk)和讀時(shí)鐘(rd_clk)、與寫時(shí)鐘同步的寫有效(wren)和寫數(shù)據(jù)(wr_data)、與讀時(shí)鐘同步的讀有效(rden)和讀數(shù)據(jù)(rd_data)。為了實(shí)現(xiàn)正確的讀寫和避免FIFO的上溢或下溢,通常還應(yīng)該給出與讀時(shí)鐘和寫時(shí)鐘同步的 FIFO的空標(biāo)志(empty)和滿標(biāo)志(full)以禁止讀寫操作。其特點(diǎn)是在同一個(gè)芯片里同一個(gè)存儲(chǔ)單元配備有兩個(gè)數(shù)據(jù)口,一個(gè)是輸入口,只負(fù)責(zé)數(shù)據(jù)寫入,另一個(gè)是輸出口,只負(fù)責(zé)數(shù)據(jù)輸出,就像數(shù)據(jù)管道一樣,數(shù)據(jù)從管道的一頭流入、從另一頭流出,先進(jìn)入的數(shù)據(jù)首先流出。另外對(duì)這種存儲(chǔ)器進(jìn)行讀和寫的操作時(shí)不需要地址線參與尋址,它的數(shù)據(jù)是按照一種環(huán)形結(jié)構(gòu)依次進(jìn)行存放的。FIFO存儲(chǔ)器的另一個(gè)與傳統(tǒng)存儲(chǔ)器不同點(diǎn)是傳統(tǒng)存儲(chǔ)器的一個(gè)存儲(chǔ)單元中只要寫入一個(gè)數(shù)據(jù)后,這個(gè)數(shù)據(jù)將一直保存,直到被一個(gè)新的數(shù)據(jù)覆蓋,無論這個(gè)存儲(chǔ)單元中的數(shù)據(jù)被讀取過多少次也是如此。而FIFO存儲(chǔ)器中的存儲(chǔ)單元?jiǎng)t不是這樣,寫入的數(shù)據(jù)一旦被讀取后,則這個(gè)數(shù)據(jù)再無法被讀取,像永久消失一樣。所以,F(xiàn)IFO存儲(chǔ)器在操作時(shí)由“空”和“滿”的標(biāo)志位來表示FIFO存儲(chǔ)器內(nèi)部的狀態(tài)。
采集板本身的動(dòng)態(tài)鏈接庫(PCI8335.dLL)中所有的函數(shù)均可以直接調(diào)用,從而就實(shí)現(xiàn)了保證了采集的高速實(shí)時(shí)操作。
(2)定時(shí)查詢方法
一旦啟動(dòng)了A/D轉(zhuǎn)換,A/D就開始不斷地采集數(shù)據(jù)并存入到FIFO中,系統(tǒng)必須定時(shí)查詢FIFO緩存器是否處于半滿狀態(tài),以便下一步的存儲(chǔ)操作。以本系統(tǒng)選用定時(shí)杏詢的方法,被執(zhí)行的時(shí)鐘控件函數(shù)主要用來實(shí)現(xiàn)程序定時(shí)查詢 A/D狀態(tài)寄存器中的FIFO是否半滿標(biāo)志(HF),當(dāng)FIFO中的數(shù)據(jù)超過一半后,一次讀空FIFO中的數(shù)據(jù)。因?yàn)镕IFO半滿時(shí)的空間為2048個(gè)字,按照最大采集速度每秒100個(gè)數(shù)據(jù),緩存器可以存儲(chǔ) 2048/8*100=2.56秒的數(shù)據(jù),由于定時(shí)器的時(shí)間處理頻率直接來源于系統(tǒng)時(shí)鐘18.2Hz的中斷頻率,這就決定了這種定時(shí)器的處理時(shí)間的周期是55ms的倍數(shù),時(shí)鐘控件定時(shí)采集間隔完全可以滿足系統(tǒng)要求。
2.Delphi實(shí)現(xiàn)串行通訊的方法
Delphi在目前眾多流行的面向?qū)ο箝_發(fā)工具中最具有吸引力的開發(fā)工具之一。由于Delphi具有編程效率高、功能強(qiáng)大而受到廣大程序員的青睞。用Delphi實(shí)現(xiàn)串口通訊,可用使用通訊控件,如MSCOMM和SPCOMM,也可以使用API函數(shù)或者在Delphi中調(diào)用其它串口通訊程序。而利用API編寫串口通信程序較為復(fù)雜,需要掌握大量通信知識(shí),其優(yōu)點(diǎn)是可實(shí)現(xiàn)的功能更強(qiáng)大,應(yīng)用面更廣泛,更適合于編寫較為復(fù)雜的低層次通信程序。在本系統(tǒng)中,采用較為方便的MSCOMM通訊控件的方法。利用Delphi 7.0提供的MSCOMM通訊控件可以方便地訪問串行口,MSCOMM控件提供了很多有用的屬性和方法,通過它們用戶可以很容易的對(duì)串口進(jìn)行操作。MSCOMM的主要屬性如表1所示。
表1 MSCOMM控件的主要屬性
OnComm事件是通訊控件唯一的事件,此事件可用來處理所有與通訊有關(guān)的事件,無論何種事件發(fā)生,通訊控件只用一個(gè) CommEvent的屬性來處理。使用事件程序的好處是不需要一直讓程序處于檢測的狀態(tài)下,只要事先將程序代碼寫好,一有事件發(fā)生,就直接執(zhí)行相應(yīng)的程序代碼。下面給出串口的讀寫程序。從串口讀二進(jìn)制數(shù)據(jù)的程序如下:
var
SerialInput:Variant;
DataLength,intCnt,intTem:Integer;
…
begin SerialInput:=frmMain.MSComm.Input;
//讀取串口數(shù)據(jù)
DataLength:=frmMain.MSComm.InBufferCount; //讀取數(shù)據(jù)的長度
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.多線程機(jī)制實(shí)現(xiàn)
多線程的實(shí)現(xiàn)原理:
創(chuàng)建一個(gè)進(jìn)程時(shí),它的第一個(gè)線程稱為主線程(Primary thread),由系統(tǒng)自動(dòng)地生成。然后可以用這個(gè)主線程生成額外的線程,而這些線程,又可以生成更多線程。在運(yùn)行一個(gè)多線程程序時(shí),從表面上看,這些線程似乎同時(shí)運(yùn)行。
而實(shí)際情況并不是這樣,為了運(yùn)行所有這些線程,操作系統(tǒng)為每個(gè)獨(dú)立線程安排了一些CPU時(shí)間。單CPU操作系統(tǒng)時(shí)以輪轉(zhuǎn)方式向線程提供時(shí)間片(Quantum),每個(gè)線程使用完時(shí)間片后交出控制,然后系統(tǒng)再將 CPU時(shí)間片分配給下一個(gè)線程。因?yàn)槊總€(gè)時(shí)間片足夠短,所以就給人一種假象,好像這些線程同時(shí)運(yùn)行。創(chuàng)建額外線程唯一目的就是盡可能地利用CPU時(shí)間。
雖然Windows 提供了比較多的多線程設(shè)計(jì)的API 函數(shù),但是直接使用API 函數(shù)一方面極其不方便,而且使用不當(dāng)還容易出錯(cuò)。利用Tthread 對(duì)象,來解決多線程設(shè)計(jì)上的困難,簡化了多線程問題的處理。Tthread 對(duì)象沒有實(shí)例的,它和界面的交流,主要依靠主窗體(主VCL線程)。
Tthread 對(duì)象的主要方法:
構(gòu)造線程:
constructor Create(CreateSuspended:boolean)
其中:CreateSuspended=true 構(gòu)造但不喚醒
false 構(gòu)造的同時(shí)即喚醒
inheried Create(CreateSuspended:boolean)
掛起線程:
suspend
(把線程掛起的次數(shù)加一)
喚醒線程:
resume
析構(gòu)(清除線程所占用的內(nèi)存):destroy
終止線程(后面會(huì)具體討論):Terminate
下面為在主線程區(qū)構(gòu)造線程的方法是:
thread1:=mymath1.create;
thread2:=mymath2.create;
掛起:
thread1.suspend;
thread2.suspend;
喚醒:
thread1.resume;
thread2.resume;
析構(gòu):
thread1.destroy;
thread2.destroy;
線程的同步:
在使用多線程編程時(shí),有一個(gè)非常重要的問題就是線程同步。線程同步是指線程之間在相互通信時(shí)避免破壞各自數(shù)據(jù)的能力。同步問題是由前面說到的Win32系統(tǒng)的CPU時(shí)間片分配方式所引起的。雖然在某一時(shí)刻,只有一個(gè)線程占用CPU(單CPU時(shí))時(shí)間,但是沒有辦法知道在什么時(shí)候,在什么地方線程被打斷,所以如何保證線程之間不破壞彼此的數(shù)據(jù)就顯得非常重要。
利用Windows的API實(shí)現(xiàn)同步,Windows API函數(shù)提供了很多同步技術(shù)。使用線程的時(shí)候,遇到的一個(gè)基本的問題,就是多個(gè)線程訪問同一個(gè)對(duì)象,比如訪問相同的文件、DLL、相同的通訊資源,特別是數(shù)據(jù)庫的訪問,當(dāng)多個(gè)線程對(duì)同一數(shù)據(jù)庫字段寫入的時(shí)候,其結(jié)果會(huì)出現(xiàn)不確定性。
臨界區(qū)用于解決這個(gè)問題,它可以保證線程使用敏感數(shù)據(jù)的時(shí)候,阻賽其他的線程訪問名干數(shù)據(jù),使用時(shí)首先要初始化,其聲明一個(gè)
TRTLCriticalSection類型的變量:
var
CS:TRTLCriticalSection;
初始化:
initializeCriticalSection(cs);
獨(dú)占
EnterCriticalSection(cs);
解除獨(dú)占
LeaveCriticalSection(CS);
使用臨界區(qū)是比較方便而且概念比較清晰的的線程同步機(jī)制,應(yīng)用比較廣泛。
在曲線顯示模塊的設(shè)計(jì)中,其中主要采用的數(shù)學(xué)方法。
液壓萬能試驗(yàn)機(jī)在數(shù)據(jù)采集過程中,所采集到的是一些離散數(shù)據(jù)點(diǎn),這些離散的數(shù)據(jù)點(diǎn)中會(huì)存在誤差較大和明顯不正確的點(diǎn),就需要分析和處理來提高數(shù)據(jù)準(zhǔn)確性,保證能繪出光滑的數(shù)據(jù)曲線。特別在試驗(yàn)機(jī)啟動(dòng)和停止時(shí),由于收到較大的電磁干擾等,采集的數(shù)據(jù)往往會(huì)產(chǎn)生突變。為了解決這些數(shù)據(jù)誤差,本系統(tǒng)采用線性插值和最小二乘法曲線擬合等數(shù)學(xué)原理,進(jìn)行去毛刺處理,對(duì)數(shù)據(jù)曲線處理以便得到光滑實(shí)驗(yàn)曲線,便于進(jìn)行實(shí)驗(yàn)分析。
1.線性插值
已知函數(shù) y=f(x)在節(jié)點(diǎn) x0,x1有函數(shù) y0=f(x0),y1=f(x1),求作一次多項(xiàng)式L(x)=a0+a1x,使它滿足條件L(x0)=y(tǒng)0,L(x1)=y(tǒng)1。這種插值稱為線性插值,在節(jié)點(diǎn)上插值的誤差為0。
本系統(tǒng)由于采樣頻率比較高,兩個(gè)相鄰的采樣點(diǎn)可以近似的看成直線,選用線性插值就可以完成。
本文采用Lagrange插值方法。
Lagrange插值是n次多項(xiàng)式插值,其成功地用構(gòu)造插值基函數(shù)的方法解決了求 n次多項(xiàng)式插值函數(shù)問題?;舅枷胧菍⒋蟮?n次多項(xiàng)式插值函數(shù) pn(x)改寫成另一種表示方式,再利用插值條件確定其中的待定函數(shù),從而求出桿值多項(xiàng)式。在區(qū)間[a,b]中已知 y=f(x)在該區(qū)間上有 n個(gè)不同點(diǎn)x1,x2,…,xn處的函數(shù)值 yi=f(xi)(i=1,2,…,n)。用 Lagrange插值公式計(jì)算指定點(diǎn)u處的函數(shù)近似值。
Lagrange插值多項(xiàng)式:
其中
Lagrange插值余項(xiàng)
2.最小二乘法擬合曲線
系統(tǒng)進(jìn)行數(shù)據(jù)采集時(shí),所采集到的數(shù)據(jù)為一些離散的數(shù)據(jù)點(diǎn),為了使數(shù)據(jù)曲線平滑、準(zhǔn)確,采用最小二乘法擬和曲線,產(chǎn)生一個(gè)多項(xiàng)式或已知函數(shù)來對(duì)這些離散的數(shù)據(jù)點(diǎn)進(jìn)行逼近。
根據(jù)一組給定的實(shí)驗(yàn)數(shù)據(jù)(xi,yi)(i=0,1,…,m),求出自變量x與因變量y的函數(shù)關(guān)系y=s(x,a0,…,an)(n<m),這是ai為待定參數(shù),由于觀測數(shù)據(jù)總有誤差,且待定參數(shù) ai的數(shù)量比給定數(shù)據(jù)點(diǎn)的數(shù)量j少(即 n<m),因此它不同于插值問題。這類問題不要求 y=s(x)=s(x,a0,…,an)通過點(diǎn)(xi,yi)(i=0,1,…,m),而只要求在給定點(diǎn) xi上的誤差δi=s(xi)- yi(i=0,1,…,m)的平方和最小。當(dāng)s(x)=span{ Φ0,Φ1…,Φn}時(shí),即 s(x)= a0Φ0(x)+ a1Φ1(x)+…+ anΦn(x)這里Φ0,Φ1…,Φn∈C[a,b]是線性無關(guān)的函數(shù)族,假定在[a,b]上給出一組數(shù)據(jù){(xi,yi)(i=0,1,…,m)},a≤xi≤b以及對(duì)應(yīng)的一組權(quán){ρi}0m,這里ρi>0為權(quán)系數(shù),要求s(x)=span{ Φ0,Φ1…,Φn}使(a0,…,an)最小。
這就是最小二乘逼近,得到的擬合曲線為y=s(x),這種方法稱為曲線擬合的最小二乘法。
I(a0, a0,…,an)實(shí)際上是關(guān)于 a0, a0,…,an的多元函數(shù),求I的最小值就是求多元函數(shù)I的極值,由極值必要條件,可得
根據(jù)內(nèi)積定義引入相應(yīng)帶權(quán)內(nèi)積記號(hào)
則可得
這是關(guān)于參數(shù)a0,a0,…,an的線性方程組,用矩陣表示為
均方誤差為
在實(shí)際擬合試驗(yàn)曲線時(shí),取次數(shù)為 2的最小二乘擬合,得到擬合方程s(x)。
我國數(shù)萬臺(tái)低檔試驗(yàn)機(jī)在國標(biāo)GB228-87的促進(jìn)下,必須改造。用電子和計(jì)算機(jī)技術(shù)改造試驗(yàn)機(jī)已經(jīng)有了成功的例子。設(shè)計(jì)生產(chǎn)一種適臺(tái)國情的中檔材料試驗(yàn)機(jī)的新機(jī)型是我國目前市場的需要,應(yīng)該受到有關(guān)部門和試驗(yàn)機(jī)廠家的重視。本文就其中的關(guān)鍵技術(shù)做了研究和闡述,旨在對(duì)微機(jī)控制液壓萬能試驗(yàn)機(jī)的推廣應(yīng)用提供有益的參考。
[1] 王勇.材料試驗(yàn)機(jī)的速率與數(shù)據(jù)采集技術(shù)的研究[R].北京工業(yè)大學(xué)碩士論文,1994(1):3-9.
[2] 曹少方.液壓萬能試驗(yàn)機(jī)自動(dòng)測試裝置拄術(shù)報(bào)告[J].北京工業(yè)大學(xué),1989.
[3] 駱涵秀.試驗(yàn)機(jī)的電液控制系統(tǒng)[M].機(jī)械工業(yè)出版社, 1991.
[4] 沈紅衛(wèi).RS一 232串行期通訊的實(shí)踐探討[J].計(jì)算機(jī)工程,1999(7):40-42.
TH123.+1
A
1008-1151(2011)06-0122-03
2011-03-10
趙春雨(1973-),男(滿族),遼寧錦州人,成都理工大學(xué)工程技術(shù)學(xué)院助教,碩士,研究方向?yàn)闄C(jī)電傳動(dòng);王俊飛 (1983-),男,山西太原人,成都理工大學(xué)工程技術(shù)學(xué)院助教,碩士,研究方向?yàn)橐簤簜鲃?dòng)。