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

文档序号:7688342阅读:237来源:国知局
专利名称:变电站监控双机的切换设备的制作方法
技术领域
本发明涉及一种电力系统的监控设备,特别是一种变电站的监控设备。 技术背景在变电站双服务器主备监控模式中,主、备用服务器双机切换是一个非常 重要的问题。常规方式下,如果在主机状态下收到很多现场设备发送上来的信 息还没有来得及显示和存盘的情况下就切换为备机,那么就会丢失信息,而且 在服务器的几个层次都可能导致信息的丢失。如图1所示,现有技术的主、备 用服务器分别釆用网络驱动模块经报文解析模块与实时库模块连接,主、备用 服务器的网络驱动模块与直连装置连接的结构,下面分析信息处理所经过的几 个模块,并分析各个模块中可能丢失信息的环节。1)网络驱动模块,按目前的常规方法只有主机才建立与直连装置或前置机 的连接。当主机收到直连装置的报文尚未处理就切换到备用服务器时,保存在 网卡缓冲区中的信息就会丢失。对于直连装置,采用103报文,由于服务器尚未解析报文,不会给直连装置 确认,当其与备用服务器连接时会重发信息报文,所以在这一层次不会丢失信息。前置机一般采用104规约,除保护信息外的其它信息,如遥信变位、信息 顺序记录都没有重发机制,如果此时发生切换,在这一模块未处理完毕的遥信 变位和信息顺序记录就会丢失。2)报文解析模块,报文解析模块解析网络驱动模块收到的报文,将信息存 储在其数据库中并发送给实时库模块(实时数据库)。报文解析模块必须在信息 己经发送到实时数据库之后才能给直连装置发送确认报文,这样切换后没有来 得及处理的报文,直连装置会向备用服务器重发。3)实时数据库,实时数据库中的数据来源是报文解析模块产生的报文队列 数据,现有处理方式下,当服务器由主机切换为备机时,没有存储的信息会发 生丢失。从以上分析中可以看出,在现有技术处理模式下,双机切换时丢失数据是 必然的。其根本的原因是, 一旦主机切换为备机,各个模块的工作均陷入停滞状态。发明内容本发明的目的是提供一种变电站监控双机的切换设备,要解决的技术问题 是主、备用服务器双机切换时避免丢失数据。本发明采用以下技术方案 一种变电站监控双机的切换设备,设有主服务 器、备用服务器,主服务器的网络驱动模块经其报文解析模块与其实时库模块 连接,备用服务器的网络驱动模块经其报文解析模块与其实时库模块连接,主 服务器与备用服务器的网络驱动模块与直连装置连接,所述主服务器与备用服 务器分别设置有信息分发模块,信息分发模块与实时库模块连接,主服务器的 信息分发模块与备用服务器的信息分发模块连接。本发明主服务器的信息分发模块设置有数据发送队列装置和确认装置,备 用服务器的信息分发模块设置有数据发送队列装置和确认装置。本发明主服务器的网络驱动模块将从连接装置收到的报文,经报文解析模 块解析后存储在实时库模块。本发明的备用服务器不接受连接装置的报文。本发明的主服务器与备用服务器切换时,主服务器的实时库模块将网络驱 动模块接收后还没有存入实时库模块的未存储信息,经主服务器的数据发送队 列装置、备用服务器的确认装置,送入备用服务器的实时裤模块存储。本发明的备用服务器的实时裤模块收到未存储信息后,备用服务器的确认 装置向主服务器的数据发送队列装置发送确认信息,主服务器的数据发送队列 装置收到确认信息后,删除主服务器的数据发送队列装置中的未存储信息。本发明的主服务器与备用服务器切换后,原主服务器切换为备用服务器, 原备用服务器切换为主服务器。本发明切换后的主服务器的网络驱动模块将从连接装置收到的报文,经报 文解析模块解析后存储在实时库模块。本发明的切换后的备用服务器不接受连接装置的报文。本发明与现有技术相比,从涉及信息分发模块和实时数据库入手解决问题, 在信息分发模块建立确认机制,即对来自装置的信息(非来自对侧服务器的信 息),在分发前先缓存,且不论本机是主服还是备服都对其进行分发,只是备服 只分发到主服,主服除了分发到备服外还要分发到各个客户端,当服务器收到 对侧新信息时,向其发送确认报文,对侧服务器收到确认报文时,删除对应的 缓存信息。


