📄 jizhong.c
字号:
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;
}
}
//RXDEND:
P1=0xf4; P1=0xff; // 内置MODEM
rs232_ok=0;
//pcrxdend:
for (yszb=2;yszb;)
{P1=0xf4; P1=0xff; if (yszb==0) break;}
RI=0;
led_data=0xfb; // 设置显示状态
ledstm(led_data);
}
//>>>>>> 信息组包区--Start <<<<<<////////////////////
// 读取集中器设置
// EA EA 01 A0 A1 00 00 00 CS CS DD
// EA EA 81 A0 A1 05 ** ** ** ** ** 00 00 CS CS DD
unsigned int readsettings(void)
{
unsigned int data cyc_flag,info_check; // 循环标识,信息包校验标识
unsigned char xdata *pm; // 地址指针
pm=(unsigned char xdata *)(JZQ_ADD+0x80*comp1(0)); // 取指针地址
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);
}
// 加载集中器设置
// EA EA 0D A0 A1 03 ** ** ** 00 00 CS CS DD
// 52 15 04 00 00 44 41 54 41 00 01 00 02 00 00 00 03 00 03 00 00 3C
// EA EA 8D A0 A1 00 00 00 CS CS DD
unsigned int loadsettings(void)
{
unsigned int data cyc_flag,info_check; // 循环标识,信息包校验标识
unsigned char xdata *pm; // 地址指针
long data lngname;
pm=(unsigned char xdata *)(JZQ_ADD+0x80*comp1(0)); // 取指针地址
*(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);
}
// 读取集中器时钟
unsigned int readclock(void)
{
unsigned int data 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;
buf_ptr->buf0[6]=read_dallas(0x8D);
buf_ptr->buf0[7]=read_dallas(0x89);
buf_ptr->buf0[8]=read_dallas(0x87);
buf_ptr->buf0[9]=read_dallas(0x85);
buf_ptr->buf0[10]=read_dallas(0x83);
buf_ptr->buf0[11]=read_dallas(0x81);
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);
}
// 设置集中器时钟
unsigned int setclock(void)
{
unsigned int data cyc_flag,info_check; // 循环标识,信息包校验标识
write_dallas(0x80,buf_ptr->buf0[11]);write_dallas(0x82,buf_ptr->buf0[10]);
write_dallas(0x84,buf_ptr->buf0[9]);write_dallas(0x86,buf_ptr->buf0[8]);
write_dallas(0x88,buf_ptr->buf0[7]);write_dallas(0x8C,buf_ptr->buf0[6]);
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0x85;
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);
}
// 读取集中器运行主控版本号
unsigned int readversion(void)
{
unsigned int data cyc_flag,info_check; // 循环标识,信息包校验标识
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0x89;
buf_ptr->buf0[3]=carr_svr_name[1];
buf_ptr->buf0[4]=carr_svr_name[0];
buf_ptr->buf0[5]=0x07;
buf_ptr->buf0[6]=carr_svr_ver[0];
buf_ptr->buf0[7]=carr_svr_ver[1];
buf_ptr->buf0[8]=carr_svr_ver[2];
buf_ptr->buf0[9]=carr_svr_ver[3];
buf_ptr->buf0[10]=carr_svr_ver[4];
buf_ptr->buf0[11]=carr_svr_ver[5];
buf_ptr->buf0[12]=carr_svr_ver[6];
buf_ptr->buf0[13]=0x00;
buf_ptr->buf0[14]=0x00;
info_check=0;
for(cyc_flag=0;cyc_flag<=12;cyc_flag++)
{info_check+=buf_ptr->buf0[cyc_flag];}
buf_ptr->buf0[15]=info_check%0x0100;
buf_ptr->buf0[16]=info_check/0x0100;
buf_ptr->buf0[17]=0xDD;
return(17);
}
// 指定某表号实时抄表(点抄)
// 说明:这里为了与原程序兼容,模块开始时将数据包进行转换,收到数据包后再转换成需要的数据包
// --------------------------------------------------------------------------
// 帧头 长度域 协议域 数据域 校验域
// EA EA 04 01 80 06 00 01 00 08 51 45 00 00 FE 02 DD
// 00 05 10 15 20
//(52)18 06 01 FF FF FF FF FF FF 09 AF 75 23 01 01 05 1F 90 BB BB BB 7F 03 D3
// --------------------------------------------------------------------------
//(41)20 06 BB BB BB 81 16 1F 90 45 51 08 0F 21 04 00 00 14 03 00 00 00 00 00 00 07 01 00 00 68 04 FA
// 44 41 54 1D BB BB BB 81 16 1F 90 02 00 00 0F 06 00 00 00 03 00 00 00 00 00 00 00 03 00 00 00 94 03
// EA EA 04 01 80 06 00 01 00 00 00 02 00 00 62 02 DD
//(41)00
// 00 05 10 15 20 25 30
// 返回:
// 错误数据格式
// EA EA C4 A0 A1 00 00 00 CS CS DD
// 正确数据格式(表号为000100085145)
// 'S'30 30 30 31 30 30 30 38 35 31 34 35 21 04 00 00 14 03 00 00 07 01 00 00 'E'
// 'S'+KHM-ID+KHM-DATA+'E'
// 返回一条记录,其格式如下:
// KHM-ID:抄收电表局编号,ASCII码(*),12字节,不足前补零。
// KHM-DATA:电表返回数据,12字节BCD码,分别为4字节总、4字节峰、4字节谷
// --------------------------------------------------------------------------
unsigned int point_excerption(void)
{
unsigned int data cyc_flag,info_check; // 循环标识,信息包校验标识
unsigned char xdata carr_page[34]; // 临时载波包
carr_page[0]=0x09;
carr_page[1]=0xAF;
carr_page[2]=buf_ptr->buf0[11];
carr_page[3]=buf_ptr->buf0[10];
carr_page[4]=buf_ptr->buf0[9];
carr_page[5]=0x01;
carr_page[6]=0x05;
carr_page[7]=0x1F;
carr_page[8]=0x90;
carr_page[9]=0xBB;
carr_page[10]=0xBB;
carr_page[11]=0xBB;
carr_page[12]=0x00;
for(cyc_flag=2;cyc_flag<=11;cyc_flag++)
{carr_page[12]+=carr_page[cyc_flag];}
carr_page[13]=0x03;
// 信息包正向转换
buf_ptr->buf0[0]=0x18;
buf_ptr->buf0[1]=0x06;
buf_ptr->buf0[2]=0x01;
buf_ptr->buf0[3]=0xFF;
buf_ptr->buf0[4]=0xFF;
buf_ptr->buf0[5]=0xFF;
buf_ptr->buf0[6]=0xFF;
buf_ptr->buf0[7]=0xFF;
buf_ptr->buf0[8]=0xFF;
for(cyc_flag=0;cyc_flag<=13;cyc_flag++)
{buf_ptr->buf0[9+cyc_flag]=carr_page[cyc_flag];}
buf_ptr->buf0[23]=0x00;
for(cyc_flag=1;cyc_flag<=22;cyc_flag++)
{buf_ptr->buf0[23]+=buf_ptr->buf0[cyc_flag];}
if(PLM_snd_rcv1())
{
for(cyc_flag=0;cyc_flag<=33;cyc_flag++)
{carr_page[cyc_flag]=buf_ptr->buf0[cyc_flag];}
// 信息包反向转换
if(carr_page[1]==0x00)
{
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0xC4;
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);
}
else
{
buf_ptr->buf0[0]='S';
buf_ptr->buf0[1]=0x30;
buf_ptr->buf0[2]=0x30;
buf_ptr->buf0[3]=0x30;
buf_ptr->buf0[4]=0x31;
buf_ptr->buf0[5]=0x30;
buf_ptr->buf0[6]=0x30;
buf_ptr->buf0[7]=(carr_page[13]/0x10) + 0x30;
buf_ptr->buf0[8]=(carr_page[13]%0x10) + 0x30;
buf_ptr->buf0[9]=(carr_page[12]/0x10) + 0x30;;
buf_ptr->buf0[10]=(carr_page[12]%0x10) + 0x30;
buf_ptr->buf0[11]=(carr_page[11]/0x10) + 0x30;
buf_ptr->buf0[12]=(carr_page[11]%0x10) + 0x30;
buf_ptr->buf0[13]=carr_page[18];
buf_ptr->buf0[14]=carr_page[17];
buf_ptr->buf0[15]=carr_page[16];
buf_ptr->buf0[16]=carr_page[15];
buf_ptr->buf0[17]=carr_page[22];
buf_ptr->buf0[18]=carr_page[21];
buf_ptr->buf0[19]=carr_page[20];
buf_ptr->buf0[20]=carr_page[19];
buf_ptr->buf0[21]=carr_page[30];
buf_ptr->buf0[22]=carr_page[29];
buf_ptr->buf0[23]=carr_page[28];
buf_ptr->buf0[24]=carr_page[27];
buf_ptr->buf0[25]='E';
return(25);
}
}
else
{
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0xC4;
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);
}
}
// 向集中器下载主控程序
unsigned int downpro(void)
{
unsigned int data cyc_flag,info_check; // 循环标识,信息包校验标识
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0xC6;
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);
}
// 集中器复位
unsigned int ser_reposition(void)
{
unsigned int data cyc_flag,info_check; // 循环标识,信息包校验标识
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0x90;
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);
}
// 清空集中器抄表数据
// EA EA 07 01 40 00 00 00 1C 02 DD
unsigned int clear_data(void)
{
unsigned int data cyc_flag,info_check; // 循环标识,信息包校验标识
buf_ptr->buf0[0]=0xEA;
buf_ptr->buf0[1]=0xEA;
buf_ptr->buf0[2]=0xC7;
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);
}
// 由集中器上装当月抄表数据<抄录实时表底>
// EA EA 0E A0 A1 00 BN CS CS DD
// EA EA CE A0 A1 01 00 BN CS CS DD
// EA EA 8E A0 A1 FF METE-DATA BN CS CS DD
// METE-DATA包含多个数据块,每个数据块为255字节,以BN作为标识,传输时可随机发送,
// 每次抄表过程第一块为前10个字节为该次抄表时间标签,格式为FFH+'T'+FFH+TIME-DATA+'C',
// 后为每电表18Byte记录长度存放,表号为6字节压缩BCD码,后12字节,分别为4字节总、4字节峰、
// 4字节谷。最后一个数据块数据不足255字节时用FFH补足。BN以最大块号开始逐步减至1。
unsigned int realtime(unsigned char char_temp)
{
unsigned char data cush_char; // 接收信息包标识
unsigned int data cyc_flag,cyc_flag_acc,num_cyc,info_check; // 大循环标识,小循环标识,标识,信息包校验标识
unsigned int data bn; // 包标识符
// unsigned char xdata temp_data[8000]; // 临时包
unsigned char xdata *pm;
QHTEMP data qh_temp;
// QHTEMP xdata *qhpm;
unsigned char xdata *qhpm;
P1=0xF4;P1=0xF1;
cyc_flag_acc=0;
P1=0xFA;
qhpm=(unsigned char xdata *)JZQ_ADD;
*(qhpm+cyc_flag_acc)=0xFF;
*(qhpm+(++cyc_flag_acc))='T';
*(qhpm+(++cyc_flag_acc))=0xFF;
*(qhpm+(++cyc_flag_acc))=read_dallas(0x8D);
*(qhpm+(++cyc_flag_acc))=read_dallas(0x89);
*(qhpm+(++cyc_flag_acc))=read_dallas(0x87);
*(qhpm+(++cyc_flag_acc))=read_dallas(0x85);
*(qhpm+(++cyc_flag_acc))=read_dallas(0x83);
*(qhpm+(++cyc_flag_acc))=read_dallas(0x81);
*(qhpm+(++cyc_flag_acc))='C';
P1=0xF1;
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字节谷>>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -