#pragma once //准点计算类型定义 enum ONTIME_CAL_TYPE { ONTIME_CALTYPE_HSR = 1, //准点计算类型-国铁 ONTIME_CALTYPE_METRO = 2 //准点计算类型-地铁 }; //基本定义 const int MAX_LMTSP_CNT = 50; //单个区间限速个数最大值 const int MAX_POINT_CNT = 10000; //单个曲线最大记录个数 const int MAX_STRING_LENGTH = 20; //字符串最大长度 //限速数据 struct Limit_Speed { double dStartMile; //起点里程 单位:m double dEndMile; //终点里程 单位:m double dLimitSpeed; //限速值 单位:km/h Limit_Speed() { memset(this,0,sizeof(Limit_Speed));} }; //线路数据 struct TrackProfileData { char m_StrTrainName[MAX_STRING_LENGTH]; //车型名称 double nRunTime; //区间运行时分 double dLength; //当前区间长度 double dDepartureMile; //列车发车位置 double dArriveMile; //列车到达位置 double dStartSpeed; //列车发车速度 double dEndSpeed; //列车到达速度 int nLmtSpCnt; //当前区间限速个数 Limit_Speed LimitSpeed[MAX_LMTSP_CNT]; //当前区间限速数据 TrackProfileData() { memset(this,0,sizeof(TrackProfileData)); } }; struct Single_OnTime_Curve { double dRealRunTime; int nPointCnt; //输出曲线点个数 double dTime[MAX_POINT_CNT]; //时间,单位:s double dMile[MAX_POINT_CNT]; //里程(绝对距离),单位:s float fSpeed[MAX_POINT_CNT]; //速度,单位:m/s float fAcc[MAX_POINT_CNT]; //加速度,单位:m/s^2 float fMaxSpeed[MAX_POINT_CNT]; //最大速度,单位:m/s short nWorkStatus[MAX_POINT_CNT]; //工况 void Reset() { memset(this,0,sizeof(Single_OnTime_Curve)); } Single_OnTime_Curve() { Reset(); } }; class COnTime_CurvesCal_I { public: virtual ~COnTime_CurvesCal_I() {}; public: virtual BOOL Make_OnTime_Curve( TrackProfileData RoadData ) = 0; virtual void Get_OnTime_Curve( Single_OnTime_Curve& OnTimeCurve ) = 0; }; typedef void* (__stdcall *ONTIMECAL_CREATE)(int nOnTimeCalType); //创建实例 typedef void (__stdcall *ONTIMECAL_RELEASE)(LPVOID lpInstance); //删除实例