图1是现有技术的模块结构图。图2是本发明实施例的模块结构图。图3是本发明实施例的信息分发模块结构图。
具体实施方式
下面结合附图和实施例对本发明作进一步详细说明。如图2所示,本发明 的变电站监控双机的切换设备,设有主服务器、备用服务器,主服务器的网络 驱动模块经报文解析模块、实时库模块与信息分发模块连接,备用服务器的网 络驱动模块经报文解析模块、实时库模块与信息分发模块连接,主服务器与备 用服务器的信息分发模块连接,主服务器与备用服务器的网络驱动模块分别与 直连装置连接。主服务器的网络驱动模块将从连接装置收到的报文,经报文解 析模块解析后存储在实时库模块。备用服务器不接受连接装置的报文。如图3所示,主服务器与备用服务器的信息分发模块设置有数据发送队列 装置和确认装置,主服务器的数据发送队列装置与备用服务器的确认装置连接, 备用服务器的数据发送队列装置与主服务器的确认装置连接。主服务器与备用 服务器切换时,主服务器的实时库模块将网络驱动模块接收后还没有存入实时 库模块的未存储信息,经主服务器的数据发送队列装置、备用服务器的确认装 置,送入备用服务器的实时裤模块存储。备用服务器的实时裤模块收到未存储 信息后,备用服务器的确认装置向主服务器的数据发送队列装置发送确认信息, 主服务器的数据发送队列装置收到确认信息后,删除主服务器的数据发送队列 装置中的未存储信息。主服务器与备用服务器切换后,原主服务器切换为备用服务器,原备用服 务器切换为主服务器。切换后的主服务器的网络驱动模块将从连接装置收到的 报文,经报文解析模块解析后存储在实时库模块,切换后的备用服务器不接受 连接装置的报文。本发明的变电站监控双机的切换设备,确认装置设置有缓存信息接口和删 除信息接口 。实时库模块具有存储和传送数据信息的功能。下面以雪崩试验过程中主、备用服务器切换来说明信息处理过程雪崩试 验在切换前开始,在切换后才结束。一、 切换前的处理1. 主服务器的网络驱动模块开始从直连装置接收报文;备用服务器不与直连装 置通讯。2. 主服务器网络驱动模块收到的报文,在报文解析模块解析。3. 主服务器实时库模块读取报文解析模块产生解析完成的保护事件、自检等信 息,并调用实时库模块的实际管理子模块CEventMng中的AddEvent()添加事件接口。4. 主服务器的信息分发模块将保护事件、自检等信息缓存到数据发送队列装置 中。5. 主服务器实时库模块保存保护事件、自检等信息到安装在同一台机器上的物 理数据库中。6. 主服务器的数据发送队列装置向备用服务器的确认装置发送保护事件、自检 等信息,备用服务器信息分发模块对收到的保护事件、自检等信息首先添加 到实时库模块,以备机角色解析主服务器信息分发模块分发到的报文。7. 备用服务器的确认装置向主服务器数据发送队列装置发送确认报文,主服务 器数据发送队列装置收到备用服务器确认报文后删除保护事件、自检等信息"f曰息。二、 切换中的处理1. 主服务器网络驱动模块收到人机界面HMI的主、备用服务器切换命令。2. 主服务器切换为备用服务器,切换前的主服务器关闭网络驱动相关线程,清 空数据发送队列装置里的报文队列,关闭与原备用服务器和HMI的网络套接字Socket,接着启动备用服务器网络驱动相关线程,尝试与切换后的主服 务器建立网络连接以取得联系。3. 备用服务器在几秒钟后切换为主服务器,切换后的主服务器的网络驱动模块 关闭相关线程,清空备用服务器信息分发模块的缓存装置里的报文队列,关 闭与原备用服务器网络套接字Socket,接着启动切换后的主服务器相关线程, 切换后的主服务器开始通过网络侦听切换后的备用服务器连接请求。4. 切换前的主服务器的报文解析模块从直连装置收到的保护事件、自检等信息 继续保存,添加到实时库模块,但不向备用服务器分发,由信息分发模块发 送至当前主服务器信息分发模块,直至收到当前主服务器信息分发模块的确 认,如果信息分发模块重发10次无响应,切换前的主服务器将保护事件、 自检等信息保存到物理数据库的差异表,同时信息分发模块清除对应的信 息。5. 切换后的主服务器信息分发模块持续处理来自切换前的主服务器的同步保 护事件、自检等信息,并向切换前的主服务器信息分发模块发送确认报文。6. 切换后的主服务器信息分发模块连续3秒未收到来自切换前的主服务器信息 分发模块的保护自检、事件等信息,才认为已处理完毕切换前的主服务器信 息分发模块中的信息。7. 切换后的主服务器实时库模块开始处理报文解析模块从直连装置产生的保 护事件、自检等信息。三、切换后的处理切换后备用服务器为主服务器,主服务器为备用服务器°实施例l:本发明的变电站监控双机的切换设备,主服务器、备用服务器硬件采用DELL公司745型号主机,主控软件系统采用ISA主服务器300+ 2. 90,采用VC++6. 0程序语言实现。主服务器实时库模块将收到的报文数据发送队列装置进行排列命令BOOL CEventMng::ACK一RlyEventData(CRelaySOELog承 pData,BOOL bLocal)BOOL bRes = FALSE; Lock();CRelaySOELog* pEventTmp;int nSize=m_RlyEventArray.GetSize();for(int i = 0; i < nSize; i++)pEventTmp = m_RlyEventArray.GetAt(i);if((pData->EventTime == pEventTmp->EventTime)&&(pData->wFronterAliaID == pEventTmp->wFronterAliaID) &&(pData->UnitID = pEventTmp->UnitID;> &&(pData->EventS^ID == pEventTmp國〉EventSeqlD) &&(pData->EventPointID == pEventTmp-〉EventPointlD;) &&(pData->FaultID == pEventTmp-〉FaultlD) &&(pData->Fault Value = pEventTmp->FaultValue) &&(pData->DoSum == pEventTmp->DoSum》bRes = TRUE;pEventTmp->bAcked = TRUE;Updateln一RelaySoe(pEventTmp,bLocal); break;return bRes;主服务器实时库模块将收到的信息放入信息分发模块命令void CSyncEventWithScada::AddEvent(const char* pEvent, int nEventType: bool blsAck)if(!bDualServer)return; charch[512];tagEventCtrl *pFrameCtrl = new tagEventCtrl; memset(pFrameCtrl, 0, sizeof(tagEventCtrl)); pFrameCtrl國〉theEvent.blsAck = blsAck; pFrameCtrl->theEvent.nEventType = nEventType; memcpy(pFrameCtrl->theEvent.byBuff,pEvent, CPubFuns::GetEventSize(nEventType)); pFrameCtrl->nCount = 0;CSingleLock lock(&m_mutex);lock丄ock(); if(lock.IsLocked())〃m—lstSendFrameCtrl.push_back(frameCtrl);CString strKey = FormMapKey(pEvent, nEventType, blsAck);m—mapSendFrameCtrl.SetAt(strKey, pFrameCtrl);lock.Unlock();CPubFuns::GetEventTypeName(nEventType).c一str(), CPubFuns: :GetEventLocalID(pEvent, nEventType), CPubFuns: :GetEventInfo(pEvent, nEventType));备用服务器确认装置向主服务器数据发送队列装置发送确认报文的命令bool CSyncEventWithScada::SendResponsedSyncEvent(const char* pEvent, int nEventType, bool blsAck)m一nSyncWaitCount = 0;charch[512];sprintf(ch,"发送事件确认报文(SYNC_FUNC: %s, LocalID=%d\n详细信 息%s)",CPubFuns::GetEventTypeName(nEventType).c—str(), CPubFuns: :GetEventLocalID(pEvent, nEventType),CPubFuns: :GetEventlnfo(pEvent, nEventType)); 〃CPubFuns: :DebugMsg(ch);tagEvent theEvent;memset(&theEvent, 0, sizeof(tagEvent)); theEventblsAck = blsAck; theEvent.nEventType = nEventType;memcpy(theEvent.byBuff, pEvent, CPubFuns: :GetEventSize(nEventType)); return SendEvent(theEvent, true);主服务器信息分发模块收到备用服务器确认报文后,删除对应的信息的命令void CSyncEventWithScada::DeleteEvent(const char* pEvent, int nEventType, bool blsAck)charch[512];sprintf(ch,"准备删除同步管理队列中事件(。/。s, LocalID=%d, \n详细信息%s)",CPubFuns::GetEvent丁ypelSfame(nEventType).c一strO,CPubFuns: :GetEventLocalID(pEvent, nEventType), CPubFuns::GetEventInfo(pEvent, nEventType)); tagEventCtrl* pFrameCtrl = NULL;CSingleLock lock(&m—mutex);lock丄ock();bool bFinded = false;if(lock.IsLocked(》CString strKey = FormMapKey(pEvent, nEventType, blsAck); if(m一mapSendFrameCtrl丄ookup(strKey, (void*&)pFrameCtrl》bFinded — true; delete pFrameCtrl;m—mapSendFrameCtrl.RemoveKey(strKey); if(bFinded){ sprintf(ch,"收到对侧服务器响应,从同步管理队列中删除事件(。/。s, LocalID=%d)",CPubFuns::GetEventTypeName(nEventType).c—str(),CPubFuns: :GetEventLocalID(pEvent, nEventType));elsesprintf(ch,"删除失败,在同步管理队列中未找到对应的事件(%3, LocalID=%d)",CPubFuns::GetEventTypeName(nEventType).c一str(),CPubFuns: :GetEventLocalID(pEvent, nEventType));}}实施例2:本发明的变电站监控双机的切换设备,主服务器、备用服务器硬件采用SUN公司ULTRA45型号主机,主控软件系统采用PRS主服务器700U,采 用QT程序语言实现。主服务器信息分发模块的数据发送队列装置进行排列命令-template〈typename T>bool CSyncEventProc_Template<T>::HMI_AckEvent(const void* pData)const T& theEvent= *reinterpret_cast<const T*>(pData); BOOL bRes = false;m一Lock丄ock();typename QValueList<T>:: iterator pos = FindEventPos(theEvent); if(pos != m_EventList.end(》T& theEvent = *pos;theEvent.bAcked = true;15charch[100];sprintf(ch, "LocalID=%d and RemoteID = %d", theEvent丄ocalID, theEvent.RemoteID);CScadaMaster::Instance().m_pEventMng->m_pSaveEventToDB->AckEvent(m—nEv entType, ch);CScadaMaster::Instance().m_pInterface_P4->AddEventForScadaSync(pData, m—nEventType, true》if(::IsMain(》CScadaMaster::Instance().m_pInterface—P4->NetSendEvent(pData, m—nEventType, —SEND—TYPE—ACK);bRes — true jm—Lock.UnLock();return bRes;主服务器实时库模块将收到的信息放入信息分发模块命令 template<typename T>bool CRawEventProc_Template<T>::AddEvent(const void* p)if(m—EventList.size() >= MAXCOUNT—RAW—EVENT) char ch[500];sprintf(ch,"警告添加生事件Os)时数量达到上限(。/。d)",libRTDB: :CPubFuns: :GetEventTypeName(m一nEventType).c—str(), MAXCOUNT—RAW—EVENT);CPubFuns: :DebugMsg(ch);elseconst T& theEvent = *reinterpret_cast<const T*>(p); m_EventList,push—back(theEvent);m—Lock.UnLock(); return true;备用服务器确认装置向主服务器数据发送队列装置发送确认报文的命令: template〈typename T>bool CSyncEventProC-Template<T>::HMI—AckEvent(const void* pData)const T& theEvent= *reinterpret—cast〈const T*>(pData); BOOL bRes = false;m—Lock丄ock();typename QValueList<T>::iterator pos = FindEventPos(theEvent); if(pos != m一EventList.end())T& theEvent = *pos;theEvent.bAcked = true; charch[画];sprintf(ch, "LocalID=%d and RemoteID = %d", theEvent丄ocalID: theEvent.RemoteID);CScadaMaster::Instance().m_pEventMng->m_pSaveEventToDB->AckEvent(m_nEv entType, ch》if(::画ain())〃服务器为主时才将确认事件加入到同步缓存中CScadaMaster::Instance().m_pInterface—P4->AddEventForScadaSync(pData, m_nEventType, true》CScadaMaster::Instance().m_pInterface_P4->NetSendEvent(pData, m—nEventType, —SEND—TYPE—ACK);bRes — true;m—Lock.UnLock();return bRes;主服务器信息分发模块收到备用服务器确认报文后,删除对应的信息的命令bool CSyncEvervtProc—Template〈T〉Delete—Event(const void氺pData)const T& theEvent=氺reinterpret一cast〈const T氺〉(pData); BOOL bRes = FALSE;m一Lock. Lock 0 ;typename QValueList<T>::iterator pos;for(pos=m—EventList. begin () ; pos!二m一EventList. end() ; ++pos) if(libRTDB::CPubFuns::IsEqual(theEvent, *pos))m一EventList. erase(pos); break;m_Lock. Unlock ();return bRes;
权利要求
1. 一种变电站监控双机的切换设备,设有主服务器、备用服务器,主服务器的网络驱动模块经其报文解析模块与其实时库模块连接,备用服务器的网络驱动模块经其报文解析模块与其实时库模块连接,主服务器与备用服务器的网络驱动模块与直连装置连接,其特征在于所述主服务器与备用服务器分别设置有信息分发模块,信息分发模块与实时库模块连接,主服务器的信息分发模块与备用服务器的信息分发模块连接。
2. 根据权利要求1所述的变电站监控双机的切换设备,其特征在于所述主服 务器的信息分发模块设置有数据发送队列装置和确认装置,备用服务器的信 息分发模块设置有数据发送队列装置和确认装置。
3. 根据权利要求2所述的变电站监控双机的切换设备,其特征在于所述主服务器的网络驱动模块将从连接装置收到的报文,经报文解析模块解析后存储 在实时库模块。
4. 根据权利要求3所述的变电站监控双机的切换设备,其特征在于所述备用 服务器不接受连接装置的报文。
5. 根据权利要求4所述的变电站监控双机的切换设备,其特征在于所述主服务器与备用服务器切换时,主服务器的实时库模块将网络驱动模块接收后还 没有存入实时库模块的未存储信息,经主服务器的数据发送队列装置、备用 服务器的确认装置,送入备用服务器的实时裤模块存储。
6. 根据权利要求5所述的变电站监控双机的切换设备,其特征在于所述备用 服务器的实时裤模块收到未存储信息后,备用服务器的确认装置向主服务器 的数据发送队列装置发送确认信息,主服务器的数据发送队列装置收到确认信息后,删除主服务器的数据发送队列装置中的未存储信息。
7. 根据权利要求6所述的变电站监控双机的切换设备,其特征在于所述主服 务器与备用服务器切换后,原主服务器切换为备用服务器,原备用服务器切 换为主服务器。
8. 根据权利要求7所述的变电站监控双机的切换设备,其特征在于所述切换 后的主服务器的网络驱动模块将从连接装置收到的报文,经报文解析模块解 析后存储在实时库模块。
9. 根据权利要求8所述的变电站监控双机的切换设备,其特征在于所述切换 后的备用服务器不接受连接装置的报文。
全文摘要
本发明公开了一种变电站监控双机的切换设备,要解决的技术问题是主、备用服务器双机切换时避免丢失数据。本发明的设备设有主服务器、备用服务器,主、备服务器的网络驱动模块经其报文解析模块与其实时库模块连接,主、备用服务器的网络驱动模块与直连装置连接,所述主、备用服务器分别设置有信息分发模块,信息分发模块与实时库模块连接,主服务器的信息分发模块与备用服务器的信息分发模块连接。本发明与现有技术相比,在信息分发模块建立确认机制,即对来自装置的信息,在分发前先缓存,当服务器收到对侧新信息时,向其发送确认报文,对侧服务器收到确认报文时,删除对应的缓存信息。
文档编号H04L12/24GK101262325SQ20081006676
公开日2008年9月10日 申请日期2008年4月21日 优先权日2008年4月21日
发明者张高林, 峰 李, 李先波 申请人:深圳南瑞科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1