/******************************************************************** 版权声明: Copyright (C),Yunda Tech.Co.,Ltd. 创 建 人: 张家华 创建时间: 2018/8/24 16:02 文件名称: ElectricEqpmt_BreakRailPotential 主要功能: 1.轨电位状态图元管理 其 他: 修改记录: *********************************************************************/ #pragma once #include "ElectricEqpmt_SwicthEqpmt.h" #include "ElectricEqpmt_PowerBolt.h" #include "ElectricEqpmt_Breaker.h" class ElectricEqpmt_BreakRailPotential : //断路器 public ElectricEqpmt_Breaker { public: ElectricEqpmt_BreakRailPotential(); virtual ~ElectricEqpmt_BreakRailPotential(){}; virtual void CalculateValue(double inputv,double inputI,ELEEQPMTMAP* PEqpmtMap); virtual bool handle_checkprotect(int eventOper,ELEEQPMTMAP& eqpmtmap,int errorid,int protectid); virtual int GetType(){return OCC_EQPMTTYPE_BreakRailPotential;} virtual bool handle_delaytime(int64_t& time,ELEEQPMTMAP& ElectricEqpmtMap,DelayTimeInfo& delayparm); virtual bool CheckProtect(ELEEQPMTMAP& ElectricEqpmtMap,int errorid,int protectid,bool bAutoRelation = true ); virtual bool PowerCut(ELEEQPMTMAP& eqpmtmap,string sourceid,int offcase); //virtual void ClearProtect(ELEEQPMTMAP& ElectricEqpmtMap,int errorid); //virtual void ClearSingleProtect(ELEEQPMTMAP& ElectricEqpmtMap,int errorid, const string& strProtecResetType = _T("")); //added by zhangjh on 2017.5.18 //virtual void SetShield(ELEEQPMTMAP& ElectricEqpmtMap); //virtual void CancleShield(ELEEQPMTMAP& ElectricEqpmtMap); virtual bool PowerIn(ELEEQPMTMAP& eqpmtmap,string sourceid); 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 SetBreakHandID(string id); //设置断路器手车 string GetBreakHandleID(); /*void SetAutoBoltID(string id) { AutoBoltID = id; } string GetAutoBoltID() { return AutoBoltID; }*/ 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, int CtrlType, int nMark = 0); 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; } };