摘 要:本文闡述如何在多專業(yè)領(lǐng)域合作下,用層次化方法對(duì)計(jì)算機(jī)工控軟件進(jìn)行系統(tǒng)設(shè)計(jì)。文中將工控軟件的體系結(jié)構(gòu)分為四層:物理層、通訊層、協(xié)議層和事務(wù)層,并對(duì)每一層所涉及的技術(shù)細(xì)節(jié)加以說明。文中以某型配液儀為例,介紹了軟件與其它技術(shù)專業(yè)的接口在層次結(jié)構(gòu)中的映射。
關(guān)鍵詞:軟件工程;工控軟件;層次化設(shè)計(jì)
中圖分類號(hào):TP311.52
一般情況下,工控類應(yīng)用的系統(tǒng)架構(gòu)主要由計(jì)算機(jī)、以單片機(jī)為核心的電子電路和機(jī)械構(gòu)件組成。用戶通過計(jì)算機(jī)向單片機(jī)發(fā)送控制指令,單片機(jī)通過外圍電子電路向機(jī)械構(gòu)件傳遞電信號(hào),機(jī)械構(gòu)件執(zhí)行具體操作。其系統(tǒng)復(fù)雜度取決于各技術(shù)專業(yè)(計(jì)算機(jī)、電子和機(jī)械)的交互性和耦合度。
下面闡述如何在多專業(yè)領(lǐng)域合作的情況下,用層次化方法對(duì)計(jì)算機(jī)軟件部分進(jìn)行系統(tǒng)設(shè)計(jì)。
1 層次化結(jié)構(gòu)
層次化是解決復(fù)雜問題時(shí)最常見的工程方法。
軟件系統(tǒng)的層次劃分,一般遵循以下原則:①每層的功能明確,且相互獨(dú)立。當(dāng)某一層具體的實(shí)現(xiàn)方法被更新時(shí),只要保持上、下層接口不變,就不會(huì)對(duì)鄰層產(chǎn)生影響。②層間接口必須清晰,跨越接口的信息量應(yīng)盡可能少。③層數(shù)適中,應(yīng)視系統(tǒng)復(fù)雜度而定。
筆者將工控軟件的體系結(jié)構(gòu)分為物理層、通訊層、協(xié)議層和事務(wù)層四層(如圖1)。
圖1 工控軟件的體系架構(gòu)
1.1 物理層。物理層包括所有實(shí)現(xiàn)該工控應(yīng)用的硬件資源。如計(jì)算機(jī)、工控設(shè)備及兩者間的連接方式。在某些存在電磁輻射、水汽、酸堿度偏向,甚至非常溫環(huán)境中,硬件需專設(shè)保護(hù)。連接方式通常有串口、網(wǎng)絡(luò)接口等。在某些工控系統(tǒng)中,將模擬信號(hào)轉(zhuǎn)換成數(shù)字?jǐn)?shù)據(jù)時(shí)需要有專用的數(shù)據(jù)卡,如光電轉(zhuǎn)換。設(shè)計(jì)者應(yīng)針對(duì)不同的系統(tǒng)環(huán)境選擇合適的連接方式。以串口為例,短距離的串口通訊使用RS-232接口;中遠(yuǎn)距、一對(duì)多連接時(shí)使用RS-485接口。在許多實(shí)際的工況中,軟件系統(tǒng)的性能受物理層的影響極大,一個(gè)好的工控軟件能直接反映出硬件的電氣特性。如溫控設(shè)備的曲線顯示,能直觀地表現(xiàn)出溫度值是否與電子測(cè)量值線性對(duì)應(yīng)。在工控項(xiàng)目中,軟件應(yīng)以硬件為中心,為硬件服務(wù)。
1.2 通訊層。通訊層實(shí)現(xiàn)計(jì)算機(jī)與工控設(shè)備在軟件層面的連接。常用的通訊接口有串口控件MSCOMM32、網(wǎng)絡(luò)連接控件Winsock等。通訊接口的選擇取決于物理層的連接方式。出于技術(shù)控制和安全方面的考慮,許多企業(yè)會(huì)自行設(shè)計(jì)各類接口的驅(qū)動(dòng)程序。通訊層的主要任務(wù)是發(fā)送和接收數(shù)據(jù)。與通訊接口相關(guān)的技術(shù)參數(shù)都在這一層進(jìn)行定義,如串口的波特率、網(wǎng)絡(luò)的端口號(hào)、響應(yīng)延遲時(shí)間等。通訊層還包括數(shù)據(jù)的加密、解密及相關(guān)安全技術(shù)。有些國外的軟件項(xiàng)目直接使用自定義的socket代碼,其中可以封裝許多不為外人所知的技術(shù)細(xì)節(jié)。通訊層是軟件系統(tǒng)的第一層,由協(xié)議層調(diào)用,但不同通訊接口的協(xié)議方式存在差別。
1.3 協(xié)議層。協(xié)議層定義計(jì)算機(jī)與工控設(shè)備(單片機(jī))間的通訊協(xié)議(語法),以及數(shù)據(jù)傳輸時(shí)數(shù)據(jù)幀的構(gòu)成(語義)。計(jì)算機(jī)與單片機(jī)間的通訊過程類似于網(wǎng)絡(luò)系統(tǒng)中的握手應(yīng)答,構(gòu)成客戶端/服務(wù)器模式。數(shù)據(jù)幀通常由幀頭、傳輸數(shù)據(jù)、校驗(yàn)碼和幀尾組成。通訊協(xié)議既要滿足硬件的需求,也應(yīng)符合軟件設(shè)計(jì)的基本規(guī)范。國際通行的文檔標(biāo)準(zhǔn)是:對(duì)每一條協(xié)議指令進(jìn)行分類編號(hào),配有文字說明,并設(shè)計(jì)相應(yīng)的出錯(cuò)處理流程。計(jì)算機(jī)端的協(xié)議代碼由事件驅(qū)動(dòng)機(jī)制實(shí)現(xiàn)。通訊層通過“數(shù)據(jù)到達(dá)”事件將接收數(shù)據(jù)傳送給協(xié)議層。在事件函數(shù)的處理中,程序根據(jù)指令編號(hào)和流程信號(hào)燈管控協(xié)議進(jìn)程。因此,軟件工程師需要畫出清晰的應(yīng)答路由圖。在協(xié)議層中,一次完整的通訊流程實(shí)現(xiàn)一條計(jì)算機(jī)控制指令。所有在協(xié)議層實(shí)現(xiàn)的控制指令可根據(jù)應(yīng)用需求進(jìn)行組合。為實(shí)現(xiàn)某一功能而組成的控制指令序列,本文稱之為事務(wù)。
1.4 事務(wù)層。事務(wù)層是由可視化界面與事務(wù)管理進(jìn)程組成的軟件框架平臺(tái)。
可視化界面主要包括工控?cái)?shù)據(jù)的圖表顯示、預(yù)警、控制流程界面及系統(tǒng)設(shè)置等??梢暬侵赣脩艨梢詫?shí)時(shí)觀測(cè)和干預(yù)硬件系統(tǒng)的運(yùn)行。
事務(wù)管理進(jìn)程負(fù)責(zé)處理所有用戶定義的事務(wù)操作,并把過程和結(jié)果提交給可視化界面。事務(wù)管理進(jìn)程也是數(shù)據(jù)采集、端口偵聽和應(yīng)答服務(wù)的主要構(gòu)件。
事務(wù)層作為軟件框架平臺(tái),可適應(yīng)不同用戶的工控需求。根據(jù)使用對(duì)象的不同,軟件可劃分為客戶版和調(diào)試版。通常在工控設(shè)備完全定型前,電子和機(jī)械工程師需要使用調(diào)試版對(duì)設(shè)備進(jìn)行硬件參數(shù)的設(shè)定。
2 應(yīng)用實(shí)例
2.1 軟件需求。研制一臺(tái)由計(jì)算機(jī)控制的自動(dòng)化配液儀,其基本功能是把各種指定的源溶液批量移放到目標(biāo)容器中進(jìn)行混合(配液),主要應(yīng)用于醫(yī)學(xué)和化學(xué)實(shí)驗(yàn)。計(jì)算機(jī)與配液儀通過串口相互連接。單片機(jī)中的軟件部分,已定義了與計(jì)算機(jī)間的通訊協(xié)議。
2.2 與機(jī)械專業(yè)的接口。配液儀的基本運(yùn)行流程如圖2。該流程共有七條控制指令,指令編號(hào)依次為11-17,構(gòu)成一次運(yùn)行事務(wù)。整個(gè)事務(wù)流程的設(shè)計(jì)歸入事務(wù)層,協(xié)議層的指令數(shù)據(jù)由通訊層發(fā)送和接收。
圖2 配液儀基本運(yùn)行流程
軟件從邏輯上控制機(jī)械構(gòu)件,除實(shí)現(xiàn)具體的機(jī)械動(dòng)作外,還要對(duì)各種可能出現(xiàn)的機(jī)械錯(cuò)誤進(jìn)行恢復(fù)處理。機(jī)械和電子工程師通常會(huì)給出機(jī)械錯(cuò)誤的明細(xì)表及處理方法。
處理事務(wù)流程時(shí),還要注意機(jī)械構(gòu)件的碰撞問題:一些錯(cuò)誤的指令組合會(huì)導(dǎo)致碰撞。如:放液后,還沒有丟棄移液槍吸頭,就直接去取新的吸頭。所有的控制指令序列都要在邏輯上進(jìn)行審核并測(cè)試。
2.3 與電子專業(yè)的接口。最重要的接口是計(jì)算機(jī)與單片機(jī)間的通訊協(xié)議。以配液儀為例,連接方式使用串口R-232,波特率9600bps。數(shù)據(jù)幀結(jié)構(gòu)為:幀頭+數(shù)據(jù)長(zhǎng)度+指令編號(hào)+指令數(shù)據(jù)+校驗(yàn)和+幀尾。
數(shù)據(jù)幀的格式對(duì)于協(xié)議層的數(shù)據(jù)解析至關(guān)重要。如“放液”指令,指令編號(hào)為15,指令數(shù)據(jù)由兩個(gè)字節(jié)組成,前一個(gè)字節(jié)表示目標(biāo)容器位置,后一個(gè)字節(jié)表示放液的體積。
協(xié)議流程如圖3所示。這是一個(gè)典型的客戶端/服務(wù)器模式的應(yīng)答協(xié)議。設(shè)計(jì)算機(jī)為客戶端C,單片機(jī)為服務(wù)端S,流程的文字描述如下:
C:請(qǐng)求建立連接;
S:連接已建立,進(jìn)入待機(jī)狀態(tài);
C:發(fā)送數(shù)據(jù)幀,等待服務(wù)端響應(yīng);
S:接收數(shù)據(jù)幀,如成功接收,響應(yīng)“數(shù)據(jù)接收成功”狀態(tài)碼,否則要求重發(fā);
C:如在規(guī)定時(shí)間內(nèi)未收到服務(wù)端響應(yīng)或被要求重發(fā),一定次數(shù)內(nèi)重發(fā)數(shù)據(jù);如服務(wù)端已正常響應(yīng),在規(guī)定時(shí)間內(nèi)繼續(xù)等待服務(wù)端的執(zhí)行狀況;等待超時(shí),則指令失??;
S:解析數(shù)據(jù)幀,執(zhí)行相關(guān)指令,并返回指令執(zhí)行結(jié)果;
C:根據(jù)狀態(tài)碼判斷指令是否正常執(zhí)行;如果指令執(zhí)行正確,則關(guān)閉連接,通訊結(jié)束。
圖3 通訊協(xié)議流程
2.4 面向?qū)ο蟮膶哟位瘜?shí)現(xiàn)。配液儀軟件的控制功能主要由兩個(gè)類來實(shí)現(xiàn):協(xié)議層的控制類clsMachine和通訊層的串口類clsComm。
UML類圖如圖4。可把類clsMachine看作是一臺(tái)虛擬的硬件設(shè)備。類中的操作定義對(duì)應(yīng)于圖2中的七條控制指令,指令的協(xié)議流程如圖3。類clsComm相當(dāng)于這臺(tái)虛擬設(shè)備的串口,操作列表中的數(shù)據(jù)發(fā)送方法(SendData)可自定義。
圖4 UML類圖
這種一層一類的軟件結(jié)構(gòu)是最簡(jiǎn)單的層次化實(shí)例。當(dāng)軟件規(guī)模擴(kuò)大時(shí),一層中會(huì)出現(xiàn)平行的多個(gè)類。如通訊層中可能同時(shí)包含串口類和socket類,類clsMachine可選擇其中一個(gè)來進(jìn)行通訊。
類clsMachine在事務(wù)層中被調(diào)用,執(zhí)行如圖2所示的事務(wù)。事務(wù)通常被設(shè)計(jì)成一個(gè)由單向鏈表實(shí)現(xiàn)的隊(duì)列,在不同的程序設(shè)計(jì)語言中有不同的實(shí)現(xiàn)方法。進(jìn)程始終執(zhí)行位于隊(duì)首的控制指令,執(zhí)行完畢后出隊(duì);隊(duì)列為空時(shí),事務(wù)結(jié)束。
3 結(jié)束語
把層次化方法引入工控軟件的系統(tǒng)設(shè)計(jì),是出于軟件工程管理的需要。軟件體系分層后,層與層間低耦合、高內(nèi)聚,有利于多層代碼間的并行開發(fā),提高了代碼的可重用性。對(duì)企業(yè)而言,可降低系統(tǒng)的開發(fā)成本和維護(hù)費(fèi)用。
在多專業(yè)領(lǐng)域合作下,層次化方法有助于軟件工程師理解工控系統(tǒng)的內(nèi)部結(jié)構(gòu)。軟件與其它技術(shù)專業(yè)間的接口都可映射到層次結(jié)構(gòu)中去,所有的開發(fā)工作都能在統(tǒng)一的系統(tǒng)模型上進(jìn)行討論和擴(kuò)展。
參考文獻(xiàn):
[1]Tanenbaum A.S.Wetherall D.J.計(jì)算機(jī)網(wǎng)絡(luò)[M].嚴(yán)偉,潘愛民,譯.北京:清華出版社,2012.
[2]James Rumbaugh,Ivar Jacobson,Grady Booch.UML參考手冊(cè)[M].UML China,譯.北京:機(jī)械工業(yè)出版社,2005.
[3]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[M].北京:清華大學(xué)出版社,1997.
作者簡(jiǎn)介:李斌(1977-),男,江蘇蘇州人,工程碩士,從事計(jì)算機(jī)應(yīng)用技術(shù)與軟件工程研究。
作者單位:蘇州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇蘇州 215006