樊亞寧 徐震浩 顧幸生
(華東理工大學信息科學與工程學院1,上海 200237;化工過程先進控制和優化技術教育部重點實驗室2,上海 200237)
SUPMAX系列分散控制系統是上海自動化儀表股份有限公司DCS公司研發的新一代大型分散控制系統。自1998年推出以來,該系統已廣泛應用于電力、石化、鋼鐵、有色金屬、水泥、造紙、食品、制藥和能源等領域[1-3]。
市場分析表明,針對需要復雜邏輯控制的系統,普通的DCS往往由于沒有專用的邏輯控制卡件,在主控制器發生故障時,整個系統的邏輯控制功能將會失效,這對于控制系統來說是非常危險的。因此,設計專用的具有邏輯控制的智能I/O卡,使系統免受主控制器故障的影響,可提高系統的穩定性,且有利于系統的推廣和應用。小型系統可以不使用控制器,直接采用智能I/O卡來實現控制功能。
本文闡述了智能I/O卡的硬件設計和結構化文本編譯器設計方案,提出了智能I/O卡的上位機軟件設計方案,并開發了智能I/O卡的上位機軟件。
上位機軟件系統結構如圖1所示。

圖1 系統結構框圖Fig.1 Structure of the system
智能I/O卡是SUPMAX800D系統中I/O卡的組成部分,采用專用的組態軟件進行組態的下載,實現對系統的邏輯控制。智能I/O卡通過RS-232串口實現與上位機間的通信,可以獨立執行組態算法,也可以通過RS-485總線和分散處理單元(distributed processing unit,DPU)進行數據通信,并在DPU斷電時仍可以獨立地進行邏輯控制,從而保證了整個系統的邏輯控制。智能I/O卡可以配置不同類型的信號,實現信號的輸入和輸出功能,但它只能應用于SUPMAX800D控制系統。
智能I/O卡的主要技術性能指標如下。
① 允許連接 AI、AO、DI、DO、TC、RTD 通道板;
②2 MB容量的 Flash,用于存儲結構化文本(structure text,ST)組態文件;
③片內256 kB、片外4 MB的RAM;
④配置組態下載串口;
⑤通過I/O通信總線,與DPU進行通信和數據的交換;
⑥上位機配置相應的填表式組態器,可完成組態的編制、下載;
⑦根據相應的組態獨立進行邏輯運算控制。
智能I/O卡可與SUPMAX800D系統中的模擬量和數字量I/O卡配套使用,實現數據的采集處理和控制功能。設計要求智能I/O卡可以直接和上位機通信完成組態的下載,也可以和DPU進行數據交換。智能I/O卡及其硬件結構如圖2所示。

圖2 智能I/O卡及硬件結構示意圖Fig.2 Intelligent I/O modules and schematic diagram of the hardware structure
ARM9模塊的具體功能如下。
①通過RS-232串口與上位機進行通信,接收PC控制策略組態文件、響應PC激活命令并發送響應數據、上傳PC控制策略組態文件、上傳報警及狀態信息;
②發送通道板組態和數據至Cortex,接收Cortex通道狀態和數據,與SDRAM和Flash通信。
ARM9模塊的輸入項為上位機組態文件,輸出項為SPI總線控制Cortex。
Cortex和CPLD模塊的作用是采集數字量和模擬量通道卡的輸入信號,并控制A/D卡的輸出及通道點。當DPU發送組態和命令時,Cortex把狀態、數據、報警等發送給DPU。Cortex和CPLD模塊的輸入項為ARM9的SPI總線、通道卡的輸入信號及RS-485總線,輸出項為通道卡控制信號和RS-485總線。
通道板組態可以從ARM9和DPU中獲取,但組態以ARM9發送過來的信息為準。如果兩者發送的組態不一致,則報警。Cortex從I/O通道板的EEROM中讀取I/O通道板的類型,并與ARM9發送的組態進行比較。如果兩者不同,則報警。
接口設計具體為:與上位機使用RS-232串口連接,與DCS系統使用RS-485總線連接;與通道卡之間用40芯插座連接。
結構化文本(structure text,ST)是一種高級的文本語言,可以用來描述功能塊和程序的行為,還可以在順序功能流程圖中描述步、動作和轉變的行為。ST專為PLC系統定制,在DCS的組態軟件中融入ST語言,可更好地實現與PLC系統的相互結合。本文提出了三種可行的設計方案,具體介紹如下。
純ST文本編譯時,上位機部分采用ST文本格式輸入智能I/O卡的組態和邏輯,再通過編譯軟件將純ST文本編譯成二進制代碼,然后通過RS-232串口發送給ARM9芯片。ARM9芯片接收到二進制代碼后,解析程序會對ST文本中一定數量的保留字進行解析,并轉換為ARM9芯片能夠執行的程序代碼。其優點是靈活、不受模塊類型的影響、通用性強、工作量小,缺點是目前編譯生成的代碼較大、效率低。
生成ARM9運行代碼方案的上位機以模塊的形式輸入智能I/O卡的組態和邏輯,再通過ARM的編譯軟件將組態和邏輯編譯成ARM9的運行代碼,然后通過RS-232串口下發給ARM9芯片。ARM9接收到運行代碼后可直接運行程序。其優點是ARM9無需解碼執行程序即可運行、效率高,缺點是上位機要調用ARM編譯軟件、工作量較大。
生成組態鏈表方案的上位機也能以模塊形式輸入I/O卡的組態和邏輯,再將組態和邏輯編譯生成組態運行鏈表,經由 RS-232串口下發給 ARM9芯片。ARM9芯片需要開辟一段數據區用于存放模塊的數據結構,程序需解析運行鏈表。其優點是保持和DPU相同的處理方式和工作量,缺點是ARM9芯片需要開辟足夠的內存來存放數據結構。
上位機軟件總體結構框圖如圖3所示。系統由文件、操作、通信和幫助等功能模塊組成[4-7]。

