ShipCentralControl/Anjiehui7_DTU/User/def_data.h

521 lines
13 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*********************************************************************************************************
* 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 "type.h"
// 允许匿名结构
#pragma anon_unions
#pragma pack(push, 1)
// 本机主板号
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 MEASURE_DPRESS 0
#define MEASURE_WEIGHT 1
// 显示单位
#define DISP_UNIT_METRIC 0 // 公制单位
#define DISP_UNIT_ENGLISH 1 // 英制单位
// 显示模式
#define DISP_MODE_ALL 1 // 显示全部
#define DISP_MODE_DPRESS 0 // 不显示容积和重量
#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 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; // 下量程
uint16_t highRange; // 上量程
uint16_t zeroValue; // 校零值
uint16_t fullValue; // 校满值
} press_param_t;
// 温度传感器参数
typedef struct
{
int16_t lowRange; // 下量程
int16_t highRange; // 上量程
uint16_t zeroValue; // 校零值
uint16_t fullValue; // 校满值
} tempr_param_t;
// 真空计数据
typedef struct
{
uint8_t staVacuum; // 真空计状态
unsigned : 8;
uint16_t lifeVacuum; // 真空计使用年限
float vacuum; // 真空度
float rateVacuum; // 漏放气速率
} vacuum_data_t;
// 泄露报警器数据
typedef struct
{
uint8_t typeLeak; // 泄露报警器类型
uint8_t staLeak; // 泄露报警器状态
uint16_t concentrations; // 气体浓度
} leak_data_t;
typedef union
{
uint8_t status;
struct
{
unsigned notConnect : 1; // 连接状态
unsigned underFlow : 1; // 是否下溢出
unsigned overFlow : 1; // 是否上溢出
unsigned : 5;
};
} 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]; // 各液源的比重
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; // 参数时间戳
uint8_t dispMode; // 显示模式
unsigned : 8;
struct // Others
{
uint16_t warnVacuumH; // 温度报警上限
int16_t warnTempr; // 温度报警下限
int16_t warnTemprH; // 温度报警上限
};
uint8_t reserved[32];
uint16_t lora_freq;
uint32_t offlineSeconds; // 离线判别时间(中继器本地用)
uint16_t crc;
} config_bottle_t;
// 配置区2-传感器参数
typedef struct
{
config_header_t header; // 头信息
unsigned : 8;
unsigned : 8;
weight_param_t sensorWeight; // 称重传感器
press_param_t sensorDPress; // 差压传感器
press_param_t sensorPress; // 压力传感器
press_param_t sensorEPress[3];// 扩展压力传感器
tempr_param_t sensorETempr[3];// 扩展温度传感器
uint8_t reserved[36];
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; // 数据端口
char gpsServer[30]; // 轨迹服务器
int16_t gpsPort; // 轨迹端口
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[8]; // 运营商APN
uint8_t ch_en;
uint8_t reserved[89];
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卡号
char dtuRevison[24]; // 4G模块固件版本号
char imeiNumber[16]; // 4G模块IMEI编号
uint32_t gprsSendCount; // GPRS发送次数
uint32_t gprsSuccCount; // GPRS成功次数
char gprsFailCode[6]; // GPRS失败代码
} 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 = 36
{
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; // 光照强度
} data_dtu_t;
// 采集板采集数据
typedef struct // size = 118
{
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[1]; // 真空传感器数据A、Bsize = 16 x 1
uint8_t reserved[8]; // 保留真空计增加了温度字段由2路改为1路保留原大小
leak_data_t leak; // 泄露报警器数据, size = 4
uint8_t reserved_flow[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; // 报警标志
} 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