#ifndef _AIDERPROTOCOL_H_ #define _AIDERPROTOCOL_H_ #include "API-Platform.h" #include "stdio.h" #define MAX 10 //定义一帧数据最多包含的OID数量 #define MAX_SEND_DATA 152 //定义一次数据上报最多上报字节数 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- #if defined ( __CC_ARM ) // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- #pragma push // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- #pragma pack( 1 ) // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- #endif //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- union Hfloat { uint8_t Data_Hex[4]; float Data_Float; }; //便于做数据格式转换 //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- union HInt16 { uint8_t Data_Hex[2]; uint16_t Data_Int16; }; //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- union HInt32 { uint8_t Data_Hex[4]; uint32_t Data_Int32; }; //便于做数据格式转换 //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- struct DeviceStatus { uint8_t BatteryCapacity; //电池容量检测,例如xx%,仅为百分号前面的部分。 uint8_t CorrRateSensorStatus; //腐蚀速率传感器状态指示变量,0表示工作正常,1表示数据采集失败,2表示数据异常,3表示探头未启用 // uint8_t TemperatureSensorStatus; //温度传感器状态指示变量,0表示工作正常,1表示数据采集失败,2表示数据异常,3表示探头未启用 // uint8_t AlarmFlag; //用于指示当前液位是否超预警值,0表示报警,1表示未报警,2表示上位机查询数据 }; //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- struct SenserData { uint16_t CollectTime; //每组数据对应的采集时间,以每天零点为参考,单位分钟 // float ResistanceRatio; //采集到的电阻比值(探针电阻比参考电阻) // float ReferenceResistance; //采集到的参考电阻阻值 // float CorrRateData; //采集到的腐蚀速率数据 float ProbeLossData; //采集到的探针损耗数据 // uint8_t DataCount; //采集到的数据总数,温度压力数据成对出现 }; //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- struct BusinessData { uint16_t CollectTime[24]; //每组数据对应的采集时间,以每天零点为参考,单位分钟 uint8_t CollectData[24][4]; //采集到的数据 uint8_t StartTime[5]; //采集第一组数据的时间日期 uint8_t DataCount; //采集到的数据总数 uint8_t SendCount; //未发送的次数 uint8_t ParameterReply; //参数配置回复 uint8_t HistoryDateCount; //未发送的历史数据总量 float Level_Float; union { uint8_t Data_Hex[4]; float Data_Float; } Level_Date[24]; }; //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION:便于Flash数据存储和交互 // ----------------------------------------------------------------------------- struct Config_RegPara { uint8_t CollectTime_Byte[2]; //数据采集时间,使用数组存储,以方便Flash读写 uint8_t CollectPeriod_Byte[2]; //数据采集间隔,使用数组存储,以方便Flash读写 uint8_t CollectNum_Byte[2]; //采集数量,使用数组存储,以方便Flash读写 uint8_t UploadCycle_Byte[2]; //数据上传周期,使用数组存储,以方便Flash读写 uint8_t RetryNumSet; //数据重传次数 union { uint8_t Data_Hex[4]; float Data_Float; } MountHeight; //液位探头到井底的高度 union { uint8_t Data_Hex[4]; float Data_Float; } AlarmValue; //报警阈值 char CurrentPhoneNum[16]; //当前通信手机号码,字符串格式 char SMS_Set_ServerIP[16]; //短信配置服务器IP,字符串格式 uint8_t SMS_Set_ServerPort[2]; //短信配置服务器端口号,字符串格式 uint8_t SignalIntensity; //信号强度 }; //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- struct DeviceSet //待修改 { uint16_t CollectTime; //数据采集时间,即设备开始采数的时间,单位分钟 uint16_t CollectPeriod; //数据采集间隔,即相邻两组数据采集的时间间隔,单位分钟 uint16_t CollectNum; //采集数量,即一次上传多少组数据 uint16_t UploadCycle; //数据上报周期,即设备的休眠周期,单位分钟 uint8_t RetryNum; //数据重传次数 union { uint8_t Data_Hex[4]; float Data_Float; } MountHeight; //液位探头到井底的高度 union { uint8_t Data_Hex[4]; float Data_Float; } AlarmValue; //报警阈值 uint8_t BatteryCapacity; //电池容量检测,例如xx%,仅为百分号前面的部分。//虽然不是配置参数,但是为了数据组织方便,仍放在配置参数结构体中 uint8_t Time_Sec; //系统时间,秒 uint8_t Time_Min; //系统时间,分 uint8_t Time_Hour; //系统时间,小时 uint8_t Time_Mday; //系统日期,日 uint8_t Time_Mon; //系统日期,月 uint8_t Time_Year; //系统日期,年 uint8_t NetId; //433模块网络ID,1-255 uint8_t PDUType; //PDUType,1-255 uint8_t RouteFlag; //RouteFlag,1-255 uint8_t DeviceType; //设备类型,1-255 char ServerIP[16]; //服务器IP uint16_t ServerPort; //服务器端口 }; typedef enum { DEF_NR = 0x1000000A, //重传次数 SYSTERM_DATA = 0x10000050, //系统日期 SYSTERM_TIME = 0x10000051, //系统时间 CLT1_STIME1 = 0x10000104, //一时区采集时间 CLT1_ITRL1 = 0x10000105, //一时区采集间隔 CLT1_CNT1 = 0x10000106, //一时区采集次数 UPLOAD_CYCLE = 0x10000062, //数据上报周期 MOUNT_HEIGHT = 0x10000060, //液位探头到井底的高度 ALARM_VALUE = 0x10000901, //报警阈值 DEVICE_STATE = 0x60000100, //设备状态指示(上电) SENSOR_STATE = 0x60000009, //传感器状态指示(上电) DEVICE_QTY = 0x60000020, //电池电量 DEVICE_WAKEUP= 0x60000200, //设备状态指示(唤醒) FRAM_STATE = 0x60000300, //数据接收状态指示 DATA_REQUEST = 0x20000001, //服务器查询数据 NET_ID = 0x10001001, //433模块网络ID CARRIER_CODE = 0x10000063, //IMEI&ICCID NB_PCI = 0x60000511, //NB主小区物理小区PCI号 NB_RSRP = 0x60000513, //NB主小区RSRP值 NB_SNR = 0x60000516, //NB主小区lart SNR值 BSS_IP = 0x10000022, //设备IP地址,主要用于3G版设备通过短信配置 BSS_PORT = 0x10000023 //设备端口号,主要用于3G版设备通过短信配置 } CommandType; //通信过程中使用到的OID集合(除了业务上报OID) //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- struct TagStruct //用于存储参数命令数据 { CommandType OID_Command; //命令OID编码 uint16_t Width; //Value域的长度 uint8_t Value[32]; //参数值,当Width为0时,Value域可以不存在,当前应用需求Value域最多占用32字节 }; //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- struct SpecialTagStruct //用于存储业务上报数据 { uint32_t OID_Command; //数据OID编码 uint16_t Width; //Value域的长度 uint8_t Value[40]; union //声明共用体,便于后续对特定字节操作 { uint8_t Value[4]; //ieee754格式表示的业务数据 float Data_F; //浮点数格式表示的业务数据 } LevelData; }; //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- struct CommandFrame //查询命令数据帧格式 { uint8_t Preamble; //帧前导码 uint8_t Version; //协议版本号 uint16_t Length; //有效数据长度,即从Length字段到CRC字段包含的实际数据长度(单位为Byte,不包含Length字段和CRC字段,OID_List长度以实际使用的数据空间为准) uint8_t DeviceID[6]; //设备ID号 uint8_t RouteFlag; //路由标志 uint16_t NodeAddr; //路由节点地址 uint16_t PDU_Type; //操作指示 uint8_t Seq; //报文序号(1~255) CommandType OID_List[MAX]; //OID序列,一帧数据可以包含多个OID,最多不超过20个 uint16_t CrcCode; //16位CRC校验码,计算范围为从Preamble到CrcCode的全部数据(包括Preamble和CrcCode,CrcCode初值为0xFFFF) uint8_t OID_Count; //OID序列计数器 }; //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- struct DataFrame //下发配置参数等帧格式 { uint8_t Preamble; //帧前导码 uint8_t Version; //协议版本号 uint16_t Length; //有效数据长度,即从Length字段到CRC字段包含的实际数据长度(单位为Byte,不包含Length字段和CRC字段,OID_List长度以实际使用的数据空间为准) uint8_t DeviceID[6]; //设备ID号 uint8_t RouteFlag; //路由标志 uint16_t NodeAddr; //路由节点地址 uint16_t PDU_Type; //操作指示 uint8_t Seq; //报文序号(1~255) struct TagStruct TagList[MAX]; //Tag序列,一帧数据可以包含多个Tag,最多不超过20个,而且一帧数据总长度(包括9字节帧头)不能超过256 uint16_t CrcCode; //16位CRC校验码,计算范围为从Preamble到CrcCode的全部数据(包括Preamble和CrcCode,CrcCode初值为0xFFFF) uint8_t Tag_Count; //Tag序列计数器 }; //结构体声明 // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- struct SpecialDataFrame //业务数据上传帧格式 { uint8_t Preamble; //帧前导码 uint8_t Version; //协议版本号 uint16_t Length; //有效数据长度,即从Length字段到CRC字段包含的实际数据长度(单位为Byte,不包含Length字段和CRC字段,OID_List长度以实际使用的数据空间为准) uint8_t DeviceID[6]; //设备ID号 uint8_t RouteFlag; //路由标志 uint16_t NodeAddr; //路由节点地址 uint16_t PDU_Type; //操作指示 uint8_t Seq; //报文序号(1~255) struct TagStruct SysTime; //系统时间,表示第一个数据的采集时间 struct TagStruct BattEnergy; //电池剩余电量,例如xx%,仅为百分号前面的部分 struct SpecialTagStruct TagList[MAX]; //Tag序列,一帧数据可以包含1个Tag,而且一帧数据总长度不能超过100 uint16_t CrcCode; //16位CRC校验码,计算范围为从Preamble到CrcCode的全部数据(包括Preamble和CrcCode,CrcCode初值为0xFFFF) uint8_t Tag_Count; //Tag序列计数器 // uint8_t nb_rssi; }; // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- #if defined ( __CC_ARM ) // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- #pragma pop // ----------------------------------------------------------------------------- // DESCRIPTION: // ----------------------------------------------------------------------------- #endif uint16_t TrapRequest(uint8_t* pSendBuff,uint8_t Optype); uint16_t StartupRequest(uint8_t* pSendBuff, uint8_t Optype); #endif