📄 jizhong.c
字号:
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 + -