中鐵二局集團電務工程有限公司 聶 馗
?
SCADA系統中的規約庫技術
中鐵二局集團電務工程有限公司 聶 馗

SCADA 規約庫 通信 SW-2000 模塊
近年來,計算機應用技術飛速發展,SCADA(Supervisory Control And Data Acquisition)系統在工業領域得到了廣泛的應用,尤其在電力系統中,發展更為迅速。電力系統中,現場數據不但包括功率、電壓、電流等測量數據,還包括分合閘、過流、速斷等操作及事故所產生的事件數據。當發生事故而導致跳閘時,還要記錄現場的故障錄波數據,需要通信的數據量是一般工業控制中所無法比擬的。由于電力系統現場數據的變化非常快,一次故障可能只維持十幾毫秒,數據稍縱即逝,所以對數據的實時性、通信速度的要求是非常高的。可見,系統通信是SCADA系統成功的關鍵,而規約庫技術又是SCADA系統通信成功的關鍵。
電力自動化系統大多采用數字式通信技術,遠動裝置將信息轉換成二進制碼,進行運算處理并按照某種通信規則(規約)進行包裝后,通過模擬信道或數字信道進行傳輸;接受端遵循同一種規則(規約)對收到的數據進行校驗和解包,然后進行處理。這里的規則就是通信規約(protocol)。通信規約的基本單位是數據幀,不同的通信規約,數據幀也各不相同,但一般包括起始標志、地址字、控制字、信息體(遠動數據)、監督字以及結束標志組成。
經過多年的發展,電力系統已經制定和頒布了一系列遠動通信規約標準,如CDT、Polling、IEC870-5系列等,這些規約在自動化系統應用中對裝置和裝置之間互通互連,以及對保證自動化裝置和主站系統具有良好的開放性和兼容性起到了關鍵性的作用。鐵路電力自動化系統完全可以借鑒電力系統成熟的通信規約。
SW-2000鐵路電力調度自動化系統(電力遠動系統)是成都四為電子信息有限公司針對鐵路系統的發展特點和用戶實際需求,在總結多年實際工程經驗的基礎上,結合鐵路行業快速發展的需求和當今最先進的計算機技術,率先在國內推出的具有跨平臺運行能力的新一代鐵路電力綜合調度自動化系統。SW-2000基本上就是一個SCADA系統,該系統中,前置機(又稱通信處理機)負責主站系統的數據采集、規約轉換和數據預處理,如圖1。前置機通過交換機與多串口服務器連接構成數采子網,由多串口服務器經通信網絡與遠方的變配電所自動化系統、RTU以及STU、FTU等連接,負責采集、處理來自被控站的數據。SW-2000系統采用先進的規約庫技術,根據下掛單元的規約類型來選擇相應的規約,形成一個規約庫。本文以IEC6080-5-101規約為例,介紹SCADA系統中的規約庫技術。
前置機軟件的主要功能就是完成來自站端系統和設備的數據預處理功能,同時將來自后臺的命令打包后下發,這個過程通常稱為“解規約”。由于站端設備類型比較多,不同的設備類型有不同的規約;再加上供貨廠商也比較多,不同的廠家對同一個規約的理解不盡相同。因此,要求規約庫中應該有如下規約:CDT、1801、IEC 870-5-101/102/103/104、ModBus等。另外,規約庫還可以根據用戶要求增加新的規約或修改舊的規約。增加或修改某一種規約時,可以在線完成,不影響前置系統的正常運行。

