| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- #pragma once
- //#pragma comment(lib,"SubSysDispatch.lib")
- #include "BaseDispatch.h"
- #include "BaseDataStructDefine.h"
- #include "ElectricDataBaseManger.h"
- #include "PowerEventDeal.h"
- #include "ACSysMG.h"
- #include "DCSysMG.h"
- //#include "ElectricEqpmt_Line_TouchNet.h"
- #include <condition_variable>
- #include <mutex>
- #include <chrono>
- //#include <optional>
- // 定义 INFINITE 常量
- //constexpr uint32_t INFINITE = 0xFFFFFFFF;
- class ElcEvent
- {
- public:
- ElcEvent(bool manualReset = false, bool initialState = false)
- : m_manualReset(manualReset), m_signaled(initialState) {}
- void SetElcEvent()
- {
- std::unique_lock<std::mutex> lock(m_mutex);
- m_signaled = true;
- if (m_manualReset)
- {
- m_condition.notify_all();
- }
- else
- {
- m_condition.notify_one();
- }
- }
- void ResetElcEvent()
- {
- std::unique_lock<std::mutex> lock(m_mutex);
- m_signaled = false;
- }
- bool WaitElcEvent(uint32_t timeoutMs = 0xFFFFFFFF)
- {
- std::unique_lock<std::mutex> lock(m_mutex);
- if (timeoutMs == 0xFFFFFFFF)
- {
- m_condition.wait(lock, [this] { return m_signaled; });
- if (!m_manualReset)
- {
- m_signaled = false;
- }
- return true;
- }
- else
- {
- auto status = m_condition.wait_for(lock,
- std::chrono::milliseconds(timeoutMs),
- [this] { return m_signaled; });
- if (status && !m_manualReset)
- {
- m_signaled = false;
- }
- return status;
- }
- }
- private:
- bool m_manualReset;
- bool m_signaled;
- std::mutex m_mutex;
- std::condition_variable m_condition;
- };
- static ELECSTATIONMAP m_MI_powerstation; //变电站相关信息
- class ElectricityVOC : public CBaseDispatch //电调主类
- {
- public:
- ElectricityVOC(void);
- public:
- virtual~ElectricityVOC(void);
- virtual BOOL InitInstance();
- virtual int ExitInstance();
- //////////////////////////////////////////////////////////////////////////
- // 重要事件处理辅助函数
- // 返回true表示需要默认函数继续处理
- virtual bool EventF1Ass(NORMALCMDC&NCmd); //?函数的功能
- //////////////////////////////////////////////////////////////////////////
- // 普通事件处理辅助函数
- // 返回true表示需要默认函数继续处理
- virtual bool EventF2Ass(NORMALCMDC&NCmd); //?函数的功能
- //////////////////////////////////////////////////////////////////////////
- // 事件发起辅助函数
- // 返回true表示需要重设时间
- virtual bool EventBeginAss(const time_t &time, const time_t &lpTimeSpan);//?函数的功能
- //////////////////////////////////////////////////////////////////////////
- // 对象计算辅助函数
- // 返回true表示需要重设时间
- virtual bool ObjectCPAss(const time_t &time, const time_t &lpTimeSpan); //?此函数的功能和作用
-
-
- virtual bool InitSubSysDBDate(int courseid,int parm1,int parm2,InitCourInfo* curseinfo);//?此函数的功能和作用 InitSubSysDBDate(int courseid,int parm1,int parm2,InitCourInfo* curseinfo);
- virtual bool GetInteractiveCmds(bool flag);
- bool InitPowerStationData();
- bool AddStationToPointList();
- bool PublishData();
- void ElcTrackInfo_2_XD();//由于算法改变厦门未重做数据,造成全线停电不停车,将数据发布部分代码提出特殊处理 add by chenht 2020 0723
- void SendNetMsg(OCCCOMMAND& msg);
- void CheckTrainAccident(DCSysTrain& train);
- void UpdateACPowerLineStatus_Init(); //计算前更新交流侧支路初始状态
- void UpdateNodeStatus_Init(); //计算前更新交流侧节点初始状态
- void UpdateEqpmtPowerValue(); //更新设备的电量值 xyx新增
- virtual bool StartTask(int& ret);
- virtual bool StopTask(int& ret);
- virtual bool PauseTask(int& ret);
- virtual bool ResumeTask(int& ret);
- void InitDDRunLineID();
- bool InitDDServerConfig();
- bool InitBaseEqpmtDefineInfo();
- //void SendControlPermission();
- //************************************
- // 函数名称: ModeControlDeal
- // 函数功能: 模式控制处理
- // 函数类型: public
- // 返 回 值: void
- // 参数1说明: int nModeID 模式ID
- // 参数2说明: int nModeStatus 模式执行状态:开始、运行、暂停、继续、完成等
- // 作 者: xyx新增
- // 日 期: 2019/8/14
- // 修改记录:
- //************************************
- void ModeControlDeal(int nModeID, int nModeStatus);
- public:
- int64_t m_RunTime; //训练已运行时间,仿真时间,以int64为单位
- int64_t m_RunBeginTime; //训练开始时间,物理时间,以int64为单位
- int64_t m_TrainBeginTime; //训练初始时间,仿真时间,以秒为单位
- int64_t m_LastRunTime;
- int64_t m_CurTime; //当前时间,物理时间,以int64为单位
- protected:
- ElectricDataBaseManger m_DataBaseManger; //数据管理
- PowerEventDeal m_ElectricEvent; //电力故障
- DCSysMG *m_DcSysMG; //直流侧相关信息
- ACSysMG *m_AcSysMG; //交流侧相关信息
- ELEEQPMTMAP ElectricEqpmtMap; //电力设备相关信息
- //ELECSTATIONMAP m_MI_powerstation; //变电站相关信息
- std::recursive_mutex EqpmtMapCriticalSection;//设备互斥对象
- DCNodePQValue *PQValuesArray;//PQ节点数据
- MULTIMODEMAP m_MultiModeMap; //多组模式信息
- MODEDATAMAP m_ModeDataMap; //模式信息表
-
- MODEIDDATAMAP m_ModeIDDataMap; //模式ID映射信息表
- ELEEQPMTMAP m_mapPowerValueUpdateEqpmt; //需要更新电气参数的设备 xyx新增
- EQPMTTELEINFO m_mapEqpmtTelemetryInfo; // 设备遥测量波动相关信息
- public:
- TrackRelationXDMAP m_TrackRelationXDMap;
- BaseElectricEqpmt* m_pBaseElcEqpmt;
- bool m_ObjectPowerThreadOut; //设备电气量更新线程最后一个参数:退出线程 xyx新增
- static ELCEQPMTALARMINFOMAP m_ElcEqpmtAlarmInfoMap; //电调报警信息配置信息 xyx新增
- static ELCTOENVRELAINFOSTATIONMAP m_ElcToEnvRelaInfoStationInfoMap;
- public:
- void setDBP(YD_DBOperator* pDB, CFrameTool_I* pFrameTool)
- {
- m_pFrmTool = pFrameTool;
- m_pDataBaseOper = pDB;
- }
- void SetElectricEqpmtMap(ELEEQPMTMAP Elceqpmtmap)
- {
- ElectricEqpmtMap = Elceqpmtmap;
- }
- ELEEQPMTMAP* getElectricEqpmtMap()
- {
- return &ElectricEqpmtMap;
- }
- void SetPowerValueUpdateEqpmt(ELEEQPMTMAP *Elceqpmtmap); //设置需要更新电气参数的设备
- void SendIniCmd();
- //IBP接收事件
- void DealWith_IBPEvent( int nIBPSysID, int nCmdType, int nParam1, int nParam2,int nParam3, int nParam4, int nParam5, string& strParam1, string& strParam2, string& strParam3, string& strParam4, string& strParam5,int nStationID=0 );
-
- };
|