/** * @brief 自动抄表初始化 */ void AutoReadCenMetInit(void) { //@change later: 更改抄表间隔时需重新初始化 rtimer_conf_t conf; const para_commport_t *pcfg = GetParaCommPort(COMMPORT_RS485_2); conf.curtime = UTimeReadCurrent();; conf.bonce = 0; memset(&conf.basetime, 0, sizeof(sysclock_t)); if(TimerIdReadMet >= 0) SysStopRTimer(TimerIdReadMet); if(pcfg->cycle >= 60) { conf.tdev = pcfg->cycle/60; conf.tmod = UTIMEDEV_HOUR; // 1 hour } else if(pcfg->cycle < 1) { conf.tdev = 15; conf.tmod = UTIMEDEV_MINUTE; // 15 minute } else { conf.tdev = pcfg->cycle;//F33设置的抄表间隔时间 conf.tmod = UTIMEDEV_MINUTE; //minute } TimerIdReadMet = SysAddRTimer(&conf, RTimerReadMet, 0); }
static int shell_pltask(int argc, char *argv[]) { const para_commport_t *pcfg = GetParaCommPort(COMMPORT_PLC); if(2 == argc) { if(0 == strcmp("reset", argv[1])) { PltTaskReseting = 1; PrintLog(0, "重新开始抄表\n"); return 0; } else if(0 == strcmp("prd", argv[1])) { int i; PrintLog(0, "当前时段=%d\n", PrdCurrent); for(i=0; i<PltConfig.maxprd; i++) { PrintLog(0, "时段%2d: %02d:%02d:%02d~%02d:%02d:%02d, %d.%d%%, %d.%d%%\n", i+1, PltFileData.prd[i].start_hour, PltFileData.prd[i].start_min, PltFileData.prd[i].start_sec, PltFileData.prd[i].end_hour, PltFileData.prd[i].end_min, PltFileData.prd[i].end_sec, PltFileData.prd[i].ok_rate/10, PltFileData.prd[i].ok_rate%10, PltFileData.prd[i].ok_rate_1/10, PltFileData.prd[i].ok_rate_1%10); } return 0; } else if(0 == strcmp("config", argv[1])) { int i; PrintLog(0, "最大时段=%d\n", PltConfig.maxprd); PrintLog(0, "最大表数=%d\n", PltConfig.maxmet); PrintLog(0, "时段数=%d\n", PltConfig.prdcount); for(i=0; i<PltConfig.prdcount; i++) { PrintLog(0, "时段%2d: %02d:%02d - %02d:%02d\n", i+1, PltConfig.prdconfig[i].start_time/60, PltConfig.prdconfig[i].start_time%60, PltConfig.prdconfig[i].end_time/60, PltConfig.prdconfig[i].end_time%60); } return 0; } } if(pcfg->flag&RDMETFLAG_ENABLE) PrintLog(0, "禁止自动抄表\n"); else PrintLog(0, "允许自动抄表\n"); PrintLog(0, "当前时段=%d\n", PrdCurrent); PrintLog(0, "当前轮次=%d\n", CycCount); PrintLog(0, "时段抄表数=%d, 成功%d\n", ReadMetsCount, OkMetsCount); PrintLog(0, "首轮抄表数=%d, 成功%d\n", ReadMetsCount1, OkMetsCount1); return 0; }
/** * @brief 抄表日定时器 * @param arg 定时器参数 * @param utime 当前时间 */ static void RTimerRmd(unsigned long arg, utime_t utime) { unsigned char day; unsigned int mask; sysclock_t clk; const para_commport_t *pcfg = GetParaCommPort(COMMPORT_RS485_2); SysClockReadCurrent(&clk); day = clk.day; if(day) day -= 1; mask = 1<<day; if(mask & pcfg->dateflag) MakeCenMetEvent(METEV_RDMETDAY); }
/** * @brief 抄表日冻结初始化 */ void CenMetRmdInit(void) { //@change later: 更改抄表日时需重新初始化 rtimer_conf_t conf; const para_commport_t *pcfg = GetParaCommPort(COMMPORT_RS485_2); if(TimerIdRmd >= 0) SysStopRTimer(TimerIdRmd); conf.curtime = UTimeReadCurrent(); conf.bonce = 0; conf.tdev = 1; conf.tmod = UTIMEDEV_DAY; // 1 day SysClockReadCurrent(&conf.basetime); conf.basetime.hour = pcfg->time_hour; conf.basetime.minute = pcfg->time_minute; TimerIdRmd = SysAddRTimer(&conf, RTimerRmd, 0); }
static void *PlcTestTask(void *arg) { const para_commport_t *pcfg = GetParaCommPort(COMMPORT_PLC); int readflag, endflag; Sleep(300); while(RunState.pwroff) Sleep(100); PltCurMetid = PLC_BASEMETP; PrdCurrent = -1; PltReadEnd = 0; endflag = 0; while(1) { if(PltTaskReseting) { PltTaskReseting = 0; ResetPltData(); PrdCurrent = -1; } while(RunState.pwroff) Sleep(100); if(pcfg->flag & RDMETFLAG_ENABLE) { Sleep(50); continue; } PrdCheck(); if(PrdCurrent < 0) { Sleep(200); continue; } if(!PltReadEnd && PLC_BASEMETP == PltCurMetid) endflag = 1; readflag = 0; for(; PltCurMetid<MAX_CPY_METID; PltCurMetid++) { if(ParaMeter[PltCurMetid].metp_id == 0) continue; if(ParaPlcMetp[PltCurMetid].stopped) continue; if(!PltReadFinished(PltCurMetid)) readflag = 1; if(readflag) { endflag = 0; break; } } if(PltCurMetid >= MAX_CPY_METID) { PltCurMetid = PLC_BASEMETP; CycCount++; if(!PltReadEnd && endflag) { sysclock_t clock; SysClockReadCurrent(&clock); PltFileData.prd[PrdCurrent].end_hour = clock.hour; PltFileData.prd[PrdCurrent].end_min = clock.minute; PltFileData.prd[PrdCurrent].end_sec = clock.second; PltReadEnd = 1; } } if(readflag) { PltReadMet(PltCurMetid); PltCurMetid++; } else Sleep(200); } }