| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916 | 
							- #pragma once
 
- #include <queue>
 
- #include <string>
 
- #include<map>
 
- using namespace std;
 
- #define Nan 0x7fc00000
 
- #define INVLID_LOCATION (0)
 
- //物理量类型。
 
- //注意:不同的物理量可以有相同的单位,只是物理应用场景不同。
 
- //根据物理量类型可以确定单位
 
- enum PHYSICAL_TYPE {
 
- 	PTH_CUSTOM = 0,		//自定义类型。是一个json对象字符串
 
- 	PTH_TEMP = 1,		//温度,℃
 
- 	PTH_HUMIDITY = 2,	//湿度,RH
 
- 	PTH_PRESSURE = 3,	//压力,mPa
 
- 	PTH_ELECTRIC = 4,	//电流,mA
 
- 	PTH_VOLTAGE = 5,	//电压,V
 
- 	PTH_LIQUID = 6,		//液位,mm
 
- 	PTH_DISTANCE = 7,	//距离,mm
 
- 	PTH_DISPLACEMENT = 8,//位移,mm
 
- 	PTH_POWER = 9,       //阻力,N
 
- 	PTH_GAP = 10,        //缺口,mm
 
- 	PTH_GONGLV = 11,	//功率
 
- 	PTH_ACCELERATION = 12,//加速度
 
- 	PTH_LUX = 13,		//光强
 
- 	PTH_DISOLVED_OXYGEN = 14,//溶解氧
 
- 	PTH_GONGLV_COS = 15,//功率因数
 
- 	PTH_VIDEO = 16,//视频
 
- 	PTH_VOICE = 17,//语音
 
- 	PTH_AMOUNT = 18,//数量计数 默认个
 
- 	PTH_SPEED = 19,//速度 km/h
 
- 	PTH_LAST//始终保持在最后,用于记录类型总数
 
- };
 
- const CString PHYSICAL_TYPE_DESC[] = {
 
- 	 _TEXT("自定义"),   _TEXT("温度"),   _TEXT("湿度"),
 
- 	_TEXT("压力"),   _TEXT("电流"),   _TEXT("电压"),
 
- 	_TEXT("液位"),   _TEXT("距离"),   _TEXT("位移"),
 
- 	_TEXT("阻力"),   _TEXT("缺口"),   _TEXT("功率"),
 
- 	_TEXT("加速度"), _TEXT("光强"),	  _TEXT("溶解氧"),
 
- 	_TEXT("功率因数"), _TEXT("视频"),	  _TEXT("语音"),
 
- 	 _TEXT("计数"), _TEXT("速度")
 
- };
 
- //不取一些一般人都不认识的英文了,此枚举统一用拼音
 
- //枚举值存配置文件,不可修改,向后添加
 
- enum MONITOR_OBJ_TYPE {
 
- 	MOT_COMMON = 0,
 
- 	MOT_PROJECT = 1, //监控服务
 
- 	MOT_DaoCha = 2,//道岔
 
- 	MOT_ZZJ = 3,//转辙机
 
- 	MOT_QuDongDianLu = 4,//驱动电路
 
- 	MOT_MJQ = 5,//密检器
 
- 	MOT_STATION = 6, //站点
 
- 	
 
- 	MOT_MP_GROUP = 99,//监测点组 //这个类型后期考虑废弃了
 
- 	MOT_MP = 100,//监测点 看作某物理空间下的一个虚拟仪表 其中可进一步细分为“缺口监测点”、“阻力监测点”、“伤损指数监测点”等具体的监测点
 
- 	MOT_RAIL_GROUP = 101,//铁轨组 例如 尖轨、心轨、翼轨等等
 
- 	MOT_RAIL_PART = 102,//铁轨段 例如 尖轨下的某个区段等等
 
- 	MOT_AMO = 200,//活动监测对象
 
- 	MOT_MP_PROP = 301//监测点属性  虚拟仪表可以测量多项数据
 
- };
 
- namespace MO_TYPE {
 
- 	const string project = "project";
 
- 	const string station = "station";
 
- 	const string daocha = "daocha";
 
- 	const string zzj = "zzj";
 
- 	const string qddl = "qddl";
 
- 	const string mjq = "mjq";
 
- 	const string mp = "mp";
 
- 	const string rail_func = "rail_func";
 
- 	const string rail_part = "rail_part";
 
- 	const string mp_prop = "mp_prop";
 
- 	const string mp_group = "mp_group";
 
- };
 
