1引言
工控應用已遍及各行各業,特別是隨著計算機的普遍降價、由PC機建構的控制系統也越來越多,該類控制系統的優點是開發人員可以用高級語言及大量的現有軟件快速建構成自己的軟件系統。本文主要介紹了這類應用的一種實現方法:該方法是將所有硬件I/O部分按類型分類。將他們各自的讀寫過程全部函數化。經數學抽象后歸一化為流對象統一處理:傳感器→流→(初始化函數,流讀,流寫,關閉)→應用軟件讀寫線程→用戶消息→主窗口。經這樣的抽象后,無論控制系統多么復雜,硬件傳感器是什么形式,在這種軟件架構下全使用統一的軟件方法處理。
[b]2控制系統硬件結構
[/b] 設想一類控制系統是如下結構建成的,主控臺完成同5個測量站的通信并指揮測量站按確定 方程運動。主控臺通過與網絡與中心站完成雙向I/O、主控臺可以單獨遙控某一測量站設備單獨工作。大的硬件控制如圖1所示。
主控臺與測量站用RS 232通信,經Modem接連,與其他測量設備由A/D、D/A連接卡連接,與中心機通信由網絡連接。
在構建此控制系統軟件時,不妨將問題擴展,假定不考慮具體的設備控制對象,不考慮具體的應用類型,考慮一種更復雜的控制系統:設想控制系統如圖2所示。
控制計算機使用P4 2.8或P4 2.4 GHz處理器,具體的控制對象設想為抽象傳感器即可。
[b]3控制系統軟件構架
[/b] 本文提供的軟件構架為:對每類控制硬件設備而言,訪問該類硬件無非對應如下幾個函數:
(1) 硬件初始化函數。
(2) 硬件讀函數。
(3) 硬件寫函數。
(4) 硬件刷新及關閉函數。
這樣,經過數學抽象后,每類硬件訪問不超過這5條函數。無論控制系統由什么硬件傳感器 搭建,對一類傳感器而言。訪問他僅需要幾條語句而已。假設按類型編制了相關的I/O函數。
該軟件系統的主要思路為:任一控制對象(傳感器)均可設想為流設備、線程完成流讀 寫,讀寫時序由中斷或其他設備事件決定。一旦硬件設備I/O完成,用臨界區鎖住數據,導入軟設備緩沖區。用戶交互部分僅同軟設備緩沖區打交道,與設備硬件無關。控制函數只負責設備緩沖區填寫。這一函數僅與通訊協議有關,與硬設備無關。這樣任一硬件設備同計算機通訊都可以將其視為一串流信息的交換。更簡單的看法為:任一硬設備不妨直接視為一定長的十六進制字符串。這樣,任一控制系統在該軟件構架下是若干個十六 進制字符串。而軟件主框架將其流已分成幾大類(串行通訊類,網絡類等)。添加或刪除某些硬件對軟件系統就是關閉幾條條件編譯項。況且對每類應用,I/O函數是4、5句,所有的同硬件打交道部分都在線程級完成,且讀寫線程機構完全一致。
前臺用戶交互部分已完全獨立于后臺,后臺與相關事件通知有關,與前臺幾乎沒有其他關聯,所以前臺將所有緩沖填好后,只需調一句事件通知即可,這樣后臺將會自動等到該通知后轉入自己的I/O操作。
讀線程完成一具體硬件讀,讀時序由讀事件驅動,讀線程一旦讀到數據,數據先進入用戶設計的臨界區,鎖住數據,將硬件緩沖區讀到的數據放入軟件緩沖區,發用戶讀完成消息給前臺,實現軟硬件隔離。
寫線程完成一具體硬件寫,寫時序由寫事件驅動,寫線程一旦要寫數據,首先調用控制函數完成設備緩沖區填寫,進入用戶設計的臨界區鎖住數據,將軟件緩沖區的寫數據放到硬件緩沖區,發用戶定制的寫完成消息給前臺,實現軟硬件隔離。
讀完成用戶處理消息為:完成數據轉換,供顯示用。
寫完成用戶處理消息為:先告知用戶狀態計數器,表示寫已完成,再做其他顯示處理。對各硬件的訪問全部分開,但讀寫線程結構完全相同。
控制函數的形式也完全相同,無論是用PID算法或其他算法,均與此函數結構無關。因為該 控制函數的本質為:根據控制字,完成抽象軟件緩沖區填寫。與控制算法無關。因為這種算法僅在該控制函數中作為子函數調用。
控制函數的功能為:根據控制字完成寫出緩沖區填寫,并置寫出長度,填寫緩沖區為軟設備緩沖區,控制函數對設備而言結構是完全統一的。形式為:

其中k為控制方式字。例如:0為待機,1為手動,2為理論彈道,3為正弦彈道……
控制時序由標準的時鐘設備提供,例如B碼或其他設備,他產生的同步脈沖作為中斷源接入 系統。中斷處理程序一旦檢測到該中斷,設置各自硬件讀寫事件為有信號(硬件讀寫事件由用戶在初始化時建立為手工復位的事件)。在讀寫線程中一旦完成讀寫操作,復位這些事件。
對應于上述復雜的硬件控制系統,該控制軟件架構如圖3所示。

讀設備線程:
(1) 判斷線程是否退出,如退出則轉(8),否則轉(2)。
(2) 等待讀事件,永遠等(該事件為手工復位)。
對異步串行設備或網絡設備而言該步可省略。
(3) ReadFileDevice()調設備硬件讀函數完成讀操作。
(4) 判斷讀是否成功,如不成功,則轉(1),如成功轉(5)。
(5) 進入臨界區,將硬件讀緩沖區復制到軟設備緩沖區,退出臨界區。
(6) 發用戶消息到前臺,復位讀事件,為下一次讀做準備。
(7) 轉(1)。
(8) 結束。
寫設備線程:
(1) 判斷線程是否退出,如退出則轉(9),否則轉(2)。
(2) 等待寫事件,永遠等(該事件為手工復位)。
(3) 調控制函數完成設備緩沖區填寫。
(4) 進入臨界區,將軟設備寫緩沖區復制到硬件寫緩沖區,退出臨界區。
(5) WriteFileDeivce()調設備寫函數完成寫操作。
(6) 判斷寫成功否,如不成功轉(1),如成功轉(7)。
(7) 發用戶消息到前臺,復位寫事件,為下一次寫做準備。
(8) 轉(1)。
(9) 結束。
[b]4結語
[/b] 在這樣一種軟件架構下,控制系統硬件接口部分從軟件角度看僅是4、5條函數,通過Window s 2000的內核同步對象(事件和臨界區)將軟硬件緩沖區實行了隔離及同步。通過中斷置事 件達到控制時序設置。經過這一系列步驟后,整個控制系統的計算機實現軟件結構清晰明了 ,調試方便。該軟件系統架構與開發工具無關,作者運用這一軟件架構已設計多套控制系統 ,這些控制軟件目前正成功運行于我國幾個基地。
[b]參考文獻
[/b][1]曹國鈞,王鍵.深入Windows 2000應用[M].北京:北京科海集團 出版社,2001.
[2]飛思科技產品研發中心Delphi下深入Windows核心編程[M].北京:電子 工業出版社,2003.
[3][美]William BoswellWindows 2000 Server 技術內幕[M].北京:清 華大學出版社,2001.
[4]陳平,褚華.軟件設計師教程[M].北京:清華大學出版社,2004.
編輯:何世平