圖3 軟件總體結構框圖Fig.3 Overall structure of the software
文件模塊包括新建項目和打開項目。新建項目是在底層創建可擴展標記語言(extensible markup language,XML)文件,用于存儲用戶添加的模塊數據。打開項目用于打開已有的組態文件,并在底層讀取文件內的模塊,以樹狀結構形式顯示在操作界面。
操作模塊由增加模塊、刪除模塊、激活模塊、上傳組態和下載組態模塊組成。增加和刪除模塊使用戶可以根據具體的功能需求組織模塊間的輸入、輸出關系。下載組態是從底層的XML文件中讀取所有模塊的結構數據,根據模塊的輸入、輸出關系生成模塊運算順序表及組態版本等數據,并下發給下位機。激活模塊使智能I/O卡處于一個激活的狀態。上位機根據用戶選擇的模塊使用定時器實時下發激活命令給下位機,下位機接收到激活命令,將模塊的參數值上傳給上位機,并最終反映在用戶界面上。同時,用戶在激活狀態下可修改某一模塊的參數值并下發控制命令給下位機。上傳組態是指ARM9將智能I/O卡中的組態以鏈表方式回送至上位機,上位機根據鏈表還原組態的結構和運算順序。
通信模塊包含通信參數配置。系統中上下位機采用RS-232進行串行口通信。
上位機軟件是基于VC++2008平臺下的微軟基礎類庫(microsoft fundation classes,MFC)單文檔程序。為實現上述功能,該軟件主要涉及讀寫XML文件、如何分配模塊運算順序表、RS-232串口通信等技術。
XML[8]用于標記電子文件,使其具有結構性的標記語言,從而可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。
本文使用微軟提供的MSXML解析器來支持XML文件的操作。它根據XML文檔生成一個文本對象模型(document objective model,DOM)樹結構,讀取 XML文檔的內容,并創建一個節點的邏輯結構。DOM使用戶能夠把文檔看成一個有結構的信息樹,而不是簡單的文本流。
在DOM接口規范中,共有Document、Node、NodeList和NamedNodeMap四個基本接口。
為了能在VC++平臺下使用MSXML解析器,需要導入動態鏈接庫文件,如JHJimport"c:/WINDOWS/system32/msxml6.dll"。DLL文件可根據系統自帶的版本進行選擇。在操作XML文件前,需要先初始化COM環境,再創建一個文檔實例,最后加載XML文件并獲取根元素節點。
若要獲取節點的所有子節點,可調用節點childNodes的屬性,由childNodes返回一個節點鏈表。調用節點鏈表的nextNode方法可循環遍歷鏈表中的元素,遍歷結束之后,如若要再次進行遍歷,可調用節點鏈表的 reset方法。同樣,也可以調用元素的attributes屬性來獲取元素的屬性節點集。
另外,還可根據自身需要,通過調用節點的selectSingleNode來查找和獲取目標子節點。調用節點的createElement方法可創建新的子節點,而調用appendChild和文檔節點的save方法可進行保存。要獲取節點的名稱和文本,可調用GetnodeValue和Gettext。
上位機提供小模塊、大模塊和IOBUF三種類型的運算模塊,用戶可根據需求設置模塊與模塊間的關系(即一個模塊的輸出可以作為另一模塊的輸出,模塊可以有多個輸入項或輸出項)。當用戶組織好模塊間的關系后,關鍵的一步是要給每個模塊分配對應的優先等級值,因為下位機要根據優先級來確定模塊間的運算順序。
實現優先級分配的思路具體說明如下。
①由于模塊間存在父子關系,因此可以根據這種關系來分配優先級(運算順序)。
②處在同一等級的所有模塊,下位機在運算它們中的某一模塊時,不依賴于其他同等級的模塊的輸出,影響的僅有其父模塊。
對于一些模塊而言,應當首先執行其父模塊,而對其他一些模塊,執行的順序無關緊要。因此,算法中約定處在同一等級的所有模塊的優先級值是無要求的(一般按從小到大的值分配),但這個優先級必須高于它們的子模塊優先級。已經分配出去的值不能再次給其他模塊使用。若同級模塊之間的優先級需求有沖突,該沖突必須由用戶事先表現在模塊間的輸入、輸出關系中,即將同級模塊轉換為父子模塊。一般的簡單控制回路如圖4所示。