- const map<string, string> MO_TYPE_DESC = {
 
- 	{MO_TYPE::project,"监控服务"},
 
- 	{MO_TYPE::station,"站点"},
 
- 	{MO_TYPE::daocha,"道岔"},
 
- 	{MO_TYPE::zzj,"转辙机"},
 
- 	{MO_TYPE::mp,"监测点"},
 
- 	{MO_TYPE::rail_func,"功能铁轨"},
 
- 	{MO_TYPE::rail_part,"铁轨区段"},
 
- 	{MO_TYPE::mp_prop,"监测点属性"},
 
- 	{MO_TYPE::mp_group,"监测点组"},
 
- 	{MO_TYPE::qddl,"驱动电路"},
 
- 	{MO_TYPE::mjq,"密检器"},
 
- 	{to_string(MOT_PROJECT), "监控服务"},
 
- 	{to_string(MOT_DaoCha), "道岔"},
 
- 	{to_string(MOT_ZZJ), "转辙机"},
 
- 	{to_string(MOT_QuDongDianLu), "驱动电路"},
 
- 	{to_string(MOT_MJQ), "密检器"},
 
- 	{to_string(MOT_STATION), "站点"},
 
- 	{to_string(MOT_MP_GROUP), "监测点组"},
 
- 	{to_string(MOT_MP), "监测点"},
 
- 	{to_string(MOT_RAIL_GROUP), "铁轨组"},
 
- 	{to_string(MOT_RAIL_PART), "铁轨段"},
 
- 	{to_string(MOT_AMO), "活动监测对象"},
 
- 	{to_string(MOT_MP_PROP), "监测点属性"},
 
- };
 
- //采集对象来自于一种采集设备,该采集设备专用于采集某一种监测对象,包含了约定的一组数据
 
- enum ACQ_OBJ_TYPE {
 
- 	AOT_UNKNOWN = 0,
 
- 	AOT_ZZJ_QDDL = 1,//驱动电路
 
- 	AOT_ZZJ_ZHENGDONG = 2,//转辙机基座振动
 
- 	AOT_ZZJ_ELECPARAM = 3,//转辙机电参数
 
- 	AOT_ZZJ_POWER = 4,//扳动阻力
 
- 	AOT_ZZJ_YY = 5,//扳动油压
 
- 	AOT_JIAYOU_PIPE_PRESSURE = 6,
 
- 	ACQ_LEFT_YOUYA = 7,//左转换油压
 
- 	ACQ_RIGHT_YOUYA = 8,//右转换油压
 
- 	ACQ_CHUAN_LEFT_YOUYA = 9,//串左转换油压
 
- 	ACQ_CHUAN_RIGHT_YOUYA = 10,//串右转换油压
 
- 	ACQ_FIRST_MOVE_PRESSURE = 11,//一动转换油压/阻力
 
- 	ACQ_SECOND_MOVE_PRESSURE = 12,//二动转换油压/阻力
 
- 	ACQ_THIRD_MOVE_PRESSURE = 13,//三动转换油压/阻力
 
- 	ACQ_CROSS_GAP = 14,//过车缺口
 
- 	ACQ_CROSS_MIETIE_GAP = 15,//过车密贴缺口
 
- 	ACQ_CROSS_CHILI_GAP = 16,//过车斥离缺口
 
- 	ACQ_CROSS_ZHENDONG = 17,//过车振动
 
- 	ACQ_MOVE_MIETIE_GAP = 18,//转换密贴缺口
 
- 	ACQ_MOVE_CHILI_GAP = 19,//转换斥离缺口
 
- 	ACQ_LOAD_OVER_UNUSUAL = 20,//负载监测过载异常曲线
 
- 	ACQ_LOAD_SHORT_UNUSUAL = 21,//负载监测短路异常曲线
 
- 	ACQ_LOAD_FIRE_UNUSUAL = 22,//负载监测打火异常曲线
 
- 	ACQ_LASTTYPE = 23,
 
- 	ACQ_MOVE_CROSS_WEIYI = 24,  //扳动过车位移曲线 跟徐嘉庆定义调试
 
- };
 
- enum DATA_ATTRIBUTE_VAL_TYPE {
 
- 	DAVT_STR,
 
- 	DAVT_FLOAT,
 
- };
 
- //应用层协议类型
 
- enum APP_LAYER_PROTO_TYPE {
 
- 	PROTOCOL_UNKNOWN = 0,
 
- 	PROTOCOL_DSP,
 
- 	PROTOCOL_JDSP,//基于json的dsp协议也可以套在dsp协议内
 
- 	PROTOCOL_315,
 
- 	PROTOCOL_JEP,
 
- 	PROTOCOL_MODBUS_RTU,
 
- 	PROTOCOL_WEIBO,
 
- 	PROTOCOL_SIMPLE_AI,//仅用于信号灯单帧协议的测试通信
 
- 	PROTOCOL_WEBSOCKET,
 
- };
 
- //数据传输类型
 
- enum class TRANSPORT_CONTROL_PROTOCOL {
 
- 	TCR_UDP = 0x00,
 
- 	TCR_TCP,
 
- };
 
- //传输层协议类型
 
- //目前包含应用层数据用Can数据包分包传输的3种方式
 
- enum TRANSFER_LAYER_PROTO_TYPE
 
