MS-DTU/MS-DTU-V1/User/ccs_prediction.c

190 lines
5.8 KiB
C
Raw Permalink Normal View History

2025-04-03 14:18:58 +08:00
#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; // <20><>־<EFBFBD><D6BE><EFBFBD>̶<EFBFBD>Ϊ0x55AA
union
{
TankPara tank; // size = 1298
uint8_t tankBuff[1346];
};
uint16_t crc; // <20><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>crc
} ccs_tank_t;
#pragma pack(pop)
// <20><><EFBFBD>޲<EFBFBD><DEB2><EFBFBD>
ccs_tank_t ccsTank;
// <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
MonitoringData ccsMData;
// <20><>ʼ<EFBFBD><CABC>
void CCS_Init()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡtankֵ
FRAM_LoadInfo(FRAM_CCS_TANK_BASE, (uint8_t *)&ccsTank, sizeof(ccsTank));
// // <20><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
// memset(&ccsTank, 0, sizeof(ccsTank));
}
#if 1
// <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><E2BAAF>
void CCS_Predict()
{
S_RTC_TIME_DATA_T sRTC;
uint32_t totoalSeconds;
// <20>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
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;
// <20><>ʼ<EFBFBD><CABC>MData
memset(&ccsMData, 0, sizeof(ccsMData));
// MData<74><61>ֵ
// ccsMData.Record_ID;//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ID
// //unsigned char Record_Date[12]; //<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
RTC_GetDateAndTime(&sRTC);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>gps<70><73>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
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];//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ȣ<C2B6><C8A3>
ccsMData.Record_P = dcBuff.sampleData.pressure * 0.001;//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>KPa-MPa<50><61>
ccsMData.Record_L = dcBuff.sampleData.volumePct * 0.01;//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>װ<EFBFBD>ʣ<EFBFBD>0.01%->1%<25><>
// ccsMData.Record_Amp_x;//<2F>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.Record_Amp_y;//<2F>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.Record_Amp_z;//<2F>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.Record_fr_x;//<2F>˶<EFBFBD>Ƶ<EFBFBD><C6B5>
// ccsMData.Record_fr_y;//<2F>˶<EFBFBD>Ƶ<EFBFBD><C6B5>
// ccsMData.Record_fr_z;//<2F>˶<EFBFBD>Ƶ<EFBFBD><C6B5>
// ccsMData.Record_OutT;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//20220506<30><36><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>
if(dcBuff.dtuData.recentPosState)
ccsMData.WE = dcBuff.dtuData.longitude * 0.000001;//<2F><><EFBFBD>ȣ<EFBFBD><C8A3>
if(dcBuff.dtuData.recentPosState)
ccsMData.SN = dcBuff.dtuData.latitude * 0.000001;//γ<>ȣ<EFBFBD><C8A3>
ccsMData.Record_Tg = ccsMData.Record_T;//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ccsMData.Record_Tl = ccsMData.Record_T;//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.Yewei = dcBuff.sampleData.height * 0.001;//Һλ<D2BA><CEBB>mm->m<><6D>
// if(dcBuff.sampleData.vacuum[0].staVacuum == VACUUM_STATUS_OK)
// ccsMData.zkd = dcBuff.sampleData.vacuum[0].vacuum;// <20><><EFBFBD>նȣ<D5B6>Pa<50><61>
// ccsMData.dP = dcBuff.sampleData.diff; //ѹ<>KPa<50><61>
// ccsMData.mdY2;// Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.mdY3;
// ccsMData.mdY4;
// ccsMData.mdY5;
// ccsMData.mdY6;
// ccsMData.mdY7;
// ccsMData.mdY8;
// ccsMData.mdY9;
// ccsMData.mdY10;
// <20><><EFBFBD><EFBFBD>ά<EFBFBD><CEAC>ʱ<EFBFBD><CAB1><EFBFBD>
PredictTime(&ccsMData, &ccsTank.tank);
// <20><><EFBFBD><EFBFBD>tankֵ<6B><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FRAM_SaveInfo(FRAM_CCS_TANK_BASE, (uint8_t *)&ccsTank, sizeof(ccsTank));
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
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
// <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><E2BAAF>
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;
// <20><>ʼ<EFBFBD><CABC>MData
memset(&ccsMData, 0, sizeof(ccsMData));
// MData<74><61>ֵ
// ccsMData.Record_ID;//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ID
// //unsigned char Record_Date[12]; //<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
ccsMData.Record_Date = Record_Date[idx];
ccsMData.Record_T = extTempr[idx];//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ȣ<C2B6><C8A3>
ccsMData.Record_P = pressure[idx];//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>KPa-MPa<50><61>
ccsMData.Record_L = volumePct[idx];//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>װ<EFBFBD>ʣ<EFBFBD>0.01%->1%<25><>
// ccsMData.Record_Amp_x;//<2F>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.Record_Amp_y;//<2F>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.Record_Amp_z;//<2F>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.Record_fr_x;//<2F>˶<EFBFBD>Ƶ<EFBFBD><C6B5>
// ccsMData.Record_fr_y;//<2F>˶<EFBFBD>Ƶ<EFBFBD><C6B5>
// ccsMData.Record_fr_z;//<2F>˶<EFBFBD>Ƶ<EFBFBD><C6B5>
ccsMData. Record_OutT = Record_OutT[idx];//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//20220506<30><36><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>
ccsMData.WE = longitude[idx];//<2F><><EFBFBD>ȣ<EFBFBD><C8A3>
ccsMData.SN = latitude[idx];//γ<>ȣ<EFBFBD><C8A3>
ccsMData.Record_Tg = ccsMData.Record_T;//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ccsMData.Record_Tl = ccsMData.Record_T;//<2F>洢ÿ<E6B4A2>δӴ<CEB4><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.Yewei;//Һλ<D2BA><CEBB>mm->m<><6D>
// ccsMData.zkd;// <20><><EFBFBD>նȣ<D5B6>Pa<50><61>
// ccsMData.dP; //ѹ<>KPa<50><61>
// ccsMData.mdY2;// Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ccsMData.mdY3;
// ccsMData.mdY4;
// ccsMData.mdY5;
// ccsMData.mdY6;
// ccsMData.mdY7;
// ccsMData.mdY8;
// ccsMData.mdY9;
// ccsMData.mdY10;
// <20><><EFBFBD><EFBFBD>ά<EFBFBD><CEAC>ʱ<EFBFBD><CAB1><EFBFBD>
PredictTime(&ccsMData, &ccsTank.tank);
// <20><><EFBFBD><EFBFBD>tankֵ<6B><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FRAM_SaveInfo(FRAM_CCS_TANK_BASE, (uint8_t *)&ccsTank, sizeof(ccsTank));
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
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