圖4 控制回路示意圖Fig.4 Schematic diagram of the control loop

圖5 模塊組織關系圖Fig.5 Organizational relationships of the modules
模塊運算順序排序算法如下。
①遍歷XML文件中的所有模塊,如果模塊沒有父模塊或父模塊均已分配了優先級值,則為該模塊分配優先級值;否則將模塊放到未分配優先級的模塊集中。
②遍歷未分配優先級的模塊集中的每個模塊,如果模塊的父模塊均已分配了優先級值,則為該模塊分配優先級值,并從模塊集移除。
③如果遍歷未分配優先級的模塊集一輪結束后,模塊集中的模塊數量不變,則表明模塊間含有反饋回路;如果模塊數量為0,則轉至步驟⑤。
④找出模塊之間存在的環,選擇環中的一個模塊為其分配優先級值,并且從模塊集中移除,最后返回到步驟②。
⑤結束。
Win32系統對文件的概念進行了擴展,即無論是文件、通信設備、命名管道、郵件槽、磁盤,還是控制臺都被看作是文件。采用MFC串口通信函數的主要步驟如下[9]。
① 在MainFrm.cpp中定義全局變量(如HANDLE hCom)。
②打開串口。Windows通信會話以調用CreateFile函數打開串行口開始。通信程序從CreateFile處指定串口設備及相關的操作屬性。該函數返回一個句柄,用于后續的通信操作。
③串口的初始化(設置串口參數及進行串口超時設置)。
④ 讀寫串口API函數ReadFile和WriteFile。在串口打開并初始化設置之后,可以對它進行讀寫操作。
⑤關閉串口API函數CloseHandle。串口是非共享的資源,所以打開串口后一定要關閉串口。
按圖5所示的模塊間組織關系,通過上位機軟件進行組態,并下載組態給下位機,點擊激活模塊查看下位機返回的模塊實時數據。其中CONST.3、CONST.7和 CONST.8 模塊的初始值分別為0.001、-0.5 和2。
首先在上位機軟件中添加所需的模塊,然后為每個模塊添加輸入項,最后點擊下載組態。如果下位機成功接收到組態數據,則上位機顯示“下載組態成功”。在此過程中,程序為模塊分配的優先級值為CONST.3=1、CONST.7=2、CONST.8=3、ABS.2=4、ADD.1=5、MULTI.6=6、DIV.5=7、CMPLX.4=8、SQRT.12=9。在點擊激活模塊后,下位機將所選擇模塊的實時數據上傳至上位機并顯示。
本文提出了應用于SUPMAX800D控制系統中的智能I/O卡的開發方案。智能I/O卡能夠支持兩塊不同類型的通道板,并采用ARM9實現和上位機的通信。通道板組態可以從ARM9或DPU中獲取,實現了獨立的邏輯控制功能,并且ARM9保持和DPU相同的處理方式和工作量。由于XML具有良好的可自由擴展性、自描述性以及數據與顯示分離的特點,因此本文采用XML文件作為上位機的底層數據庫,使得設計方案具有簡單易操作性。測試結果表明,上位機組態軟件運行安全、可靠,滿足應用的要求。
[1]袁峰,王松亭,彭春文,等.基于SUPMAX800的鍋爐DCS自動控制系統[J].儀表技術與傳感器,2009(5):56-58.
[2]梁堅,朱強,王錦標.ISaGRAF在SUPMAX500組態軟件中的應用[J].工業儀表與自動化裝置,2002(6):25-27.
[3]孫正光.新型智能分散控制系統[J].信息與電腦,2011(7):69-70.
[4]陳慧萍,樊嶸嶸.基于PAS-300M DCS平臺的監控軟件設計與實現[J].計算機工程與設計,2007,28(13):3248-3251.
[5]林立春,林瓊麒,張功鍍.面向對象的PLC上位機軟件平臺設計[J].自動化儀表,2007,28(12):15-18.
[6]張煌.新型DCS控制組態及仿真軟件的開發[D].濟南:山東大學,2009.
[7]崔鵬.基于ARM7的無線溫度監控系統的上位機開發[D].武漢:武漢理工大學,2009.
[8]王震江,馬宏.XML基礎與實踐教程[M].北京:清華大學出版社,2011.
[9]李現勇.Visual C++串口通信技術與工程實踐[M].北京:人民郵電出版社,2002:56-88.