- {
 
- 	TLT_UNKNOWN = 0,
 
- 	TLT_NONE,//没有传输层协议
 
- 	TLT_CAN_LSPEED,//缺口,低速载波中继
 
- 	TLT_CAN_WEIBO,//驱动电路,维博
 
- 	TLT_CAN_SIGNAL,//仅用于信号灯单帧协议的测试通信
 
- 	TLT_WEB_SOCKET,
 
- };
 
- //Can综合监测网关硬件的实现不是透传的。但软件的实现把与Can传感器的通信抽象成是通过透传网关的JEP协议通信
 
- enum COMM_GATEWAY_TYPE {
 
- 	GW_UNKNOWN = 0,
 
- 	GW_CAN_TRANSPARENT = 1,//Can透传中继,将发送给中继的数据包原样发给中继下端的设备
 
- 	GW_CAN2JEP,//将Can包中的数据提取生成JEP数据包,发给设备;低速载波中继属于该类型
 
- 	GW_JEP_TRANSPARENT,
 
- };
 
- struct DATA_ATTRIBUTE_CONF {
 
- 	CString attribName;
 
- 	DATA_ATTRIBUTE_VAL_TYPE attribValType;
 
- 	std::vector<CString> attribValRange;
 
- };
 
- //数据属性一般是指数据采集时候的环境特征。因此采用attribute一词
 
- //property也用来表示属性,但一般表示对象的所有物品(原意为财产),因此选用attribute更精确
 
- struct DATA_ATTRIBUTE {
 
- 	CString attribName;
 
- 	CString attribVal;
 
- 	float attribfVal;
 
- 	DATA_ATTRIBUTE_VAL_TYPE GetType() {
 
- 		if (attribfVal == Nan)
 
- 		{
 
- 			return DAVT_STR;
 
- 		}
 
- 		return DAVT_FLOAT;
 
- 	}
 
- 	DATA_ATTRIBUTE()
 
- 	{
 
- 		attribfVal = Nan;
 
- 	}
 
- };
 
- //数据类型
 
- enum DATA_TYPE {
 
- 	DT_CUSTOM = 0,//自定义,表示为1个协议约定的json对象
 
- 	DT_ANALOG = 1,//模拟量
 
- 	DT_SWITCH = 2,//开关量
 
- 	DT_VIDEO = 3,//视频
 
- 	DT_LAST//始终保持在最后,用于记录类型总数
 
- };
 
- namespace sap {
 
- 	const string mp_data_type_label[] = { _TEXT("自定义"), _TEXT("模拟量"), _TEXT("开关量"), _TEXT("视频"), _TEXT("声音") };
 
- }
 
- //const CString g_strAcqTypeDescribe[] =
 
- //{
 
- //	_TEXT("未指定"), _TEXT("扳动采集"), _TEXT("周期采集"), _TEXT("日常采集"),
 
- //	_TEXT("即时采集"), _TEXT("过车采集"), _TEXT("全站采集"), _TEXT("微机监测请求")
 
- //};
 
- //全局数据通道
 
- struct GLOBAL_DATA_CHANNEL
 
- {
 
- 	CString strID;
 
- 	CString strLink_MP;
 
- 	GLOBAL_DATA_CHANNEL()
 
- 	{
 
- 		strID = "";
 
- 		strLink_MP = "";
 
- 	}
 
- };
 
- //设备的物理通信地址。如果是网关下设备,则是ip+id,如果是有ip的设备,则id=""无效
 
- struct EQP_COMM_ADDR {
 
- 	CString strIP;//设备通信地址
 
- 	CString id;//设备ID
 
- 	APP_LAYER_PROTO_TYPE proto;
 
- 	TRANSFER_LAYER_PROTO_TYPE tlProto;
 
- 	int AcqDevice_Type = -1;   //根据设备类型(JHD_EPQ_TYPE)来决定他的CAN数据收发处理.与tlProto属于同种作用,后续不再抽象tlProto所代表的概念
 
- 	COMM_GATEWAY_TYPE gwType;
 
- 	TRANSPORT_CONTROL_PROTOCOL transport_mode = TRANSPORT_CONTROL_PROTOCOL::TCR_UDP; //id不为空 表示低速, 低速才有采用
 
- 	uint16_t port = 4011; //传输端口
 
- 	SOCKET sock;
 
- 	int GetID_int() {
 
- 		return _ttoi(id);
 
- 	}
 
- 	EQP_COMM_ADDR() {
 
- 		strIP = "";
 
- 		id = "";//0表示无效,ip即是设备地址
 
- 		proto = PROTOCOL_UNKNOWN;
 
- 		gwType = GW_UNKNOWN;
 
- 		tlProto = TLT_NONE;
 
- 		sock = 0;
 
- 	}
 
- 	EQP_COMM_ADDR(CString a, CString b) : strIP(a), id(b) {
 
- 		proto = PROTOCOL_UNKNOWN;
 
- 		gwType = GW_UNKNOWN;
 
- 		tlProto = TLT_NONE;
 
- 	}
 
- 	BOOL FromString(CString str)
 
- 	{
 
- 		int iPos = str.Find('/');
 
- 		if (iPos < 0)
 
- 		{
 
- 			strIP = str;
 
- 		}
 
- 		else
 
- 		{
 
- 			strIP = str.Left(iPos);
 
- 			id = str.Mid(iPos + 1, str.GetLength() - iPos - 1);
 
- 		}
 
- 		return TRUE;
 
- 	}
 
- 	CString ToString()
 
- 	{
 
- 		CString str;
 
- 		if (id == "")
 
- 		{
 
- 			str = strIP;
 
- 		}
 
- 		else {
 
- 			str.Format(_T("%s/%s"), strIP, id);
 
- 		}
 
- 		return str;
 
- 	}
 
- 	BOOL IsValid()
 
- 	{
 
- 		if (strIP.GetLength() > 0)
 
- 			return TRUE;
 
- 		return FALSE;
 
- 	}
 
- 	BOOL operator==(const EQP_COMM_ADDR& right)
 
- 	{
 
- 		if (strIP.Compare(right.strIP) == 0 && id == right.id)
 
- 		{
 
- 			return TRUE;
 
- 		}
 
- 		return FALSE;
 
- 	}
 
- 	friend bool operator<(const EQP_COMM_ADDR& left, const EQP_COMM_ADDR& right) {
 
- 		int ret = left.strIP.Compare(right.strIP);
 
- 		if (ret < 0) return true;
 
- 		else if (ret == 0 && left.id < right.id) return true;
 
- 		else return false;
 
- 	}
 
- };
 
