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

📄 main.c

📁 集中数据采集系统中
💻 C
📖 第 1 页 / 共 5 页
字号:
				//time_ptr = (TIME xdata *)TIME_ADD;
				time_ptr = (TIME *)TIME_ADD;
			    if(buf_ptr->buf0[0]==3)
				{
timerd:			//
				rRTCCON=0x01;
/*		    	time_ptr->sec   =rBCDSEC;
		    	time_ptr->min   =rBCDMIN;
				time_ptr->hour  =rBCDHOUR;
				time_ptr->day   =rBCDDAY;
				time_ptr->month =rBCDMON;
				time_ptr->week  =rBCDDATE;
				time_ptr->year  =rBCDYEAR;          // 读时钟*/
				time_ptr->sec   =rBCDSEC;
		    	time_ptr->min   =rBCDMIN;
				time_ptr->hour  =rBCDHOUR;
				time_ptr->day   =rBCDDAY;
				time_ptr->month =rBCDMON;
				time_ptr->week  =rBCDDATE;
				time_ptr->year  =rBCDYEAR;          // 读时钟
				rRTCCON=0x00;			

				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; 
			    //qwe
			    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;
				jzq_ptr=(JZQ_HEAD *)JZQ_ADD;
			    //buf_ptr  = (HBUF xdata *)BUF_ADD;
			    buf_ptr  = (HBUF *)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];
			    c=256*(U16)buf_ptr->buf0[2]+(U16)buf_ptr->buf0[3];
			    cc=c;
			    //c=comp1(c);
			    //dat_ptr=(DAT_ITEM xdata *)JZQ_ADD ;
			    dat_ptr=(DAT_ITEM *)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;    // 清狗
						//qwe
						//if(!RI) continue;
						//RI=0;
						if((rUTRSTAT0&0x1)==0) continue;
						//if(SBUF=='N') j=1;
						//if(SBUF=='W') j=2;
						//if(SBUF=='E') j=3;
						if(rURXH0=='N') j=1;
						if(rURXH0=='W') j=2;
						if(rURXH0=='E') j=3;
						//if((j>0)&&(SBUF==0))
						if((j>0)&&(rURXH0==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;
				jzq_ptr = (JZQ_HEAD *)JZQ_ADD;
			    //buf_ptr = (HBUF xdata *)BUF_ADD;
			    buf_ptr = (HBUF *)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 ;
			    dat_ptr=(DAT_ITEM *)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;    // 清狗
						//qwe
						//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))
						if((rUTRSTAT0&0x1)==0) continue;
						if(rURXH0=='N') j=1;
						if(rURXH0=='W') j=2;
						if(rURXH0=='E') j=3;
						if((j>0)&&(rURXH0==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;
				jzq_ptr=(JZQ_HEAD *)JZQ_ADD;
				//buf_ptr = (HBUF xdata *)BUF_ADD;
				buf_ptr = (HBUF *)BUF_ADD;
				//P1=0xf4;P1=0xff;P1=0xf1;
				//qwe
				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 ;
				dat_ptr=(DAT_ITEM *)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;    // 清狗
						//qwe
						//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))
						if((rUTRSTAT0&0x1)==0) continue;
						if(rURXH0=='N') j=1;
						if(rURXH0=='W') j=2;
						if(rURXH0=='E') j=3;
						if((j>0)&&(rURXH0==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;
			}
		}

	for (yszb=2;yszb;)
    {
    //P1=0xf4; P1=0xff;
    //qwe
    if (yszb==0) break;}
  	//RI=0;//qqqqqqqqqqqq
  	led_data=0xfb;										// 设置显示状态
  	ledstm(led_data);
}

U16 readsettings(void)
{
	//uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
	U16 cyc_flag,info_check;						// 循环标识,信息包校验标识
	//uchar xdata *pm;									// 地址指针
	uchar *pm;									// 地址指针
	//pm=(unsigned char xdata *)(JZQ_ADD+DAT_ADD*comp1(0));	// 取指针地址
	pm=(unsigned char *)(JZQ_ADD);	// 取指针地址
	buf_ptr->buf0[0]=0xEA;
	buf_ptr->buf0[1]=0xEA;
	buf_ptr->buf0[2]=0x81;
	buf_ptr->buf0[3]=carr_svr_name[1];
	buf_ptr->buf0[4]=carr_svr_name[0];
	buf_ptr->buf0[5]=0x05;
	buf_ptr->buf0[6]=*(pm+5);
	buf_ptr->buf0[7]=*(pm+6);
	buf_ptr->buf0[8]=*(pm+7);
	buf_ptr->buf0[9]=*(pm+12);
	buf_ptr->buf0[10]=*(pm+13);
	buf_ptr->buf0[11]=0x00;
	buf_ptr->buf0[12]=0x00;
	info_check=0;
	for(cyc_flag=0;cyc_flag<=12;cyc_flag++)
	{info_check+=buf_ptr->buf0[cyc_flag];}
	buf_ptr->buf0[13]=info_check%0x0100;
	buf_ptr->buf0[14]=info_check/0x0100;
	buf_ptr->buf0[15]=0xDD;
	return(15);
}

U16 loadsettings(void)
{
	//uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
	U16 cyc_flag,info_check;						// 循环标识,信息包校验标识
	//uchar xdata *pm;									// 地址指针
	uchar *pm;									// 地址指针
	//long data lngname;
	U32 lngname;
	//pm=(unsigned char xdata *)(JZQ_ADD+DAT_ADD*comp1(0));	// 取指针地址
	pm=(unsigned char *)(JZQ_ADD);	// 取指针地址
	*(pm+5)=buf_ptr->buf0[6];
	*(pm+6)=buf_ptr->buf0[7];
	*(pm+7)=buf_ptr->buf0[8];
	lngname=(carr_svr_name[0] / 0x10 * 1000 + carr_svr_name[0] % 0x10 * 100
			+ carr_svr_name[1] / 0x10 * 10 + carr_svr_name[1] % 0x10);
	*(pm+10)=lngname/0x0100;
	*(pm+11)=lngname%0x0100;
	buf_ptr->buf0[0]=0xEA;
	buf_ptr->buf0[1]=0xEA;
	buf_ptr->buf0[2]=0x8D;
	buf_ptr->buf0[3]=carr_svr_name[1];
	buf_ptr->buf0[4]=carr_svr_name[0];
	buf_ptr->buf0[5]=0x00;
	buf_ptr->buf0[6]=0x00;
	buf_ptr->buf0[7]=0x00;
	info_check=0;
	for(cyc_flag=0;cyc_flag<=7;cyc_flag++)
	{info_check+=buf_ptr->buf0[cyc_flag];}
	buf_ptr->buf0[8]=info_check%0x0100;
	buf_ptr->buf0[9]=info_check/0x0100;
	buf_ptr->buf0[10]=0xDD;
	return(10);
}

// 读取集中器时钟
U16 readclock(void)
{
	//uint data cyc_flag,info_check;						// 循环标识,信息包校验标识
	U16 cyc_flag,info_check;						// 循环标识,信息包校验标识
	buf_ptr->buf0[0]=0xEA;
	buf_ptr->buf0[1]=0xEA;
	buf_ptr->buf0[2]=0x82;
	buf_ptr->buf0[3]=carr_svr_name[1];
	buf_ptr->buf0[4]=carr_svr_name[0];
	buf_ptr->buf0[5]=0x06;
	rRTCCON=0x01;
	buf_ptr->buf0[6]=rBCDYEAR;
	buf_ptr->buf0[7]=rBCDMON;
	buf_ptr->buf0[8]=rBCDDAY;
 	buf_ptr->buf0[9]=rBCDHOUR;
	buf_ptr->buf0[10]=rBCDMIN;
	buf_ptr->buf0[11]=rBCDSEC;
	rRTCCON=0x00;	
	buf_ptr->buf0[12]=0x00;
	buf_ptr->buf0[13]=0x00;
	info_check=0;
	for(cyc_flag=0;cyc_flag<=13;cyc_flag++)
	{info_check+=buf_ptr->buf0[cyc_flag];}
	buf_ptr->buf0[14]=info_check%0x0100;
	buf_ptr->buf0[15]=info_check/0x0100;
	buf_ptr->buf0[16]=0xDD;
	return(16);
}

// 设置集中器时钟
//uint setclock(void)

⌨️ 快捷键说明

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