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

📄 jizhong.c

📁 完整的远程抄表系统程序.包含电量采集(分峰时
💻 C
📖 第 1 页 / 共 5 页
字号:
         	ma=0;
         	txdbyte('A');
         	for(i=0;i<16;i++)
            	txdbyte(buf_ptr->buf0[i]);  // 实用
         	ysrxd=100; continue;
		}
   		if(buf_ptr->buf0[1]==0x0c)
		{
			// 52 10 0C 00 00 00 02 30 30 30 30 30 30 30 30 30 CE
         	pm=(unsigned char xdata *)(JZQ_ADD);  // 取指针地址
     		dat_ptr=(DAT_ITEM xdata *)pm;
         	if(ma==1)
           	{
				for (i=0; i<9; i++)
              	{
					mima[i]=buf_ptr->buf0[i+6];
                	buf_ptr->buf3[i]=buf_ptr->buf0[i+6];
                	buf_ptr->buf3[i+100]=buf_ptr->buf0[i+6];
              	}
             	miyao[0]='M'; miyao[1]='I'; miyao[2]='Y';
             	miyao[3]='A'; miyao[4]='O';
             	txdbyte('A');  txdbyte(0);
             	ysrxd=100; continue;
			}
          	txdbyte('E');  txdbyte(0);
          	ysrxd=100; continue;
		}
   		if(ma==1) goto mimast;
     	else
		{
			if(buf_ptr->buf0[1]==5) goto mimast;
            if(buf_ptr->buf0[1]==7)
               if(buf_ptr->buf0[0]==3) goto mimast;
            ma=0;
            ysrxd=100; continue;
		}
mimast:
   		if(buf_ptr->buf0[1]==4)
   		{
			P1=0xf4;P1=0xf1;buf_ptr =(HBUF xdata *)BUF_ADD;
     		c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3]; //取地址
     		if((c>=0)&&(c<=447)){P1=0xf1;h=0;goto XXX4;}
     		if((c>447)&&(c<895)){P1=0xf9;h=1;c=c-447;goto XXX4;}
     		if((c>894)&&(c<1341)){P1=0xf2;h=2;c=c-894;}
       		else{P1=0xf2;h=2;c=1341-894;}