- typedef enum recvPktType {
 
- 	RECV_PKT_UNKNOWN = -1,//未知
 
- 	RECV_PKT_UNCONF = 0,//未配置数据包
 
- 	RECV_PKT_ASYN,//通知包
 
- 	RECV_PKT_SYNC//响应包
 
- }RecvPktType;
 
- typedef enum EPACKET_DIR {//表示请求, 响应, 通知
 
- 	REQ = 0,
 
- 	RESP,
 
- 	NOTIFY
 
- }ePktDir;
 
- struct PKT_DATA {
 
- 	BYTE* m_DataBuf;
 
- 	int m_iDataBufLen;
 
- 	APP_LAYER_PROTO_TYPE proto;
 
- 	EQP_COMM_ADDR addr;
 
- 	recvPktType dealType;
 
- 	CString m_strCmdName;//命令名称
 
- 	CString m_strCmdContent;//命令内容概要
 
- 	CString m_strPktDetail;//命令包详细解析信息
 
- 	//表示请求, 响应, 通知
 
- 	ePktDir m_ePktDir;//数据包方向或类型
 
- 	virtual CString GetCmdID() { return _T(""); };
 
- 	virtual BOOL UnPack(LPVOID pBuf, int iBufLen, BOOL bGetCmdInfo = FALSE) { return TRUE; };
 
- 	virtual CString GetPktDesc() { return _T(""); };//包详细描述信息
 
- 	virtual CString GetCmdName() { return _T(""); };
 
- 	virtual BOOL UnPack() { return 0; };
 
- 	PKT_DATA(BYTE* p, int l)
 
- 	{
 
- 		m_DataBuf = new BYTE[l];
 
- 		memcpy(m_DataBuf, p, l);
 
- 		m_iDataBufLen = l;
 
- 	}
 
- 	PKT_DATA()
 
- 	{
 
- 		m_DataBuf = NULL;
 
- 		m_iDataBufLen = 0;
 
- 		dealType = RECV_PKT_UNKNOWN;
 
- 	}
 
- 	~PKT_DATA()
 
- 	{
 
- 		if (m_DataBuf)
 
- 			delete []m_DataBuf;
 
- 	}
 
- 	PKT_DATA& operator=(const PKT_DATA& pd)
 
- 	{
 
- 		if (this == &pd) return *this;//自己不能拷贝
 
- 		this->m_iDataBufLen = pd.m_iDataBufLen;
 
- 		this->proto = pd.proto;
 
- 		this->addr = pd.addr;
 
- 		if (pd.m_iDataBufLen > 0)
 
- 		{
 
- 			if (this->m_DataBuf)
 
- 				delete this->m_DataBuf;
 
- 			this->m_DataBuf = new BYTE[pd.m_iDataBufLen];
 
- 			memcpy(this->m_DataBuf, pd.m_DataBuf, pd.m_iDataBufLen);
 
- 		}
 
- 		else
 
- 		{
 
- 			this->m_DataBuf = NULL;
 
- 		}
 
- 		return *this;
 
- 	}
 
- };
 
