首頁>技術中心>技術資訊>VC++6?0在液壓缸泄漏量檢測數據處理中的應用
VC++6?0在液壓缸泄漏量檢測數據處理中的應用
發布時間:2017-09-01
引言
液壓缸是將液壓能轉換為機械能的轉換裝置,在液壓設備中占用重要的地位。在實際工程中,液壓缸一般比較大,拆裝都不方便,發生泄漏故障時難已被察覺,因此成為設備故障診斷中的難點。液壓缸產生故障的主要原因是泄漏,同時它又是影響安全、污染環境的重要因素,所以應引起足夠的重視。液壓缸泄漏分為內泄和外泄,外泄可在外部直接觀察到;而內泄漏不能直接觀察到,是液壓缸泄漏的主要原因。國內檢測泄漏量通常采用的方法有:流量計法,保壓法,水下收集氣泡法,涂肥皂水法等。這些方法操作繁瑣、準確性差、難以滿足實際生產的需要。
根據流體力學原理,如能在密閉容腔內檢測到一定時間內壓力的變化量,便可求出泄漏量。
壓力變化值與泄漏量之間的關系為:
其中:Δp為壓力變化值, E0為介質的體積彈性模數(N/m2)。
由此可見,泄漏量與壓差成正比例關系。
本文是以某鋼廠軋機機架液壓缸的泄漏量檢測為設計對象的。
1系統設計
本系統采用下位機(液壓缸泄漏檢測儀)向上位機(PC)傳送檢測數據,由上位機進行數據處理、顯示的方案(見圖1)。下位機是針對現場測試而設計的專用檢測工具,主要檢測液壓缸內泄漏。在保證其它管路無泄漏情況下,在液壓缸進油口通入壓力油,再將活塞停在某一處,然后檢測進油腔內的壓力變化情況。它可同時檢測兩路壓力信號,以每秒記錄一組數據的方式,按照所設置的記錄時間,記錄工作過程中的壓力值。數據存放時每一個有效數據由2個字節表示。檢測記錄的傳輸是單方向的。
2接口設計
(1) RS-232C簡介
串行口是計算機的一個標準接口,特點是它的數據和控制信息是一位接一位串行的傳送下去。雖然速度會慢一些,但傳送距離較并行口更長,因此適合于長距離通信。RS-232C是目前已在微機通信接口中廣泛采用的一種串行通信接口標準,是美國EIS (電子工業聯合會)與BELL公司一起開發并于1969年公布的通信協議。它適合于數據傳輸速率在0~20000bit/s范圍內的通信。RS-232C的連接距離可達15~30m。
(2)通信協議
為使上位機與下位機能正常通信,上下位機制定了共同遵守的通信協議。這包括對數據格式,同步方式,傳送速度,傳送步驟,檢錯方式等問題的統一規定。由于異步傳輸方式比較簡單,雙方時鐘可以有一定誤差,因此采用起止式異步傳輸協議,規定如下:波特率9600,無奇偶校驗位, 8位數據位, 1位停止位,采用二進制方式;校驗方式采用求和校驗碼,即通信雙方在通信過程中均計算傳輸數據之和,傳輸完成后由上位機比較雙方計算結果是否相等,若相等則說明傳輸正確,下位機可繼續傳;否則傳輸有誤,上位機提示下位機重新傳送。
(3)通信設置
傳輸介質采用二芯屏蔽電纜,接口用DB-9連接器,采用最簡單的“3根線”-接收線RxD (引腳2),發送線TxD (引腳3),信號地線SG (引腳5)連接方式見圖2。
3端口編程
在Windows中實現串口通信通常采用以下3種方法。
(1) Win32 API函數。此方法應用起來比較復雜,專業化程度高。
(2)直接嵌入匯編法。此方法利用C/C++匯編嵌入功能,直接對串行口進行操作。但不能在Win-dows NT操作系統下使用。
(3)使用現有的ActiveX控件實現。VC++6?0提供的MSComm控件通過串行端口傳輸和接收數據,為應用程序提供串行通信功能。此控件在使用時非常方便,程序員不必了解較為復雜的API函數。它提供了兩種處理通信問題的方法:一是事件驅動方法,一是查詢法。
①事件驅動方法:每當有新的字符到達,或端口狀態改變或發生錯誤時, MSComm控件觸發On-Comm事件,從而獲取并處理這些通信事件。這種方法的好處是程序相應及時,可靠性高。
②查詢法:實質上也屬于事件驅動方法。在程序的每個關鍵功能之后,通過檢查CommEvent屬性值來查詢事件和錯誤,只要CommEvent屬性值發生變化,就表明一個通信事件或一個錯誤發生。這種方法適合于較小的應用程序。
MSComm控件具有豐富的與串口通信密切相關的屬性及事件,提供了一系列標準通信命令的接口,可用于創建全雙工、事件驅動、高效實用的通信程序。MSComm控件提供了27個關于通信控制方面的屬性和5個標準屬性。下面介紹MSComm控件的幾個常用屬性。
(1)初始化并打開串口
下面利用OnInitialUpdate ()函數來說明。
void CTerminalView:: OnInitialUpdate ()
{…
CMSComm m_Com;
m_Com. SetCommPort (1); //選擇COM1
m_Com. SetInBufferSize (1024); //設置輸入緩沖區的大小, Bytes
m_Com. SetOutBufferSize (100); //設置輸出緩沖區的大小, Bytes
if (! m_Com. GetPortOpen ()) //打開串口
m_Com. SetPortOpen (TRUE);
m_Com. SetInputMode (1); //設置輸入方式為二進制方式
m_Com. SetSettings (”9600, n, 8, 1”); //設置波特率等參數
m_Com. SetRThreshold (1); //為1表示有一個字符引發一個事件
m_Com. SetInputLen (1); //每次取一個字符
}
(2)串口讀寫
完成讀寫的函數很簡單,分別為GetInput ()和SetOutPut ()。兩個函數的原型是: VARIANT Get-Input (),及void SetOutput (const VARIANT& new-Value)。因為串口讀寫比較簡單,只要注意數據類型為VARIANT即可,故在此不做過多介紹。
(3)關閉串口
使用完MSComm通信對象后,需要將端口關閉。當然如果窗體注銷時, MSComm控件注銷同樣可以完成這一功能。用下面的語句可以完成這一功能。
m_Com?SetPorOpen (false);
如果要了解所有通信事件和通信錯誤的列表,請參閱CommEvent屬性。
4數據處理
數據處理也就是將接收到的數據存入磁盤文件中。此系統利用CFile類實現文件讀寫。下面以將數據存入文件為例說明。
void CTerminalView:: copedata () //存儲接收到的數據
{……
m_filename =”e: \ \ new\ \ file1. txt”;
charbuf [6]; CFile file; //創建可讀可寫文件
file. Open ( (LPCTSTR) m_filename, CFile::modeCreate|CFile:: modeReadWrite);
for (m_length1=1; m_length1<= (2*m_dtl);m_length1++)
{de = sdata. GetAt (len); gao = sdata.GetAt (len1);
data= (gao<<8) +de; //將數據低位和高位合并存在data中
_itoa ( data, buf, 10 ); //將整形轉換成字符型
ms=buf; ms+=”\ r\ n”;
file. WriteString (ms); len+=2; len1+=2; //存儲到e盤new文件夾中
}
file. Close ();………
}
5結束語
本文對在Windows下在VC++6?0程序中使用MSComm通信控件編程做了較為詳細的介紹,說明MSComm控件具有強大功能和很大的靈活性和易用性。在此基礎上設計的檢測液壓缸泄漏量軟件,具有操作簡單,人機對話方便的特點,可以很方便的移植到其它的機電控制系統中,成本低,使用范圍廣,而且為液壓缸定期維護、檢修提供了重要的參考依據。
摘自:中國計量測控網