ShipCentralControl/Anjiehui7_DTU/User/def_data.c

368 lines
12 KiB
C
Raw Permalink 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.c
* Version : V1.00
* Programmer(s) : Qian Xianghong
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#include "includes.h"
// 兰石版本
//#define _LANSHI_VER_
// 硬件版本号
const uint8_t HARDWARE_VER_MAJOR = 1;
const uint8_t HARDWARE_VER_MINOR = 137; // 罐箱RF网关
// 软件版本号
const uint8_t SOFTWARE_VER_MAJOR = 1;
const uint8_t SOFTWARE_VER_MINOR = 1; // 罐箱RF网关
// 软件日期
const uint8_t SOFTWARE_DATE_YEAR = 25;
const uint8_t SOFTWARE_DATE_MONTH = 5;
const uint8_t SOFTWARE_DATE_DAY = 16;
// 存储格式版本号=1.1
const uint8_t CONFIG_FORMAT_VER_MAJOR = 1;
const uint8_t CONFIG_FORMAT_VER_MINOR = 1; // 新结构整体式,带双向通信
// 远传协议版本号
const uint8_t REPORT_PROTOCOL_VER_MAJOR = 0;
// 0: 压力单位为bar1压力单位为KPa, 107: 支持历史数据发送
const uint8_t REPORT_PROTOCOL_VER_MINOR = 107;
// DTU参数
const uint32_t DTU_BAUDRATE = 9600ul;
const uint8_t DTU_PARITY = PARITY_NONE;
// 蓝牙协议版本号
const uint8_t BLUETOOTH_PROTOCOL_VER_MAJOR = 1;
const uint8_t BLUETOOTH_PROTOCOL_VER_MINOR = 0;
// 蓝牙参数
const uint32_t BLUETOOTH_BAUDRATE = 9600ul;
const uint8_t BLUETOOTH_PARITY = PARITY_NONE;
// 存放全部配置和采集数据的结构体
data_buff_t dcBuff = {0};
// 各个数据块的长度
const uint8_t Config_DataLen[] =
{
sizeof(config_bottle_t),
sizeof(config_sensor_t),
sizeof(config_data_t),
sizeof(config_display_t),
sizeof(sysinfo_sample_t),
sizeof(sysinfo_power_t),
sizeof(sysinfo_display_t),
sizeof(sysinfo_bluetooth_t),
sizeof(data_dtu_t),
sizeof(data_sample_t),
sizeof(adc_sample_t),
};
// 各个数据区的地址
const void* Config_DataPtr[] =
{
&dcBuff.configBottle,
&dcBuff.configSensor,
&dcBuff.configData,
&dcBuff.configDisplay,
&dcBuff.sampleInfo,
&dcBuff.powerInfo,
&dcBuff.displayInfo,
&dcBuff.bluetoothInfo,
&dcBuff.dtuData,
&dcBuff.sampleData,
&dcBuff.adcData,
};
// 液体密度LNG=0.42g/cm3=420kg/m3
// O2=1.143g/cm3=1143kg/m3
// N2=0.81g/cm3=810kg/m3
// AR=1.402g/cm3=1402kg/m3
// CO2=1.024g/cm3=1024kg/m3
const float LSrc_Density[] = {0.42, 1.143, 0.81, 1.402, 1.024}; // 单位kg/L
// 多项式为x16+x15+x2+1,LSB顺序
uint16_t do_crc_16(unsigned short crc_reg, uint8_t *message, int16_t len)
{
int16_t i, j;
uint16_t current;
for (i = 0; i < len; i++)
{
current = message[i];
for (j = 0; j < 8; j++)
{
if ((crc_reg ^ current) & 0x0001)
crc_reg = (crc_reg >> 1) ^ 0xA001;
else
crc_reg >>= 1;
current >>= 1;
}
}
return crc_reg;
}
// 检查固定的字段
uint32_t Config_CheckValid(rd_buff_t *rdBuff, uint8_t DC)
{
if(rdBuff->header.mark != CONFIG_MARK_LS)
return FALSE;
if(rdBuff->header.product != CONFIG_PRODUCT_CY)
return FALSE;
if(rdBuff->header.DC != DC)
return FALSE;
if(rdBuff->header.ver.major != CONFIG_FORMAT_VER_MAJOR || rdBuff->header.ver.minor != CONFIG_FORMAT_VER_MINOR)
return FALSE;
if(do_crc_16(0, rdBuff->buff, CONFIG_DATA_LEN(DC)) != 0)
return FALSE;
return TRUE;
}
// 写入固定的字段
void Config_ForceValid(rd_buff_t *rdBuff, uint8_t DC)
{
uint8_t pos = CONFIG_DATA_LEN(DC) - 2;
rdBuff->header.mark = CONFIG_MARK_LS;
rdBuff->header.product = CONFIG_PRODUCT_CY;
rdBuff->header.DC = DC;
rdBuff->header.ver.major = CONFIG_FORMAT_VER_MAJOR;
rdBuff->header.ver.minor = CONFIG_FORMAT_VER_MINOR;
*(uint16_t *) (rdBuff->buff + pos) = do_crc_16(0, rdBuff->buff, pos);
}
// 设置储罐参数的默认值
void Config_setBottleDefParam(data_buff_t *dataBuff)
{
uint8_t i;
memset(&dataBuff->configBottle, 0, sizeof(dataBuff->configBottle));
dataBuff->configBottle.serverVer = 0; // 服务器参数版本号
dataBuff->configBottle.updateFlag = 1; // 参数更新标志
dataBuff->configBottle.addr = 1;
dataBuff->configBottle.type = BOTTLE_TYPE_STAND;
dataBuff->configBottle.source = SOURCE_N2;
dataBuff->configBottle.len = 10000;
dataBuff->configBottle.diameter = 2650;
dataBuff->configBottle.lenExtra = 0;
for(i = 0; i < sizeof(dataBuff->configBottle.density) / sizeof(float); i++)
dataBuff->configBottle.density[i] = LSrc_Density[i];
dataBuff->configBottle.chargePct = 90;
dataBuff->configBottle.measureType = MEASURE_DPRESS;
// 以下参数如为0则表示无效
dataBuff->configBottle.fullPct = dataBuff->configBottle.chargePct * 100; // 满液位百分比
dataBuff->configBottle.priPct = 0; // 关键液位百分比
dataBuff->configBottle.orderPct = 0; // 订货液位百分比
dataBuff->configBottle.emptyPct = 0; // 空液位百分比
dataBuff->configBottle.planMount = 0; // 每日计划用量
dataBuff->configBottle.predictMount = 0; // 每日预测用量
dataBuff->configBottle.warnVolt = 0; // 电压报警低点: 10mV
dataBuff->configBottle.warnVoltH = 0; // 电压报警高点: 10mV
dataBuff->configBottle.warnPress = 300; // 压力报警低点: KPa
dataBuff->configBottle.warnPressH = 0; // 压力报警高点
dataBuff->configBottle.options = 0x0003; // 参数开关
dataBuff->configBottle.ts = 0; // 参数时间戳
dataBuff->configBottle.dispMode = DISP_MODE_ALL; // 显示模式
// 设置报警的默认参数
dataBuff->configBottle.emptyPct = 0;
dataBuff->configBottle.fullPct = 9800;
dataBuff->configBottle.warnPress = 50;
dataBuff->configBottle.warnPressH = 650;
dataBuff->configBottle.warnTempr = -162;
dataBuff->configBottle.warnTemprH = 50;
dataBuff->configBottle.offlineSeconds = 14400;
dataBuff->configBottle.lora_freq=0;
Config_ForceValid((rd_buff_t *) &dataBuff->configBottle, CAN_DC_BOTTLE_CONFIG);
}
// 设置传感器参数的默认值
void Config_setSensorDefParam(data_buff_t *dataBuff)
{
uint8_t i;
memset(&dataBuff->configSensor, 0, sizeof(dataBuff->configSensor));
dataBuff->configSensor.sensorWeight.lowRange = 0;
dataBuff->configSensor.sensorWeight.highRange = 100000ul; // 100000kg
dataBuff->configSensor.sensorWeight.zeroValue = 84030ul; // 经验值
dataBuff->configSensor.sensorWeight.fullValue = 1613530ul; // 经验值
dataBuff->configSensor.sensorDPress.lowRange = 0; // 0KPa
dataBuff->configSensor.sensorDPress.highRange = 50; // 50KPa
dataBuff->configSensor.sensorDPress.zeroValue = 683; // 理论值0.5v / 3.0v
dataBuff->configSensor.sensorDPress.fullValue = 3823; // 理论值2.8v / 3.0v
dataBuff->configSensor.sensorPress.lowRange = 0; // 0MPa
dataBuff->configSensor.sensorPress.highRange = 4000; // 4MPa
dataBuff->configSensor.sensorPress.zeroValue = 683; // 理论值0.5v / 3.0v
dataBuff->configSensor.sensorPress.fullValue = 3823; // 理论值2.8v / 3.0v
for(i = 0; i < sizeof(dataBuff->configSensor.sensorEPress) / sizeof(press_param_t); i++)
{
dataBuff->configSensor.sensorEPress[i].lowRange = 0; // 0MPa
dataBuff->configSensor.sensorEPress[i].highRange = 4000; // 4MPa
dataBuff->configSensor.sensorEPress[i].zeroValue = 710; // 理论值4mA * 130Ω / 3.0v
dataBuff->configSensor.sensorEPress[i].fullValue = 3550; // 理论值20mA * 130Ω / 3.0v
}
for(i = 0; i < sizeof(dataBuff->configSensor.sensorETempr) / sizeof(tempr_param_t); i++)
{
dataBuff->configSensor.sensorETempr[i].lowRange = -200; // -200℃
dataBuff->configSensor.sensorETempr[i].highRange = 80; // 80℃
dataBuff->configSensor.sensorETempr[i].zeroValue = 710; // 理论值4mA * 130Ω / 3.0v
dataBuff->configSensor.sensorETempr[i].fullValue = 3550; // 理论值20mA * 130Ω / 3.0v
}
Config_ForceValid((rd_buff_t *) &dataBuff->configSensor, CAN_DC_SENSOR_CONFIG);
}
// 设置数据参数的默认值
void Config_setDataDefParam(data_buff_t *dataBuff)
{
memset(&dataBuff->configData, 0, sizeof(dataBuff->configData));
#ifndef _LANSHI_VER_
strcpy(dataBuff->configData.server, "data.ajhiot.com"); // 2021.03.31修改
dataBuff->configData.port = 8088;
#else
strcpy(dataBuff->configData.server, "pazx.cd-ls.cn");
dataBuff->configData.port = 8088;
#endif
#ifndef _LANSHI_VER_
strcpy(dataBuff->configData.gpsServer, "track.ajhiot.com");
dataBuff->configData.gpsPort = 8070;
#else
strcpy(dataBuff->configData.gpsServer, "track.cd-ls.cn");
dataBuff->configData.gpsPort = 8070;
#endif
dataBuff->configData.intervalSample = 300;
dataBuff->configData.intervalTrans = 3600;
dataBuff->configData.intervalGPS = 4;
dataBuff->configData.intervalGPSTrans = 60;
dataBuff->configData.timeLag = 8;
strcpy(dataBuff->configData.upgServer, "extra.cd-ls.cn");
dataBuff->configData.upgPort = 7006;
Config_ForceValid((rd_buff_t *) &dataBuff->configData, CAN_DC_DATA_CONFIG);
}
// 设置显示参数的默认值
void Config_setDisplayDefParam(data_buff_t *dataBuff)
{
memset(&dataBuff->configDisplay, 0, sizeof(dataBuff->configDisplay));
dataBuff->configDisplay.lightDelay = 0;
dataBuff->configDisplay.dispDelay = 30;
dataBuff->configDisplay.unit = DISP_UNIT_METRIC;
strcpy(dataBuff->configDisplay.pwd1, "2222"); // 储罐参数修改密码
strcpy(dataBuff->configDisplay.pwd2, "3003"); // 传感器标定密码
strcpy(dataBuff->configDisplay.APN, "CMIOT");
Config_ForceValid((rd_buff_t *) &dataBuff->configDisplay, CAN_DC_DISPLAY_CONFIG);
}
// 填充采集板系统信息
void Config_fillSampleInfo(data_buff_t *dataBuff)
{
memset(&dataBuff->sampleInfo, 0, sizeof(dataBuff->sampleInfo));
dataBuff->sampleInfo.boardFlag = CONFIG_BOARD_SELF;
dataBuff->sampleInfo.hardVer.major = HARDWARE_VER_MAJOR;
dataBuff->sampleInfo.hardVer.minor = HARDWARE_VER_MINOR;
dataBuff->sampleInfo.softVer.major = SOFTWARE_VER_MAJOR;
dataBuff->sampleInfo.softVer.minor = SOFTWARE_VER_MINOR;
dataBuff->sampleInfo.softDate.year = SOFTWARE_DATE_YEAR;
dataBuff->sampleInfo.softDate.month = SOFTWARE_DATE_MONTH;
dataBuff->sampleInfo.softDate.day = SOFTWARE_DATE_DAY;
}
// 填充电源板系统信息
void Config_fillPowerInfo(data_buff_t *dataBuff)
{
memset(&dataBuff->powerInfo, 0, sizeof(dataBuff->powerInfo));
dataBuff->powerInfo.boardFlag = CONFIG_BOARD_SELF;
dataBuff->powerInfo.hardVer.major = HARDWARE_VER_MAJOR;
dataBuff->powerInfo.hardVer.minor = HARDWARE_VER_MINOR;
dataBuff->powerInfo.softVer.major = SOFTWARE_VER_MAJOR;
dataBuff->powerInfo.softVer.minor = SOFTWARE_VER_MINOR;
dataBuff->powerInfo.softDate.year = SOFTWARE_DATE_YEAR;
dataBuff->powerInfo.softDate.month = SOFTWARE_DATE_MONTH;
dataBuff->powerInfo.softDate.day = SOFTWARE_DATE_DAY;
dataBuff->powerInfo.protocolVer.major = REPORT_PROTOCOL_VER_MAJOR;
dataBuff->powerInfo.protocolVer.minor = REPORT_PROTOCOL_VER_MINOR;
dataBuff->powerInfo.baudrate = DTU_BAUDRATE;
dataBuff->powerInfo.parity = DTU_PARITY;
}
// 填充显示板系统信息
void Config_fillDisplayInfo(data_buff_t *dataBuff)
{
memset(&dataBuff->displayInfo, 0, sizeof(dataBuff->displayInfo));
dataBuff->displayInfo.boardFlag = CONFIG_BOARD_SELF;
dataBuff->displayInfo.hardVer.major = HARDWARE_VER_MAJOR;
dataBuff->displayInfo.hardVer.minor = HARDWARE_VER_MINOR;
dataBuff->displayInfo.softVer.major = SOFTWARE_VER_MAJOR;
dataBuff->displayInfo.softVer.minor = SOFTWARE_VER_MINOR;
dataBuff->displayInfo.softDate.year = SOFTWARE_DATE_YEAR;
dataBuff->displayInfo.softDate.month = SOFTWARE_DATE_MONTH;
dataBuff->displayInfo.softDate.day = SOFTWARE_DATE_DAY;
}
// 填充蓝牙板系统信息
void Config_fillBluetoothInfo(data_buff_t *dataBuff)
{
memset(&dataBuff->bluetoothInfo, 0, sizeof(dataBuff->bluetoothInfo));
dataBuff->bluetoothInfo.boardFlag = CONFIG_BOARD_SELF;
dataBuff->bluetoothInfo.hardVer.major = HARDWARE_VER_MAJOR;
dataBuff->bluetoothInfo.hardVer.minor = HARDWARE_VER_MINOR;
dataBuff->bluetoothInfo.softVer.major = SOFTWARE_VER_MAJOR;
dataBuff->bluetoothInfo.softVer.minor = SOFTWARE_VER_MINOR;
dataBuff->bluetoothInfo.softDate.year = SOFTWARE_DATE_YEAR;
dataBuff->bluetoothInfo.softDate.month = SOFTWARE_DATE_MONTH;
dataBuff->bluetoothInfo.softDate.day = SOFTWARE_DATE_DAY;
dataBuff->bluetoothInfo.protocolVer.major = BLUETOOTH_PROTOCOL_VER_MAJOR;
dataBuff->bluetoothInfo.protocolVer.minor = BLUETOOTH_PROTOCOL_VER_MINOR;
dataBuff->bluetoothInfo.baudrate = BLUETOOTH_BAUDRATE;
dataBuff->bluetoothInfo.parity = BLUETOOTH_PARITY;
}
// 检查参数修改标志
uint32_t Config_CheckUpdate(data_buff_t *dataBuff)
{
uint8_t i;
if(!dataBuff->configBottle.updateFlag)
return FALSE;
for(i = 0; i < 6; i++)
{
if(dataBuff->configBottle.PSN[i] != 0)
return TRUE;
}
return FALSE;
}