- struct PktQueue {
 
- 	HANDLE m_mutex;
 
- 	std::queue<PKT_DATA*> queueBufPacket;
 
- 	PktQueue() {
 
- 		m_mutex = CreateMutex(NULL, FALSE, NULL);
 
- 	}
 
- 	~PktQueue() {
 
- 		if (m_mutex) {
 
- 			CloseHandle(m_mutex);
 
- 			m_mutex = NULL;
 
- 		}
 
- 		while (!queueBufPacket.empty()) {
 
- 			PKT_DATA* pkt = queueBufPacket.front();
 
- 			queueBufPacket.pop();
 
- 			delete pkt;
 
- 		}
 
- 	}
 
- 	bool Lock() {
 
- 		if (m_mutex) {
 
- 			WaitForSingleObject(m_mutex, INFINITE);
 
- 			return true;
 
- 		}
 
- 		return false;
 
- 	}
 
- 	void Unlock() {
 
- 		if (m_mutex) ReleaseMutex(m_mutex);
 
- 	}
 
- 	void Clear();
 
- 	PKT_DATA* Pop()
 
- 	{
 
- 		PKT_DATA* pkt = NULL;
 
- 		Lock();
 
- 		if (!queueBufPacket.empty()) {
 
- 			pkt = queueBufPacket.front();
 
- 			queueBufPacket.pop();
 
- 			Unlock();
 
- 			return pkt;
 
- 		}
 
- 		else {
 
- 			Unlock();
 
- 			return NULL;
 
- 		}
 
- 	}
 
- 	inline size_t size()
 
- 	{
 
- 		return queueBufPacket.size();
 
- 	}
 
- 	void Push(PKT_DATA* pkt)
 
- 	{
 
- 		Lock();
 
- 		queueBufPacket.push(pkt);
 
- 		Unlock();
 
- 	}
 
- };
 
- struct PIC_INFO {
 
- 	CString strJpgPath;
 
- 	int offsetFlag;//偏移标志
 
- 	float offsetVal;//偏移值
 
- 	float gapVal;//缺口值
 
- 	float standardVal;//标准值
 
- 	int iW;
 
- 	int iH;
 
- 	PIC_INFO() {
 
- 		strJpgPath = "";
 
- 		offsetFlag = 0;
 
- 		offsetVal = 0;
 
- 		gapVal = 0;
 
- 		standardVal = 0;
 
- 		iW = 0;
 
- 		iH = 0;
 
- 	}
 
- };
 
- struct REQ_PARAM {
 
- 	int iRetryCount;
 
- 	int iWaitTime; //mm单位
 
- 	CString strLogMsgWhenSend;
 
- 	CString strCmdID; //命令的标识,用来判断响应和请求是否匹配
 
- 	REQ_PARAM();
 
- };
 
- enum UI_STYLE {
 
- 	DB_FOR_MP = 0,
 
- 	DB_FOR_ZZJ
 
- };
 
- //微机监测扳动信号计算结果定反位标志: lutao 2016.12.28
 
- //	1.程序启动,标志 “未知”
 
- //	2.周期采集识别成功,更新标志位 “定位”或者“反位”
 
- //	3.收到扳动信号,如果标志位不是“未知”,则在扳动结束信号时更新该标记位定反位位置
 
- //	4.采集识别成功后, 比对识别结果定反位 和 计算结果定反位, 如果不一致,记录错误信息
 
- enum DAOCHA_POSITION {
 
- 	MP_UNKNOWN = 0,
 
- 	MP_FIX,
 
- 	MP_INVERT,
 
- 	MP_FIX2INVERT,
 
- 	MP_INVERT2FIX,
 
- };
 
- //WIF 下发的道岔状态
 
- enum class DAOCHA_STATUS_WIF : int8_t
 
- {
 
- 	DSW_UNKNOWN = -1,
 
- 	DSW_FIX = 0x00,	//定位
 
- 	DSW_INVERT = 0x01, //反位
 
- 	DSW_MOVING = 0x02, //扳动中
 
- 	DSW_MOVED = 0x03, //扳动结束
 
- 	DSW_STRAIGHT_LEFT = 0x06,	//直向左侧
 
- 	DSW_STRAIGHT_RIGHT = 0x07,	//直向右侧
 
- 	DSW_STRAIGHT = 0x08,	//直向
 
- };
 
- struct PLANE_TOPO_VIEW {
 
- 	//配置
 
- 	BOOL bShow;
 
- 	float fX;//相对于左下角的坐标
 
- 	float fY;
 
- 	float fW;
 
- 	float fH;
 
- 	CString shape;//取值为rect,circle,text,pic
 
- 	CString pic; //图标图片的路径
 
- 	CString strDisplayName;
 
- 	int iFontSize;
 
- 	//运行时
 
- 	BOOL bSel;//在界面上是否选中
 
- 	BOOL bCalWH;//计算尺寸
 
- 	RECT moRc;  //mo在视图上的矩形位置
 
- 	void Init()
 
- 	{
 
- 		bShow = TRUE;
 
- 		fX = 50;//相对于左下角的坐标
 
- 		fY = 50;
 
- 		fW = 2;
 
- 		fH = 3;
 
- 		shape = "rect";
 
- 		iFontSize = 20;
 
- 		bSel = FALSE;
 
- 		bCalWH = FALSE;
 
- 	}
 
- 	PLANE_TOPO_VIEW()
 
- 	{
 
- 		Init();
 
- 	}
 
- };
 
