⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jizhong.c

📁 完整的远程抄表系统程序.包含电量采集(分峰时
💻 C
📖 第 1 页 / 共 5 页
字号:
		qh_temp.qhdata1=0x00;
		qh_temp.qhdata2=0x01;
		qh_temp.qhdata3=0x00;
		qh_temp.qhdata4=dat_ptr->s_no[2];
		qh_temp.qhdata5=dat_ptr->s_no[1];
		qh_temp.qhdata6=dat_ptr->s_no[0];
		qh_temp.qhdata7=dat_ptr->s_base[3];
		qh_temp.qhdata8=dat_ptr->s_base[2];
		qh_temp.qhdata9=dat_ptr->s_base[1];
		qh_temp.qhdata10=dat_ptr->s_base[0];
		qh_temp.qhdata11=dat_ptr->s_base2[3];
		qh_temp.qhdata12=dat_ptr->s_base2[2];
		qh_temp.qhdata13=dat_ptr->s_base2[1];
		qh_temp.qhdata14=dat_ptr->s_base2[0];
		qh_temp.qhdata15=dat_ptr->s_base4[3];
		qh_temp.qhdata16=dat_ptr->s_base4[2];
		qh_temp.qhdata17=dat_ptr->s_base4[1];
		qh_temp.qhdata18=dat_ptr->s_base4[0];
		P1=0xF4;P1=0xF1;			// clear the dog

		P1=0xFA;					// change the workspace
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata1;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata2;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata3;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata4;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata5;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata6;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata7;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata8;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata9;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata10;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata11;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata12;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata13;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata14;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata15;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata16;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata17;
		*(qhpm+(++cyc_flag_acc))=qh_temp.qhdata18;
		P1=0xF4;P1=0xF1;
	}
	if(cyc_flag_acc%0xFF==0)
	{bn=cyc_flag_acc/0xFF;}
	else
	{bn=cyc_flag_acc/0xFF+1;}
	for(cyc_flag=0;cyc_flag<bn-1;cyc_flag++)
	{
		ledst(0xd7);
		P1=0xF4;P1=0xF1;
		txdbyte(0xEA);
		txdbyte(0xEA);
		txdbyte(char_temp + 0x20);
		txdbyte(carr_svr_name[1]);
		txdbyte(carr_svr_name[0]);
		txdbyte(0xFF);
		info_check=0x02F3 + carr_svr_name[0] + carr_svr_name[1] + char_temp;
		for(num_cyc=0;num_cyc<0xFF;num_cyc++)
		{
			P1=0xF4;P1=0xF1;

			P1=0xFA;
			txdbyte(*(qhpm+255*cyc_flag+num_cyc));
			info_check+=*(qhpm+255*cyc_flag+num_cyc);
			P1=0xF1;
		}
		txdbyte(bn-cyc_flag);
		info_check+=bn-cyc_flag;
		txdbyte(0x00);
		txdbyte(info_check%0x0100);
		txdbyte(info_check/0x0100);
		txdbyte(0xDD);
		ledst(0xf7);
		//等待应答 EA EA 00 00 40 00 00 00 14 02 DD 
		RI=0;ysrxd=60;cush_char=0x00;
		while(ysrxd)									// 开始接收信息包
		{
			if(RI==1)
			{
				cush_char=SBUF;
				if(cush_char==0xEA)break;
				RI=0;
			}
			P1=0xf4; P1=0xff;
		}
		if(cush_char==0xEA)
		{
			ledst(0xe7);
			ys1(0xff);
			ledst(0xf7);
		}
		else
		{return(0);}
	}
	ledst(0xd7);
	if(cyc_flag_acc % 0x100==0)
	{
		txdbyte(0xEA);
		txdbyte(0xEA);
		txdbyte(char_temp);
		txdbyte(carr_svr_name[1]);
		txdbyte(carr_svr_name[0]);
		txdbyte(0xFF);
		info_check=0x02D3 + carr_svr_name[0] + carr_svr_name[1]  + char_temp;
		for(num_cyc=0;num_cyc<0xFF;num_cyc++)
		{
			P1=0xF4;P1=0xF1;
			P1=0xFA;
			txdbyte(*(qhpm+255*cyc_flag+num_cyc));
			info_check+=*(qhpm+255*cyc_flag+num_cyc);
			P1=0xF1;
		}
		txdbyte(0x01);
		info_check+=0x01;
		txdbyte(0x00);
		txdbyte(info_check%0x0100);
		txdbyte(info_check/0x0100);
		txdbyte(0xDD);
	}
	else
	{
		txdbyte(0xEA);
		txdbyte(0xEA);
		txdbyte(char_temp);
		txdbyte(carr_svr_name[1]);
		txdbyte(carr_svr_name[0]);
		txdbyte(0xFF);
		info_check=0x02D3 + carr_svr_name[0] + carr_svr_name[1]  + char_temp;
		for(num_cyc=0;num_cyc<=(cyc_flag_acc % 0xFF);num_cyc++)
		{
			P1=0xF4;P1=0xF1;
			P1=0xFA;
			txdbyte(*(qhpm+255*cyc_flag+num_cyc));
			info_check+=*(qhpm+255*cyc_flag+num_cyc);
			P1=0xF1;
		}
		for(;num_cyc<0xFF;num_cyc++)
		{
			P1=0xF4;P1=0xF1;
			txdbyte(0xFF);
			info_check+=0xFF;
		}
		txdbyte(0x01);
		info_check+=0x01;
		txdbyte(0x00);
		txdbyte(info_check%0x0100);
		txdbyte(info_check/0x0100);
		txdbyte(0xDD);
	}
	ledst(0xf7);
	ysrxd=30;
	while(ysrxd)
	{P1=0xF4;P1=0xF1;}
	return(0);
