ZNY_Pakistan/Anjiehui7_ZNY/User/ccs_prediction.c

190 lines
5.8 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.

#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