#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