- enum ALARM_EVENT_TYPE {
 
- 	AET_RECOVER = 0, //报警恢复
 
- 	AET_OCCUR = 1, //报警产生
 
- };
 
- enum ALARM_LEVEL {
 
- 	AL_UNKNOWN,
 
- 	AL_NORMAL,
 
- 	AL_PRE_ALARM,
 
- 	AL_ALARM, //不区分等级
 
- 	AL_ALARM_L4,
 
- 	AL_ALARM_L3,
 
- 	AL_ALARM_L2,
 
- 	AL_ALARM_L1, //一级等级最高
 
- };
 
- //Can总线协议
 
- //连续bit转换成字节,高位在前  ":"符号为取位域
 
- //取位域时,先取低位,再取高位
 
- struct NET_CAN_ORG  //size = 5 bytes
 
- {
 
- 	BYTE DLC : 4;
 
- 	BYTE CAN : 4;
 
- 	BYTE ID29_25 : 5;  //ID高位在前.是这个字节中的低5位
 
- 	BYTE Invalid : 3;  //29个bit,4个字节中有3个bit无效
 
- 	BYTE ID24_17;
 
- 	BYTE ID16_9;
 
- 	BYTE ID8_1;
 
- };
 
- /*
 
- 比特序(bit order)
 
- 字节序是一个对象中的多个字节之间的顺序问题,比特序就是一个字节中的8个比特位(bit)之间的顺序问题。一般情况下系统的比特序和字节序是保持一致的。
 
- 一个字节由8个bit组成,这8个bit也存在如何排序的情况,跟字节序类似的有最高有效比特位、最低有效比特位。
 
- 比特序1 0 0 1 0 0 1 0在大端系统中最高有效比特位为1、最低有效比特位为0,字节的值为0x92。在小端系统中最高、最低有效比特位则相反为0、1,字节的值为0x49。
 
- 跟字节序类似,要想保持一个字节值不变那么就要使系统能正确的识别最高、最低有效比特位。
 
- */
 
- struct NET_CAN_HEAD_V2//size = 5 bytes
 
- {
 
- 	BYTE DLC : 4;   //DLC 每帧字节数(1-8)
 
- 	BYTE r0 : 2;   //bit4-5
 
- 	BYTE RTR : 1;  //bit6
 
- 	BYTE IDE : 1;  //bit7=1表示扩展帧=0表示标准帧
 
- 	BYTE Address1 : 1;
 
- 	BYTE B : 1;       //广播   0:普通帧  1:广播帧
 
- 	BYTE G : 1;       //优先级  0:高级  1:低级
 
- 	BYTE MS : 1;      //M/S   0:自主帧 1:应答帧
 
- 	BYTE DIR : 1;     //DIR   0:下发  1:上送
 
- 	BYTE R0 : 3;      //头部预留3位置
 
- 	BYTE Type : 3;    //Type   100,4 自主单帧   000,0 应答单帧  011,3,非结束多帧  010,2,结束多帧
 
- 	BYTE Address : 5;//地址
 
- 	BYTE InxFrame;//Index of frame  从0开始编号
 
- 	BYTE SumFrame;//Sum of frame
 
- 	NET_CAN_HEAD_V2()
 
- 	{
 
- 		r0 = 0;
 
- 		RTR = 0;
 
- 		IDE = 1;
 
- 		DLC = 0;
 
- 		Address1 = 0;
 
- 		B = 0;
 
- 		G = 0;
 
- 		MS = 0;
 
- 		DIR = 0x0;
 
- 		R0 = 0;
 
- 		Type = 0;
 
- 		Address = 0;
 
- 		SumFrame = 0x0;
 
- 		InxFrame = 0x0;
 
- 	}
 
- };
 
- struct CAN_PKT_V2//size = 13字节
 
- {
 
- 	NET_CAN_HEAD_V2 sHead;
 
- 	BYTE arrData[8];
 
- 	CAN_PKT_V2()
 
- 	{
 
- 		ZeroMemory(arrData, sizeof(arrData));
 
- 	}
 
- 	int getID()
 
- 	{
 
- 		BYTE bAddress = ((sHead.Address1) << 5) | (sHead.Address);
 
- 		return (int)bAddress;
 
- 	}
 
- };
 
- struct NET_CAN_HEAD_XIANGYUAN//size =3 bytes
 
