DCS系統(tǒng)控制組態(tài)仿真軟件的設(shè)計(jì)和實(shí)現(xiàn)
1 引言
集散控制系統(tǒng)(dcs)是應(yīng)用計(jì)算機(jī)技術(shù)對(duì)生產(chǎn)過(guò)程進(jìn)行集中監(jiān)視、操作、管理而對(duì)現(xiàn)場(chǎng)裝置的控制分散的基本控制技術(shù)。集散控制系統(tǒng)的重要組成部分是組態(tài)軟件。傳統(tǒng)的工業(yè)控制軟件重復(fù)使用率低開發(fā)周期長(zhǎng),很難滿足工業(yè)自動(dòng)化的要求。工業(yè)自動(dòng)化組態(tài)軟件的出現(xiàn)為解決實(shí)際工程中的問(wèn)題提供了一種新的方法,它能夠使用戶根據(jù)自己的控制對(duì)象和控制目的任意組態(tài),使自動(dòng)化工程人員能夠面向問(wèn)題的設(shè)計(jì)。
控制組態(tài)仿真軟件要比傳統(tǒng)仿真軟件作出改進(jìn),使其不僅僅可以供控制人員進(jìn)行一些控制的組態(tài)構(gòu)建,還可以提供給操作人員進(jìn)行仿真培訓(xùn),以及進(jìn)行控制管理人員的培訓(xùn)。只要使其控制組態(tài)的模式和現(xiàn)場(chǎng)模式保持一致,就可以達(dá)到仿真的目的,而不必在實(shí)際的dcs控制室進(jìn)行試驗(yàn)和調(diào)試,這樣可以減少投資,并減小和避免工藝投放風(fēng)險(xiǎn)。因此,開發(fā)結(jié)構(gòu)合理、安全可靠、簡(jiǎn)單實(shí)用的仿真系統(tǒng)控制組態(tài)軟件,具有很好的應(yīng)用前景。
2 系統(tǒng)結(jié)構(gòu)及其實(shí)現(xiàn)
2.1 控制組態(tài)概述
控制組態(tài)仿真軟件作為集成的圖形編程語(yǔ)言,是針對(duì)dcs系統(tǒng)所開發(fā)的全中文界面的控制方案組態(tài)工具,它與dcs系統(tǒng)流程圖組態(tài)軟件聯(lián)合完成對(duì)系統(tǒng)的圖形組態(tài),是新型dcs系統(tǒng)組態(tài)軟件的重要組成部分之一,也是算法控制組態(tài)的核心部分。
本設(shè)計(jì)參考了國(guó)際電工委員會(huì)iec61131-3提供的用于控制的4種編程語(yǔ)言標(biāo)準(zhǔn):梯形圖,結(jié)構(gòu)化高級(jí)語(yǔ)言,方框圖,指令助記符,采用了簡(jiǎn)單方便易于用戶學(xué)習(xí)和使用的方框圖形式的編程語(yǔ)言,使編程環(huán)境更加高效,更加人性化。
本文根據(jù)面向?qū)ο蟮脑O(shè)計(jì)思想,基于目前控制領(lǐng)域通用的windows2000平臺(tái),采用visual c++6.0語(yǔ)言實(shí)現(xiàn)了程序設(shè)計(jì)。這樣,不僅使人機(jī)界面更加友好,而且能夠更好地利用windows系統(tǒng)的資源,使組態(tài)軟件的功能更為強(qiáng)大。
系統(tǒng)的結(jié)構(gòu)如圖1所示。各部分的功能及實(shí)現(xiàn)方法敘述如下。
圖1 系統(tǒng)結(jié)構(gòu)圖
2.2 算法顯示模塊和控制算法組態(tài)
該軟件向工程人員提供了一個(gè)圖形化的控制算法組態(tài)平臺(tái),工程人員可以根據(jù)實(shí)際工業(yè)過(guò)程,選用合適的控制算法,用圖形的方式,即選用算法顯示模塊,組成各種控制回路,然后將組態(tài)信息保存到組態(tài)文件中??刂扑惴ńM態(tài)的主界面如圖2所示。
圖2 控制組態(tài)主界面
圖2算法顯示模塊指的是對(duì)具體算法的抽象顯示。在圖形化組態(tài)界面上,每種具體的控制算法對(duì)應(yīng)一種算法顯示模塊,以方框圖的形式顯示,用戶只需用簡(jiǎn)單的鼠標(biāo)操作就能將指定的算法顯示模塊添加到指定的控制回路中,或刪除和修改參數(shù),從而完成控制算法的組態(tài)。其在控制組態(tài)界面中的顯示是帶有輸入輸出端子的矩形,圖3是一個(gè)加法顯示模塊的外觀及顯示說(shuō)明:
圖3 算法顯示模塊圖
其中,模塊在回路中的編號(hào)只有在進(jìn)行過(guò)編譯且用戶確定后才正確顯示,編譯前不顯示。而模塊流水號(hào)只是在繪制過(guò)程中記錄的全局唯一的模塊的id號(hào),它由系統(tǒng)自動(dòng)生成,用戶不能修改。
設(shè)計(jì)控制組態(tài)仿真軟件的界面時(shí),主要是實(shí)現(xiàn)組態(tài)用到的算法顯示模塊、連線和文本注釋的繪制和顯示。從共性的角度考慮,決定將對(duì)算法模塊的實(shí)現(xiàn)用一個(gè)從cobject類派生的類cfunmod來(lái)統(tǒng)一實(shí)現(xiàn)和管理,在該類中設(shè)定標(biāo)志變量對(duì)具體的算法顯示模塊類型進(jìn)行區(qū)分,同時(shí)標(biāo)記該模塊的輸入輸出端子數(shù)目。連線使用從cobject類派生的類clinkline實(shí)現(xiàn),包含對(duì)連線兩端所連算法顯示模塊的標(biāo)記。而文本注釋則由另一個(gè)從cobject類派生的類ctext來(lái)實(shí)現(xiàn),為普通注釋時(shí),記錄字符串類型的注釋參數(shù),而與數(shù)據(jù)庫(kù)中的點(diǎn)關(guān)聯(lián)時(shí),記錄點(diǎn)名。在繪制回路的過(guò)程中,它們都是由基于各類的鏈表來(lái)操作和管理的。
為支持對(duì)算法顯示模塊和文本注釋的參數(shù)配置,需實(shí)現(xiàn)屬性對(duì)話框,這是很容易實(shí)現(xiàn)的。這樣,通過(guò)鼠標(biāo)雙擊算法模塊,彈出屬性對(duì)話框,用戶填入相應(yīng)的參數(shù),點(diǎn)擊確定保存即可。
2.3 控制算法庫(kù)
控制算法庫(kù)是整個(gè)系統(tǒng)仿真運(yùn)行的基石。系統(tǒng)中內(nèi)置了若干種控制算法。為了保證控制算法的可擴(kuò)展性和統(tǒng)一性,所有的控制算法實(shí)現(xiàn)了一個(gè)統(tǒng)一的接口,供算法運(yùn)行模塊調(diào)用。
具體來(lái)講,是采用模塊化設(shè)計(jì)的思路,將dcs的控制算法分解成若干個(gè)功能獨(dú)立的、能分別設(shè)計(jì)、編碼和調(diào)試的算法模塊,組成控制算法庫(kù)。每個(gè)算法模塊完成的功能既明確又單純,從而使處理的問(wèn)題局部化和簡(jiǎn)單化。算法模塊作為控制組態(tài)仿真軟件結(jié)構(gòu)中的最基本元素,實(shí)際上就是完成一個(gè)特定算法功能的獨(dú)立程序。算法模塊的接口簡(jiǎn)明而又統(tǒng)一,且能彼此隔離和獨(dú)立。從用戶角度看來(lái),控制算法庫(kù)中的各種控制算法都是完全一樣的,而且系統(tǒng)也是采用統(tǒng)一的接口對(duì)各種算法進(jìn)行調(diào)用的,用戶無(wú)需關(guān)心每個(gè)控制算法的具體實(shí)現(xiàn)細(xì)節(jié)。另外,用戶使用時(shí),只需對(duì)控制算法模塊的參數(shù)進(jìn)行修改,而無(wú)需修改算法模塊的代碼。
將各算法編成獨(dú)立的可反復(fù)調(diào)用的算法模塊,對(duì)應(yīng)每一個(gè)功能模塊都有一個(gè)參數(shù)列表和輸入列表,系統(tǒng)運(yùn)行時(shí),控制調(diào)度程序依據(jù)這些信息,順序依次執(zhí)行。
設(shè)計(jì)算法庫(kù)時(shí),先設(shè)計(jì)一個(gè)算法基類cfunction,其中實(shí)現(xiàn)一個(gè)虛函數(shù)fun,具體算法從該類中派生。在程序中,采用統(tǒng)一調(diào)用各算法模塊的fun函數(shù)的方法實(shí)現(xiàn)對(duì)控制算法的調(diào)用,這樣的接口簡(jiǎn)單明了。
2.4 虛擬信號(hào)發(fā)生器
信號(hào)發(fā)生器是一種應(yīng)用極為廣泛的儀器,它通常作為標(biāo)準(zhǔn)信號(hào)發(fā)生器,用于電子電路的性能試驗(yàn)或參數(shù)測(cè)量。傳統(tǒng)的信號(hào)發(fā)生器價(jià)格昂貴、操作復(fù)雜、不易開發(fā)、維護(hù)和升級(jí),而使用基于visual
c++編程工具,軟件開發(fā)的虛擬信號(hào)發(fā)生器,具有簡(jiǎn)單、直觀、操作方便等特點(diǎn),而且可以通過(guò)調(diào)用或修改信號(hào)源函數(shù)中的不同的功能函數(shù),得到不同的信號(hào),如正弦波、方波、三角波等。
虛擬信號(hào)發(fā)生器即信號(hào)源模塊又分為三個(gè)子模塊,參數(shù)設(shè)置模塊,信號(hào)發(fā)生模塊,波形顯示模塊。如圖4所示。
圖4 虛擬信號(hào)發(fā)生器結(jié)構(gòu)圖
信號(hào)源數(shù)據(jù)的內(nèi)容主要為波形數(shù)據(jù)、要發(fā)生波形的參數(shù);其波形數(shù)據(jù)的來(lái)源主要有信號(hào)發(fā)生模塊;波形數(shù)據(jù)的終點(diǎn)是信號(hào)發(fā)生以及發(fā)生波形及其參數(shù)的顯示,以及提供給控制算法進(jìn)行模擬仿真運(yùn)行。各子模塊間的關(guān)系及所對(duì)應(yīng)的數(shù)據(jù)流圖如圖5所示。
圖5 虛擬信號(hào)發(fā)生器數(shù)據(jù)流圖
信號(hào)源模塊能夠產(chǎn)生正弦波、三角波、方波等常用的波形,能夠?qū)σl(fā)生波形的各種參數(shù)進(jìn)行方便靈活的設(shè)置,能夠?qū)φl(fā)生的波形進(jìn)行實(shí)時(shí)顯示。注意,模擬的信號(hào)采集頻率與主控卡實(shí)際采集頻率相同,這樣才能保證對(duì)主控卡實(shí)際運(yùn)行的模擬仿真等準(zhǔn)確。
在此信號(hào)源模塊中,用戶可設(shè)定兩種模式:自動(dòng)和手動(dòng)。自動(dòng)時(shí),采用系統(tǒng)提供的一些標(biāo)準(zhǔn)輸入信號(hào)類型。手動(dòng)時(shí),用戶可隨時(shí)直接設(shè)置邏輯和控制變量的值。這是在線仿真系統(tǒng)的運(yùn)行的必要條件。
在此模塊中采用了多線程技術(shù),參考主控卡的采集周期,定時(shí)運(yùn)行信號(hào)發(fā)生函數(shù)改變模擬輸入點(diǎn)的值。設(shè)置了手動(dòng)改變數(shù)據(jù)的按鈕,用戶在手動(dòng)模式下改變模擬輸入點(diǎn)的數(shù)據(jù)時(shí),直接調(diào)用此按鈕的相應(yīng)函數(shù),執(zhí)行此改變。
3 模擬仿真運(yùn)行
先對(duì)用戶組態(tài)的信息進(jìn)行檢查,看是否數(shù)據(jù)連接類型不匹配,是否回路斷開等,同時(shí),對(duì)于圖形化組態(tài)平臺(tái)來(lái)說(shuō),如何根據(jù)控制回路圖的拓?fù)浣Y(jié)構(gòu)建立起控制組態(tài)信息的數(shù)據(jù)流是很重要的,也就是需對(duì)回路中的算法模塊執(zhí)行順序進(jìn)行排列,上述內(nèi)容都是編譯過(guò)程中的工作。檢查確定組態(tài)無(wú)誤后,利用虛擬信號(hào)發(fā)生器產(chǎn)生的信號(hào),作為控制回路算法模擬仿真運(yùn)行的輸入信號(hào),運(yùn)行控制算法,實(shí)時(shí)顯示仿真數(shù)據(jù),及仿真報(bào)警,并輸出仿真波形。這是一個(gè)可調(diào)試的仿真過(guò)程,用戶觀察仿真結(jié)果判斷對(duì)控制算法的組態(tài)是否滿足要求,若不滿足,則可“在線”調(diào)整算法功能模塊的參數(shù),甚至重新組態(tài),仿真和調(diào)試,直到仿真結(jié)果滿足指定要求。
在模擬仿真時(shí)也采用了多線程技術(shù)。開辟工作者線程,進(jìn)行控制算法的計(jì)算。為實(shí)現(xiàn)“在線”參數(shù)整定,在用戶修改參數(shù)時(shí),再開辟一個(gè)工作者線程,這樣能提高程序的運(yùn)行效率。
本軟件平臺(tái)采用johnson算法來(lái)解決循環(huán)有向子回路的排序,具體實(shí)施過(guò)程為:以當(dāng)前正在進(jìn)行拓樸結(jié)構(gòu)分析的模塊接口作探索出發(fā)點(diǎn),用該接口的連線作為索引,沿該連線數(shù)據(jù)流方向深入,每深入一步,即將經(jīng)過(guò)的模塊接口進(jìn)行標(biāo)識(shí),如果某一步達(dá)到了原出發(fā)點(diǎn),則形成回路。因?yàn)樵谘h(huán)回路中,數(shù)據(jù)流在某個(gè)采用周期內(nèi)不存在時(shí)間序列上的優(yōu)先次序,因此需將回路人為斷開,并按上述索引的順序產(chǎn)生反映該循環(huán)回路特性的算法模塊的執(zhí)行順序。需要注意的是,該有向循環(huán)回路與不屬于該回路的其它部分則存在先后順序關(guān)系,這正是必須特別處理循環(huán)有向回路的原因。
實(shí)際運(yùn)行和數(shù)據(jù)訪問(wèn)根據(jù)控制組態(tài)信息通過(guò)tcp/ip下載到dcs系統(tǒng)的主控卡,并實(shí)際運(yùn)行,這時(shí)組態(tài)軟件實(shí)時(shí)的向主控卡詢問(wèn)各點(diǎn)信息(當(dāng)前值信息和故障信息),并寫入實(shí)時(shí)數(shù)據(jù)庫(kù)。而控制組態(tài)仿真軟件只是實(shí)時(shí)的訪問(wèn)實(shí)時(shí)數(shù)據(jù)庫(kù),從實(shí)時(shí)數(shù)據(jù)庫(kù)獲取點(diǎn)值信息等,再在控制組態(tài)的實(shí)際運(yùn)行界面上實(shí)時(shí)顯示,同時(shí),可顯示各回路的實(shí)際運(yùn)行波形圖。工程人員通過(guò)人機(jī)界面來(lái)監(jiān)控各個(gè)控制回路的運(yùn)行情況,可以在線進(jìn)行參數(shù)整定。
數(shù)據(jù)訪問(wèn)模塊主要是用來(lái)給算法實(shí)際運(yùn)行模塊提供一個(gè)簡(jiǎn)單、統(tǒng)一的數(shù)據(jù)訪問(wèn)接口。它通過(guò)ado訪問(wèn)實(shí)時(shí)數(shù)據(jù)庫(kù),讀出算法運(yùn)行模塊需要顯示的實(shí)時(shí)數(shù)據(jù),實(shí)現(xiàn)實(shí)時(shí)顯示和報(bào)警。
設(shè)計(jì)時(shí),創(chuàng)建流套接字與主控卡建立網(wǎng)絡(luò)連接,進(jìn)行通訊,下載控制信息。
4 結(jié)束語(yǔ)
控制組態(tài)仿真軟件為建模人員提供了一個(gè)友好的用戶界面,使建模人員在建模時(shí)不必對(duì)模塊內(nèi)部的控制、邏輯程序有很深的了解就可以方便的對(duì)其進(jìn)行編寫和修改,自動(dòng)或手動(dòng)改變各邏輯和控制變量的值,參與模擬仿真運(yùn)行和調(diào)試,從而實(shí)現(xiàn)了對(duì)系統(tǒng)運(yùn)行的仿真。采用仿真的方式,模擬控制算法的運(yùn)行和故障的報(bào)警,既可縮短工期又可降低成本,還能降低硬件維護(hù)、培訓(xùn)和備品備件費(fèi)用,具有很好的應(yīng)用前景。
c++相關(guān)文章:c++教程
負(fù)離子發(fā)生器相關(guān)文章:負(fù)離子發(fā)生器原理
評(píng)論