int PlMdbInit(void) { sysclock_t clock; dbtime_t dbtime; int rtn; FlagDaySaved = FlagMonthSaved = 1; FlagImpSaved = 1; memset(PlMdbDay, PLDATA_EMPTY, sizeof(PlMdbDay)); memset(PlMdbMonth, PLDATA_EMPTY, sizeof(PlMdbMonth)); memset(PlMdbImp, PLDATA_EMPTY, sizeof(PlMdbImp)); PlMdbLockId = RegisterSysLock(); SysClockRead(&clock); SYSCLOCK_DBTIME(&clock, dbtime);//根据冻结时间得到冻结文件 rtn = ReadPlMdbDay(PlMdbDay, dbtime); if(rtn > 0) DebugPrint(0, "load %d mets plmdb day data\n", rtn); //rtn = ReadPlMdbMonth(PlMdbMonth, dbtime); //if(rtn > 0) DebugPrint(0, "load %d mets plmdb month data\n", rtn); //rtn = ReadPlMdbImp(PlMdbImp, dbtime); //if(rtn > 0) DebugPrint(0, "load plmdb imp ok\n"); SET_INIT_FLAG(PlMdbInit); return 0; }
/** * @brief 保存载波表数据 */ void SavePlMdb(void) { sysclock_t clock; dbtime_t dbtime; printf("SavePlMdb...\n"); PrintLog(3, "SavePlMdb...\n"); SysClockReadCurrent(&clock);//读系统时间 SYSCLOCK_DBTIME(&clock, dbtime); LOCK_PLMDB; //if(!FlagDaySaved) //{ SavePlMdbDay(PlMdbDay, dbtime);//根据时标存储日冻结数据 //FlagDaySaved = 1; //} /* if(!FlagMonthSaved) { SavePlMdbMonth(PlMdbMonth, dbtime); FlagMonthSaved = 1; } if(!FlagImpSaved) { SavePlMdbImp(PlMdbImp, dbtime); FlagImpSaved = 1; } PlcStateSave(); */ UNLOCK_PLMDB; }
static void LoadPltData(void) { char filename[64]; sysclock_t clock; int len, itemlen, i, maxprd; plt_filedata_t *pcache; unsigned char *pbuf; ResetPltData(); SysClockRead(&clock); sprintf(filename, "%sdaytest@%02d%02d%02d.db", PLT_FILEPATH, clock.year, clock.month, clock.day); SYSCLOCK_DBTIME(&clock, PltFileDate); PltFileDate.s.tick = 0; len = ReadBinFileCache(filename, MAGIC_FILE_PLT, PltFileCache, sizeof(PltFileCache)); if(len < 4) return; pcache = (plt_filedata_t *)PltFileCache; if(pcache->max_prd == 0 || pcache->max_prd > MAX_FILE_PRD) return; if(pcache->max_met == 0 || pcache->max_met > MAX_PLCMET) return; itemlen = (int)pcache->max_met&0xffff; itemlen = itemlen*MET_DATA_LEN+PRD_HEAD_LEN; maxprd = (int)pcache->max_prd&0xff; i = maxprd*itemlen+FILE_HEAD_LEN; if(len != i) { ErrorLog("invalid file len(%d, %d)\n", len, i); return; } PltFileData.invaid_prd = pcache->invaid_prd; pbuf = (unsigned char *)pcache->prd; for(i=0; i<maxprd; i++) { memcpy(&PltFileData.prd[i], pbuf, itemlen); pbuf += itemlen; } }
static void PrdCheck(void) { int prd, i; sysclock_t clock; unsigned short ctime; SysClockReadCurrent(&clock); ctime = clock.hour; ctime *= 60; ctime += clock.minute; { dbtime_t dbtime; SYSCLOCK_DBTIME(&clock, dbtime); dbtime.s.tick = 0; if(dbtime.u != PltFileDate.u) { ResetPltData(); CycCount = 0; ReadMetsCount = OkMetsCount = 0; ReadMetsCount1 = OkMetsCount1 = 0; PltCurMetid = PLC_BASEMETP; CalculateMetCount(); PltReadEnd = 0; PltFileDate.u = dbtime.u; } } for(prd=0; prd<PltConfig.prdcount; prd++) { if(ctime >= PltConfig.prdconfig[prd].start_time && ctime < PltConfig.prdconfig[prd].end_time) break; } if(prd >= PltConfig.prdcount) prd = -1; if(prd == PrdCurrent) return; if(PrdCurrent >= 0) { if(PltFileData.prd[PrdCurrent].end_hour) i = 1; else if(PltFileData.prd[PrdCurrent].end_min) i = 1; else if(PltFileData.prd[PrdCurrent].end_sec) i = 1; else i = 0; if(0 == i) { PltFileData.prd[PrdCurrent].end_hour = clock.hour; PltFileData.prd[PrdCurrent].end_min = clock.minute; PltFileData.prd[PrdCurrent].end_sec = clock.second; } if(ReadMetsCount > 0) { i = (OkMetsCount * 1000)/ReadMetsCount; if(i >= 0) PltFileData.prd[PrdCurrent].ok_rate = (unsigned short)i; } if(ReadMetsCount1 > 0) { i = (OkMetsCount1 * 1000)/ReadMetsCount1; if(i >= 0) PltFileData.prd[PrdCurrent].ok_rate_1 = (unsigned short)i; } PltFileData.invaid_prd = PrdCurrent+1; SavePltData(&clock); if((PrdCurrent+1) == PltConfig.prdcount) ResetPltData(); } CycCount = 0; ReadMetsCount = OkMetsCount = 0; ReadMetsCount1 = OkMetsCount1 = 0; PltCurMetid = PLC_BASEMETP; CalculateMetCount(); PltReadEnd = 0; if(prd >= 0) { PltFileData.prd[prd].start_hour = clock.hour; PltFileData.prd[prd].start_min = clock.minute; PltFileData.prd[prd].start_sec = clock.second; } PrdCurrent = prd; }