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