圖1 電力調度自動化主站配置
SCADA系統所有的通信協議都封裝在comm類中,通過Protocol::ReadComm,Protocol::WriteComm讀寫通信數據,并存入系統緩沖區buffer中。系統對不同規約類型、同一類型但不同廠家的規約配置相應的ID號,進行動態加載下掛單元的所有規約。ProtocolLoader::Start啟動規約,并創建可執行函數(相同的規約只能加載一次)。
IProtocolExecutor* __stdcall ProtocolLoader::CreateExecutor()
{
ACE_TCHAR path[255];
ACE_OS::sprintf( path, "./%s%s%s", ACE_DLL_PREFIX, protocol_module_name_.c_str(), ACE_DLL_SUFFIX );
swInt32 r = dll_.open( path );
if( r != 0 )
{
return 0;
}
executor_creator_=(ExecutorCreator)dll_.symbol("GetProtocolExecutor");
if( executor_creator_ == 0 )
{
return 0;
}
return executor_creator_( protocol_type_no_ );
}
以上程序可知,對于下掛的單元設備,首先定義相應的規約ID(如#define P_IEC104_JC 33),打開定義好的規約dll_.open( path )如-m 101.dll –n 33,生成規約執行函數dll_.symbol("GetProtocolExecutor"),該輸出函數定義的類為IProtocolExecutor*,定義如下:
class IProtocolExecutor
{
public:
virtual swInt32 __stdcall Start()=0;
virtual ACE_THR_FUNC_RETURN Execute()=0;
virtual ACE_TCHAR* __stdcall GetTitle(ACE_TCHAR* name)=0;
virtual swInt32 __stdcall GetProtocolType()=0;
virtual void __stdcall Stop()=0;
};
這樣,就可以對選擇的規約進行相應的動作,如start等。對規約的加載及解規約之后,前置機將數據存入內存,封裝為Unit,分別存儲為遙信、遙控、遙測及遙調數據,通過網絡下發到后臺,進行相應的顯示或存盤。
IEC6080-5-101規約是一種問答式的規約,由主站問,子站來回答。主站的請求由監控子系統發出,這里的通信模塊只需完成子站針對主站請求幀的分析和應答。
遠動通信模塊流程如圖2所示。

圖2 遠動通信模塊流程
IEC60870-5-101采用的幀格式為FT1.2異步式字節傳輸幀格式,長度為5個字符的是定長幀,長度超過5字符的是可變幀。
子站內部通信在這里是指子站內的上位機與下掛單元之間的通信。模塊流程如圖3所示,與子站對主站的通信不同的是,上位機對下掛單元發送數據是主動的。

圖3 子站內部通信模塊流程
首先,打開protocolconfig.exe進行規約的配置及選擇,如圖4所示。

圖4 規約選擇
規約庫中包含多種規約,可根據下掛單元來選擇與之相應的規約進行通信及數據傳輸。
運行前置機軟件,可以方便工作人員了解到系統信息、廠站信息、通道數據、遙測數據、遙信數據、電度數據相關信息,如圖5所示。

圖5 廠站信息顯示圖
本文介紹了基于IEC-60870-5-101/104的規約庫及通信模塊設計,并以成都四為公司生產的SW-2000系統為例實現了部分規約庫配置、加載,以及通信子系統的要求。
顯示部分通過友好的界面,實現了通信規約的配置,實時顯示出遙測數據、遙信數據、電度數據。該規約庫技術已應用于成都供電段達成電力遠動系統。
[1] 翟純玉,唐志勇,張本川. 鐵路電力自動化技術[M].北京:中國鐵道出版社,2006.
[2] 田國政.變電站自動化系統的通信網絡及傳輸規約選擇[J].電網技術,2003,27(9):66-68.
[3] 譚文恕,李澤.IEC870《遠動設備及系統第五部分:傳輸規約》系列標準介紹[J].電力標準化計量,1999,28(2):1-6.
[4] 方炯.IEC60870-5-101通信協議的實現與應用[J].計算機應用與軟件,2005,22(9):65-66.
[5] 廖澤友,蔡運清.IEC60870-5-103協議和IEC60870-5-104協議應用經驗[J].電力系統自動化,2003,27(4):66-68.
[6] 韓鋒,王仲東,皮鯤.基于IEC870-5-101規約的RTU軟件實現[J].儀表技術與傳感器,2003,(11):19-21.
[7] 劉玉春,劉志清,林莘.通信規約在變電站自動化系統中的應用[J].東北電力技術,2004,25(12):25-28.
[8] 嚴華.電力系統調度監控系統(SCADA)的研制[Z].2003.
[9] 郭小鵬,李存斌.VisualC++高級編程及其項目應用開發[M].北京:中國水利水電出版社,2003.