XXX4:			// 52 15 04 00 00 44 41 54 41 00 01 00 02 00 00 00 03 00 03 00 00 3C
				// 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
     		pm=(unsigned char xdata *)(JZQ_ADD+0x80*c);  // 取指针地址
     		len=buf_ptr->buf0[0]-1;
     		for(i=0,len-=5;i<=len;i++) *pm++=buf_ptr->buf0[i+4];
     		for(;i<0x80;i++) *pm++=0;
     		if(c)
			{
	     		dat_ptr=(DAT_ITEM xdata *)pm;
				dat_ptr->e_cnt=255; // 未抄计次
	      		if(h==0) dat_ptr->zjq_len=c;
	      		if(h==1) dat_ptr->zjq_len=c+447;
	      		if(h==2) dat_ptr->zjq_len=c+894;
	    	}
     		P1=0xff;
        	c_zb=1; loop_l=0;loop_z=0;c_zbpo=0;
     		txdbyte('A');txdbyte(0);
     		ysrxd=100; continue;
		}
       	if(buf_ptr->buf0[1]==5)
   		{
			P1=0xf1;buf_ptr = (HBUF xdata *)BUF_ADD;
	     	c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3]; //取地址
	     	c=comp1(c);
	     	pm=(unsigned char xdata *)(JZQ_ADD+0x80*c);
            dat_ptr=(DAT_ITEM xdata *)pm;
	     	if(c) len=0x18;					// 电表库长度 36;
	      	else len=28;					// 集中器库长度 27;
	     	txdbyte('A');  txdbyte(len);  txdbyte(5);
	     	s=0;
	     	if(c!=0)
			{
				txdbyte(buf_ptr->buf0[2]);  txdbyte(buf_ptr->buf0[3]);
			 	s=buf_ptr->buf0[2]+buf_ptr->buf0[3];
			}
	       	else s=0;
	     	s=s+len+5;
	     	if(len==0x18)
			{
				if(dat_ptr->pre_sno!=0){len=len-2;goto fash;}
                if(dat_ptr->s_xh==0){len=len-2;goto fash;}
                len=len-7;
                for(i=0;i<len;i++)
                {
					txdbyte(*pm);
		        	s+=*pm++;
				}
                i=dat_ptr->s_xh>>8;
                s+=i; txdbyte(i);
                i=(char)dat_ptr->s_xh;
                s+=i; txdbyte(i);
			}
            else
			{
fash:
	        	for(len-=3,i=0;i<len;i++)
	            {
					txdbyte(*pm);
		          	s+=*pm++;
				}
			}
	     	txdbyte(s);
	     	ysrxd=100; continue;
	   	}
       	if(buf_ptr->buf0[1]==6)
	   	{
			P1=0xf1; buf_ptr = (HBUF xdata *)BUF_ADD;
     		if((buf_ptr->buf0[2]&0x01)==0x0)    // 无 中继标志
	 		{
				if(PLM_snd_rcv2())
				{
				    txdbyte('A');
				    len=buf_ptr->buf0[3]+3; txdbyte(len); txdbyte(6); s=len+6;
				    len=len-3;
				    for(i=0;i<len;i++)
				    {
						txdbyte(buf_ptr->buf0[i+4]);
					 	s+=buf_ptr->buf0[i+4];
					}
				    txdbyte(s);
				}
				else
				{
					txdbyte('A');  txdbyte(0);
				}
			}
			else    // 有中继标志
			{
				if(PLM_snd_rcv1())
				{
	                txdbyte('A');
				    len=buf_ptr->buf0[3]+3; txdbyte(len); txdbyte(6); s=len+6;
				    len=len-3;
				    for(i=0;i<len;i++)
				    {
						txdbyte(buf_ptr->buf0[i+4]);
					 	s+=buf_ptr->buf0[i+4];
					}
				    txdbyte(s);
				}
				else
				{
	                txdbyte('A');  txdbyte(0);
				}
			}
			P1=0xf4;  P1=0xff; ysrxd=100; continue;
		}
		if(buf_ptr->buf0[1]==7)
		{
			time_ptr = (TIME xdata *)TIME_ADD;
		    if(buf_ptr->buf0[0]==3)
			{
timerd:
	    	time_ptr->sec  =read_dallas(0x81);time_ptr->min  =read_dallas(0x83);
			time_ptr->hour =read_dallas(0x85);time_ptr->day =read_dallas(0x87);
			time_ptr->month=read_dallas(0x89);time_ptr->week=read_dallas(0x8b);
			time_ptr->year =read_dallas(0x8d);          // 读时钟
			buf_ptr->buf0[0]=10;              buf_ptr->buf0[1]=7;
			buf_ptr->buf0[2]=time_ptr->sec;   buf_ptr->buf0[3]=time_ptr->min;
			buf_ptr->buf0[4]=time_ptr->hour;  buf_ptr->buf0[5]=time_ptr->day;
			buf_ptr->buf0[6]=time_ptr->month; buf_ptr->buf0[7]=time_ptr->week;
			buf_ptr->buf0[8]=time_ptr->year;
			txdbyte('A');
			for (s=i=0;i<9;i++)
			{
				txdbyte(buf_ptr->buf0[i]);
			    s=s+buf_ptr->buf0[i];
			    buf_ptr->buf0[9]+=buf_ptr->buf0[i];
			}
			txdbyte(s);    // 累加和
		}
		else
			if(buf_ptr->buf0[0]==10)
	        {
				write_dallas(0x80,buf_ptr->buf0[2]); write_dallas(0x82,buf_ptr->buf0[3]);
			  	write_dallas(0x84,buf_ptr->buf0[4]); write_dallas(0x86,buf_ptr->buf0[5]);
			   	write_dallas(0x88,buf_ptr->buf0[6]); write_dallas(0x8A,buf_ptr->buf0[7]);
			   	write_dallas(0x8C,buf_ptr->buf0[8]);                 // 重写
				goto timerd;
			}
		    P1=0xf4;  P1=0xff; ysrxd=100; continue;
		}
	    if(buf_ptr->buf0[1]==8)
		{
			loop_l=buf_ptr->buf0[2];
	        loop_l_up=1;
		    txdbyte('A');  txdbyte(0);
		    ysrxd=100; continue;
		}
	    if(buf_ptr->buf0[1]==9)
		{
			jzq_ptr=(JZQ_HEAD xdata *)JZQ_ADD;
		    buf_ptr  = (HBUF xdata *)BUF_ADD;
		    P1=0xf4; P1=0xff; P1=0xf1;
		    cj=jzq_ptr->meter_num;   // 集中器管理的电表数量
		    c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3];
		    cc=c;
		    c=comp1(c);
		    dat_ptr=(DAT_ITEM xdata *)JZQ_ADD ;
		    while (cc<=cj)
			{
				i=0;
			   	buf_ptr->buf0[i]=11; i++;
			   	for(j=0;j<6;i++,j++)
			    {buf_ptr->buf0[i]=dat_ptr[c].s_no[j];}    	// 电表表号
			   	buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=1;i++;
			   	for(j=0;j<4;i++,j++)              			// 总电能
			    {buf_ptr->buf0[i]=dat_ptr[c].s_base[j];}
			   	buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=2;i++;
			   	for(j=0;j<4;i++,j++)              			// 峰有功电能
			    {buf_ptr->buf0[i]=dat_ptr[c].s_base2[j];}
			   	buf_ptr->buf0[i]=4;i++; buf_ptr->buf0[i]=3;i++;
			   	for(j=0;j<4;i++,j++)              			// 平有功电能
			    {buf_ptr->buf0[i]=dat_ptr[c].s_base3[j];}
			   	buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=4;i++;
			   	for (j=0;j<4;i++,j++)              			// 谷有功电能
			    {buf_ptr->buf0[i]=dat_ptr[c].s_base4[j];}
			   	if((dat_ptr[c].d_type&0x10)==0x0)      		// 无需量
			    {buf_ptr->buf0[0]=buf_ptr->buf0[0]-2; goto azz3;}
			   	buf_ptr->buf0[i]=3; i++; buf_ptr->buf0[i]=0x5; i++;
			   	for(j=0;j<3;i++,j++)              			// 有功总最大需量
			    {buf_ptr->buf0[i]=dat_ptr[c].s_xq[j];}
			   	buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=0x6;i++;
			   	for(j=0;j<4;i++,j++)              			// 有功总最大需量发生时间
			    {buf_ptr->buf0[i]=dat_ptr[c].s_time[j];}
azz3:
			   	buf_ptr->buf0[i]=1; i++; buf_ptr->buf0[i]=7; i++;
			   	buf_ptr->buf0[i]=dat_ptr[c].s_qdx; i++;     // 继电器状态
			   	buf_ptr->buf0[i]=2; i++; buf_ptr->buf0[i]=8; i++;
	            if(dat_ptr[c].s_xh!=0) n=dat_ptr[c].s_xh;
	            else  n=dat_ptr[c].pre_sno;
			   	buf_ptr->buf0[i]=(char)n; i++;
			   	n=n>>8; buf_ptr->buf0[i]=(char)n; i++;       //中继顺序号
			   	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=9; i++;
			   	buf_ptr->buf0[i]=dat_ptr[c].c_min; i++;   buf_ptr->buf0[i]=dat_ptr[c].c_hour; i++;
			   	buf_ptr->buf0[i]=dat_ptr[c].c_day; i++;   buf_ptr->buf0[i]=dat_ptr[c].c_mon;  i++;
			   	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x0a; i++;
			   	buf_ptr->buf0[i]=dat_ptr[c].e_min; i++;   buf_ptr->buf0[i]=dat_ptr[c].e_hour; i++;
			   	buf_ptr->buf0[i]=dat_ptr[c].e_day; i++;   buf_ptr->buf0[i]=dat_ptr[c].e_mon;  i++;
			   	buf_ptr->buf0[i]=1; i++; buf_ptr->buf0[i]=0x0b; i++;
			   	buf_ptr->buf0[i]=dat_ptr[c].e_cnt;  i++;   // 未抄计次
			   	txdbyte('A'); txdbyte(i+3); h=0;
			   	if(cc==cj) { txdbyte(9);        h=i+3+9; }
			    else{ txdbyte(0x89);     h=i+3+0x89; }
			   	for(j=0;j<i;j++)
			    {txdbyte(buf_ptr->buf0[j]); h=h+buf_ptr->buf0[j];}
			   	txdbyte(h);
			   	j=0;
			   	for(ysrxd=80; ysrxd;)
			    {
					s=P1; P1=0xf4; P1=s;    // 清狗
					if(!RI) continue;
					RI=0;
					if(SBUF=='N') j=1;
					if(SBUF=='W') j=2;
					if(SBUF=='E') j=3;
					if((j>0)&&(SBUF==0))
				  	{j=(j&0x0f)+0x10; break;}
				}
			    ysrxd=80;
			    if(j==0x11)
			    {
					c++; cc++;
				 	if(cc==448){ P1=0xf9; c=1; }
				 	if(cc==895){ P1=0xf2; c=1; }
			    }
			    else if (j==0x12) continue;
				else if (j==0x13) break;
				else break;
			}
		    P1=0xff;
		    ysrxd=100; continue;
		}
	    if(buf_ptr->buf0[1]==0x0a)
		{
			jzq_ptr=(JZQ_HEAD xdata *)JZQ_ADD;
		    buf_ptr  = (HBUF xdata *)BUF_ADD;
		    P1=0xf1;
		    cj=jzq_ptr->meter_num;   // 集中器管理的电表数量
		    c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3];
		    cc=c;
		    c=comp1(c);
		    dat_ptr=(DAT_ITEM xdata *)JZQ_ADD ;
		    while (cc<=cj)
			{
				i=0;
			   	buf_ptr->buf0[i]=8; i++;
			   	for(j=0;j<6;i++,j++)
			    {buf_ptr->buf0[i]=dat_ptr[c].s_no[j];}  // 电表表号
			   	buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=0x21;i++;
			   	for(j=0;j<4;i++,j++)          // 冻总电能
			    { buf_ptr->buf0[i]=dat_ptr[c].z_base[j];}
			   	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x22; i++;
			   	for(j=0;j<4;i++,j++)          // 日冻峰有功电能
			    {buf_ptr->buf0[i]=dat_ptr[c].z_base2[j];}
			   	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x23;i++;
			   	for(j=0;j<4;i++,j++)          // 日冻平有功电能
			    {buf_ptr->buf0[i]=dat_ptr[c].z_base3[j];}
			   	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x24; i++;
			   	for(j=0;j<4;i++,j++)          // 日冻谷有功电能
			    {buf_ptr->buf0[i]=dat_ptr[c].z_base4[j];}
			   	if((dat_ptr[c].d_type&0x10)==0)    // 无需量
			    {buf_ptr->buf0[0]=buf_ptr->buf0[0]-2;  goto aazz3; }
			   	buf_ptr->buf0[i]=3; i++; buf_ptr->buf0[i]=0x25; i++;
			   	for(j=0;j<3;i++,j++)          // 日冻有功总最大需量
			    {buf_ptr->buf0[i]=dat_ptr[c].z_xq[j];}
			   	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x26; i++;
			   	for(j=0;j<4;i++,j++)          // 日冻有功总最大需量发生时间
			    {buf_ptr->buf0[i]=dat_ptr[c].z_time[j];}
aazz3:
			   	buf_ptr->buf0[i]=1;i++;buf_ptr->buf0[i]=0x27;i++;buf_ptr->buf0[i]=dat_ptr[c].z_qdx; i++; // 日冻继电器状态
			   	buf_ptr->buf0[i]=1;i++;buf_ptr->buf0[i]=0x28;i++;
			   	buf_ptr->buf0[i]=dat_ptr[c].z_mon;  i++;         // 日冻结时间
			   	txdbyte('A');txdbyte(i+3); h=0;
			   	if(cc==cj){txdbyte(0x0a);h=i+3+0x0a;}
			    else { txdbyte(0x8a); h=i+3+0x8a;}
			   	for (j=0;j<i;j++)
			    {txdbyte(buf_ptr->buf0[j]);  h=h+buf_ptr->buf0[j];}
			   	txdbyte(h);
			   	j=0;
			   	for(ysrxd=80;ysrxd;)         // 接收特殊命令
			    {
					s=P1; P1=0xf4; P1=s;    // 清狗
					if(!RI) continue;
					RI=0;
					if(SBUF=='N') j=1;
					if(SBUF=='W') j=2;
					if(SBUF=='E') j=3;
					if((j>0)&&(SBUF==0))
				  	{j=(j&0x0f)+0x10; break;}
					if(ysrxd==0) break;
				}
			    ysrxd=80;
			    if(j==0x11)
				{
					c++; cc++;
				 	if(cc==448){ P1=0xf9; c=1; }
				 	if(cc==895){ P1=0xf2; c=1; }
			    }
			    else if (j==0x12) continue;
				else if (j==0x13) break;
				else  break;
			}
		    P1=0xff; ysrxd=100; continue;
		}
		if(buf_ptr->buf0[1]==0x0b)
		{
			jzq_ptr=(JZQ_HEAD xdata *)JZQ_ADD;
			buf_ptr = (HBUF xdata *)BUF_ADD;
			P1=0xf4;P1=0xff;P1=0xf1;
			cj=jzq_ptr->meter_num;   // 集中器管理的电表数量
			c=256*(unsigned)buf_ptr->buf0[2]+(unsigned)buf_ptr->buf0[3];
			cc=c;
			c=comp1(c);
			dat_ptr=(DAT_ITEM xdata *)JZQ_ADD ;
			while(cc<=cj)
			{
				i=0;
			   	buf_ptr->buf0[i]=8; i++;
			   	for(j=0;j<6;i++,j++)
				{buf_ptr->buf0[i]=dat_ptr[c].s_no[j];}  // 电表表号
			   	buf_ptr->buf0[i]=4;i++;buf_ptr->buf0[i]=0x31;i++;
			   	for(j=0;j<4;i++,j++)                	// 月冻总电能
				{buf_ptr->buf0[i]=dat_ptr[c].r_base[j];}
			   	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x32;i++;
			   	for(j=0;j<4;i++,j++)                	// 月冻峰有功电能
				{buf_ptr->buf0[i]=dat_ptr[c].r_base2[j];}
			   	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x33;i++;
			   	for(j=0;j<4;i++,j++)                	// 月冻平有功电能
				{buf_ptr->buf0[i]=dat_ptr[c].r_base3[j];}
			  	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x34;i++;
			   	for(j=0;j<4;i++,j++)               		// 月冻谷有功电能
				{buf_ptr->buf0[i]=dat_ptr[c].r_base4[j];}
			   	if((dat_ptr[c].d_type&0x10)==0)   		// 无需量
				{buf_ptr->buf0[0]=buf_ptr->buf0[0]-2;  goto bzz3;}
			   	buf_ptr->buf0[i]=3; i++; buf_ptr->buf0[i]=0x35;i++;
			   	for (j=0;j<3;i++,j++)               	// 月冻有功总最大需量
			    {buf_ptr->buf0[i]=dat_ptr[c].r_xq[j];}
			   	buf_ptr->buf0[i]=4; i++; buf_ptr->buf0[i]=0x36;i++;
			   	for(j=0;j<4;i++,j++)               		// 月冻有功总最大需量发生时间
			    {buf_ptr->buf0[i]=dat_ptr[c].r_time[j];}
bzz3:
				buf_ptr->buf0[i]=1;i++;buf_ptr->buf0[i]=0x37;i++;buf_ptr->buf0[i]=dat_ptr[c].r_qdx;i++; // 月冻继电器状态
			   	buf_ptr->buf0[i]=1;i++;buf_ptr->buf0[i]=0x38;i++;
			   	buf_ptr->buf0[i]=dat_ptr[c].r_mon;i++; // 月冻结时间
			   	txdbyte('A');txdbyte(i+3); h=0;
			   	if(cc==cj){txdbyte(0x0b);h=i+3+0x0b;}
			    else{txdbyte(0x8b);h=i+3+0x8b;}
			   	for (j=0;j<i;j++)
			    {txdbyte(buf_ptr->buf0[j]);h=h+buf_ptr->buf0[j];}
				txdbyte(h);
			   	j=0;
			   	for(ysrxd=80;ysrxd;)
			    {
					s=P1;P1=0xf4;P1=s;    // 清狗
					if(!RI) continue;
					RI=0;
					if(SBUF=='N') j=1;
					if(SBUF=='W') j=2;
					if(SBUF=='E') j=3;
					if((j>0)&&(SBUF==0))
				  	{j=(j&0x0f)+0x10;break;}
				}

⌨️ 快捷键说明

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