Exemplo n.º 1
0
/**
* @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);
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
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);
}
Exemplo n.º 4
0
/**
* @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);
}
Exemplo n.º 5
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);
	}
}