/** * @brief 瑞斯康任务处理 * @param arg 端口号 */ void PlRscStdTask(void * arg) { unsigned long ev; struct amr_module_t* pmodule = (struct amr_module_t*)arg; PrintLog(LOGTYPE_DOWNLINK, "PlRscStdTask running... \n"); Sleep(30); PlRscStdStartRecv(pmodule); PlRscStdModuleInit(pmodule); // InitAmrMetMap(pmodule, 1); while(1){ SysClearCurrentTaskState(); /*检查是否需要启动自动抄表*/ // plstopflag = PlRscStdAmrStartCheck(pmodule); //接收数据帧并处理 if(!Pl3762RecvPkt(pmodule)) PlRscStdMsgProc(pmodule); /*事件处理*/ SysWaitEvent(&pmodule->comm_event, 0, AMREVENT_ALL, &ev); if(ev) PlRscStdEventProc(pmodule, ev); Sleep(2); } }
/** * @brief 多功能表计通信任务 */ static void *CenMetTask(void * arg) { unsigned long ev; sysclock_t clock; Sleep(500); SysClockReadCurrent(&clock); while(1) { SysWaitEvent(&CenMetEvent, 1, METEV_WAIT, &ev); if(ev&METEV_RDMET) //根据抄表间隔自动抄读总表数据 { CenMetProc();//抄读总表数据 } if(ev&METEV_1MIN) // 1分钟计算 { UpdateMdbUseEne();//更新用电量数据库 } if(ev&METEV_DAY) // 日冻结 { UpdateCurveDay(); SysClockReadCurrent(&clock); } } return 0; }
/** * @brief 多功能表计统计任务 */ static void *CenMetSticTask(void * arg) { unsigned long ev; SysAddCTimer(60, CTimerCMetStic, 0); while(1) { SysWaitEvent(&CMetSticEvent, 1, CMSEV_1MIN, &ev); if(ev&CMSEV_1MIN) { UpdateMdbTGrpPower();// 更新(计算)总加组功率 UpdateMdbStic(); } } }