190 lines
5.8 KiB
C
190 lines
5.8 KiB
C
#include "includes.h"
|
||
#include "TankPrediction.h"
|
||
|
||
typedef struct TankPara TankPara;
|
||
typedef struct MonitoringData MonitoringData;
|
||
|
||
#pragma pack(push, 1)
|
||
|
||
typedef struct // size = 1350
|
||
{
|
||
uint16_t check; // 标志,固定为0x55AA
|
||
union
|
||
{
|
||
TankPara tank; // size = 1298
|
||
uint8_t tankBuff[1346];
|
||
};
|
||
uint16_t crc; // 本记录的crc
|
||
} ccs_tank_t;
|
||
|
||
#pragma pack(pop)
|
||
|
||
// 储罐参数
|
||
ccs_tank_t ccsTank;
|
||
// 采集参数
|
||
MonitoringData ccsMData;
|
||
|
||
// 初始化
|
||
void CCS_Init()
|
||
{
|
||
// 从铁电读取tank值
|
||
FRAM_LoadInfo(FRAM_CCS_TANK_BASE, (uint8_t *)&ccsTank, sizeof(ccsTank));
|
||
|
||
// // 测试代码
|
||
// memset(&ccsTank, 0, sizeof(ccsTank));
|
||
}
|
||
|
||
#if 1
|
||
// 调用预测函数
|
||
void CCS_Predict()
|
||
{
|
||
S_RTC_TIME_DATA_T sRTC;
|
||
uint32_t totoalSeconds;
|
||
|
||
// 先检查关键参数是否有效
|
||
if(dcBuff.sampleData.staExtTempr[0].notConnect || dcBuff.sampleData.staExtTempr[0].overFlow || dcBuff.sampleData.staExtTempr[0].underFlow)
|
||
return;
|
||
if(dcBuff.sampleData.staPress.notConnect || dcBuff.sampleData.staPress.overFlow || dcBuff.sampleData.staPress.underFlow)
|
||
return;
|
||
if(dcBuff.sampleData.staDPress.notConnect || dcBuff.sampleData.staDPress.overFlow || dcBuff.sampleData.staDPress.underFlow)
|
||
return;
|
||
|
||
// 初始化MData
|
||
memset(&ccsMData, 0, sizeof(ccsMData));
|
||
|
||
// MData赋值
|
||
// ccsMData.Record_ID;//存储每次从传感器读的数据,ID
|
||
// //unsigned char Record_Date[12]; //存储每次从传感器读的数据,日期时间
|
||
// 获取当前时间
|
||
RTC_GetDateAndTime(&sRTC);
|
||
// 计算自上次gps定位以来的时间
|
||
totoalSeconds = Calc_SecondsFromYear(INITIAL_YEAR, sRTC.u32Year, sRTC.u32Month, sRTC.u32Day,
|
||
sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second);
|
||
Wakeup_CalcUTCTime(totoalSeconds + RTC_offsetSeconds, &sRTC);
|
||
ccsMData.Record_Date = sRTC.u32Year;
|
||
ccsMData.Record_Date = ccsMData.Record_Date * 100 + sRTC.u32Month;
|
||
ccsMData.Record_Date = ccsMData.Record_Date * 100 + sRTC.u32Day;
|
||
ccsMData.Record_Date = ccsMData.Record_Date * 100 + sRTC.u32Hour;
|
||
ccsMData.Record_Date = ccsMData.Record_Date * 100 + sRTC.u32Minute;
|
||
ccsMData.Record_Date = ccsMData.Record_Date * 100;
|
||
ccsMData.Record_T = dcBuff.sampleData.extTempr[0];//存储每次从传感器读的数据,温度(℃)
|
||
ccsMData.Record_P = dcBuff.sampleData.pressure * 0.001;//存储每次从传感器读的数据,压力(KPa-MPa)
|
||
ccsMData.Record_L = dcBuff.sampleData.volumePct * 0.01;//存储每次从传感器读的数据,充装率(0.01%->1%)
|
||
// ccsMData.Record_Amp_x;//运动幅度
|
||
// ccsMData.Record_Amp_y;//运动幅度
|
||
// ccsMData.Record_Amp_z;//运动幅度
|
||
|
||
// ccsMData.Record_fr_x;//运动频率
|
||
// ccsMData.Record_fr_y;//运动频率
|
||
// ccsMData.Record_fr_z;//运动频率
|
||
// ccsMData.Record_OutT;//环境温度
|
||
|
||
//20220506增加变量
|
||
if(dcBuff.dtuData.recentPosState)
|
||
ccsMData.WE = dcBuff.dtuData.longitude * 0.000001;//经度(°)
|
||
if(dcBuff.dtuData.recentPosState)
|
||
ccsMData.SN = dcBuff.dtuData.latitude * 0.000001;//纬度(°)
|
||
|
||
ccsMData.Record_Tg = ccsMData.Record_T;//存储每次从传感器读的数据,气体温度
|
||
ccsMData.Record_Tl = ccsMData.Record_T;//存储每次从传感器读的数据,气体温度
|
||
|
||
// ccsMData.Yewei = dcBuff.sampleData.height * 0.001;//液位(mm->m)
|
||
// if(dcBuff.sampleData.vacuum[0].staVacuum == VACUUM_STATUS_OK)
|
||
// ccsMData.zkd = dcBuff.sampleData.vacuum[0].vacuum;// 真空度(Pa)
|
||
// ccsMData.dP = dcBuff.sampleData.diff; //压差(KPa)
|
||
|
||
// ccsMData.mdY2;// 预留变量
|
||
// ccsMData.mdY3;
|
||
// ccsMData.mdY4;
|
||
// ccsMData.mdY5;
|
||
// ccsMData.mdY6;
|
||
// ccsMData.mdY7;
|
||
// ccsMData.mdY8;
|
||
// ccsMData.mdY9;
|
||
// ccsMData.mdY10;
|
||
|
||
// 调用维持时间算法
|
||
PredictTime(&ccsMData, &ccsTank.tank);
|
||
|
||
// 保存tank值到铁电
|
||
FRAM_SaveInfo(FRAM_CCS_TANK_BASE, (uint8_t *)&ccsTank, sizeof(ccsTank));
|
||
|
||
// 获取结果
|
||
dcBuff.sampleData.ccsRemainDay = (uint16_t) ccsTank.tank.MaintainTime;
|
||
dcBuff.sampleData.ccsVer = ccsTank.tank.sfbm;
|
||
|
||
PRINTF("\r\n*** MaintainTime: %d, sfbm: %06d ***\r\n", dcBuff.sampleData.ccsRemainDay, dcBuff.sampleData.ccsVer);
|
||
}
|
||
#else
|
||
// 调用预测函数
|
||
void CCS_Predict()
|
||
{
|
||
static uint32_t idx = 0;
|
||
|
||
double Record_Date[2] = {20161228060000, 20161228120000};
|
||
float extTempr[2] = {-158.96, -158.89};
|
||
float pressure[2] = {0.01, 0.01125};
|
||
float volumePct[2] = {81.4965821058808, 81.5329064771208};
|
||
float longitude[2] = {114.297203, 114.297203};
|
||
float latitude[2] = {30.579869, 30.579869};
|
||
float Record_OutT[2] = {2.4, 7.3};
|
||
|
||
if(idx >= 2)
|
||
return;
|
||
|
||
// 初始化MData
|
||
memset(&ccsMData, 0, sizeof(ccsMData));
|
||
|
||
// MData赋值
|
||
// ccsMData.Record_ID;//存储每次从传感器读的数据,ID
|
||
// //unsigned char Record_Date[12]; //存储每次从传感器读的数据,日期时间
|
||
ccsMData.Record_Date = Record_Date[idx];
|
||
ccsMData.Record_T = extTempr[idx];//存储每次从传感器读的数据,温度(℃)
|
||
ccsMData.Record_P = pressure[idx];//存储每次从传感器读的数据,压力(KPa-MPa)
|
||
ccsMData.Record_L = volumePct[idx];//存储每次从传感器读的数据,充装率(0.01%->1%)
|
||
// ccsMData.Record_Amp_x;//运动幅度
|
||
// ccsMData.Record_Amp_y;//运动幅度
|
||
// ccsMData.Record_Amp_z;//运动幅度
|
||
|
||
// ccsMData.Record_fr_x;//运动频率
|
||
// ccsMData.Record_fr_y;//运动频率
|
||
// ccsMData.Record_fr_z;//运动频率
|
||
ccsMData. Record_OutT = Record_OutT[idx];//环境温度
|
||
|
||
//20220506增加变量
|
||
ccsMData.WE = longitude[idx];//经度(°)
|
||
ccsMData.SN = latitude[idx];//纬度(°)
|
||
|
||
ccsMData.Record_Tg = ccsMData.Record_T;//存储每次从传感器读的数据,气体温度
|
||
ccsMData.Record_Tl = ccsMData.Record_T;//存储每次从传感器读的数据,气体温度
|
||
|
||
// ccsMData.Yewei;//液位(mm->m)
|
||
// ccsMData.zkd;// 真空度(Pa)
|
||
// ccsMData.dP; //压差(KPa)
|
||
|
||
// ccsMData.mdY2;// 预留变量
|
||
// ccsMData.mdY3;
|
||
// ccsMData.mdY4;
|
||
// ccsMData.mdY5;
|
||
// ccsMData.mdY6;
|
||
// ccsMData.mdY7;
|
||
// ccsMData.mdY8;
|
||
// ccsMData.mdY9;
|
||
// ccsMData.mdY10;
|
||
|
||
// 调用维持时间算法
|
||
PredictTime(&ccsMData, &ccsTank.tank);
|
||
|
||
// 保存tank值到铁电
|
||
FRAM_SaveInfo(FRAM_CCS_TANK_BASE, (uint8_t *)&ccsTank, sizeof(ccsTank));
|
||
|
||
// 获取结果
|
||
dcBuff.sampleData.ccsRemainDay = (uint16_t) ccsTank.tank.MaintainTime;
|
||
dcBuff.sampleData.ccsVer = ccsTank.tank.sfbm;
|
||
|
||
PRINTF("\r\n*** MaintainTime: %d, sfbm: %06d ***\r\n", dcBuff.sampleData.ccsRemainDay, dcBuff.sampleData.ccsVer);
|
||
|
||
idx++;
|
||
}
|
||
#endif
|