| 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;
- }
- };
- ////
|