/*
	temp_data[cyc_flag_acc]=0xFF;
	temp_data[++cyc_flag_acc]='T';
	temp_data[++cyc_flag_acc]=0xFF;
	temp_data[++cyc_flag_acc]=read_dallas(0x8D);
	temp_data[++cyc_flag_acc]=read_dallas(0x89);
	temp_data[++cyc_flag_acc]=read_dallas(0x87);
 	temp_data[++cyc_flag_acc]=read_dallas(0x85);
	temp_data[++cyc_flag_acc]=read_dallas(0x83);
	temp_data[++cyc_flag_acc]=read_dallas(0x81);
	temp_data[++cyc_flag_acc]='C';
	jzq_ptr=(JZQ_HEAD xdata *)JZQ_ADD;
	num_cyc=jzq_ptr->meter_num;
	for(cyc_flag=1;cyc_flag<=num_cyc;cyc_flag++)
	{
		pm=(unsigned char xdata *)(JZQ_ADD+0x80*comp1(cyc_flag));
    	dat_ptr=(DAT_ITEM xdata *)pm;
		// 取出所需数据<<表号6字节为压缩BCD码,后12字节为4字节总、4字节峰、4字节谷>>
		temp_data[++cyc_flag_acc]=0x00;
		temp_data[++cyc_flag_acc]=0x01;
		temp_data[++cyc_flag_acc]=0x00;
		temp_data[++cyc_flag_acc]=dat_ptr->s_no[2];
		temp_data[++cyc_flag_acc]=dat_ptr->s_no[1];
		temp_data[++cyc_flag_acc]=dat_ptr->s_no[0];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base[3];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base[2];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base[1];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base[0];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base2[3];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base2[2];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base2[1];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base2[0];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base4[3];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base4[2];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base4[1];
		temp_data[++cyc_flag_acc]=dat_ptr->s_base4[0];
		P1=0xF4;P1=0xF1;
	}
	// 数据发送
	if(cyc_flag_acc%0xFF==0)
	{bn=cyc_flag_acc/0xFF;}
	else
	{bn=cyc_flag_acc/0xFF+1;}
	for(cyc_flag=0;cyc_flag<bn-1;cyc_flag++)
	{
		ledst(0xd7);
		P1=0xF4;P1=0xF1;
		txdbyte(0xEA);
		txdbyte(0xEA);
		txdbyte(char_temp + 0x20);
		txdbyte(carr_svr_name[1]);
		txdbyte(carr_svr_name[0]);
		txdbyte(0xFF);
		info_check=0x02F3 + carr_svr_name[0] + carr_svr_name[1] + char_temp;
		for(num_cyc=0;num_cyc<0xFF;num_cyc++)
		{
			P1=0xF4;P1=0xF1;
			txdbyte(temp_data[255 * cyc_flag + num_cyc]);
			info_check+=temp_data[255 * cyc_flag + num_cyc];
		}
		txdbyte(bn-cyc_flag);
		info_check+=bn-cyc_flag;
		txdbyte(0x00);
		txdbyte(info_check%0x0100);
		txdbyte(info_check/0x0100);
		txdbyte(0xDD);
		ledst(0xf7);
		//等待应答 EA EA 00 00 40 00 00 00 14 02 DD 
		RI=0;ysrxd=60;cush_char=0x00;
		while(ysrxd)									// 开始接收信息包
		{
			if(RI==1)
			{
				cush_char=SBUF;
				if(cush_char==0xEA)break;
				RI=0;
			}
			P1=0xf4; P1=0xff;
		}
		if(cush_char==0xEA)
		{
			ledst(0xe7);
			ys1(0xff);
			ledst(0xf7);
		}
		else
		{return(0);}
	}
	ledst(0xd7);
	if(cyc_flag_acc % 0x100==0)
	{
		txdbyte(0xEA);
		txdbyte(0xEA);
		txdbyte(char_temp);
		txdbyte(carr_svr_name[1]);
		txdbyte(carr_svr_name[0]);
		txdbyte(0xFF);
		info_check=0x02D3 + carr_svr_name[0] + carr_svr_name[1]  + char_temp;
		for(num_cyc=0;num_cyc<0xFF;num_cyc++)
		{
			P1=0xF4;P1=0xF1;
			txdbyte(temp_data[255 * cyc_flag + num_cyc]);
			info_check+=temp_data[255 * cyc_flag + num_cyc];
		}
		txdbyte(0x01);
		info_check+=0x01;
		txdbyte(0x00);
		txdbyte(info_check%0x0100);
		txdbyte(info_check/0x0100);
		txdbyte(0xDD);
	}
	else
	{
		txdbyte(0xEA);
		txdbyte(0xEA);
		txdbyte(char_temp);
		txdbyte(carr_svr_name[1]);
		txdbyte(carr_svr_name[0]);
		txdbyte(0xFF);
		info_check=0x02D3 + carr_svr_name[0] + carr_svr_name[1]  + char_temp;
		for(num_cyc=0;num_cyc<=(cyc_flag_acc % 0xFF);num_cyc++)
		{
			P1=0xF4;P1=0xF1;
			txdbyte(temp_data[255 * cyc_flag + num_cyc]);
			info_check+=temp_data[255 * cyc_flag + num_cyc];
		}
		for(;num_cyc<0xFF;num_cyc++)
		{
			P1=0xF4;P1=0xF1;
			txdbyte(0xFF);
			info_check+=0xFF;
		}
		txdbyte(0x01);
		info_check+=0x01;
		txdbyte(0x00);
		txdbyte(info_check%0x0100);
		txdbyte(info_check/0x0100);
		txdbyte(0xDD);
	}
	ledst(0xf7);
	ysrxd=30;
	while(ysrxd)
	{P1=0xF4;P1=0xF1;}
	return(0);*/
}