- {
 
- 	BYTE DLC :4;		//每帧字节数
 
- 	BYTE r0 : 2;
 
- 	BYTE RTR : 1;		//帧类型,0数据帧,1远程帧
 
- 	BYTE FF : 1;		//帧格式,0标准帧,扩展帧
 
- 	BYTE Temp1;
 
- 	BYTE Temp2;
 
- 	BYTE Address : 5;	//采集机地址
 
- 	BYTE G : 1;			//优先级,0高级,1低级
 
- 	BYTE MS : 1;		//帧性质,0自主帧,1应答帧
 
- 	BYTE DIR : 1;		//DIR方向位,0:上位机到模块,1:模块到上位机
 
- 	BYTE r1 : 5;		
 
- 	BYTE Type : 3;		//帧类型,100自主单帧,000应答单帧,011非结束多帧,010结束多帧
 
- 	NET_CAN_HEAD_XIANGYUAN()
 
- 	{
 
- 		DLC = 0;
 
- 		r0 = 0;
 
- 		RTR = 0;
 
- 		FF = 0;
 
- 		Address = 0;
 
- 		G = 0;
 
- 		MS = 0;
 
- 		DIR = 0;
 
- 		r1 = 0;
 
- 		Type = 4;
 
- 		Temp1 = 0;
 
- 		Temp2 = 0;
 
- 	}
 
- };
 
- struct CAN_PKT_XIANGYUAN//size = 13字节
 
- {
 
- 	NET_CAN_HEAD_XIANGYUAN sHead;
 
- 	BYTE arrData[8];
 
- 	CAN_PKT_XIANGYUAN()
 
- 	{
 
- 		ZeroMemory(arrData, sizeof(arrData));
 
- 	}
 
- 	int getID()
 
- 	{
 
- 		return (int)sHead.Address;
 
- 	}
 
- };
 
- enum ALARM_STATUS {
 
- 	AS_NORMAL = 0,
 
- 	AS_AlarmHigh,
 
- 	AS_ForeAlarmHigh,
 
- 	AS_ForeAlarmLow,
 
- 	AS_AlarmLow,
 
- };
 
- struct ALARM_LIMIT_CONF {
 
- 	float AlarmHigh;		//告警上限
 
- 	float ForeAlarmHigh;	//预警上限
 
- 	float FormAlarmLow;		//预警下限
 
- 	float AlarmLow;			//告警下限
 
- 	float GetConf(ALARM_STATUS as)
 
- 	{
 
- 		if (as == AS_AlarmHigh)
 
- 		{
 
- 			return AlarmHigh;
 
- 		}
 
- 		else if (as == AS_ForeAlarmHigh)
 
- 		{
 
- 			return ForeAlarmHigh;
 
- 		}
 
- 		else if (as == AS_ForeAlarmLow)
 
- 		{
 
- 			return FormAlarmLow;
 
- 		}
 
- 		else if (as == AS_AlarmLow)
 
- 		{
 
- 			return AlarmLow;
 
- 		}
 
- 		else
 
- 		{
 
- 			return 0;
 
- 		}
 
- 	}
 
- 	ALARM_LIMIT_CONF()
 
- 	{
 
- 		AlarmHigh = .0;
 
- 		ForeAlarmHigh = .0;
 
- 		FormAlarmLow = .0;
 
- 		AlarmLow = .0;
 
- 	};
 
- };
 
- typedef struct CGroupInfo_GWWY
 
- {
 
- 	bool bSensorKBGiven;//出厂时是否给出传感器KB值
 
- 	ALARM_LIMIT_CONF alcGuiju;//轨距
 
- 	ALARM_LIMIT_CONF alcPaxing;//爬行
 
- 	ALARM_LIMIT_CONF alcMitie;//密贴
 
- 	ALARM_LIMIT_CONF alcJBGHY;//基本轨横移
 
- 	//工务参数 相关基准值
 
- 	float m_standard_gj;
 
- 	float m_standard_mt;
 
- 	float m_standard_px;
 
- 	float m_standard_jbghy;
 
- 	float m_standard_kc;
 
- 	CGroupInfo_GWWY()
 
- 	{
 
- 		bSensorKBGiven = 0;
 
- 		alcGuiju.AlarmHigh = 18;
 
- 		alcGuiju.ForeAlarmHigh = 15;
 
- 		alcGuiju.FormAlarmLow = -15;
 
- 		alcGuiju.AlarmLow = -18;
 
- 		alcPaxing.AlarmHigh = 18;
 
- 		alcPaxing.ForeAlarmHigh = 15;
 
- 		alcPaxing.FormAlarmLow = -15;
 
- 		alcPaxing.AlarmLow = -18;
 
- 		alcMitie.AlarmHigh = 18;
 
- 		alcMitie.ForeAlarmHigh = 15;
 
- 		alcMitie.FormAlarmLow = -15;
 
- 		alcMitie.AlarmLow = -18;
 
- 		alcJBGHY.AlarmHigh = 18;
 
- 		alcJBGHY.ForeAlarmHigh = 15;
 
- 		alcJBGHY.FormAlarmLow = -15;
 
- 		alcJBGHY.AlarmLow = -18;
 
- 		m_standard_gj = 1435.0;
 
- 		m_standard_mt = .0;
 
- 		m_standard_px = .0;
 
- 		m_standard_jbghy=.0;
 
- 		m_standard_kc = 160.0;
 
- 	}
 
- }CGroupInfo_GWWY, * PCGroupInfo_GWWY;
 
