王亦寧,佟振清,臧秀娟
(國(guó)網(wǎng)電力科學(xué)研究院/南京南瑞集團(tuán)公司,江蘇 南京 210003)
基于嵌入式編程技術(shù)的通用通信管理裝置設(shè)計(jì)與研究
王亦寧,佟振清,臧秀娟
(國(guó)網(wǎng)電力科學(xué)研究院/南京南瑞集團(tuán)公司,江蘇 南京 210003)
由于水電廠中使用的設(shè)備種類眾多及生產(chǎn)廠家不同,在實(shí)際應(yīng)用中為實(shí)現(xiàn)眾多設(shè)備的互聯(lián),需要增加通信管理裝置?,F(xiàn)有的通信管理裝置均需針對(duì)不同子設(shè)備的通信協(xié)議進(jìn)行二次開(kāi)發(fā),并不屬于真正意義上的直接面向用戶的產(chǎn)品。文中所述及的通信管理裝置采用符合國(guó)際標(biāo)準(zhǔn)的梯形圖作為開(kāi)發(fā)語(yǔ)言,采用編譯及解釋執(zhí)行的手段,最終實(shí)現(xiàn)真正意義上的面向用戶的通信管理裝置。
嵌入式;通信管理裝置;通信協(xié)議;梯形圖
在水電廠中,計(jì)算機(jī)監(jiān)控系統(tǒng)作為直接的監(jiān)視和操作設(shè)備,和運(yùn)行人員有著最直接和密切的關(guān)系。因而,水電廠計(jì)算機(jī)監(jiān)控系統(tǒng)所接入的監(jiān)測(cè)信號(hào)的完備性、可靠性直接決定了運(yùn)行人員的操作。水電廠計(jì)算機(jī)監(jiān)控系統(tǒng)對(duì)于諸如調(diào)速、勵(lì)磁、保護(hù)等子系統(tǒng)的接入多采用直接的I/O信號(hào)連接為主、現(xiàn)場(chǎng)總線形式的通信連接為輔的方式。由于水電廠計(jì)算機(jī)監(jiān)控系統(tǒng)的核心控制器多采用通用的PLC,缺乏足夠的對(duì)外通信擴(kuò)展能力,因而在監(jiān)控系統(tǒng)現(xiàn)地設(shè)備設(shè)計(jì)時(shí),需要額外增加通信管理裝置以實(shí)現(xiàn)和不同子系統(tǒng)間的現(xiàn)場(chǎng)總線形式的互聯(lián)。目前,實(shí)際應(yīng)用的通信管理裝置在物理接口上對(duì)外提供了諸如以太網(wǎng)、CAN現(xiàn)場(chǎng)總線、RS232/RS485等多種連接形式,在軟件方面依托于多任務(wù)的嵌入式系統(tǒng)對(duì)各個(gè)接口獨(dú)立編程從而實(shí)現(xiàn)通信互聯(lián)。對(duì)于嵌入式系統(tǒng)的驅(qū)動(dòng)軟件編程,需要由專業(yè)的研發(fā)人員針對(duì)不同廠家的不同產(chǎn)品所支持的軟件規(guī)約來(lái)進(jìn)行源碼級(jí)的程序編寫、編譯及下載。本文基于前述類型的通信管理裝置需要二次源碼級(jí)編程的不足,提出了采用梯形圖的形式進(jìn)行用戶應(yīng)用層的通信規(guī)約編程的手段,進(jìn)而避免源碼級(jí)的編程及下載,降低了裝置的使用難度(不需要源碼級(jí)編程,省去了整套嵌入式的開(kāi)發(fā)環(huán)境),從而使之成為真正意義上的可供用戶直接使用的通信管理裝置。
在水電廠監(jiān)控系統(tǒng)中的任何兩臺(tái)計(jì)算機(jī)上的兩個(gè)應(yīng)用程序通信都遵從統(tǒng)一的通信模型(如圖1),數(shù)據(jù)流動(dòng)可以用收發(fā)兩個(gè)動(dòng)作來(lái)描述。把提出數(shù)據(jù)請(qǐng)求服務(wù)的應(yīng)用程序稱為控制方向,即命令的下行;把提供數(shù)據(jù)服務(wù)的應(yīng)用程序稱為監(jiān)測(cè)方向,即數(shù)據(jù)的上行。這樣,一個(gè)完整的規(guī)約有控制方和監(jiān)測(cè)方兩個(gè)方面??刂品较蛳掳l(fā)送命令,并解析監(jiān)測(cè)方發(fā)來(lái)的應(yīng)答或主動(dòng)上報(bào)的數(shù)據(jù)或狀態(tài)指示報(bào)文;監(jiān)測(cè)方解析命令,根據(jù)請(qǐng)求命令組織應(yīng)答報(bào)文并上傳。
圖1 兩臺(tái)計(jì)算機(jī)通信模型圖
水電廠監(jiān)控系統(tǒng)中設(shè)備的通信規(guī)約都具有如下共同特性:幀結(jié)構(gòu)的相似性、數(shù)據(jù)對(duì)象種類和報(bào)文長(zhǎng)度的有限性、報(bào)文流的粒子性、邏輯過(guò)程的有窮性、傳送原因的可分類性。
在明確了通信雙方進(jìn)行通信的物理接口之后,設(shè)備通信規(guī)約可分為2部分:傳輸過(guò)程和傳輸幀。傳輸過(guò)程定義了通信雙方進(jìn)行數(shù)據(jù)交換的基本規(guī)則,傳輸幀則定義了雙方交換報(bào)文的具體意義,在進(jìn)行規(guī)約的解釋時(shí)必須嚴(yán)格遵守傳輸過(guò)程及傳輸幀所定義的語(yǔ)義。在對(duì)應(yīng)的驅(qū)動(dòng)程序開(kāi)發(fā)中,傳輸過(guò)程主要表明了報(bào)文交換的先后順序,在程序或梯形圖中可表述為按照條件執(zhí)行的先后順序;傳輸幀則代表了雙方設(shè)備具體的互換信息,可表述為程序中的表達(dá)式或梯形中不同的運(yùn)算功能塊?;诖?,模型的重點(diǎn)在于對(duì)不同數(shù)據(jù)幀的處理。
一般而言,對(duì)于通信規(guī)約的數(shù)據(jù)幀,可按照如下格式[1]:
圖2 通信報(bào)文統(tǒng)一抽象格式
一幀報(bào)文都是由傳輸控制部分和數(shù)據(jù)部分合成得到的。傳輸控制部分包括同步字對(duì)象、長(zhǎng)度對(duì)象、傳輸方向?qū)ο?、源地址?duì)象、目的地址對(duì)象、幀號(hào)對(duì)象、功能符對(duì)象等構(gòu)成。任何具體的規(guī)約都是上述全部對(duì)象或其子集對(duì)象的一個(gè)具體排列。數(shù)據(jù)部分則可定義雙方傳輸?shù)男畔?nèi)容等,并可由功能碼指定。不難看出,通過(guò)編程或梯形圖很容易實(shí)現(xiàn)上述圖2通信報(bào)文的格式。
對(duì)于通訊管理裝置,由于其內(nèi)部多采用嵌入式系統(tǒng),在針對(duì)不同的對(duì)外接口開(kāi)發(fā)驅(qū)動(dòng)軟件時(shí),一般遵循如下步驟:
1)安裝目標(biāo)機(jī)虛擬環(huán)境及相應(yīng)開(kāi)發(fā)語(yǔ)言包;
2)根據(jù)待通信設(shè)備的通信規(guī)約,進(jìn)行驅(qū)動(dòng)軟件的源代碼編輯;
3)對(duì)驅(qū)動(dòng)軟件源代碼進(jìn)行交叉編譯,生成目標(biāo)機(jī)可執(zhí)行代碼;
4)下載可執(zhí)行代碼到目標(biāo)機(jī);
5)利用在線調(diào)試環(huán)境運(yùn)行下載好的驅(qū)動(dòng)代碼,進(jìn)行在線調(diào)試;
如果在通訊管理裝置中內(nèi)嵌了可以解釋執(zhí)行梯形的進(jìn)程,則開(kāi)發(fā)對(duì)外接口的驅(qū)動(dòng)步驟如下:
1)用可視化梯形組態(tài)編輯待通信設(shè)備的驅(qū)動(dòng);
2)編譯梯形,生成二進(jìn)制中間代碼;
3)下載二進(jìn)制中間代碼到目標(biāo)機(jī);
4)利用在線調(diào)試環(huán)境運(yùn)行下載好二進(jìn)制中間代碼,進(jìn)行在線調(diào)試;
本通信管理裝置采用工業(yè)級(jí)PC104嵌入式控制PC作為主處理器,利用嵌入式Linux作為系統(tǒng)軟件,對(duì)外提供8個(gè)獨(dú)立的標(biāo)準(zhǔn)串行接口、1個(gè)以太網(wǎng)接口、1個(gè)CAN現(xiàn)場(chǎng)總線接口。裝置的整體硬件結(jié)構(gòu)如下[2]:
圖3 硬件結(jié)構(gòu)簡(jiǎn)圖
本通信裝置硬件具有以下關(guān)鍵技術(shù):
(1)核心采用了高度集成、自棧結(jié)構(gòu)、IBM-PC/AT兼容的PC104嵌入式控制PC,具有體積小、功耗低、工作溫度寬的特點(diǎn)并且每個(gè)通訊通道均采用獨(dú)立的中斷和收發(fā)電路設(shè)計(jì)具有極高的可靠性;
(2)嵌入LINUX操作系統(tǒng)作為軟件平臺(tái),充分利用了增強(qiáng)型80X86CPU的任務(wù)切換機(jī)制,實(shí)現(xiàn)了真正的多任務(wù)環(huán)境,使運(yùn)算速度及通信處理能力具有可靠保證;
(3)采用固態(tài)電子盤作為存儲(chǔ)介質(zhì),消除了硬盤轉(zhuǎn)動(dòng)部件的不可靠性;具有“看門狗”定時(shí)器,保證了嵌入式控制PC的運(yùn)行可靠性;
(4)具有8路標(biāo)準(zhǔn)串行接口、一個(gè)CAN現(xiàn)場(chǎng)總線接口(支持CAN2.0B協(xié)議)和一個(gè)以太網(wǎng)接口(10M/100M),各個(gè)通訊接口均能夠獨(dú)立編程,支持多種聯(lián)接方式,能靈活應(yīng)用于各種實(shí)際需求;
(5)支持在線自診斷、自恢復(fù)功能;支持通過(guò)局域網(wǎng)進(jìn)行遠(yuǎn)方診斷和維護(hù)[3]。
本裝置采用嵌入式Linux作為開(kāi)發(fā)環(huán)境,軟件平臺(tái)具有多任務(wù)、小內(nèi)核、運(yùn)行穩(wěn)定、開(kāi)發(fā)操作便捷等特點(diǎn)。Linux系統(tǒng)源碼公開(kāi)且內(nèi)核單一,操作系統(tǒng)中所有的系統(tǒng)相關(guān)功能都被封裝在內(nèi)核中,可以動(dòng)態(tài)裝入和卸載內(nèi)核中的部分模塊,因而修改和裁減內(nèi)核很方便。
裁減后的Linux內(nèi)核由5個(gè)部分組成:進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)管理、進(jìn)程間通信和網(wǎng)絡(luò)接口[4]。本通信管理裝置采用的嵌入式Linux系統(tǒng)的構(gòu)架如圖4:
圖4 裁減后的Linux系統(tǒng)構(gòu)架圖
最底層是硬件層,硬件的上面是Linux內(nèi)核,它是操作系統(tǒng)的核心部分。Linux內(nèi)核為硬件管理提供一致的方式,為應(yīng)用程序提供統(tǒng)一的接口,為此內(nèi)核被分為兩個(gè)部分:底層接口層和高層抽象層。其中底層接口層專屬于硬件配置,內(nèi)核運(yùn)行在底層接口層之上,并以與硬件無(wú)關(guān)的API(高層抽象層)提供對(duì)硬件資源的直接控制。
在底層接口層和高層抽象層之間主要是文件系統(tǒng)類型和網(wǎng)絡(luò)協(xié)議,它們構(gòu)成“解釋組件”,以讓內(nèi)核了解如何與特定設(shè)備進(jìn)行結(jié)構(gòu)化數(shù)據(jù)交互[5]。
內(nèi)核之上是應(yīng)用程序,應(yīng)用程序提供了完整的實(shí)時(shí)數(shù)據(jù)庫(kù),并針對(duì)各個(gè)不同的物理接口提供相應(yīng)的接口交互函數(shù)以及實(shí)時(shí)數(shù)據(jù)庫(kù)存取函數(shù)。該實(shí)時(shí)數(shù)據(jù)庫(kù)統(tǒng)一管理由各個(gè)接口上送上來(lái)的實(shí)時(shí)數(shù)據(jù),可按照特定的傳輸格式,設(shè)定某一接口傳送實(shí)時(shí)數(shù)據(jù)到上級(jí)設(shè)備。為保證實(shí)時(shí)數(shù)據(jù)庫(kù)各個(gè)接口驅(qū)動(dòng)軟件的可靠運(yùn)行,實(shí)時(shí)數(shù)據(jù)庫(kù)管理程序還對(duì)各個(gè)串口的通信驅(qū)動(dòng)程序進(jìn)行異常監(jiān)視,當(dāng)有驅(qū)動(dòng)軟件因故不正常運(yùn)行時(shí),能夠?qū)崿F(xiàn)驅(qū)動(dòng)軟件乃至通信管理裝置的重啟功能。
對(duì)于需要進(jìn)行源碼級(jí)開(kāi)發(fā)的外部設(shè)備的驅(qū)動(dòng)軟件,提供靜態(tài)鏈接庫(kù)。外部設(shè)備的驅(qū)動(dòng)軟件開(kāi)發(fā)過(guò)程如圖5所示。
圖5 源碼級(jí)驅(qū)動(dòng)軟件的開(kāi)發(fā)過(guò)程
圖6 梯形圖編程的開(kāi)發(fā)過(guò)程
梯形圖是一種圖形化表示的編程語(yǔ)言,起源于繼電器邏輯和執(zhí)行線路,它用不同的圖符來(lái)表示不同的指令,用串、并采用梯形圖編程的開(kāi)發(fā)過(guò)程圖6所示。聯(lián)等概念組織圖符的順序位置來(lái)表述邏輯。它以其形象、直接、簡(jiǎn)單易用、與電氣控制原理圖相呼應(yīng)、易于掌握等特點(diǎn)而成為PLC的主要編程語(yǔ)言。通信管理裝置采用符合國(guó)際標(biāo)準(zhǔn)的梯形圖作為開(kāi)發(fā)語(yǔ)言,采用編譯及解釋執(zhí)行的手段,最終實(shí)現(xiàn)為真正意義上的面向用戶的通信管理裝置。
本裝置梯形圖的編輯是利用Visual C++作為開(kāi)發(fā)語(yǔ)言的。利用VC++的多文檔/視圖結(jié)構(gòu)以及MFC基礎(chǔ)類架構(gòu)實(shí)現(xiàn)基本的梯形圖可視化編輯操作,包括梯形圖對(duì)象的選擇、插入、剪切、復(fù)制、粘貼、刪除等功能。在編輯梯形圖程序的時(shí)候,每個(gè)梯形圖程序的元素個(gè)數(shù),程序行數(shù)及其位置都是不固定的,所以采用動(dòng)態(tài)鏈表結(jié)構(gòu)。定義一個(gè)類用于構(gòu)造元素鏈表以及對(duì)鏈表進(jìn)行操作:
本嵌入式通信管理裝置梯形圖中的功能模塊(如賦值功能模塊、算數(shù)功能模塊等等)都可以看作是梯形圖中的基本元素。采用面向?qū)ο蠓椒▽?duì)梯形圖結(jié)構(gòu)進(jìn)行抽象,定義基類表征不同元素的最基本屬性和方法,同時(shí)針對(duì)不同種類的元素定義相應(yīng)的派生類。在設(shè)計(jì)中充分利用VC++標(biāo)準(zhǔn)模板庫(kù)提供的各種標(biāo)準(zhǔn)容器類可以方便實(shí)現(xiàn)梯形圖元素節(jié)點(diǎn)的動(dòng)態(tài)添加和刪除,這樣極大的簡(jiǎn)化了系統(tǒng)開(kāi)發(fā)。例如,在本裝置梯形圖組態(tài)編程軟件中,可以很容易實(shí)現(xiàn)諸如賦值、算術(shù)加、算術(shù)減等基本運(yùn)算單元(如圖7所示)。
圖7 賦值功能模塊和算術(shù)功能模塊
本通訊規(guī)約梯形圖組態(tài)主要提供了基本功能塊、算術(shù)運(yùn)算類、邏輯運(yùn)算類、關(guān)系運(yùn)算類、數(shù)學(xué)函數(shù)庫(kù)類、事件觸發(fā)類、硬件接口類等幾大類功能塊。其中,事件觸發(fā)類和硬件接口類主要用來(lái)實(shí)現(xiàn)規(guī)約的定時(shí)響應(yīng)以及數(shù)據(jù)的發(fā)送和接收。
事件觸發(fā)類包含了毫秒定時(shí)器、秒定時(shí)器、分定時(shí)器、小時(shí)定時(shí)器幾個(gè)類型。通過(guò)定時(shí)器,可定時(shí)對(duì)串口外掛的子設(shè)備進(jìn)行規(guī)約輪詢,進(jìn)而可獲得各個(gè)子設(shè)備上送的報(bào)文信息。其形式如圖8所示。
圖8 事件觸發(fā)類的各功能模塊
硬件接口類包含了串口的打開(kāi)、串口關(guān)閉、串口讀取、串口寫入等功能塊。主要用于對(duì)特定串口進(jìn)行異步I/O操作,從而完成和外部子設(shè)備的交互功能。如圖9所示的2個(gè)功能塊分別實(shí)現(xiàn)對(duì)串口的寫入和讀取功能。
圖9 硬件接口類功能模塊
通信管理裝置通過(guò)以太網(wǎng)接口與PC機(jī)連接通信,可分別下載各個(gè)串口的配置文件和規(guī)約腳本。通過(guò)對(duì)各通信接口的標(biāo)準(zhǔn)解釋進(jìn)程的控制,間接實(shí)現(xiàn)對(duì)梯形圖的在線調(diào)試以及對(duì)各個(gè)通信接口的規(guī)約調(diào)試。其調(diào)試過(guò)程如圖10。
圖10 PC嵌入式通信管理裝置梯形圖編程下載與在線調(diào)試示意圖
該裝置的編譯系統(tǒng)可完整檢查編輯者輸入的程序是否符合梯形規(guī)范要求。在靜態(tài)編譯階段,根據(jù)梯形圖程序的特點(diǎn),程序首先檢查每個(gè)程序段是否有輸入輸出;再檢查梯形圖中各個(gè)功能塊是否符合設(shè)定的輸入輸出規(guī)范,主要包括元素名稱、地址格式是否合乎規(guī)范、梯形圖中是否有孤立元件等。在解釋執(zhí)行階段可對(duì)出現(xiàn)異常的代碼進(jìn)行智能處理,主要包括死循環(huán)程序的異常管理、硬件接口的異常處理、非法運(yùn)算的異常處理等。通過(guò)對(duì)異常問(wèn)題的有效屏蔽,可避免因人為編程錯(cuò)誤造成的裝置異常,從而可有效提高裝置的可靠性和穩(wěn)定性。
通信管理裝置必須具有足夠快的運(yùn)算速度,才能滿足監(jiān)控系統(tǒng)的實(shí)時(shí)性要求。為達(dá)到這一要求,本裝置采用了標(biāo)準(zhǔn)程序庫(kù)和組態(tài)程序相結(jié)合的設(shè)計(jì)模式。即對(duì)于標(biāo)準(zhǔn)的、數(shù)據(jù)處理復(fù)雜的通信規(guī)約(比如 IEC65870-5-103、IEC65870-5-104等規(guī)約),由嵌入式C語(yǔ)言直接開(kāi)發(fā),提供標(biāo)準(zhǔn)的可執(zhí)行的進(jìn)程;對(duì)于大量的較為簡(jiǎn)單的、數(shù)據(jù)處理多樣性的通信規(guī)約(比MODBUS、CDT等規(guī)約),則直接進(jìn)行梯形圖組態(tài)及編譯執(zhí)行。
軟件具有自檢和自恢復(fù)功能。自動(dòng)診斷各類任務(wù)、設(shè)備的運(yùn)行情況并進(jìn)行報(bào)警。當(dāng)因某種干擾或硬件故障等原因發(fā)生運(yùn)行紊亂時(shí),軟件看門狗能產(chǎn)生自恢復(fù)信號(hào),自動(dòng)重新恢復(fù)運(yùn)行。
本文介紹了基于嵌入式編程技術(shù)的支持梯形圖進(jìn)行規(guī)約編程的通用通信管理裝置,該裝置可以靈活、方便、可靠、簡(jiǎn)單地實(shí)現(xiàn)與現(xiàn)地功能設(shè)備的數(shù)據(jù)通信,完成各現(xiàn)地設(shè)備與現(xiàn)場(chǎng)總線以及以太網(wǎng)的互聯(lián)。采用符合國(guó)際標(biāo)準(zhǔn)的梯形圖作為開(kāi)發(fā)語(yǔ)言實(shí)現(xiàn)供用戶直接使用,編程簡(jiǎn)單、使用方便,大大降低了裝置的使用難度和提高編程效率。
[1]李洪波.變電站設(shè)備主從式通信規(guī)約分析及其實(shí)現(xiàn)方案[J].電力系統(tǒng)通信,2004,(5).
[2]李斌,王曉航,施沖.嵌入式通信管理裝置的設(shè)計(jì)和實(shí)現(xiàn)[J].水電自動(dòng)化與大壩監(jiān)測(cè),2004.
[3]MB系列智能可編程控制器MBPro編程軟件使用手冊(cè)[M].
[4]王學(xué)龍.嵌入式Linux系統(tǒng)設(shè)計(jì)與應(yīng)用[M].清華大學(xué)出版社.2001.
[5]夏明.基于Linux的嵌入式監(jiān)控系統(tǒng)軟件平臺(tái)研究與設(shè)計(jì)[M].南京理工大學(xué),2007.
[6]趙雨生,高美鳳.一種梯形圖編程系統(tǒng)的研究與實(shí)現(xiàn)方法[J].工業(yè)控制計(jì)算機(jī),2008,(21).
[7]胡海生,李生亮.VC++6.0編程[M].清華大學(xué)出版社,2003.
TP393.03
B
1672-5387(2011)03-0021-04
2011-04-11
王亦寧(1980-),男,工程師,主要從事水電廠自動(dòng)化技術(shù)的研究與設(shè)計(jì)工作。