// 向集中器下载电表局编号(**)--<加载集中器抄表数据>
// 52 18 04 00 01 00 00 00 00 00 00 00 00 02 00 45 51 08 00 00 00 05 00 00 C2 
// 52 18 04 00 02 00 00 00 00 00 00 00 00 02 00 45 91 00 00 00 00 04 00 00 FA 
// 52 18 04 00 03 00 00 00 00 00 00 00 00 02 00 02 00 00 00 00 00 05 00 00 28
unsigned int loaddata(void)
{
//	unsigned int data cyc_flag,info_check;						// 循环标识,信息包校验标识
//	unsigned char xdata *pm;									// 地址指针
//	pm=(unsigned char xdata *)(JZQ_ADD);  				// 取指针地址
	return(0);
}

//>>>>>> 信息主包区--End <<<<<<<<<///////////////////

//qh 红外与串口共用,串口波特率为9600,N,8,1
// 红外接收==Test==Start===
// 说明;波特率为2400,N,8,1,
void plmrxd(void)
{
	unsigned int data rev_falg_num,ass_flag;					// 串口接收标识位,辅助标识符
	unsigned int data cyc_flag,info_check,send_num;				// 循环标识,信息包校验标识,发送字节数
	unsigned char data time;									// 12秒标识符
	unsigned char data cush_char,begin_rev_flag;				// 串口字符缓存,接收信息包标识
    int3=0;int2=0;    									// 设置为红外接收状态
	buf_ptr=(HBUF xdata *)BUF_ADD;						// 指针指向接收绶冲首地址
	ysrxd=240;time=0;									// 初始化1分钟标识
	while(1)
	{
		P1=0xF4;P1=0xF1;
	   	ledst(0xf7);
		if(ysrxd==0){ysrxd=240;time++;}					// 12秒没有接收到信息 time标识加1
		if(time>=5) break;               				// 5个12秒(1分钟)退出红外接收程序
		if(RI==0) continue;								// 没有接收信息,继续计时
		buf_ptr=(HBUF xdata *)BUF_ADD;
       	begin_rev_flag=0;rev_falg_num=0;ysrxd=40;
		while(ysrxd)									// 开始接收信息包
		{
			if(RI==1)
			{
				cush_char=SBUF;
				if(begin_rev_flag)
				{
					buf_ptr->buf0[++rev_falg_num]=cush_char;
					if(cush_char==0xDD) break;
				}
				else
				{
					if(cush_char==0xEA)
					{
						buf_ptr->buf0[rev_falg_num]=cush_char;
						begin_rev_flag=1;
					}
				}
				RI=0;
			}
			P1=0xf4; P1=0xff;
		}
		if(rev_falg_num<10){RI=0;continue;}				// 接收数据超时
		if(buf_ptr->buf0[3]!=carr_svr_name[1] || 
		buf_ptr->buf0[4]!=carr_svr_name[0])		//		{RI=0;continue;}// 非本机指令
		{
			carr_svr_name[1]=buf_ptr->buf0[3]; 
			carr_svr_name[0]=buf_ptr->buf0[4];
		}

		info_check=0;
		for(cyc_flag=0;cyc_flag<=(7+buf_ptr->buf0[5]);cyc_flag++)
		{info_check+=buf_ptr->buf0[cyc_flag];}
		if((info_check%0x0100)!=buf_ptr->buf0[cyc_flag++] ||
		(info_check/0x0100)!=buf_ptr->buf0[cyc_flag]){RI=0;continue;}// 校验出错
		ass_flag=buf_ptr->buf0[2];send_num=0;
		ledst(0xe7);
		ys1(0xff);
		ledst(0xf7);
		switch(ass_flag)
		{
			case 0x01:									// <读取集中器设置>--震旦公司增加协议
				send_num=readsettings();break;
			case 0x02:									// 读取集中器时钟
				send_num=readclock();break;
			case 0x04:									// 指定某表号实时抄表(点抄)
				send_num=point_excerption();break;
			case 0x05:									// 设置集中器时钟
				send_num=setclock();break;
			case 0x06:									// 向集中器下载主控程序
				send_num=downpro();break;
			case 0x07:									// 清空集中器抄表数据
				send_num=clear_data();break;
			case 0x09:									// 读取集中器运行主控版本号
				send_num=readversion();break;
			case 0x0C:									// 向集中器下载电表局编号(*)<加载集中器抄表数据>
				send_num=loaddata();break;
			case 0x0D:									// <加载集中器设置>--震旦公司增加协议
				send_num=loadsettings();break;
			case 0x0E:									// 由集中器上装当月抄表数据(*)<抄录实时表底>
				send_num=realtime(0x8E);break;
			case 0x0F:									// 由集中器上装当日抄表数据(*)<抄录实时表底>
				send_num=realtime(0x8F);break;
			case 0x10:									// 集中器复位
				send_num=ser_reposition();
				ledst(0xd7);
				for(cyc_flag=0;cyc_flag<=send_num;cyc_flag++)
				{txdbyte(buf_ptr->buf0[cyc_flag]);}
				while(1);break;
			case 0x2C:									// 向集中器下载

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -