#pragma once #include "ElectricEqpmt_SwicthEqpmt.h" #include "ElectricEqpmt_PowerBolt.h" class ElectricEqpmt_Breaker : //断路器 public CElectricEqpmt_SwicthEqpmt { public: ElectricEqpmt_Breaker(); virtual ~ElectricEqpmt_Breaker(){}; virtual void CalculateValue(double inputv,double inputI,ELEEQPMTMAP* PEqpmtMap); virtual bool handle_checkprotect(int eventOper,ELEEQPMTMAP& eqpmtmap,int errorid,int protectid); virtual bool handle_delaytime(time_t& time, map& eqpmtmap, const DelayTimeInfo& delayparm); virtual bool CheckProtect(ELEEQPMTMAP& ElectricEqpmtMap,int errorid,int protectid,bool bAutoRelation = true ); virtual void SetRemoteLock(ELEEQPMTMAP& ElectricEqpmtMap,int status,int ctrlArea,int lockType); virtual void CancleRemoteLock(ELEEQPMTMAP& ElectricEqpmtMap,int status,int ctrlArea); virtual void SetCommunicationStatus(map& ElectricEqpmtMap); virtual void CancleCommunicationStatus(map& ElectricEqpmtMap); int CheckAutoUnionStatus(int errorid,ELEEQPMTMAP& ElectricEqpmtMap, const ProtectValue& protectValue, bool bAutoRelation = true ); bool AddProtectRelation(ProtectValue& protect); //增加保护关系 void SetRepeatShut(int shutstatus); //设置重合闸 int GetActiveProtectID(); //获取主保护ID int EqpmtAutoBreak(ELEEQPMTMAP& ElectricEqpmtMap,const ProtectValue& protectValue, bool bAutoRelation = true ); //设备自断 ElectricEqpmt_PowerBolt* GetBoltInShut(ELEEQPMTMAP& eqpmtmap); //获取合闸的备自投设备 ElectricEqpmt_PowerBolt* GetBoltInOff(ELEEQPMTMAP& eqpmtmap); //获取分闸的备自投设备 /* 故障发生时联跳设备处理方法 Add By XYX 2017 12 21 */ virtual bool CheckTripping( ELEEQPMTMAP& ElectricEqpmtMap, const ProtectValue& protectValue ); /* 判断断路器当前是否故障 */ bool IsFault(); /* 联跳设备故障恢复:解除锁闭状态 */ void UnLockTrippingEqpmt( ELEEQPMTMAP& ElectricEqpmtMap ); virtual void EqpmtCtrl(int status,ELEEQPMTMAP& ElectricEqpmtMap,string Stdid,int CtrlType, int nMark = 0); /* 检查出线设备是否需要断开:手动分闸时调用 */ void CheckOutLineElectricEqpmt( ELEEQPMTMAP& ElectricEqpmtMap, int nMark /*= 0*/ ); /* 35KV出线设备自断逻辑处理 */ void PowerCutOutLineElectricEqpmt_35KV( ELEEQPMTMAP& ElectricEqpmtMap, const string& strOutLineElectricEqpmtStrID ); /* 400V出线设备自断逻辑处理 */ void PowerCutOutLineElectricEqpmt_400V( ELEEQPMTMAP& ElectricEqpmtMap, const string& strOutLineElectricEqpmtStrID ); /* 400V出线设备自断 */ void PowerCutCurElectricEqpmt_400V( ELEEQPMTMAP& ElectricEqpmtMap ); /* 35KV目联是否投入 */ bool BoltPowerIn_35KV( ELEEQPMTMAP& ElectricEqpmtMap, const string& strOutLineElectricEqpmtStrID ); /* 目联备自投要特殊处理 */ //virtual int CheckEqpmtCtrlCase(int status,ELEEQPMTMAP& ElectricEqpmtMap,int stdid,int subsysid,int trianid,int stationid,int viewid); virtual bool PowerCut(ELEEQPMTMAP& eqpmtmap,string sourceid,int offcase); virtual bool PowerLost(ELEEQPMTMAP& eqpmtmap,string sourceid,int offcase); virtual bool PowerIn(ELEEQPMTMAP& eqpmtmap,string sourceid); private: std::vector SettingProtects; int ActiveProtectIndex; //主保护索引 //string BreakHandleID; //断路器手车ID /* string AutoBoltID;*/ //备自投ID int RepeatShut; //重合闸 int64_t RepeatShutST; //重合闸开始时间 int64_t LastShutST; //最后一次重合闸的时间 /* 重合闸执行次数及时间间隔 */ static map mapBreakerDelayTime; int RepeatShutIndex; static map m_mapCheckedEqpmtStrID; public: /* 根据项目不同设置重合闸执行次数以及时间间隔 ADD BY XYX 2017-12-27 */ static void AddRepeatShut( int nEqpmtType, int nIndex, int nDelayTime, int nOneTime ); int GetAllRepeatShutTime( ); int GetDelayTime( int nIndex ); int GetOneTime(); int GetCurIndexDelayTime(); void ResetRepeatShutIndex() { RepeatShutIndex = 1; } void MoveNextRepeatShutIndex() { RepeatShutIndex++; } int GetRepeatShutIndex() { return RepeatShutIndex; } private: string m_strBreakHandleID; //断路器手车ID public: void SetBreakHandID(string id) //设置断路器手车 { m_strBreakHandleID=id; } string GetBreakHandleID() //获取断路器手车 { return m_strBreakHandleID; } };