沈陽儀表科學(xué)研究院有限公司 何 方 高立生 王松亭 張國富 馬 勇 陳 曦 李 慧
沈陽電氣傳動研究所有限公司 張 茜
工業(yè)自動化監(jiān)控系統(tǒng)是充分利用現(xiàn)代的計算機技術(shù)、通訊技術(shù)、傳感器技術(shù)及自動化儀表技術(shù)等組成的高科技監(jiān)控系統(tǒng),利用自動化監(jiān)控系統(tǒng),可以實現(xiàn)對工業(yè)現(xiàn)場壓力、溫度、流量、液位、電流、電壓、電量、轉(zhuǎn)速等各種參數(shù)進行實時監(jiān)測和控制,對電機、水泵等設(shè)備進行遙控,對各種電磁閥門進行開度調(diào)節(jié)等等,由于工業(yè)自動化監(jiān)控系統(tǒng)為生產(chǎn)過程的自動化,實現(xiàn)科學(xué)管理提供了有效的手段,因此工業(yè)自動化監(jiān)控系統(tǒng)廣泛地應(yīng)用于機械、電子、化工、環(huán)保、能源等各個行業(yè)以及供水、供暖、供氣、供電等公共事業(yè)中,并且在使用中取得了迅速的發(fā)展。而測控軟件則是整個工業(yè)自動化監(jiān)控系統(tǒng)中極其重要的組成部分,所有測控命令的發(fā)布和數(shù)據(jù)的處理、顯示、打印,以及現(xiàn)場故障報警,均由測控軟件實施控制。但以往小型測控系統(tǒng)中常采用組態(tài)軟件實現(xiàn),在現(xiàn)場終端站參數(shù)的修改、報警值設(shè)定等方面存在明顯的不足,使系統(tǒng)在使用靈活性、方便性上有很大的局限性。本文針對基于組態(tài)軟件開發(fā)的測控系統(tǒng)軟件中存在的不足,結(jié)合筆者多年從事工業(yè)自動化監(jiān)控系統(tǒng)軟件開發(fā)與調(diào)試的經(jīng)驗,設(shè)計了一種實用的適合于小型自動化監(jiān)控系統(tǒng)的動態(tài)參數(shù)配置表程序,使系統(tǒng)參數(shù)的修改更為方便、靈活,大大加強了系統(tǒng)的靈活性。
目前對小型工業(yè)自動化監(jiān)控系統(tǒng)的開發(fā),主要是采用組態(tài)軟件,在圖形處理,界面顯示等方面非常方便,而在數(shù)據(jù)處理、通訊接口等方面存在不足,主要表現(xiàn)在以下幾個方面:
在通訊方面,主要存在有線和無線兩種通訊方式,兩種通訊方式在通訊口設(shè)置、通訊波特率設(shè)置等方面不盡相同,并且在實際的工業(yè)自動化監(jiān)控系統(tǒng)中,可能同時存在這兩種通訊方式,每個終端站通訊的波特率也可能不相同,以往測控系統(tǒng)軟件只能單一地處理一種通訊方式,不能以不同的通訊方式對現(xiàn)場終端站進行監(jiān)測和控制。
以往的測控系統(tǒng)軟件,對現(xiàn)場終端站的監(jiān)測和控制只能按照一定的順序依次進行,而當終端站進行維修時,系統(tǒng)也不能越過該終端站,仍然與其通訊,當測試不通后再測試其它終端站,這樣就浪費了系統(tǒng)的時間。
由于現(xiàn)場終端站的站點很多,每個終端站監(jiān)測的參數(shù)和功能也相差甚遠,現(xiàn)場的傳感器和自動化儀表更是種類繁多,自動化儀表的量程、單位、上下限報警值、精度等參數(shù)各不相同,輸出信號也有模擬量、開關(guān)量、脈沖量的區(qū)別,而現(xiàn)場終端站的傳感器和自動化儀表會根據(jù)現(xiàn)場的需要更換為其它類型的傳感器和自動化儀表,自動化儀表的上下限報警值也可能由于測試的目的不同、測試的時間不同而設(shè)置為不同的值,以往的測控系統(tǒng)軟件對現(xiàn)場參數(shù)的這些變化不能方便靈活地進行修改,必要時只能通過修改軟件程序完成參數(shù)的修改,這在使用上給用戶帶來大大的不便。另一方面,可能會由于某種原因?qū)ΜF(xiàn)場的自動化儀表進行遷移,此時儀表的顯示值不能和輸出的信號對應(yīng),而系統(tǒng)軟件需要測試儀表的顯示值,以往的測控系統(tǒng)軟件對此則顯得無能為力。
以往的測控系統(tǒng)軟件,對數(shù)據(jù)的顯示、打印的精度采用固定的方式,不能根據(jù)需要隨時進行修改。
綜合以往采用組態(tài)軟件開發(fā)自動化監(jiān)控系統(tǒng)測控軟件中存在的問題,筆者有針對性地設(shè)計了一個簡單的動態(tài)參數(shù)配置表程序,應(yīng)用此程序,可以方便地實現(xiàn)對通訊方式、波特率、地址、儀表量程、報警點等參數(shù)的在線修改,操作方便靈活。具體采用設(shè)計方法如下:
(1)采用Visual C++作為編程語言設(shè)計動態(tài)參數(shù)配置表程序,該程序能夠動態(tài)地顯示、修改各個終端站的測試標志、通訊口、通訊方式、通訊波特率,動態(tài)地顯示修改終端站中各個通道的儀表類型、單位、量程、上下限報警值、遷移量、顯示打印精度等參數(shù)。
(2)動態(tài)參數(shù)配置表程序中定義的的數(shù)據(jù)結(jié)構(gòu)如下:
1)站點參數(shù)的數(shù)據(jù)結(jié)構(gòu):
typedef stuct
{
int state; //測試標志
int com; //通訊口
int style; //通訊方式
int bound; //通訊波特率
} station[MaxStationNo]
2)通道參數(shù)的數(shù)據(jù)結(jié)構(gòu):
typedef struct
{
int zhcode; //站號.
int channel; //通道.
int style; //類型.
fl oat span; //量程.
fl oat hialm; //上限報警.
fl oat loalm; //下限報警.
fl oat tran; //遷移.
fl oat bit;//顯示數(shù)據(jù)的精度
int unit; //單位.
int note; //安裝.
} an[MaxStationNo][MaxCanShuNo];
(3)終端站站點配置參數(shù)和終端站各個通道的配置參數(shù)按照以上的數(shù)據(jù)結(jié)構(gòu),以生成數(shù)據(jù)文件的形式存儲在硬盤上,數(shù)據(jù)文件的格式可以采用二進制、文本、數(shù)據(jù)庫等多種方式,其中以文本文件的方式最為簡單,在這里以文本文件為例介紹動態(tài)參數(shù)配置表中數(shù)據(jù)文件的讀寫程序。
1)寫數(shù)據(jù)文件的程序如下:
FILE *fp;
char p[100];
int i;
int j;
fp = fopen("fi x.txt","w+");
if(fp)
{
for(i=0;i { fprintf(fp,"%2d, ",station[i].state); fprintf(fp,"%2d, ", station [i].com); fprintf(fp,"%2d, ", station [i].style); fprintf(fp,"%2d, ", station [i].bound); } for(i=0;i for(j=0;j { fprintf(fp,"%2d, ",an[i][j].zhcode); fprintf(fp,"%2d, ",an[i][j].channel); fprintf(fp,"%2d, ",an[i][j].style); fprintf(fp,"%4.1f, ",an[i][j].span); fprintf(fp,"%4.2f, ",an[i][j].hialm); fprintf(fp,"%4.2f, ",an[i][j].loalm); fprintf(fp,"%4.2f, ",an[i][j].tran); fprintf(fp,"%2.1f, ",an[i][j].bit); fprintf(fp,"%2d, ",an[i][j].unit); fprintf(fp,"%2d
",an[i][j].note); } } else{;} fclose(fp); } 2)讀數(shù)據(jù)文件的程序如下: FILE *fp; char p[100]; int i; int j; fp = fopen("fi x.txt","r"); if(fp) { for(i=0;i { fprintf(fp,"%d, ",&station[i].state); fprintf(fp,"%d, ", &station [i].com); fprintf(fp,"%d, ", &station [i].style); fprintf(fp,"%d, ", &station [i].bound); } for(i=0;i for(j=0;j { fprintf(fp,"%d, ",&an[i][j].zhcode); fprintf(fp,"%d, ",&an[i][j].channel); fprintf(fp,"%d, ",&an[i][j].style); fprintf(fp,"%f, ",&an[i][j].span); fprintf(fp,"%f, ",&an[i][j].hialm); fprintf(fp,"%f, ",&an[i][j].loalm); fprintf(fp,"%f, ",&an[i][j].tran); fprintf(fp,"%f, ",&an[i][j].bit); fprintf(fp,"%d, ",&an[i][j].unit); fprintf(fp,"%d
",&an[i][j].note); } } else{;} fclose(fp); } 3)動態(tài)參數(shù)配置表程序既可以嵌入測控系統(tǒng)軟件中,作為測控軟件的一部分使用,也可以獨立于測控系統(tǒng)軟件單獨使用。作為嵌入測控系統(tǒng)軟件中使用時,測控系統(tǒng)軟件和動態(tài)參數(shù)配置表程序共用一個數(shù)據(jù)結(jié)構(gòu),此時對各種參數(shù)的修改能夠直接體現(xiàn)在測控系統(tǒng)軟件中;而單獨使用動態(tài)參數(shù)配置表程序時,可以單獨運行動態(tài)參數(shù)配置表程序修改配置參數(shù),然后在測控軟件進行數(shù)據(jù)初始化時,將配置參數(shù)數(shù)據(jù)文件讀入相應(yīng)的結(jié)構(gòu)中,也可以在測控系統(tǒng)軟件中通過設(shè)置一命令菜單等方式將配置參數(shù)數(shù)據(jù)文件讀入相應(yīng)的結(jié)構(gòu)中。 工業(yè)自動化監(jiān)控系統(tǒng)已廣泛地應(yīng)用于各種各樣的工業(yè)現(xiàn)場,而動態(tài)參數(shù)配置表的使用,會使測控系統(tǒng)在參數(shù)修改上變得更為簡單、靈活、方便,更適合于小型工業(yè)現(xiàn)場的實際使用。 [1]尹成,朱景堯,孫明龍,胡耀文.Visual C++ 2012 開發(fā)權(quán)威指南[M].北京:人民郵電出版社,2014. [2]劉雪潔等.從零開始學(xué)Visual C++[M].北京:電子工業(yè)出版社,2011.4 結(jié)束語