鄭義平
柳州供電局信息及計算機應用管理部
[摘要] SCADA系統是電力系統中極為重要的系統,在電力企業MIS系統建設過程中,實現MIS系統與SCADA系統的集成,有著重要的實際意義。本文以柳州供電局管理信息系統建設為例,闡述MIS與SCADA系統集成的實現。
[主題詞] MIS,SCADA,系統集成
一、 前言
信息化是社會發展不可逆轉得歷史潮流,信息化技術的發展和應用水平已經成為衡量一個國家、行業、部門或企業實力的重要標志。作為國民經濟先行產業的電力企業,隨著生產過程的日益發展,數據和信息量急劇增加,企業的管理越來越復雜,企業現代化管理要求企業內部乃至全系統之間實現數據及信息的交流和共享,實現企業管理的綜合信息系統化(MIS),以提高企業及全系統的決策能力與管理水平。而電力調度自動化SCADA系統是電力系統重要的組成部分,對電網的安全、優質、經濟運行極為重要。實現SCADA系統與MIS系統有機的集成,拓寬SCADA系統的應用,豐富MIS系統的組成。為電網的規劃、生產等提供了一個有力的手段。
實現SCADA與MIS系統的集成,一方面,要實現SCADA系統采集到的實時數據,包括遙測、遙信信息,與MIS系統的共享,為各種分析、預測及決策提供數據基礎;另一方面,SCADA系統要為MIS系統提供電網的各種接線圖、曲線和棒圖的實時顯示提供信息來源,由于SCADA系統多采用較高分辨率進行圖形顯示,則在MIS系統建設中,應考慮用戶界面分辨率的平穩無縫切換問題。
二、 SCADA系統實時數據轉換
柳州供電局SCADA系統采用南瑞生產的RD-800系統,通過南瑞的SWJ-700系統實現與MIS系統的連接,其采集到的實時數據存放于數據文件中,這些數據就是柳州供電局MIS系統的實時數據的來源。
2.1調度實時數據結構
對于MIS系統而言,其實時數據來源于與SCADA系統相連的SWJ-700系統的數據文件,包括遙測數據及遙信數據,遙測數據存放于SWJ-700系統的RC.REL文件,而遙信數據存放于YX.REL文件。
數據文件為二進制格式,刷新周期采用10S一次。對于遙測數據文件,包含64個廠站的遙測數據,每個廠站有256個遙測量,每個遙測量都是一個4字節的浮點數,依次存放;而遙信數據文件存放64個廠站的遙信數據,每個廠站占用64個字節,512個遙信,每個遙信量使用字節中的一個位表示。
2.2數據轉換分析及實現
在SCADA系統與MIS系統的集成中,數據轉換模塊完成將SCADA系統采集到實時數據轉換到MIS系統使用的大型數據庫SYBASE中,從而為進一步數據處理和分析及決策提供一個良好的基礎。考慮SCADA系統是一個實時系統,為滿足實時性的要求,數據采樣周期很小,但是,作為供管理決策的MIS系統,從可行性和必要性而言,沒有必要將所有SCADA采集到的數據都轉換進SYBASE數據庫,由于采用了SWJ-700系統作為接口,電網實時接線圖、電壓及符合曲線等,在MIS系統中可直接通過SWJ-700系統客戶端軟件瀏覽,所以只需將各開關的變位情況、整個系統及各出線開關的整點數據、最大負荷等轉換即可。
考慮到SYBASE系統和實時數據的采集和存儲保持同步比較困難,而且MIS系統中要求的數據頻度最低為小時值,通過小時數據值進而生成日、月以及年數據。因此,將轉換模塊中的數據采集和保存功能適當分離,數據采集模塊使用C++編程實現,以與SWJ-700系統同樣的采樣周期,采集SWJ-700系統的數據文件,取得整點數據、開關變位情況以及小時內最大負荷值,生成轉換模塊的數據文件;而數據保存模塊采用PowerBuilder編程,以每小時一次的頻率將數據采集模塊的數據文件中的數據保存到SYBASE系統。全電網的負荷的計算,采用初始化文件保存計算公式的策略,由數據保存模塊讀取初始化文件中的計算公式,根據數據采集模塊的數據文件中的數據計算而出,以保證負荷計算方式改變后,只需調整初始化文件中的計算公式,而不需修改程序。另外,為適應各廠站或采集點的變更投退,在轉換模塊中應有定義各廠站及采集點次序的功能。
三、 用戶界面分辨率無縫切換
SCADA系統很重要的一個內容,就是電網及各變電站的各種實時圖形,包括各實時接線圖、負荷曲線,電壓曲線以及各種歷史曲線,在MIS系統中采用SWJ-700系統客戶端程序作為SCADA系統圖形瀏覽器,由于SCADA系統的圖形開發時多采用較高分辨率實現,而在MIS系統中則可能由于種種原因,常使用低于SCADA系統圖形分辨率開發系統,這樣,在瀏覽這兩種圖形界面時,存在用戶界面分辨率平穩切換的問題。
在MIS系統中調用SWJ-700客戶瀏覽器的分辨率切換,包括調用前切換和調用后恢復原有分辨率切換兩個過程,其難點在于調用后恢復原有分辨率。由于PowerBuilder支持使用RUN函數調用可執行文件,使用C++編程實現分辨率切換的執行文件,供MIS系統調用:
int myDisplaySettings(int set, int width, int height)
{
HDC hscrDC;
static int xScreen, yScreen;
DEVMODE DevM;
long lRet;
int iRet;
iRet=0;
if (set==0) { //保存當前的分辨率
hscrDC=CreateDC("Display",NULL, NULL,NULL);
xScreen=GetDeviceCaps(hscrDC, HORZRES);
yScreen=GetDeviceCaps(hscrDC, VERTRES);
DeleteDC(hscrDC);
} else if (set==9) { //恢復到保存的分辨率模式
EnumDisplaySettings(0, 0, &DevM);
DevM.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
DevM.dmPelsWidth = xScreen;
DevM.dmPelsHeight = yScreen;
lRet= ChangeDisplaySettings(&DevM, 0);
if (lRet != DISP_CHANGE_SUCCESSFUL) {
MessageBox(NULL,"顯示器分辨率設定有誤!",NULL,0);
iRet=-1;
}
} else { //設置指定的分辨率
EnumDisplaySettings(0, 0, &DevM);
DevM.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
DevM.dmPelsWidth = width;
DevM.dmPelsHeight = height;
lRet= ChangeDisplaySettings(&DevM, 0);
if (lRet != DISP_CHANGE_SUCCESSFUL) {
iRet=-1;
}
}
return iRet;
}
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow )
{
Main::hInstance = hInstance;
Main::hPrevInstance = hPrevInstance;
Main::nCmdShow = nCmdShow;
int ret, xScreen, yScreen, flag=0;
char str_comm[100];
if ( ! Main::hPrevInstance ) {
MainWindow::Register();
}
myDisplaySettings(0, 0,0);
if (myDisplaySettings(1, 1024,768)!=0) {
myDisplaySettings(1, 800,600);
}
ret=spawnl(P_WAIT, " \\gshow.exe"," \\gshow.exe" ,NULL);
myDisplaySettings(9, 0,0);
return 0;
}
在函數myDisplaySettings(int set,int width,int height)中,參數set為標志位,當set等于0時,程序保存當前顯示器分辨率;set等于1時,設置分辨率為width及height所指定的分辨率;而當set為9時,恢復到原來顯示器分辨率。在Winmain()主函數中,調用SWJ-700系統圖形瀏覽器gshow.exe時,spawnl()的第一參數置為P_WAIT,即當且僅當瀏覽器關閉后,恢復系統原有分辨率。
四、 結束語
在柳州供電局管理信息系統的建設中,成功的實現了SCADA系統與MIS系統的集成,盡管由于采用了SWJ-700系統作為實時圖形瀏覽器,在瀏覽實時圖形時難以直接在圖上查閱某一設備的具體參數,而必須在MIS系統的設備管理子系統中查閱,但SCADA系統與MIS系統的集成,為MIS系統提供了實時圖形的瀏覽,實時數據查詢與處理,為歷史數據的保存及生產規劃、決策提供了數據基礎,進一步提高了企業的生產管理水平。