#ifndef OCC_PUBLIC_DEFINE_ACHEADER_FILE #define OCC_PUBLIC_DEFINE_ACHEADER_FILE #pragma once #include "ElecBaseDefine.h" #include "CalculEquation.h" #include "BaseElectricEqpmt.h" #include #include using namespace std; class ACSysMG//此类的作用 电力仿真模型交流计算模块 { public: ACSysMG(void); void UpdataTrainData(DCSysTrain *pTrain); //更新列车数据 bool AddPQNodeData(CalNode& node); //增加PQ节点数据 bool AddEqpmtData(EqpmtInfo* pEqpmt); //添加设备数据 bool CreatePQNodeMatrix(); //创建PQ节点矩阵 bool CreateYKBMatrix(); //创建雅可比矩阵 bool CalYKBMatriX(); //计算雅可比矩阵 double CalPQValue(); //计算PQ值 void CalNodePowerRate(); //计算节点功率 double CalPiValue(int i); //计算PI值 double CalQiValue(int i); //计算QI值 void CalResult(); //计算相关结果 double GetOutV(int i); //得到输出电压 void InitData(); //初始化数据 void SetYBZ(double i,double z,double y,double s,double v); //设置YBZ bool RunCalValue(); //动态计算相关电力值 void GetPQIPublishLine(std::vector& PQIList); //获取有功无功电流发布数据 void GetIPublishLine(std::vector& PQIList); //获取电流发布数据 void SetPQValueArr(DCNodePQValue PQValueArr[]); //设置PQ值数组 void GetMLVPublish(std::vector& PQIList); //获取母线发布电压值 void SetEqpmentMap(ELEEQPMTMAP *ElectricEqpmtMap) { m_pElectricEqpmtMap=ElectricEqpmtMap; } protected: typedef std::map EqpmtMap; RX **ACNodeMatrix; //交流节点 double *E; //节点电压实部 double *F; //节点电压虚部 double *P; //有功功率 double *Q; //无功功率 CalculEquation m_EquationCalcul; //方程计算对像 bool CalStatus; //计算标志位(状态) double Iac; //交流侧电流 double Zac; //交流侧阻抗 double Yac; //交流侧导纳 double Sac; //交流侧容量 double Vac; //交流侧电压 DCNodePQValue* p_PQValueArr; //直流侧PQ节点数组 //保存当前计算数值,防止析构时数值变化导致数组越界 int m_nMaxSigleArrowTrainNums; //单方向最大列车数量 int m_nAllPowerStationNums; //全线所有车站数量 public: ~ACSysMG(void); std::vector m_PQNodes; //PQ节点 EqpmtMap m_EqpmtInfoMap; //电力元件信息列表 std::mutex m_CritilSecEqpmt; //锁 ELEEQPMTMAP *m_pElectricEqpmtMap; //电力设备相关信息 typedef map DCSTATIONMAP; //直流电站表,Dc_PowerStation直流电站类 DCSTATIONMAP m_PowerStationNodeMap; //直流电站 }; #endif