| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429 |
- #pragma once
- #ifndef ElectricKernelCalculate_YN_Node_Define_FILE
- #define ElectricKernelCalculate_YN_Node_Define_FILE
- #define double_Zero_Offszie 0.000001 //入岔区间的偏移值
- #define R_Rate_ContactLine 0.000028 //接触线的电阻率
- #define R_Rate_RailWay 0.0000137 //轨道的电阻率
- #define R_Rate_FeedBack 0.0000213 //馈线的电阻率
- #define R_Rate_RailToEarth 100000 //轨道到地的电阻率
- #define Max_NodeRelationNums 5 //最大节点关系数目
- #include <vector>
- #include <map>
- #include <mutex>
- using namespace std;
- class DcYNodeBase//直流节点类
- {
- public:
- typedef std::map<int, DcYNodeBase*> DcNodeMap;
- typedef std::map<int, double> DcRelaNodeMap;
- DcYNodeBase();;
- virtual ~DcYNodeBase();;
- virtual double GetSelfYValue();;
- virtual double GetRelaNodeYValue(int RelationNodeID);;
- virtual int GetRelaNodeRectIndex(int RelationNodeID);;
- void SetDcNodeMap(DcNodeMap* pNodeMap, std::mutex* pCritilSec);
- void SetNodeID(int ID);
- int GetNodeID();
- void SetRectIndex(int index);
- int GetRectIndex();
- int GetNodeCategory();
- void UpdateRelaNode(int oldid, int newid, double r);
- protected:
- int m_NodeID;
- int m_RectIndex; //矩阵索引
- int m_NodeCategory; //节点类型
- std::vector <int> m_v;
- DcRelaNodeMap m_RelaNodeRsMap; //关系节点
- DcNodeMap* p_DcYNodesMap; //直流侧节点
- std::mutex m_CritilSecRelaNodesMap;
- std::mutex* m_pCritilSecNodesMap;
- };
- class YN_RectierToTouchNet : public DcYNodeBase //整流器到接触网
- {
- public:
- YN_RectierToTouchNet();;
- virtual ~YN_RectierToTouchNet();;
- void SetStationID(int id);
- int GetStationID();
- bool SetTouchLineLen(double lenUpPre, double lenDownPre, double lenUpNext, double lenDownNext);
- bool SetUpPreNode(int id, double len);
- bool SetDownPreNode(int id, double len);
- bool SetUpNextNode(int id, double len);
- bool SetDownNextNode(int id, double len);
- void SetInnerNode(int id, double r);
- int GetUpPreNodeID();
- int GetDownPreNodeID();
- int GetUpNextNodeID();
- int GetDownNextNodeID();
- int GetInnerNodeID();
- double GetUpPreNodeLen();
- double GetDownPreNodeLen();
- double GetUpNextNodeLen();
- double GetDownNextNodeLen();
- protected:
- double Len_UpPreLine;
- double Len_DownPreLine;
- double Len_UpNextLine;
- double Len_DownNextLine;
- double Len_UpPreNode;
- double Len_DownPreNode;
- double Len_UpNextNode;
- double Len_DownNextNode;
- int UpPreNodeID;
- int DownPreNodeID;
- int UpNextNodeID;
- int DownNextNodeID;
- int InnerNodeID;
- int StationID;
- private:
- };
- class YN_RectierToRailway : public DcYNodeBase// 整流器轨道节点类
- {
- public:
- YN_RectierToRailway();;
- virtual ~YN_RectierToRailway();;
- void SetStationID(int id);
- int GetStationID();
- bool SetFeedBackLineLen(double lenPre, double lenNext);
- bool SetUpNode(int id, double len);
- bool SetDownNode(int id, double len);
- void SetInnerNode(int id, double r);
- int GetDownNode();
- int GetUpNode();
- protected:
- double Len_PreFeedBackLine; //前一节点回流线的长度
- double Len_NextFeedBackLine; //下一节点回流线的长度
- int UpNodeID; //上行节点ID
- int DownNodeID; //下行节点ID
- int InnerNodeID; //内节点ID
- int StationID; //车站ID
- private:
- };
- class YN_Railway : public DcYNodeBase//轨道节点类
- {
- public:
- YN_Railway();;
- virtual ~YN_Railway();;
- void SetStationID(int id);
- int GetStationID();
- virtual double GetSelfYValue();;
- bool SetFeedBackLineLen(double len);
- bool SetPreNode(int id, double len);
- bool SetNextNode(int id, double len);
- bool SetRectierNode(int id, double len);
- protected:
- double Len_RectierFeedBackLine; //整流器回流线的长度
- double PreY; //前一个导纳值
- double NextY; //下一个导纳值
- int PreNodeID; //前一个节点ID
- int NextNodeID; //下一个节点ID
- int RectierNodeID; //整流器节点ID
- int StationID;
- private:
- };
- class YN_HeadTail : public DcYNodeBase//头尾节点类
- {
- public:
- YN_HeadTail();;
- virtual ~YN_HeadTail();;
- virtual double GetSelfYValue();
- bool SetUpNode(int id, double len);
- bool SetDownNode(int id, double len);
- protected:
- double DownY; //下行导纳值
- int UpNodeID; //上行节点ID
- int DowntNodeID; //下行节点ID
- private:
- };
- class YN_TrianOnLine : public DcYNodeBase//列车与接触网的节点类
- {
- public:
- YN_TrianOnLine();;
- virtual ~YN_TrianOnLine();;
- bool SetPreNode(int id, double len);
- bool SetNextNode(int id, double len);
- void SetRailwayNode(int id);
- int GetPreNodeID();
- int GetNextNodeID();
- int GetRailwayNodeID();
- protected:
- int PreNodeID;
- int NextNodeID;
- int RailwayNodeID;
- private:
- };
- class YN_TrianOnRailway : public DcYNodeBase//列车与轨道的节点类
- {
- public:
- YN_TrianOnRailway();;
- virtual ~YN_TrianOnRailway();;
- bool SetPreNode(int id, double len);
- bool SetNextNode(int id, double len);
- void SetOnlineNode(int id);
- protected:
- double YPre;
- double YNext;
- int PreNodeID;
- int NextNodeID;
- int OnlineNodeID; //列车与接触网ID
- private:
- };
- typedef struct tgRelaNode //关系节点
- {
- double R; //电阻
- int NodeID; //节点ID
- bool m_IsPower; //关系节点的带电状态 xyx新增
- }RELANODE, * LPRELANODE;
- typedef struct tgPowerNodeBase //电力计算节点类
- {
- int m_NodeID; //节点ID
- int m_RectIndex; //矩阵索引
- int m_NodeCategory; //节点类型
- bool m_IsPower; //节点自身带电状态 xyx新增
- RELANODE RelaNodes[Max_NodeRelationNums]; //关系节点
- int RelationCount; //关系节点个数
- void Init(int rectindex, int id, int ncategory);
- double GetRelaNodeYValue(int RelationNodeID);;
- int GetRectIndex();;
- void UpdateRelaNode(int oldid, int newid, double r, bool power);
- int GetNodeCategory();
- void SetPower(bool power);
- bool GetPower();
- }POWERNODEBASE, * LPPOWERNODEBASE;//电力节点
- typedef struct tgRectierToTouchNet : tgPowerNodeBase//整流器接触网节点类
- {
- double Len_UpPreLine;//上行线前一段线的长度
- double Len_DownPreLine;//下行
- double Len_UpNextLine;//下一段
- double Len_DownNextLine;
- double Len_UpPreNode;
- double Len_DownPreNode;
- double Len_UpNextNode;
- double Len_DownNextNode;
- int UpPreNodeID;
- int DownPreNodeID;
- int UpNextNodeID;
- int DownNextNodeID;
- int InnerNodeID;
- int StationID;
- void UpdateRelaNodeByIndex(int index, int newid, double r, bool power);
- double GetSelfYValue();;
- bool SetTouchLineLen(double lenUpPre, double lenDownPre, double lenUpNext, double lenDownNext);
- bool SetUpPreNode(int id, double len, bool power);
- bool SetDownPreNode(int id, double len, bool power);
- bool SetUpNextNode(int id, double len, bool power);
- bool SetDownNextNode(int id, double len, bool power);
- void SetInnerNode(int id, double r, bool power);
- int GetUpPreNodeID();
- int GetDownPreNodeID();
- int GetUpNextNodeID();
- int GetDownNextNodeID();
- int GetInnerNodeID();
- double GetUpPreNodeLen();
- double GetDownPreNodeLen();
- double GetUpNextNodeLen();
- double GetDownNextNodeLen();
- }RECTIERTOTOUCHNET, * LPRECTIERTOTOUCHNET;
- typedef struct tgRectierToRailway : tgPowerNodeBase //整流器轨道电路节点类
- {
- double Len_PreFeedBackLine;//前段馈线长度 //上行回流线长度 xyx注释
- double Len_NextFeedBackLine;//下段馈线长度 //下行回流线长度 xyx注释
- int UpNodeID;
- int DownNodeID;
- int InnerNodeID;
- int StationID;
- double GetSelfYValue();;
- void SetStationID(int id);
- int GetStationID();
- bool SetFeedBackLineLen(double lenPre, double lenNext);
- bool SetUpNode(int id, double len, bool power);
- bool SetDownNode(int id, double len, bool power);
- void SetInnerNode(int id, double r, bool power);
- int GetDownNode();
- int GetUpNode();
- }RECTIERTORAILWAY, * LPRECTIERTORAILWAY;
- typedef struct tgRailway : tgPowerNodeBase//轨道节点类,继承于tgPowerNodeBase结构体
- {
- double Len_FeBackLine;
- double PreY; //当前轨道节点前侧(左侧)对地导纳 xyx注释
- double NextY; //当前轨道节点后侧(右侧)对地导纳 xyx注释
- int PreNodeID;
- int NextNodeID;
- int RectierNodeID; //与当前轨道节点相关联的节点 xyx注释
- int StationID;
- double GetSelfYValue();;
- void SetStationID(int id);
- int GetStationID();
- bool SetFeedBackLineLen(double len);
- bool SetPreNode(int id, double len, bool power);
- bool SetNextNode(int id, double len, bool power);
- bool SetRectierNode(int id, double len, bool power);
- }RAILWAY, * LPRAILWAY;
- typedef struct tgHeadTail : tgPowerNodeBase //头尾节点类
- {
- double DownY;
- int DowntNodeID;
- double GetSelfYValue();;
- /*bool SetUpNode(int id,double len)
- {
- if (len<=0)
- {
- return false;
- }
- double r = len*R_Rate_ContactLine;
- UpdateRelaNode(UpNodeID,id,r);
- UpNodeID =id;
-
- return true;
- }*/
- bool SetDownNode(int id, double len, bool power);
- }HEADTAIL, * LPHEADTAIL;
- typedef struct tgTRIANONLINE : tgPowerNodeBase //列车与接触网线的节点类 //当前列车的受电弓节点 xyx注释
- {
- int PreNodeID;//前一节点ID
- int NextNodeID;//下一节点ID
- int RailwayNodeID;//轨道节点ID //当前列车:与受电弓节点对应的轮对节点 xyx注释
- int TrianNO;//列车编号
- int LineSectionNo;//线路区域编号
- double excursion;//偏移精度
- int arrow;//方向
- double PowerRate;//功率
- double GetSelfYValue();;
- bool SetPreNode(int id, double len, bool power);
- bool SetNextNode(int id, double len, bool power);
- void SetTrianInfo(int no, int lineno, double ex, int arrow);
- void SetRailwayNode(int id);
- int GetPreNodeID();
- int GetNextNodeID();
- int GetRailwayNodeID();
- }TRIANONLINE, * LPTRIANONLINE;
- typedef struct tgTrianOnRailway : tgPowerNodeBase //列车与轨道的节点类
- {
- double YPre;
- double YNext;
- int PreNodeID;
- int NextNodeID;
- int OnlineNodeID;
- double PowerRate;
- double GetSelfYValue();;
- bool SetPreNode(int id, double len, bool power);
- bool SetNextNode(int id, double len, bool power);
- void SetOnlineNode(int id);
- int GetOnlineNodeID();
- }TRIANONRAILWAY, * LPTRIANONRAILWAY;//列车在轨道上
- typedef struct tgPowerNode //电力节点 //OCC交互数据表使用的结构???????????
- {
- enum class NodeType {
- eDc_NodeKind_Unknow = 0,
- eDc_NodeKind_HeadTail = 1,
- eDc_NodeKind_RectierToTouchNet = 2, //新定义命令
- eDc_NodeKind_RectierToRailWay = 3, //设备状态更新
- eDc_NodeKind_RailWay = 4,
- eDc_NodeKind_UpTrain = 5, //新定义命令
- eDc_NodeKind_DownTrain = 6, //设备状态更新
- };
- NodeType nodeType; //节点类型
- int NodeID; //节点ID
- double m_NodeV; //节点电压
- union
- {
- RECTIERTOTOUCHNET RectierToTouchNetNode; //整流器到接触网节点
- RECTIERTORAILWAY RectierToRailwayNode; //整流器到轨道节点
- RAILWAY RailWayNode; //轨道节点
- HEADTAIL HeadTailNode; //头尾节点
- TRIANONLINE TrianOnLineNode; //列车与接触网节点
- TRIANONRAILWAY TrianOnRailway; //列车与轨道节点
- };
- tgPowerNode();
- int GetRectIndex();
- void setRectierToTouchNet(const RECTIERTOTOUCHNET* paraNode);
- void setRectierToRailway(const RECTIERTORAILWAY* paraNode);
- void setRailway(const RAILWAY* paraNode);
- void setHeadTail(const HEADTAIL* paraNode);
- void setTrianOnLine(const TRIANONLINE* paraNode);
- void setTrianOnRailway(const TRIANONRAILWAY* paraNode);
- }POWERNODE, * LPPOWERNODE;
- #endif
|