变电站监控双网切换设备的制作方法

文档序号:7493568阅读:220来源:国知局

专利名称::变电站监控双网切换设备的制作方法
技术领域
:本发明涉及一种电力系统的监控设备,特别是一种变电站的监控设备。
背景技术
:在变电站监控系统中,监控服务器负责收集变电站内所有保护、测控设备的数据,并实现数据的显示、存盘、统计及打印,同时接收操作员下发的命令并转发至测控装置,实现远方控制功能,监控服务器在变电站监控系统中具有举足轻重的地位,因此变电站监控服务器通常配置为工作网和备用网的双网结构模式,双网互为备用,以提高可靠性。在双网结构模式下,监控服务器的双网切换是一个非常重要的问题。常规方式下,如果在工作网接收到现场设备发送上来的信息还没有来得及显示和存盘的情况下就进行工作网和备用网之间的切换,会丢失信息,而且从开始切换到完成切换之间的时间间隔越长,丢失信息的概率越高。如图l所示,现有技术的监控服务器采用工作网和备用网的网络驱动模块经报文解析模块与实时库模块连接的结构,网络驱动模块连接直连装置。监控服务器信息处理过程中,工作网和备用网切换时可能出错的环节1、网络驱动模块,因为只有工作网才建立与直连装置或前置机的连接,当工作网收到直连装置的报文尚未处理就切换到备用网时,保存在原来工作网网络驱动模块网卡缓冲区中的信息就会丢失。对于103规约的直连装置,由于监控服务器尚未解析报文,不会给直连装置确认,当发生网络切换,其与备用网络建立连接时会重发信息报文,所以在这一层次不会丢失信息,但无法保证不多发信息。对于61850规约的直连装置,通常采用InformationR印ort服务上送四遥及事件信息,InformationR印ort服务是无确认服务,当发生网络切换,如无有效的双网同步机制,切换过程中的报告将会全部丢失。前置机一般采用104规约,除保护信息外的其它信息,如遥信变位、信息顺序记录都没有重发机制,如果此时发生切换,工作网网络驱动模块未处理完毕的遥信变位和信息顺序记录就会丢失。2、报文解析模块,报文解析模块解析网络驱动模块收到的报文,将信息存储在其数据库中并发送给实时库模块。报文解析模块必须在信息已经发送到实时库模块之后才能给直连装置发送确认报文,这样切换后没有来得及处理的报文,直连装置会向切换完成后建立连接的网络重发信息,所以在这一层次不会丢失信息,但无法保证数据不多发。3、实时库模块(实时数据库),实时数据库中的数据来源是报文解析模块产生的事件数据,当监控服务器发生工作网和备用网切换时,没有存储到实时数据库中的信息会发生丢失。从以上分析可以看出,在现有技术处理方法下,工作网和备用网双网切换时漏发、多发数据不可避免,其原因在于,对于没有确认机制的通讯规约,一旦发生双网切换,网络驱动模块无法实现数据的断点续传。
发明内容本发明的目的是提供一种变电站监控双网切换设备,要解决的技术问题是监控服务器双网切换时不漏发,不多发数据。本发明采用以下技术方案一种变电站监控双网切换设备,设有监控服务器,监控服务器设置有实时库模块、可相互切换的工作网和备用网,工作网和备用网设有网络驱动模块和报文解析模块,工作网和备用网的网络驱动模块与直连装置连接,用于检测网络连接,将直连装置发送来的事件消息传递给报文解析模块,报文解析模块对收到的事件消息解析,并向实时库模块发送,实时库模块用于存储和传送解析的事件消息,所述报文解析模块与实时库模块之间设置有双网信息同步模块,用于将报文解析模块解析后的事件消息更新,并接收网络驱动模块监测的网络连接信号,在网络故障的情况下启动双网切换;所述实时库模块提取双网信息同步模块更新后的事件消息;工作网和备用网的网络驱动模块中设有事件条目结构数组,用来实时保存最近一次接收到的直连装置上送的事件消息的条目号,双网切换时,该条目号作为直连装置开始向切换后后的网络驱动模块上送事件消息的始点。本发明更新后的事件消息为双网信息同步模块设置的事件同步队列中缓存记载解析后的事件消息。本发明的双网信息同步模块将从报文解析模块接收到的解析后事件消息与事件同步队列中的缓存事件消息进行匹配、过滤,将新增事件添加到事件同步队列。本发明的实时库模块提取双网信息同步模块更新后的事件消息,为读取事件同步队列中的解析后的事件消息。本发明的匹配为逐条对事件消息的状态值、时标及数据品质对比。本发明的过滤为新增事件消息的状态值、时标及数据品质与已有消息完全一致,则视新增事件消息为重复消息,滤除。本发明的双网信息同步模块30秒定时更新工作网和备用网的网络驱动模块中的事件条目结构数组一次。本发明更新网络驱动模块中的事件条目结构数组为用最近一次接收到的事件消息的条目号值刷新事件条目结构数组中直连装置报告的起始序号值。本发明工作网的网络驱动模块在工作过程中,在5秒没有接收到直连装置发送的报文,该网络驱动模块向直连装置发送心跳检测报文,如果10秒没收到直连装置的回复报文,连续发送3次,都检测到网络链接失效,网络驱动模块向双网信息同步模块报告,双网信息同步模块启动双网切换。本发明的心跳检测报文频率为每10秒钟一次。本发明与现有技术相比,在报文解析模块与实时库模块之间设置双网信息同步模块,在其中设置事件同步队列,对解析后的事件信息进行确认,即对来自直连装置的信息解析后,在写入实时库前先过滤、列队后再转送到实时库模块存储,网络驱动模块在发生双网切换重建连接时,从事件队列最后添加的事件消息处提取报告,以此实现双网切换时不漏发,不多发数据。图1是现有技术的变电站监控双网切换设备的结构图。图2是本发明实施例的变电站监控双网切换设备的结构图。图3是本发明实施例的变电站监控双网切换设备的工作图。具体实施例方式下面结合附图和实施例对本发明作进一步详细说明。如图2所示,本发明的变电站监控双网切换设备,设有监控服务器,监控服务器双网配置,设置有实时库模块、双网信息同步模块以及可相互切换的工作网和备用网。工作网和备用网的网络驱动模块经其报文解析模块与双网信息同步模块连接,双网信息同步模块与实时库模块连接,同时双网信息同步模块与工作网和备用网的网络驱动模块连接。双网信息同步模块用于将解析后的事件信息定时更新,并接收网络驱动模块监测的网络连接信号,在网络故障的情况下启动双网切换。工作网和备用网的网络驱动模块与保护、测控设备的直连装置连接,检测网络连接,将直连装置发送来的事件消息传递给报文解析模块。报文解析模块对收到的事件消息解析,并向双网信息同步模块发送。实时库模块提取双网信息同步模块更新后的事件信息,实时库模块具有存储和传送数据信息的功能。工作网工作时,备用网不接收连接装置的报文。如图3所示,本发明的变电站监控双网切换设备,在工作网和备用网的网络驱动模块中均设置有"事件条目结构数组",用来实时保存最近一次接收到的直连装置上送报告的事件消息的条目号。在报文解析模块与实时库模块之间设置的双网信息同步模块中设置有"事件同步队列",作为解析后事件消息的中转缓存区,按时间顺序记载解析后的缓存事件消息。每条事件消息都包含状态值、时标(消息产生时刻对应的UTC时间)及数据品质(反映事件消息的有效性)三个成员数据。双网信息同步模块将从报文解析模块接收到的解析后事件消息与事件同步队列中的解析后的缓存事件消息从最近时间往前开始进行逐条对比,如新增事件消息的状态值、时标及数据品质与已有消息完全一致,则视新增事件消息为重复消息,滤除,过滤后的新增事件添加到事件同步队列,实时库模块读取事件同步队列中的解析后的事件消息,从而保证了切换时事件信息不多报。同时双网信息同步模块根据事件同步队列中添加的事件消息,30秒定时更新工作网和备用网的网络驱动模块中的事件条目结构数组,采用最近一次接收到的事件消息的条目号值刷新事件条目结构数组中直连装置报告的起始序号值,起始序号值为当发生双网切换后或起始时,双网信息同步模块记载直连装置报告的事件条目结构数组集合的起始序号。工作网的网络驱动模块在工作过程中,如果在5秒没有接收到直连装置发送的任何报文,包括事件消息、心跳检测回复,该网络驱动模块会向该直连装置发送心跳检测报文,检测周期为10s,如果IO秒没收到直连装置的回复报文,认为网络链接失效,这样连续发送3次,且都检测到网络链接失效,则网络驱动模块向双网信息同步模块报告,由双网信息同步模块启动双网切换,工作网网络驱动模块关闭,备用网网络驱动模块开启。监控服务器双网切换后,原工作网切换为备用网,原备用网切换为工作网。备用网建立连接后,双网信息同步模块从网络驱动模块读取事件条目结构数组,作为直连装置上送报告请求的输入参数条目号EntryID的数值,向直连装置发起向切换后的网络驱动模块上送报告事件消息的请求,依据通讯规约,条目号EntryID的数值将作为直连装置开始向5切换后后的网络驱动模块上送报告事件消息的始点,该始点以后的事件数据直连装置将主动重新向网络驱动模块上送,从而保证了双网切换过程中事件信息不漏报。切换后的工作网的网络驱动模块将从连接装置收到的报文,经报文解析模块解析后存储到双网信息同步模块的事件同步队列。切换后的备用网不接受连接装置的报文。下面以雪崩试验过程中的信息处理来说明本发明的变电站监控双网切换设备的工作过程,雪崩试验在切换前开始,在切换后才结束。—、切换前的处理1.监控服务器工作网的网络驱动模块从直连装置接收报文,备用网不与直连装置通讯。2.工作网的网络驱动模块从直连装置接收报文,传递给报文解析模块解析,同时工作网和备用网的网络驱动模块的事件条目结构数组,保存直连装置最近一次上送的事件条目号。3.报文解析模块解析报文,提取事件消息,并上送双网信息同步模块。4.双网信息同步模块中的事件同步队列,作为事件消息的中转缓存区,暂存双网信息同步模块中解析后的事件消息,用来与在其后面解析后的事件消息进行比较,将新增的解析后的事件消息添加到事件同步队列中。5.双网信息同步模块将接收到的解析后的事件消息和事件同步队列中的消息进行匹配,过滤重复冗余事件。6.双网信息同步模块将过滤后的新增事件添加到事件同步队列。7.双网信息同步模块依据事件同步队列中添加的事件消息,定时更新工作网和备用网的网络驱动模块中的事件条目结构数组,定时时间为30秒。8.实时库模块读取双网信息同步模块的事件同步队列。9.实时库模块保存事件信息到安装在同一台机器上的物理数据库中。二、切换中的处理1.工作网的网络驱动模块在工作过程中,如果在5秒没有接收到直连装置发送的任何报文,该网络驱动模块会向该直连装置发送心跳检测报文,如果10秒没收到直连装置的回复报文,认为网络链接失效;连续3次都检测到网络链接失效,则网络驱动模块报告双网信息同步模i央,由双网信息同步模块启动双网切换。2.工作网切换为备用网,切换前的工作网网络驱动模块关闭网络驱动相关线程,关闭与直连装置的网络套接字Socket。3.备用网在35秒内切换为工作网,切换后的工作网的网络驱动模块启动相关工作线程,发起对直连装置的连接请求。4.切换后的工作网与直连装置建立连接后,工作网网络驱动模块读取事件条目结构数组,作为上送报告请求的输入参数条目号EntryID的数值,向直连装置发起上送报告请求,依据通讯规约,条目号EntryID数值将作为直连装置开始上送报告的始点,该始点以后的全部事件数据装置将主动上送到切换后的工作网网络驱动模块。5.切换后的实时库模块开始接收事件同步列队的解析后的事件消息。三、切换后的处理切换后备用网切换为工作网,工作网切换为备用网。6实施例1:本发明的变电站监控双网切换设备,监控服务器硬件采用DELL公司745型号主机,主控软件系统采用ISA主服务器300+V3.20,采用C++和C语言混合编程实现。双网信息同步模块将收到的报文数据进行过滤后添加到事件同步队列的命令BOOLCDualEventMng::IfSoeExistAndRefresh(CSOELogsoeLog){MaintainSoeCo皿t();if(soeLog.nValueType==2)soeLog.nValueType=0;CStringstr;str.Format(〃%d,%s=%d,%d:%d年%d月%d日%d时%d分%(1秒%d毫秒〃,-1,〃SIGNALID〃,soeLog.VarID,soeLog.nValueType,soeLog.EventTime.year,soeLog.EventTime.month,soeLog.EventTime.day,soeLog.EventTime.hour,soeLog.EventTime.mi皿te,soeLog.EventTime.second,soeLog.EventTime.ms);〃临时指针void氺pPointer;WaitForSingleObject(m—mutexHandle,INFINITE);B00LbRes=m_soeMap.Lookup(str,pPointer);if(bRes==FALSE){m_soeList.AddTail(str);m_soeMap.SetAt(str,亂U;}ReleaseMutex(m_mutexHandle);returnbRes;}〃保护事件信息处理B00LCDualEventMng::IfRelaySoeExistAndRefresh(CRelaySOELogrelaySoeLog){MaintainRelaySoeCo皿t();CStringstr;7str.Format(〃%d,%s=%d,%s:%(1年%(1月%d日%(1时%(1分%(1秒%d毫秒",relaySoeLog.UnitID,"EVENTID",relaySoeLog.EventPointID,relaySoeLog.EventN咖e,relaySoelxig.EventTime.year,relaySoelxig.EventTime.month,relaySoelxig.EventTime.day,relaySoelxig.EventTime.hour,relaySoelxig.EventTime.mi皿te,relaySoelxig.EventTime.second,relaySoelxig.EventTime.ms);〃临时指针void氺pPointer;WaitForSingle0bject(m_mutexHandle,INFINITE);B00LbRes=m_relaySoeMap.Lookup(str,pPointer);if(bRes==FALSE)m_relaySoeList.AddTail(str);m_relaySoeMap.SetAt(str,NULL);ReleaseMutex(m_mutexHandle);returnbRes;工作网双网信息同步模块实时更新最新一次接收到的事件条目信息的命令voidC61850FifoExplainMng::DealSoeFifo0staticCMap〈DW0RD,DWORD,CString,CString&>entryIDMap;staticblnitialized=FALSE;「ni11"Iif(blnitialized==FALSE)l_UIIl」entryIDMap.InitHashTable(3000);blnitialized=TRUE;tagS0ERptsoeRpt;while(m_soeFifo.IsEmpty()==FALSE)ASSERT(m_soeFifo.GetHead(soeRpt));〃传输原因非1,2,3则不显示队列8if(soeRpt.ReasonCode!=1)continue;CRTSignal*pRTSignal=GetRTSignalFromlndex(soeRpt.SN);if(pRTSignal==亂Ucontinue;〃更新EntrylDDWORDdwlndex=薩ELPA廳(pRTSignal->wUnitID,WORD(soeRpt.nRcblndex));CStringstrEntryID;if(entryIDMap.Lookup(dwlndex,strEntryID)==FALSE){charchEntryID[100];ZeroMemory(chEntryID,sizeof(chEntryID));〃字符串格式AEntryID低4位AEntryID高四位,BEntryID低4位BEntryID高四位_snprintf(chEntryID,100,〃%d%d,%d%d〃,soeRpt.nAEntryID[O],soeRpt.nAEntryID,soeRpt.nBEntryID,soeRpt.nBEntryID[O]);strEntryID=chEntryID;entryIDMap.SetAt(dwlndex,strEntryID);}else{〃得到储存的EntryIDintnStoredAEntryIDLow,nStoredAEntryIDHigh,nStoredBEntryIDLow,nStoredBEntrylDHigh;intnResult=sscanf(strEntryID,〃%d%d,%d%d〃,&nStoredAEntryIDlxiw,&nStoredAEntryIDHigh,&nStoredBEntryIDlxiw,&nStoredBEntryIDHigh);ASSERT(nResult==4);〃判断本次S0EEntryID是否发生改变B00LbAEntryIDChanged=FALSE,bBEntryIDChanged=FALSE;if((nStoredAEntryIDLow!=soeRpt.nAEntryID)|(nStoredAEntryIDHigh!=soeRpt.nAEntryID[1]))bAEntryIDChanged=TRUE;if((nStoredBEntryIDLow!=soeRpt.nBEntryID)|(nStoredBEntryIDHigh!=soeRpt.nBEntryID[1]))bBEntryIDChanged=TRUE;〃将发生改变的EntryID写到共享内存if(bAEntryIDChangedl|bBEntryIDChanged){CSingleEntryIDInfosingleEntryIDInfp5singleEntry皿nfo.nUnitID=pRTSignal->wUnitID;singleEntryIDInfo.nRCBIndex=soeRpt.nRcblndex;if(bAEntryIDChanged){singleEntryIDInfo.dwArrayAEntryID=nStoredAEntryIDLow;singleEntryIDInfo.dwArrayAEntryID[1]=nStoredAEntryIDHigh;}if(bBEntryIDCh肌ged){singleEntryIDInfo.dwArrayBEntryID=nStoredBEntryIDLow;singleEntryIDInfo.dwArrayBEntryID[1]=nStoredBEntryIDHigh;}if(pRTSignal->wUnitID==4){TRACE("UnitID=4low4BYte=%x,high4byte=%x〃,soeRpt.nAEntryID,soeRpt.nAEntryID[1]);}m_pSysVirtualNode61850_>m_pCfg61850Mng_>WriteSingle61850EntrylDInfo(pRTSignal->wUnitID,singleEntry皿nfo);〃将最新的EntrylD保存charchEntryID[100];ZeroMemory(chEntryID,sizeof(chEntryID));〃字符串格式AEntryID低4位AEntryID高四位,BEntryID低4位BEntrylD高四位_snprintf(chEntryID,100,〃%d%d,%d%d〃,soeRpt.nAEntryID[O],soeRpt.nAEntryID[1],soeRpt.nBEntryID,soeRpt.nBEntryID[l]);strEntryID=chEntryID;entryIDMap.SetAt(dwIndex,strEntryID);}}备用网重建连接时最近一次接收到的直连装置上送的事件消息的条目号,作为直连装置开始向切换后后的网络驱动模块上送事件消息的始点的命令VOIDStartRCB(ST_INTnACSI,ST_INTnNet){tagTableControl氺pTable;tagDevice氺pDevice;tagRCBTab1e*pRCB;ST—INTi,n咖RCB,len,nldx,RCBNO;ST_CHARrcbName[應ESIZE];ST_CHAR*prcbName,*pLDName;pTable=(tagTableControl*)pmemSCADA;pDevice=(tagDevice*)CorrectPointer((ST_L0NG)pmemSCADA,(ST_L0NG)pTable->pDeviceStart);皿mRCB=pDevice[nACSI+sACSI].nRCBTableNum;pRCB=(tagRCBTable*)CorrectPointer((ST_L0NG)pmemSCADA,(ST_L0NG)pDevice[nACSI+sACSI]pRCBTableStart);if(C0NST_A_NET==nNet)RCBNO=ARCBNO;elseif(CONST—B—NET==nNet)RCBNO=BRCBNO;elsereturn;nldx=GetAcsildx(nACSI,nNet);for(i=0;i<誦RCB;i++){strcpy(rcbName,pRCB[i].RCBName);prcbName=strpbrk(rcbName,〃/〃);〃*(prcbName++)=0;*prcbName=0;prcbName++;pLDName=rcbName;len=strlen(prcbName);if(len<=0)continue;〃判断rcb最后两位是否为编号,如果是则替换成配置的编号if(isdigit(prcbName[len_l])&&isdigit(prcbName[len_2])){prcbName[1en-1]=(ST_CHAR)(0x30+RCBN0%10);prcbName[len-2]=(ST_CHAR)(0x30+RCBN0/10);}}实施例2:本发明的变电站监控双网切换设备,监控服务器硬件采用SUN公司ULTRA45型号主机,主控软件系统采用PRS主服务器700U,采用QT程序语言实现。双网信息同步模块将收到的报文数据进行过滤、添加到事件同步队列的命令voidC61850DualEven他g::MaintainSoeListSize(){if(m_SoeList.size()<MAX_DUALEVENT_MAP_COUNT)r6turnjfor(inti=0;i<MAX_DUALEVENT_MAP_C0UNT/5;i++)if(strstr(prcbName,〃$BR$〃))start_iec_brcb((MVL_NET_INFO)acsi_ctrl_table[nldx].pnet_info,pLDName,prcbName,〃〃&rpt_typeids,nNet);6ls6start_iec_urcb((MVL_NET_INFO)acsi_ctrl_table[nldx].pnet_info,pLDName,prcbName,&rpt_typeids,nNet);QStringList::iteratorit=m_SoeList.erase(m_SoeList.m_SoeMap.erase(—it));begin())}}voidC61850DualEven他g::MaintainRelaySoeListSize(){if(m_RelaySoeList.size()<MAX_DUALEVENT_MAP_COUNT)r6turnjfor(inti=0;i<MAX_DUALEVENT_MAP_C0UNT/5;i++)QStringList::iteratorit=m_RelaySoeList.erase(m—12RelaySoeList.begin());m_RelaySoeMap.erase(*it);}}voidC61850DimlEventMng::SaveSoeLogToScada(CSoeLog&soelxig){QStringstrKey;〃从保护装置上来的信号如果是分闸,则可能被服务器置为保护跳闸,〃为避免同一个信号nValueType不一致,统一赋值为0if(soeLog.nValueType==2)soeLog.nValueType=0;strKey=strKey.sprintf(〃%d,%s=%d,%(1:%(1年%(1月%(1日%d时%d分%(1秒%(1毫秒〃,-1,〃SIGNALID〃,soeLog.VarID,soeLog.nValueType,soeLog.EventTime.year,soeLog.EventTime.month,soeLog.EventTime.day,soeLog.EventTime.hour,soeLog.EventTime.mi皿te,soeLog.EventTime.second,soeLog.EventTime.ms);QStringM即iteratorit=m—SoeM即.find(strKey);if(it==m_SoeMap.end()){m_SoeList.push—back(strKey);m_SoeMap.insert(strKey,0);}}voidC61850DualEventMng::SaveRelaySoeLogToScada(CRelaySoeLog&relaySoeLog){QStringstrKey;strKey=strKey.sprintR%d,%s=%d,Xs:Xd年Xd月Xd日%d时%d分%(1秒%d毫秒〃,relaySoeLog.UnitID,〃EVENTID〃,relaySoelxig.EventPointID,13relaySoeLog.EventName,relaySoelxig.EventTime.year,relaySoeLog.EventTime.month,relaySoelxig.EventTime.day,relaySoelxig.EventTime.hour,relaySoeLog.EventTime.mi皿te,relaySoelxig.EventTime.second,relaySoeLog.EventTime.ms);QStringMap::iteratorit=m_RelaySoeMap.find(strKey);if(it==m_RelaySoeMap.end()){m_RelaySoeList.push—back(strKey);m_RelaySoeMap.insert(strKey,0);}}工作网双网信息同步模块实时更新最新一次接收到的事件条目信息的命令ST_V0IDUpdataEntryID(ST_INTnACSI,ST_INTnNet){tagTableControl氺pTable;tagDevice氺pDevice;tagRCBTable*pRCB;ST_INTi,nldx,len,nRCBN咖=0;ST_UCHAR氺pEntryID,zeroEntrylD[8];ST_CHARrcbName[應ESIZE];memset(zeroEntryID,0,sizeof(zeroEntryID));nldx=GetAcsildx(nACSI,nNet);pTable=(tagTableControl*)pmemSCADA;pDevice=(tagDevice*)CorrectPointer((ST_L0NG)pmemSCADA,(ST_L0NG)pTable->pDeviceStart);pRCB=(tagRCBTable*)CorrectPointer((ST_L0NG)pmemSCADA,(ST—LONG)pDevice[nACSI+sACSI].pRCBTableStart);nRCBNum=pDevice[nACSI+sACSI].nRCBTableNum;if(nRCBNum>MAX—RCB—NUM)return;for(i=0;i<nRCBNum;i++){strcpy(rcbName,pRCB[i].RCBName);len=strlen(rcbName);14if(len<=0)continue;if(!isdigit(rcbName[len_l]))continue;if(C0NST_A_NET==nNet)pEntryID=(ST_UCHAR*)&(pDevice[nACSI+sACSI].nAEntryID[i*2])if(C0NST_B_NET==nNet)pEntryID=(ST_UCHAR*)&(pDevice[nACSI+sACSI].nBEntryID[i*2])if(SD—TRUE==pTable->blsMain)memcpy(pEntryID,acsi_ctrl_table[nldx].EntryID[i],8);if(SD—FALSE==pTable->blsMain)if(memcmp(pEntryID,zeroEntryID,sizeof(zeroEntryID)))/服务器启动后,主服标志未置,客户端误把EntryID从共享内存区刷到运行变量memcpy(acsi_ctrl_table[nldx].EntryID[i],pEntryID,8);防止}}}备用网重建连接时最近一次接收到的直连装置上送的事件消息的条目号,作为直连装置开始向切换后后的网络驱动模块上送事件消息的始点的命令ST_V0IDStartRCB(ST_INTnACSI,ST_INTnNet,ST_B00LEANisBR)MVL_NET_INF0tag61850RCBTabletag61850TypeSettag61850LDTableST—INTST—INTST—INTST—INTST_CHARSTCHAR氺netjnfo;*pRCB;氺pTypeSet5承pU)Table;i,j,nldx,iUnitBaseRCB=Base_LD=0,End_LD=0;Base_RCB=0,End_RCB=0len=0;rcbName[應ESIZE];氺prcbName,氺pLDName;:f(nACSI>g_t61850SysSet.w61850UnitNum)printf('return5StartRCB()nACSIexceed\n〃)nldx=GetAcsildx(nACSI,nNet);net_info=(MVL_NET_INFO*)(acsi_ctrl_table[nldx].pnet_info)if(net_info==NULL)return;pTypeSet=g_t61850UnitVal[nACSI].pt61850TypeSet;Base_LD=pTypeSet->wBaseCfg_LD;EndLD=pTypeSet->wBaseCfg—LD+pTypeSet->wLD_Num;for(i=Base_LD;i<End_LD;i++){pLDTable=&g_t61850LDTable[i];Base_RCB=pLDTable->wBaseCfg_RCB;End_RCB=pLDTable->wBaseCfg_RCB+pLDTable_>wRCB_Num;if(i==Base_LD)iUnitBaseRCB=Base_RCB;〃装置起始Rcb下标for(j=Base_RCB;j<End_RCB;j++){pRCB=&g_t61850RCBTable[j];strcpy(rcbName,pRCB->cRCBName);prcbName=strpbrk(rcbName,〃/〃);if(!prcbName){printf(〃RCB'sNameiswrong!\n〃);continue;}*(prcbName++)=0;pLDName=rcbName;len=strlen(prcbName);if(len<=0)continue;〃判断rcb最后两位是否为编号,如果是则替换成配置的编号if(isdigit(prcbName[len_l])&&isdigit(prcbName[len_2])){prcbName[len-1](ST_CHAR)(0x30+g_t61850SysSet.byRcbNo[nNet_CONST_A_NET]%10);prcbName[len-2](ST_CHAR)(0x30+g_t61850SysSet.byRcbNo[nNet_C0NST_A_NET]/10);}if(strstr(prcbName,〃$BR$〃)){if(!isBR)continue;start_iec_brcb(net_info,pLDName,prcbName,〃",&rpt_typeids,j-iUnitBaseRCB,iUnitBaseRCB);}else{if(isBR)continue;start—iec_urcb(net_info,pLDName,prcbName,&rpt_typeids,j_iUnitBaseRCB,iUnitBaseRCB);}g_t61850UnitVal[nACSI].wSponseGITimes[J-iUnitBaseRCB][nNet-CONSTA—NET]=0;g—t61850UnitVal[nACSI].dwRptRevTimer[J-iUnitBaseRCB][nNet-CONSTA—NET]=time(NULL);}[0432:[0433:1权利要求一种变电站监控双网切换设备,设有监控服务器,监控服务器设置有实时库模块、可相互切换的工作网和备用网,工作网和备用网设有网络驱动模块和报文解析模块,工作网和备用网的网络驱动模块与直连装置连接,用于检测网络连接,将直连装置发送来的事件消息传递给报文解析模块,报文解析模块对收到的事件消息解析,并向实时库模块发送,实时库模块用于存储和传送解析的事件消息,其特征在于所述报文解析模块与实时库模块之间设置有双网信息同步模块,用于将报文解析模块解析后的事件消息更新,并接收网络驱动模块监测的网络连接信号,在网络故障的情况下启动双网切换;所述实时库模块提取双网信息同步模块更新后的事件消息;工作网和备用网的网络驱动模块中设有事件条目结构数组,用来实时保存最近一次接收到的直连装置上送的事件消息的条目号,双网切换时,该条目号作为直连装置开始向切换后后的网络驱动模块上送事件消息的始点。2.根据权利要求1所述的变电站监控双网切换设备,其特征在于所述更新后的事件消息为双网信息同步模块设置的事件同步队列中缓存记载解析后的事件消息。3.根据权利要求2所述的变电站监控双网切换设备,其特征在于所述双网信息同步模块将从报文解析模块接收到的解析后事件消息与事件同步队列中的缓存事件消息进行匹配、过滤,将新增事件添加到事件同步队列。4.根据权利要求3所述的变电站监控双网切换设备,其特征在于所述实时库模块提取双网信息同步模块更新后的事件消息,为读取事件同步队列中的解析后的事件消息。5.根据权利要求4所述的变电站监控双网切换设备,其特征在于所述匹配为逐条对事件消息的状态值、时标及数据品质对比。6.根据权利要求5所述的变电站监控双网切换设备,其特征在于所述过滤为如新增事件消息的状态值、时标及数据品质与已有消息完全一致,则视新增事件消息为重复消息,滤除。7.根据权利要求6所述的变电站监控双网切换设备,其特征在于所述双网信息同步模块30秒定时更新工作网和备用网的网络驱动模块中的事件条目结构数组一次。8.根据权利要求7所述的变电站监控双网切换设备,其特征在于所述更新网络驱动模块中的事件条目结构数组为用最近一次接收到的事件消息的条目号值刷新事件条目结构数组中直连装置报告的起始序号值。9.根据权利要求8所述的变电站监控双网切换设备,其特征在于所述工作网的网络驱动模块在工作过程中,在5秒没有接收到直连装置发送的报文,该网络驱动模块向直连装置发送心跳检测报文,如果10秒没收到直连装置的回复报文,连续发送3次,都检测到网络链接失效,网络驱动模块向双网信息同步模块报告,双网信息同步模块启动双网切换。10.根据权利要求9所述的变电站监控双网切换设备,其特征在于所述心跳检测报文频率为每10秒钟一次。全文摘要本发明公开了一种变电站监控双网切换设备,要解决的技术问题是监控服务器双网切换时不漏发,不多发数据。本发明设置的监控服务器设有实时库模块、工作网和备用网,报文解析模块与实时库模块之间设置有双网信息同步模块,供实时库模块提取更新后的事件消息,网络驱动模块中设有事件条目结构数组,保存最近的事件消息的条目号,双网切换时,作为直连装置开始向切换后的网络上送事件消息的始点。本发明与现有技术相比,双网信息同步模块对解析后的事件信息进行确认,过滤、列队后再转送到实时库模块,在发生双网切换重建连接时,网络驱动模块从事件队列最后添加的事件信息处提取报告,以此实现双网切换时不漏发,不多发数据。文档编号H02J13/00GK101710734SQ20091011012公开日2010年5月19日申请日期2009年11月6日优先权日2009年11月6日发明者李先波,李金申请人:深圳南瑞科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1