- //应用服务器基类 Application Layer Server
 
- class CALServer {
 
- public:
 
- 	virtual BOOL OnRecvAppLayerData(BYTE* pData, int iLen, void* pCltInfo) { return 0; }
 
- 	virtual BOOL OnRecvAppLayerPkt(BYTE* pData, int iLen, void* pCltInfo) { return 0; }
 
- };
 
- struct APP_LAYER_CLIENT {
 
- 	int iTLProto; //应用层的传输层协议 可以是websocket  websocket相对于 tcpServer 属于应用层数据。相对于jdsp,属于传输层协议
 
- 	int iALProto;
 
- 	APP_LAYER_CLIENT()
 
- 	{
 
- 		iTLProto = 0;
 
- 		iALProto = 0;
 
- 	}
 
- };
 
- //传输层服务器基类。Transportation Layer Server
 
- //当JDSP协议 套用在 DSP或者315中使用时 ,315服务被看作是JDSP服务的传输层服务
 
- //该类被AppLayerServer调用,因此参数中的clientInfo都是appClientInfo
 
- class CTLServer {
 
- public:
 
- 	virtual bool SendAppLayerData(BYTE* pData, int iLen, void* pAppLayerCltInfo) { return 0; }
 
- 	virtual vector<void*> GetSessionList() { vector<void*> v; return v; }
 
- };
 
- //OPEC体系
 
- class CControlExecutor {
 
- public:
 
- 	virtual BOOL ExecuteControl(CString strCtrlType,/*in*/vector<DATA_ATTRIBUTE>& ctrlParam, /*out*/vector<DATA_ATTRIBUTE>& executeInfo) { return 0; };
 
- };
 
- class CAcqEqp : public CControlExecutor
 
- {
 
- public:
 
- 	virtual BOOL ExecuteControl(CString strCtrlType,/*in*/vector<DATA_ATTRIBUTE>& ctrlParam, /*out*/vector<DATA_ATTRIBUTE>& executeInfo) { return 0; };
 
- };
 
- struct MP_ALARM_CONF_HIGHLOW_LIMIT {
 
- 	BOOL Enable_AH;			//告警启用
 
- 	float alm_High;			//告警上限
 
- 	BOOL Enable_PAH;		//预警启用
 
- 	float prealm_High;		//预警上限
 
- 	BOOL Enable_PAL;		//预警启用
 
- 	float prealm_Low;		//预警下限
 
- 	BOOL Enable_AL;			//告警启用
 
- 	float alm_Low;			//告警下限
 
- 	int highLevel;			//告警上限等级
 
- 	int lowLevel;			//告警下限等级
 
- 	MP_ALARM_CONF_HIGHLOW_LIMIT()
 
- 	{
 
- 		Enable_AH = 0;
 
- 		Enable_PAH = 0;
 
- 		Enable_PAL = 0;
 
- 		Enable_AL = 0;
 
- 		alm_High = 2;
 
- 		prealm_High = 1;
 
- 		prealm_Low = -1;
 
- 		alm_Low = -2;
 
- 		highLevel = 0;
 
- 		lowLevel = 0;
 
- 	}
 
- };
 
- struct MP_ATTRIB {
 
- 	CString m_strName;//监测点名称
 
- 	CString m_strUnit;//单位
 
- 	CString m_strPhysicalType;
 
- 	string m_strAlias;
 
- 	CString m_strCalFormula;
 
- 	CString low_limit;//值有效范围-低限
 
- 	CString high_limit;//值有效范围-高限
 
- };
 
- //监测点数据呈现方式:类似于伤损监测中采集的单条曲线数据和单频点数据,两个监测点:区段1&70KHZ
 
- enum MP_DISPLAYDATATYPE
 
- {
 
- 	eMP_DPT_UNKNOWN = 0,
 
- 	eMP_DPT_POINT,
 
- 	eMP_DPT_CURVE,
 
- };
 
- const CString MP_DISPLAYDATATYPE_DESC[] = {
 
- 	_TEXT(""),_TEXT("静态数据"),_TEXT("曲线数据"),
 
- };
 
- //zgw 伤损算法相关
 
- struct  CPoint2D {
 
- 	int m_x = 0;
 
- 	int m_y = 0;
 
- 	CPoint2D() {
 
- 	}
 
- 	CPoint2D(int x, int y) {
 
- 		m_x = x;
 
- 		m_y = y;
 
- 	}
 
- };
 
- struct  CPoint2DInfo {
 
- 	CPoint2D m_pt2d;
 
- 	string m_type="peak"; //peak valley
 
- 	CPoint2DInfo(int x, int y, string type) {
 
- 		m_pt2d.m_x = x;
 
- 		m_pt2d.m_y = y;
 
- 		m_type = type;
 
- 	}
 
- };
 
- ////
 
 
  |