文章目錄
- 概要
- 整體架構流程
- 數據幀格式
- 技術細節
概要
輸電線路在線監測系統 transmission lines online monitoring system
監測輸電線路設備本體、氣象環境、通道狀況等信息,定性或定量分析輸電線路運行狀況的應用系
統。一般包括主站系統、監測裝置以及主站系統與監測裝置之間的通信網絡
主站系統 master system
實現輸電線路設備本體、氣象環境、通道狀況等信息的接收、存儲、分析、統計、發布的信息系統。
一般由前置接收機、應用服務器、數據庫服務器、監測工作站、網絡交換設備、網絡安全設備、通信設
備以及數據庫和主站軟件系統等組成。
監測裝置 monitoring device
實現輸電線路設備本體、氣象環境、通道狀況等信息的采集和處理,并通過通信網絡向主站系統傳
送數據的前端裝置。一般由主控單元、通信模塊、電源模塊、各類型傳感器等構成。
傳感器 sensor
用于輸電線路本體、氣象環境、通道狀況等信息采集的元件。
整體架構流程
`
a) 通信方式應滿足 Q/CSG 1204009 中國南方電網電力監控系統安全防護技術規范要求;
b) 視頻采用 IP 網絡進行通信,采用 TCP 或 UDP 協議傳輸;
c) 圖像采用采用 TCP 或 UDP 協議傳輸;
d) 視頻、圖像以外的數據采用 UDP 協議傳輸;
e) 主站應支持所有通信方式;
f) 監測裝置采用主動上送數據的方式,主站應支持主動召喚數據;
g) 主站的網絡管理、系統維護、安全漏洞與風險管理應滿足 Q/CSG 212001-2018 中國南方電網電
力監控系統網絡安全管理辦法的要求,主站的操作系統、數據庫、中間件、應用系統應按照公
司電力監控系統網絡安全技術標準進行設置和管理;
h) 監測裝置的操作系統、數據庫等應按照公司電力監控系統網絡安全技術標準進行設置和管理;
i) 嚴禁通過有線、無線等各種形式形成跨生產控制大區和管理信息大區(或互聯網)直連等違規
現象。
數據幀格式
數據包采用數據幀模式,對數據幀定義起始碼、裝置號碼、控制類型碼、數據域長度、數據域、校驗碼和結束碼
字節定義
字節定義如下:
a) 起始符:1 字節,該值定義為 68H;
b) 裝置號碼:見 4.4 節;
c) 控制字:1 字節,用于區分數據類型;
d) 數據域長度:2 字節,其中采用大端模式。若為零表示無數據域;
e) 數據幀長度不大于 4000 字節;短信通信方式,幀長不大于 130 字節;
f) 校驗碼:采用累加和取反的校驗方式,發送方將裝置號碼、控制字、數據域長度和數據區的所
有字節進行算術累加,拋棄高位,只保留最后單字節,將單字節取反;
g) 結束符:1 字節,該值定義為 16H。
控制字定義
控制字可供使用的有 256(00H—FFH),可根據實際應用需求進行擴充,量測值的數據傳輸格式均
統一采用大端模式,具體定義如表 5 所示
技術細節
//開機聯絡信息(控制字:00H)
void app_i1_cmd_nan_open(){// int num=0;unsigned char openbuf[14]={0x68,0x54,0x47,0x30,0x30,0x35,0x33, //裝置號碼0x00,//控制字0x00,0x02,0x03,//規范版本號0x00, //規范版本號0x98,0x16}; memcpy(openbuf+1,SYS_DEVICE_ID,6);unsigned char result;calculate_and_reverse(openbuf, 14, &result); openbuf[12]=("%02x",result);openbuf[13]=0x16;app_udpc_send(openbuf,14);UDP_FOR_SWITCH_SEND(14,openbuf);int count=0;sem_wait(&sem_startup_thread);//等待信號量的值>0CLog(&logger,"等待信號量的值>0\n");while (1){CLog(&logger,"開始進入循環發送階段count:%d\n",count);sleep(30);app_udpc_send(openbuf,14);UDP_FOR_SWITCH_SEND(14,openbuf);count++;if(count>10){CLog(&logger,"循環發送開機聯網超時十分鐘,準備重啟\n");util_restart("循環發送開機聯網超時十分鐘,準備重啟");return;}}
}
//校時(控制字:01H) active 裝置請求校時格式如表 9 所示
void app_i1_cmd_timing_active(){int i=0;unsigned char heatbuf[18]={0x68,0x54,0x47,0x30,0x30,0x35,0x33, //裝置號碼0x01,//控制字0x00,0x06,0x17,0x0c,0x04,0x0f,0x08,0x03,//信號記錄時間0x00,0x16}; memcpy(heatbuf+1,SYS_DEVICE_ID,6);heatbuf[7]=0x01;heatbuf[8]=0x00; heatbuf[9]=0x06;char nan_time[6];nan_time_get(nan_time);for (;i<6;i++){heatbuf[10+i]=nan_time[i];}unsigned char result;calculate_and_reverse(heatbuf, 18, &result);heatbuf[16]=("%02x",result);heatbuf[17]=0x16;app_udpc_send(heatbuf,18);UDP_FOR_SWITCH_SEND(18,heatbuf);
}//裝置心跳信息(控制字:05H) 發送心跳
void * app_i1_cmd_send_heatbeat(){int i=0;unsigned char heatbuf[20]={0x68,0x54,0x47,0x30,0x30,0x35,0x33, //裝置號碼0x05,//控制字0x00,0x08,0x17,0x0c,0x04,0x0f,0x08,0x03,//信號記錄時間0x1f, //信號強度0x00, //蓄電池電壓0x00,0x16}; //發送心跳保活voltage__heart();memcpy(heatbuf+1,SYS_DEVICE_ID,6);heatbuf[7]=0x05;heatbuf[8]=0x00; heatbuf[9]=0x08;char nan_time[6];nan_time_get(nan_time);i=0;for (;i<6;i++){heatbuf[10+i]=nan_time[i];}char adc_char[15];double adc_double = voltage_read_value( adc_char);if (adc_double != 0.0){CLog(&logger,"ADC double value: %f %02x\n", adc_double, adc_double);// CLog(&logger,"ADC char value: %s\n", adc_char);}else{CLog(&logger,"Failed to read ADC voltage.\n");}at_signal_get_singal();heatbuf[16]=("%02x",SYS_SIGNAL); //信號強度heatbuf[17]=50; //蓄電池電壓unsigned char result;calculate_and_reverse(heatbuf, 20, &result);heatbuf[18]=("%02x",result);heatbuf[19]=0x16;app_udpc_send(heatbuf,20);UDP_FOR_SWITCH_SEND(20,heatbuf);heat_count_send++;
}