/* ********************************************************************************************************* * IAR Development Kits * on the * * Nano130 * * Filename : def_data.h * Version : V1.00 * Programmer(s) : Qian Xianghong ********************************************************************************************************* */ #ifndef USER_DEF_DATA_PRESENT #define USER_DEF_DATA_PRESENT #include "includes.h" // 允许匿名结构 #pragma anon_unions #pragma pack(push, 1) //////////////////////////////////////////////////////////////////////////////////////// // 以下版本定义必须且只能选择一个 //#define _PRAXAIR_TTS_VER_ // 普莱克斯 //#define _PRAXAIR_DOL_VER_ // 普莱克斯改造 //#define _PRAXAIR_TTS_CHARGE_VER_ // 普莱克斯充电/固定罐 //#define _YINGDE_TTS_VER_ // 盈德 //#define _YINGDE_DOL_VER_ // 盈德改造 //#define _YINGDE_TTS_CHARGE_VER_ // 盈德充电/固定罐 //#define _LINDE_HTTPS_CHARGE_VER_ // 林德充电/固定罐 //#define _LINDE_HTTPS_VER_ // 林德TTS //#define _LINDE_HTTPS_DOL_VER_ // 林德改造 //#define _MESSER_TTS_VER_ // 梅塞尔 //#define _MESSER_TTS_CHARGE_VER_ // 梅塞尔 //#define _FAYEKONG_TTS_VER_ // 法液空 //#define _FAYEKONG_TTS_CHARGE_VER_ // 法液空充电/固定罐 //#define _BAOGANG_TTS_VER_ // 宝钢 //#define _GUANGGANG_TTS_VER_ // 广钢 //#define _FUSHIKANG_TTS_VER_ // 富士康 //#define _ZHONGHAIYOU_BOX_VER_ // 中海油罐箱-PT1000-3线 //#define _BOX_500_2_VER_ // 罐箱-PT500-2线 //#define _BOX_1000_2_VER_ // 罐箱-PT1000-2线 //#define _BOX_1000_3_VER_ // 罐箱-PT1000-3线 //#define _CAOCHE_VER_ // 槽车 //#define _LANSHI_CAOCHE_VER_ // 兰石槽车 //#define _LANSHI_TTS_VER_ // 兰石 //#define _LANSHI_BOX_1000_3_VER_ // 兰石罐箱-PT1000-3线 //#define _LANSHI_TTS_CHARGE_VER_ // 兰石充电/固定罐 //#define _LANSHI_TTS_ALARM_VER_ // 兰石声光报警 //#define _LANSHI_TTS_ANTI_VER_ // 兰石防过充 //#define _LANSHI_TTS_ANTI_SINGLE_VER_ // 兰石防过充+单头 //#define _LANSHI_TTS_LEAK02_VER_ // 兰石氧浓度报警 //#define _CHATE_TTS_VER_ // 查特(散户) //#define _TRAIN_BOX_VER_ // 铁路罐箱 //#define _AOYANG_BOX_VER_ // 奥扬罐箱 // #define _LOCAL_DISP_VER_ // 只本地显示 // #define _LOCAL_DISP_1S_VER_ // 只本地显示(1S采集) //#define _LOCAL_ANTI_VER_ // 只本地显示+防过充 // #define _LOCAL_ANTI_SINGLE_VER_ // 只本地显示+防过充+单头 //#define _ANJIEHUI4_VER_ // 安捷汇4代 //#define _ANJIEHUI4_ANTI_VER_ // 安捷汇4代+防过充 //#define _ANJIEHUI4_PRAXAIR_VER_ // 安捷汇4代+普莱克斯 #define _ANJIEHUI4_LINDE_VER_ // 安捷汇4代+林德 //#define _ANJIEHUI4_JINHONG_VER_ // 安捷汇4代+金宏 //#define _ANJIEHUI4_ALARM_VER_ // 安捷汇4代+声光报警 //#define _LOCAL_ALARM_VER_ // 本地显示+声光报警 //#define _ANJIEHUI4_LINDE_ALARM_VER_ // 安捷汇4代+林德+声光报警 //#define _ANJIEHUI4_TTS_LEAK02_VER_ // 安捷汇氧浓度报警 //#define _DUWAPING_VER_ // 杜瓦瓶 //#define _DUWAPING_LOCAL_VER_ // 杜瓦瓶(只本地显示) //#define _DUWAPING_LOCAL_ANTI_VER_ // 杜瓦瓶(本地显示+单头防过充+自动充装) //#define _BRASIL_BOX_VER_ // 巴西罐箱(4~20mA传感器) // #define _DUWAPING_LANSHI_VER_ // 杜瓦瓶(兰石平台) //#define _LANSHI_ZNY_HEYUAN_VER_ // 兰石和远气体(ZNY) //#define _LEVEL_P2_ALARM_VER_ // 液位(高低)、双压力(高低)声光报警 //#define _LEVEL_P1_ALARM_VER_ // 液位(高低)、压力(高低)声光报警 //#define _FURUI_TTS_CHARGE_VER_ // 富瑞固定罐 //#define _BASF_MAGNETIC_CHARGE_VER_ // 巴斯夫磁翻板固定罐 //#define _PCT_LEVEL_CAOCHE_VER_ // 直接测液位百分比(槽车) //#define _CIDC_MAIKE_VER_ // 中工数字(麦克4~20mA差压压力传感器) //#define _2ND_420MA_OUT_LEVEL_VER_ // 第2路4~20mA输出液位版本 //#define _HUIDA_CHARGE_VER_ // 汇达 //#define _HUAGONG_BOX_VER_ // 化工罐箱 //#define _ANJIEHUI4_CHAOYANG_VER_ // 安捷汇4代+重庆朝阳 //#define _ANJIEHUI4_R0SEMOUNT_VER_ // 罗斯蒙特传感器 //#define _LNG_LORA_4G_VER_ // LNG-LORA带4G版本 //#define _LNG_LORA_LOCAL_VER_ // LNG-LORA不带4G版本 //#define _LANSHI_ROSEMOUNT_485TEMPR_VER_ // 兰石罗斯蒙特差压+485温度 //#define _TTS_TEMPR_420MA_VER_ // 用4~20mA的温度传感器 //#define _LANSHI_TTS_ANTI_NORM_OPEN_VER_ // 兰石防过充+单头常开 //#define _PCT_LEVEL_TTS_VER_ // 直接测液位百分比(0.5-4.5v,分压一半) //#define _ANJIEHUI4_ALL_420MA_VER_ // 差压、压力、温度都是4~20mA //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// // 以下定义不要修改,由上面选择的唯一版本决定 #if defined(_PRAXAIR_DOL_VER_) || defined(_YINGDE_DOL_VER_) || defined(_LINDE_HTTPS_DOL_VER_) #define _DOL_VER_ // 改造版 #endif #if defined(_BOX_500_2_VER_) || defined(_BOX_1000_2_VER_) || defined(_BOX_1000_3_VER_) || defined(_ZHONGHAIYOU_BOX_VER_) || defined(_BRASIL_BOX_VER_) #define _BOX_VER_ // 罐箱 #endif #if defined(_TRAIN_BOX_VER_) || defined(_LANSHI_BOX_1000_3_VER_) || defined(_DUWAPING_VER_) || defined(_DUWAPING_LANSHI_VER_) || defined(_AOYANG_BOX_VER_) #define _BOX_VER_ // 罐箱 #endif #if defined(_HUAGONG_BOX_VER_) #define _BOX_VER_ // 罐箱 #endif #if defined(_CAOCHE_VER_) || defined(_LANSHI_CAOCHE_VER_) || defined(_PCT_LEVEL_CAOCHE_VER_) #define _SEND_GPS_DATA_ // 发送轨迹数据 #endif #if defined(_PRAXAIR_TTS_VER_) || defined(_YINGDE_TTS_VER_) || defined(_LINDE_HTTPS_VER_) || defined(_FAYEKONG_TTS_VER_) || defined(_LANSHI_TTS_VER_) #define _LEVEL_SENSOR_ONLY_ // 只有差压传感器 #endif #if defined(_BOX_VER_) && !defined(_TRAIN_BOX_VER_) #define _CELL_LOCATION_ // 基站定位(在GPS定位失败的情况下) #endif #ifdef _ANJIEHUI4_CHAOYANG_VER_ #define _NO_LOCATION_ // 不定位 #endif #if defined(_PRAXAIR_TTS_VER_) || defined(_PRAXAIR_DOL_VER_) || defined(_PRAXAIR_TTS_CHARGE_VER_) || defined(_ANJIEHUI4_PRAXAIR_VER_) #define _PRAXAIR_SERVER_ // 普莱克斯服务器 #endif #if defined(_YINGDE_TTS_VER_) || defined(_YINGDE_DOL_VER_) || defined(_YINGDE_TTS_CHARGE_VER_) #define _YINGDE_SERVER_ // 盈德服务器 #endif #if defined(_BAOGANG_TTS_VER_) //#define _BAOGANG_SERVER_ // 宝钢服务器 #define _YINGDE_SERVER_ // 盈德服务器 #endif #if defined(_LINDE_HTTPS_CHARGE_VER_) || defined(_LINDE_HTTPS_VER_) || defined(_ANJIEHUI4_LINDE_VER_) || defined(_LINDE_HTTPS_DOL_VER_) || defined(_ANJIEHUI4_LINDE_ALARM_VER_) #define _LINDE_SERVER_ // 林德服务器(tcp to praxair) #endif #ifdef _FUSHIKANG_TTS_VER_ #define _FUSHIKANG_SERVER_ // 富士康服务器 #endif #ifdef _ZHONGHAIYOU_BOX_VER_ #define _ZHONGHAIYOU_SERVER_ // 中海油服务器(mqtt) #endif #if defined(_MESSER_TTS_VER_) || defined(_MESSER_TTS_CHARGE_VER_) #define _MESSER_SERVER_ // 梅塞尔服务器 #endif #if defined(_DUWAPING_LANSHI_VER_) || defined(_LANSHI_TTS_VER_) || defined(_LANSHI_CAOCHE_VER_) || defined(_LANSHI_BOX_1000_3_VER_) #define _LANSHI_SERVER_ // 兰石服务器 #endif #if defined(_LANSHI_TTS_CHARGE_VER_) || defined(_LANSHI_TTS_ALARM_VER_) || defined(_LANSHI_TTS_ANTI_VER_) || defined(_LANSHI_TTS_ANTI_SINGLE_VER_) #define _LANSHI_SERVER_ // 兰石服务器 #endif #if defined(_LANSHI_TTS_LEAK02_VER_) || defined(_LANSHI_ZNY_HEYUAN_VER_) || defined(_CIDC_MAIKE_VER_) || defined(_LANSHI_ROSEMOUNT_485TEMPR_VER_) #define _LANSHI_SERVER_ // 兰石服务器 #endif #if defined(_LANSHI_TTS_ANTI_NORM_OPEN_VER_) #define _LANSHI_SERVER_ // 兰石服务器 #endif #ifdef _TRAIN_BOX_VER_ #define _TRAIN_SERVER_ // 铁路罐箱服务器 #endif #ifdef _AOYANG_BOX_VER_ #define _AOYANG_SERVER_ // 奥扬服务器 #endif #if defined(_FURUI_TTS_CHARGE_VER_) #define _FURUI_SERVER_ // 富瑞服务器 #endif #ifdef _HUIDA_CHARGE_VER_ #define _HUIDA_SERVER_ // 汇达服务器 #endif #ifdef _HUAGONG_BOX_VER_ #define _HUAGONG_SERVER_ // 化工罐箱服务器 #endif #ifdef _ANJIEHUI4_CHAOYANG_VER_ #define _CHAOYANG_SERVER_ // 重庆朝阳服务器 #endif #if defined(_PRAXAIR_SERVER_) || (defined(_LINDE_SERVER_) && !defined(_ANJIEHUI4_LINDE_ALARM_VER_)) || defined(_CHATE_TTS_VER_) || defined(_BAOGANG_SERVER_) || defined(_CIDC_MAIKE_VER_) #define _DISP_MMWC_ONLY_ // 只显示差压(mmWC) #endif #define _USE_PT100_SENSOR_ // 用PT100温度传感器(相对4~20mA温度传感器) #if defined(_BRASIL_BOX_VER_) || defined(_TTS_TEMPR_420MA_VER_) || defined(_ANJIEHUI4_ALL_420MA_VER_) #undef _USE_PT100_SENSOR_ // 4~20mA温度传感器 #endif #if defined(_DUWAPING_VER_) || defined(_DUWAPING_LOCAL_VER_) || defined(_DUWAPING_LANSHI_VER_) || defined(_DUWAPING_LOCAL_ANTI_VER_) #undef _USE_PT100_SENSOR_ // 4~20mA温度传感器 #endif #ifdef _BOX_500_2_VER_ #define _PT100_MULTI_ 5 // 电阻放大倍数(PT100/PT500/PT1000) #else #define _PT100_MULTI_ 10 // 电阻放大倍数(PT100/PT500/PT1000) #endif #if !defined(_BOX_500_2_VER_) && !defined(_BOX_1000_2_VER_) #define _PT100_3LINE_ // 三线制电阻测量 #endif #define _DIFF_RESIST_ // 4G以后的版本都是差分测量电阻 #if defined(_DUWAPING_VER_) || defined(_DUWAPING_LOCAL_VER_) || defined(_DUWAPING_LANSHI_VER_) || defined(_DUWAPING_LOCAL_ANTI_VER_) #define _USE_CAPACITY_SENSOR_ #define _USE_PCAP04_CHIP_ #endif #if defined(_LOCAL_DISP_VER_) || defined(_LOCAL_ANTI_VER_) || defined(_DUWAPING_LOCAL_VER_) || defined(_LOCAL_DISP_1S_VER_) || defined(_LOCAL_ANTI_SINGLE_VER_) || defined(_LOCAL_ALARM_VER_) #define _LOCAL_DISP_ONLY_ // 只有本地显示 #endif #if defined(_DUWAPING_LOCAL_ANTI_VER_) || defined(_LNG_LORA_LOCAL_VER_) #define _LOCAL_DISP_ONLY_ // 只有本地显示 #endif #if defined(_LOCAL_DISP_1S_VER_) #define _LOCAL_DISP_1S_ // 本地显示1秒采集 #endif #if defined(_LOCAL_ANTI_VER_) || defined(_ANJIEHUI4_ANTI_VER_) || defined(_LANSHI_TTS_ANTI_VER_) || defined(_LOCAL_ANTI_SINGLE_VER_) || defined(_LANSHI_TTS_ANTI_SINGLE_VER_) #define _ANTI_OVER_FILL_ // 防过充 #endif #if defined(_LANSHI_TTS_ANTI_NORM_OPEN_VER_) #define _ANTI_NORM_OPEN_ // 常开防过充(气动泵) #endif #if defined(_DUWAPING_LOCAL_ANTI_VER_) #define _ANTI_OVER_FILL_ // 防过充 #endif #if defined(_DUWAPING_LOCAL_ANTI_VER_) #define _USE_PCT_CAP_ // 按增长电容输出百分比 #endif #if defined(_LOCAL_ANTI_SINGLE_VER_) || defined(_LANSHI_TTS_ANTI_SINGLE_VER_) || defined(_DUWAPING_LOCAL_ANTI_VER_) #define _ANTI_SINGLE_CTRL_ // 防过充单头电磁阀 #endif #if defined(_DUWAPING_LOCAL_ANTI_VER_) #define _ANTI_AUTO_FILL_ // 自动充装 #endif #if defined(_LANSHI_TTS_ALARM_VER_) || defined(_ANJIEHUI4_ALARM_VER_) || defined(_ANJIEHUI4_LINDE_ALARM_VER_) || defined(_LANSHI_ZNY_HEYUAN_VER_) || defined(_LOCAL_ALARM_VER_) #define _SOUND_ALARM_ // 声光报警 #endif #if defined(_LANSHI_TTS_LEAK02_VER_) || defined(_ANJIEHUI4_TTS_LEAK02_VER_) #define _USE_O2_LEAK_ // O2浓度传感器 #endif #if defined(_LANSHI_TTS_LEAK02_VER_) || defined(_LANSHI_ZNY_HEYUAN_VER_) || defined(_ANJIEHUI4_TTS_LEAK02_VER_) #define _LEAK_SOUND_ALARM_ // 泄露声光报警 #endif #if defined(_LEVEL_P2_ALARM_VER_) || defined(_LEVEL_P1_ALARM_VER_) #define _SOUND_ALARM_ // 液位高低声光报警 #define _PRESS_SOUND_ALARM_ // 压力高声光报警 #define _LOW_PRESS_SOUND_ALARM_ // 压力低声光报警 #endif #ifdef _PCT_LEVEL_CAOCHE_VER_ #define _USE_PCT_LEVEL_MA_ // 直接测液位百分比(4~20mA) #endif #ifdef _PCT_LEVEL_TTS_VER_ #define _USE_PCT_LEVEL_V_ // 直接测液位百分比(0.5~4.5v,分压一半) #endif // MQTT/HTTPS/HTTP服务器列表 extern const char SERVER_URLs[][100]; //////////////////////////////////////////////////////////////////////////////////////// // 本机主板号 extern const uint8_t CONFIG_BOARD_SELF; // 存储标识="LS" #define CONFIG_MARK_LS (('S' << 8) | 'L') // 产品标识="CY" #define CONFIG_PRODUCT_CY (('Y' << 8) | 'C') // 初始化标识 #define CONFIG_FLAG_NOT_INITED 0 #define CONFIG_FLAG_INITED 1 // 主板标识 #define CONFIG_BOARD_SINGLE 0 // 一体式 #define CONFIG_BOARD_SAMPLE 1 #define CONFIG_BOARD_POWER 2 #define CONFIG_BOARD_DISPLAY 3 #define CONFIG_BOARD_BLUETOOTH 4 // 数据编码(DC) #define CAN_DC_NONE 0 #define CAN_DC_BOTTLE_CONFIG 1 #define CAN_DC_SENSOR_CONFIG 2 #define CAN_DC_DATA_CONFIG 3 #define CAN_DC_DISPLAY_CONFIG 4 #define CAN_DC_SAMPLE_SYSINFO 5 #define CAN_DC_POWER_SYSINFO 6 #define CAN_DC_DISPLAY_SYSINFO 7 #define CAN_DC_BLUETOOTH_SYSINFO 8 #define CAN_DC_DTU_DATA 9 #define CAN_DC_SAMPLE_DATA 10 #define CAN_DC_ADC_DATA 11 // 通知命令 #define CAN_NOTIFY_RESET 0 #define CAN_NOTIFY_UPGRADE 1 #define CAN_NOTIFY_UPDATE 2 #define CAN_NOTIFY_SLEEP 3 #define CAN_NOTIFY_PING 4 #define CAN_NOTIFY_SAMPLE 5 // 储罐类型 #define BOTTLE_TYPE_STAND 0 // 立式 #define BOTTLE_TYPE_LYING 1 // 卧式 #define BOTTLE_TYPE_SPHERICAL 2 // 球型 #define SENSOR_STATUS_NORMAL 0x00 // 正常状态 #define SENSOR_STATUS_NOCONNECT 0x01 // BIT0 #define SENSOR_STATUS_UNDERFLOW 0x02 // BIT1 #define SENSOR_STATUS_OVERFLOW 0x04 // BIT2 #define SENSOR_STATUS_FULL 0x80 // BIT7 // 测量方式 #define MEASURE_DPRESS 0 #define MEASURE_WEIGHT 1 // 显示单位 #define DISP_UNIT_METRIC 0 // 公制单位 #define DISP_UNIT_ENGLISH 1 // 英制单位 // 显示模式 #define DISP_MODE_DPRESS 0 // 不显示容积和重量 #define DISP_MODE_ALL 1 // 显示容积和重量 #define DISP_MODE_L 2 // 显示容积, 不显示重量 #define DISP_MODE_KG 3 // 显示重量, 不显示容积 // 奇偶校验方式 #define PARITY_NONE 'n' #define PARITY_SPACE 's' #define PARITY_MARK 'm' #define PARITY_ODD 'o' #define PARITY_EVEN 'e' // 运营商网络类型 #define NET_TYPE_2G '2' #define NET_TYPE_3G '3' #define NET_TYPE_4G '4' #define NET_TYPE_GPRS 'G' #define NET_TYPE_CDMA 'C' #define NET_TYPE_EDGE 'E' // 真空传感器状态 #define VACUUM_STATUS_FAULT 0 // 故障 #define VACUUM_STATUS_OK 1 // 正常 #define VACUUM_STATUS_COMM_FAULT 255 // 通讯故障 // 泄露报警器状态 #define LEAK_STATUS_OK 0 // 正常 #define LEAK_STATUS_FAULT 1 // 故障 #define LEAK_STATUS_A1_ALARM 2 // 低限报警 #define LEAK_STATUS_A2_ALARM 3 // 高限报警 #define LEAK_STATUS_COMM_FAULT 255 // 通讯故障 // 泄漏报警器类型(按位掩码) #define LEAK_TYPE_SWITCH 1 // 开关型 #define LEAK_TYPE_CURRENT 2 // 电流型 #define LEAK_TYPE_MODBUS 4 // Modubs总线型 // 服务器类型 #define SERVER_PROTOCOL_TCP 0 // TCP上传 #define SERVER_PROTOCOL_MQTT 1 // MQTT上传 #define SERVER_PROTOCOL_HTTPS 2 // HTTPS上传 #define SERVER_PROTOCOL_HTTP 3 // HTTP上传 #define SERVER_PROTOCOL_TRAIN 4 // 铁路罐箱上传 #define SERVER_PROTOCOL_AOYANG 5 // 奥扬协议上传 #define SERVER_PROTOCOL_FURUI 7 // 富瑞协议上传 #define SERVER_PROTOCOL_HUIDA 8 // 汇达协议上传 #define SERVER_PROTOCOL_CHAOYANG 9 // 重庆朝阳(正略公司)上传 // 产品类别 #define PRODUCT_CLASS_LEVEL 0 // 液位计 #define PRODUCT_CLASS_H2PRESS 1 // 氢压力 // 定位方式 #define LOCATE_TYPE_NONE 0 // 无定位 #define LOCATE_TYPE_GPS 1 // 卫星定位 #define LOCATE_TYPE_BS 2 // 基站定位 // 最大缓冲区大小 #define DATA_BUFF_SIZE 128 // 称重传感器参数 typedef struct { uint32_t lowRange; // 下量程 uint32_t highRange; // 上量程 uint32_t zeroValue; // 校零值 uint32_t fullValue; // 校满值 } weight_param_t; // 差压/压力传感器参数 typedef struct { uint16_t lowRange; // 下量程 union { uint16_t highRange; // 上量程 struct { unsigned highRangeX10 : 15; // 放大了10倍的量程 unsigned ishighRangeX10 : 1; // 量程是否放大了10倍 }; }; uint16_t zeroValue; // 校零值 uint16_t fullValue; // 校满值 } press_param_t; // 电容K值(校准变送器的测量系统),及传感器参数(底电容,满电容) typedef struct { uint16_t c1ADC; // 电容c1标定ADC值 uint16_t c2ADC; // 电容c2标定ADC值 uint16_t baseC; // 底电容(pF) uint16_t refC; // 增长电容(pF) } capacity_param_t; // 温度传感器参数 typedef struct { int16_t lowRange; // 下量程 int16_t highRange; // 上量程 uint16_t zeroValue; // 校零值 uint16_t fullValue; // 校满值 } tempr_param_t; // PT100铂电阻温度传感器参数 typedef struct { int16_t calibrateT; // 校准温度,放大10倍 int16_t calibrateR; // 校准电阻,放大10倍 uint16_t zeroValue; // 校零值(-200℃的ADC值)(PT100由校准值计算理论值) uint16_t fullValue; // 校满值(80℃的ADC值) (PT100由校准值计算理论值) } pt100_param_t; // 真空计数据 typedef struct { uint8_t staVacuum; // 真空计状态 unsigned : 8; uint16_t lifeVacuum; // 真空计使用年限 float vacuum; // 真空度 float rateVacuum; // 漏放气速率 } vacuum_data_t; // 泄露报警器数据 typedef struct // size = 4 { uint8_t typeLeak; // 泄露报警器类型 uint8_t staLeak; // 泄露报警器状态 uint16_t concentrations; // 气体浓度 } leak_data_t; // 流量计数据 typedef struct // size = 22 { uint8_t nM3[6]; // 标况体积总量(BCD码,放大100倍) uint8_t nM3_h[4]; // 标况流量(BCD码,放大100倍) uint8_t M3_h[4]; // 工况流量(BCD码,放大100倍) uint8_t tempr[4]; // 温度(BCD码,放大100倍,第一字节为符号: 80H 为负,00H 为正) uint8_t pressure[4]; // 压力(BCD码,放大100倍) } flow_data_t; typedef union { uint8_t status; struct { unsigned notConnect : 1; // 连接状态 unsigned underFlow : 1; // 是否下溢出 unsigned overFlow : 1; // 是否上溢出 unsigned : 4; unsigned full : 1; // 是否满 }; } sensor_status_t; // 版本号 typedef struct { uint8_t major; // 主版本号 uint8_t minor; // 次版本号 } version_t; // 日期 typedef struct { uint8_t year; uint8_t month; uint8_t day; } date_t; // 时间 typedef struct { uint8_t hour; uint8_t minute; uint8_t second; } time_t; // 日期时间 typedef struct { uint8_t year; uint8_t month; uint8_t day; uint8_t hour; uint8_t minute; uint8_t second; } date_time_t; // 配置区头信息 typedef struct { uint16_t mark; //="LS",存储标识 uint16_t product; //="CY",产品标识 uint8_t DC; // 数据编码 unsigned : 8; version_t ver; // 存储格式版本号 } config_header_t; // 配置区1-储罐参数 typedef struct { config_header_t header; // 头信息 uint16_t serverVer; // 服务器参数版本号 uint8_t updateFlag; // 参数更新标志 uint8_t addr; // 通信地址 uint8_t PSN[6]; // PSN uint8_t type; // 储罐类型 uint8_t source; // 液源 uint16_t len; // 圆柱体长度 uint16_t diameter; // 内径 uint16_t lenExtra; // 直边封头长度 float density[5]; // 各液源的比重, 单位g/cm3 uint8_t chargePct; // 充装比 uint8_t measureType;// 测量方式 uint16_t fullPct; // 满液位百分比 uint16_t priPct; // 关键液位百分比 uint16_t orderPct; // 订货液位百分比 uint16_t emptyPct; // 空液位百分比 uint32_t planMount; // 每日计划用量 uint32_t predictMount; // 每日预测用量 uint16_t warnVolt; // 电压报警低点: 10mV uint16_t warnVoltH; // 电压报警高点: 10mV uint16_t warnPress; // 压力报警低点: KPa uint16_t warnPressH; // 压力报警高点: KPa uint32_t options; // 参数开关 uint32_t ts; // 参数时间戳 unsigned dispMode : 2; // 显示模式 unsigned hideVacu : 1; // 隐藏真空显示 unsigned : 5; unsigned : 8; union // size = 6 { struct // Praxair { uint16_t floorLevel; // praxair: 液量报警下限 uint16_t span; // praxair: 液量变化报警门限 uint16_t spanPeriod; // praxair: 液量变化报警时间 }; struct // Others { uint16_t warnVacuumH; // 温度报警上限 int16_t warnTempr; // 温度报警下限 int16_t warnTemprH; // 温度报警上限 }; }; // 铁路罐箱新增配置 struct // size = 18 { char tankId[12]; // 集装箱编号(11位ASCII码) uint32_t moduleId; // 模块Id uint16_t appId; // 应用Id } train; union { uint8_t reserved[20]; uint16_t densityExt[8]; // 各液源的比重(新增介质, 单位kg/m3) }; uint16_t crc; } config_bottle_t; // 配置区2-传感器参数 typedef struct { config_header_t header; // 头信息 unsigned : 8; unsigned : 8; weight_param_t sensorWeight; // 称重传感器 union { press_param_t sensorDPress; // 差压传感器 capacity_param_t sensorCap; // 电容传感器参数 }; press_param_t sensorPress; // 压力传感器 press_param_t sensorEPress[3];// 扩展压力传感器 union { tempr_param_t sensorMTempr[3];// 扩展温度传感器-4~20mA pt100_param_t sensorPTempr[3];// 扩展温度传感器-PT100 }; uint8_t sensor; // 传感器种类 0-杜瓦瓶,1-车载瓶中电容 uint8_t reserved[35]; uint16_t crc; } config_sensor_t; // 配置区3-数据参数 typedef struct { config_header_t header; // 头信息 unsigned : 8; unsigned : 8; char reserved[8]; char server[30]; // 数据服务器 int16_t port; // 数据端口 union { struct { char gpsServer[30]; // 轨迹服务器 int16_t gpsPort; // 轨迹端口 }; struct // 铁总的服务器 { char mtupServer[30]; // 铁总服务器 int16_t mtupPort; // 铁总端口 } train; }; uint16_t intervalSample; // 数据采集周期 uint32_t intervalTrans; // 数据上报周期 uint16_t intervalGPS; // 位置采集周期 uint16_t intervalGPSTrans; // 位置上报周期 int8_t timeLag; // 时差,默认为+8 unsigned : 8; char upgServer[30]; // 升级服务器 int16_t upgPort; // 升级端口 uint16_t crc; } config_data_t; // 配置区4-显示屏参数 typedef struct { config_header_t header; // 头信息 unsigned : 8; unsigned : 8; uint16_t lightDelay; // 背光延时 uint16_t dispDelay; // 显示屏延时 uint8_t unit; // 显示单位(公制、英制) uint8_t L_Unit; // 显示单位(UNIT_KPA, UNIT_KG, UNIT_L, UNIT_PCT, UNIT_MMH2O) char pwd1[6]; // 储罐参数修改密码 char pwd2[6]; // 传感器标定密码 char APN[20]; // 运营商APN uint32_t bdCommander; // 北斗指挥机卡号 struct { uint8_t op_HARDWARE_VER_MAJOR; // 硬件配置(不同客户和选项的组合) uint8_t op_DISP_MMWC_ONLY; uint8_t op_DOL_VER; uint8_t op_BOX_VER; unsigned op_CELL_LOCATION : 1; // 基站定位 unsigned op_NO_LOCATION : 1; // 不定位 unsigned : 6; uint8_t op_LEVEL_SENSOR_ONLY; uint8_t op_USE_PT100_SENSOR; uint8_t op_PT100_MULTI; uint8_t op_PT100_3LINE; uint8_t op_DIFF_RESIST; unsigned op_SEND_GPS_DATA : 1; unsigned : 6; unsigned op_ANTI_NORM_OPEN : 1; // 防过充常开泵(气动关闭) unsigned op_USE_CAPACITY_SENSOR : 1; unsigned op_LOW_ALARM_OUTPUT : 1; // 低液位声光报警功能 unsigned op_PRESS_ALARM_OUTPUT : 1; // 压力声光报警 unsigned op_LOW_PRESS_ALARM_OUTPUT : 1; // 低压力声光报警 unsigned op_ANTI_SINGLE_CTRL : 1; // 防过充单头电磁阀 unsigned op_ANTI_AUTO_FILL : 1; // 防过充低液位自动充装 unsigned op_USE_PCT_CAP : 1; // 按增长电容输出百分比 unsigned op_LOCAL_DISP_1S : 1; // 本地显示1秒采集 unsigned : 1; // 保留,不要占用 unsigned op_USE_R0SEMOUNT : 1; // 罗斯蒙特传感器 unsigned op_USE_SOLAR : 1; // 有太阳能 unsigned op_USE_O2_LEAK : 1; // 氧传感器 unsigned op_LEAK_ALARM_OUTPUT : 1; // 泄露报警输出 unsigned op_USE_DOL_TTL : 1; // DOL数字输出传感器 unsigned op_USE_HEIGHT_LEVEL : 1;// 直接测液位高度 unsigned op_USE_PCT_LEVEL: 1; // 直接测液位百分比 uint8_t op_SERVER_PROTOCOL; // 服务器协议:0-TCP; 1-MQTT; 2-HTTPS; 3-HTTP; 4-TRAIN; 5-AOYANG uint8_t op_SERVER_INDEX; // 服务器地址索引 unsigned op_UNIDIR_COMM : 1; // 不支持双向通信 unsigned op_LOCAL_DISP : 1; // 只有本地显示 unsigned op_ANTI_OVERFILL : 1; // 防过充功能 unsigned op_ALARM_OUTPUT : 1; // 高液位声光报警功能 unsigned op_DIFF_420MA : 1; // 差压传感器为4~20mA unsigned op_PRESS_420MA : 1; // 压力传感器为4~20mA unsigned op_2ND_420MA_OUT_LEVEL : 1; // 第2路4~20mA输出液位 unsigned : 1; uint8_t op_PRODUCT_CLASS; // 0-差压计版本,1-氢压力版本 unsigned op_TRAIN : 1; // 铁路罐箱版本 unsigned op_TIGER : 1; // 老虎燃气版本 unsigned : 2; unsigned op_LNG_LORA: 1; // LNG-LORA版本 unsigned : 3; }; union { uint8_t reserved[56]; struct // size = 52, 铁路罐箱新增配置 { char reserved[12]; // 集装箱编号(11位ASCII码)(移到储罐配置去了) int16_t intervalTransAlarm; // 预警上传周期(分钟) int16_t regTimeout; // 网络注册时间超时(秒) int16_t gpsTimeout; // 定位时间超时(秒) int16_t sendTimeout; // 数据发送时间超时(秒) int16_t motionThreshold; // 加速度动静阈值mg int16_t leakAlarm; // 可燃气体浓度预警阀值(预留) int16_t temprAlarm; // 温度预警阀值(℃) int32_t diffCaliRatio; // 差压校准系 int32_t pressCaliRatio; // 气相压力通道校准系数 int32_t temprCaliRatio; // 液相温度通道校准系数 int32_t leakCaliRatio; // 泄漏浓度通道校准系数(预留) int32_t vaccumCaliRatio; // 真空度通道校准系数(预留) int16_t pressCompensate; // 气相压力补偿 int16_t diffCompensate; // 差压补偿 int8_t gpsEnabled; // GPS 开关 int8_t loraDisabled; // lora 开关 } train; }; uint16_t crc; } config_display_t; // 采集板系统信息 typedef struct { uint8_t boardFlag; // 主板标识 unsigned : 8; version_t hardVer; version_t softVer; date_t softDate; unsigned : 8; } sysinfo_sample_t; // 电源板系统信息 typedef struct { uint8_t boardFlag; // 主板标识 unsigned : 8; version_t hardVer; version_t softVer; date_t softDate; char parity; // 奇偶校验方式 uint32_t baudrate; // DTU波特率 version_t protocolVer; // 远传协议版本号 char simNumber[24]; // sim卡号 uint32_t gprsSendCount; // GPRS发送次数 uint32_t gprsSuccCount; // GPRS成功次数 char gprsFailCode[6]; // GPRS失败代码 uint32_t bdNumber; // 北斗卡号 } sysinfo_power_t; // 显示板系统信息 typedef struct { uint8_t boardFlag; // 主板标识 unsigned : 8; version_t hardVer; version_t softVer; date_t softDate; unsigned : 8; } sysinfo_display_t; // 蓝牙板系统信息 typedef struct { uint8_t boardFlag; // 主板标识 unsigned : 8; version_t hardVer; version_t softVer; date_t softDate; char parity; // 奇偶校验方式 uint32_t baudrate; // 蓝牙模块波特率 version_t protocolVer; // 蓝牙协议版本 char moduleName[20]; // 蓝牙模块名称 } sysinfo_bluetooth_t; // DTU采集数据 typedef struct // size = 56 { date_time_t sysTime; // 系统时间, size = 6 int32_t longitude; // 经度 int32_t latitude; // 维度 uint16_t speed; // 速度 uint8_t rssi; // GPRS信号强度 uint8_t networked; // 是否入网 uint8_t connected; // 是否连上服务器 uint8_t netType; // 网络类型 uint8_t posState; // GPS定位状态 uint8_t sateCount; // GPS卫星数量 uint8_t batPct; // 电池电量百分比 uint8_t batLow; // 低电量标志 int16_t batVoltage; // 电池电压 uint16_t batMaxCapa; // 电池总容量 uint16_t batCapa; // 电池容量 int16_t batCurrent; // 电池充/放电流 int16_t batTempr; // 电池温度 int16_t sunLevel; // 光照强度 struct //size = 20, 铁路罐箱新增采集信息 { int16_t countryId; // 基站国家编号 int16_t ispId; // 运营商编号 int16_t areaId; // 区域编号 int32_t cellId; // 基站编号 int8_t genNo; // 网络版本2G/3G/4G int8_t bandNo; // 通信网络频段信息 // 2G 为-1 // 3G 为(wcdma(1-8(波段) tdscdma(9(a 波段) 10(f波段) 11(e 波段))) // 4G (1-43(波段)) int16_t regTime; // 网络注册时间(秒) int16_t locateTime; // 定位搜星时间(秒) int16_t elevation; // 海拔(米) int8_t dBm; // 绝对信号强度 int8_t locateType; // 定位方式(0: 无定位,1:卫星定位,2:基站定位) } train; } data_dtu_t; // 采集板采集数据 typedef struct // size = 126 { uint32_t volumeTotal; // 储罐容积 sensor_status_t staWeight; // 称重传感器状态, size = 1 sensor_status_t staDPress; // 差压/电容传感器状态 sensor_status_t staPress; // 压力传感器状态 sensor_status_t staExtPress[3]; // 扩展压力传感器状态 sensor_status_t staExtTempr[3]; // 扩展温度传感器状态 unsigned : 8; float diff; // 差压/电容 float height; // 液位高度 uint32_t volume; // 容积 uint32_t weight; // 重量 uint16_t volumePct; // 容积百分比 uint16_t pressure; // 压力 uint16_t extPressure[3]; // 扩展压力 int16_t extTempr[3]; // 扩展温度 vacuum_data_t vacuum[2]; // 真空传感器数据(A、B),size = 12 x 2 leak_data_t leak; // 泄露报警器数据, size = 4 flow_data_t flow; // 流量计数据,size = 22 uint32_t adWeight; // 称重传感器AD转换值 uint16_t adDPress; // 差压传感器AD转换值 uint16_t adPress; // 压力传感器AD转换值 uint16_t adExtPress[3]; // 扩展压力传感器AD转换值 uint16_t adExtTempr[3]; // 扩展温度传感器AD转换值 uint8_t charging; // 充装标志 uint8_t warnning; // 报警标志 struct //size = 8, 铁路罐箱新增采集信息 { int8_t cpuTempr; // cpu 温度(℃) int8_t tranMode; // 工作状态0x00 正常发送0x01 预警发送 int16_t x_accelerate; // X 轴方向值 int16_t y_accelerate; // Y 轴方向值 int16_t z_accelerate; // Z 轴方向值 } train; } data_sample_t; // adc值 typedef struct { uint16_t adcDiff; // 差压ADC值 uint16_t adcPress; // 压力ADC值 uint16_t adcEPress[3]; // 扩展压力ADC值 uint16_t adcETempr[3]; // 扩展温度ADC值 uint32_t adcWeight; // 称重ADC值 } adc_sample_t; // 定义缓冲区,用于CAN通讯或Flash读写 typedef union { // 字节缓冲,用于通信过程中读写 uint8_t buff[DATA_BUFF_SIZE]; // 字缓冲 uint16_t buff16[DATA_BUFF_SIZE / sizeof(uint16_t)]; // 双字缓冲,用于读写Flash uint32_t buff32[DATA_BUFF_SIZE / sizeof(uint32_t)]; // 用于检查配置是否有效 config_header_t header; // 头信息 // 数据结构,用于字段解析 config_bottle_t configBottle; config_sensor_t configSensor; config_data_t configData; config_display_t configDisplay; sysinfo_sample_t sampleInfo; sysinfo_power_t powerInfo; sysinfo_display_t displayInfo; sysinfo_bluetooth_t bluetoothInfo; data_dtu_t dtuData; data_sample_t sampleDdata; adc_sample_t adcData; } rd_buff_t; // 用于存储数据 typedef struct { config_bottle_t configBottle; config_sensor_t configSensor; config_data_t configData; config_display_t configDisplay; sysinfo_sample_t sampleInfo; sysinfo_power_t powerInfo; sysinfo_display_t displayInfo; sysinfo_bluetooth_t bluetoothInfo; data_dtu_t dtuData; data_sample_t sampleData; adc_sample_t adcData; } data_buff_t; #pragma pack(pop) // 各个数据块的长度 #define CONFIG_DATA_LEN(DC) Config_DataLen[(DC) - 1] #define CONFIG_DATA_PTR(DC) Config_DataPtr[(DC) - 1] extern const uint8_t Config_DataLen[]; extern const void* Config_DataPtr[]; // 各个配置区的内存 extern data_buff_t dcBuff; uint32_t Config_CheckValid(rd_buff_t *dataBuff, uint8_t DC); void Config_ForceValid(rd_buff_t *dataBuff, uint8_t DC); // 检查参数修改标志 uint32_t Config_CheckUpdate(data_buff_t *dataBuff); // 设置储罐参数的默认值 void Config_setBottleDefParam(data_buff_t *dataBuff); // 设置传感器参数的默认值 void Config_setSensorDefParam(data_buff_t *dataBuff); // 设置数据参数的默认值 void Config_setDataDefParam(data_buff_t *dataBuff); // 设置显示参数的默认值 void Config_setDisplayDefParam(data_buff_t *dataBuff); // 填充采集板系统信息 void Config_fillSampleInfo(data_buff_t *dataBuff); // 填充电源板系统信息 void Config_fillPowerInfo(data_buff_t *dataBuff); // 填充显示板系统信息 void Config_fillDisplayInfo(data_buff_t *dataBuff); // 填充蓝牙板系统信息 void Config_fillBluetoothInfo(data_buff_t *dataBuff); // 多项式为x16+x15+x2+1,LSB顺序 uint16_t do_crc_16(unsigned short crc_reg, uint8_t *message, int16_t len); #endif