📄 process.c
字号:
for(i=0;i<3;i++)
{
cr_cfg[i]=0;
new_cfg[i]=0;
}
if((RecBuf[7]>=0x30)&&(RecBuf[7]<=0x39)&&
(RecBuf[8]>=0x30)&&(RecBuf[8]<=0x39)&&
(RecBuf[9]>=0x30)&&(RecBuf[9]<=0x39))
{
/*-----------设置最小采集时间---------------*/
if((RecBuf[7]<=0x30)&&(RecBuf[8]<=0x30)&&(RecBuf[9]<0x31))
{
RecBuf[7]=0x30;
RecBuf[8]=0x30;
RecBuf[9]=0x31;
}
else if((RecBuf[7]>=0x37)&&(RecBuf[8]>=0x32)&&(RecBuf[9]>=0x30))
{
RecBuf[7]=0x37;
RecBuf[8]=0x32;
RecBuf[9]=0x30;
}//-----------设置最大采集时间---------------//
switch(RecBuf[3])
{
case 1 :
i2c_addr=i2c_addr_rainconfig;
for(i=0;i<3;i++)
cr_cfg[i]=RecBuf[7+i];
/*-----------更改雨量采集时间---------------*/
rain_cfg=CHAR_TO_INT(cr_cfg,3);
break;
case 2 :
i2c_addr=i2c_addr_levelconfig;
for(i=0;i<3;i++)
cr_cfg[i]=RecBuf[7+i];
/*-----------更改水位采集时间---------------*/
level_cfg=CHAR_TO_INT(cr_cfg,3);
break;
}
/*-----------查找当前值并写入修改后的值---------------*/
R_block(WPAGE0,RPAGE0,i2c_addr,cr_cfg,3);
if((cr_cfg[0]&0x80)==0x80)
{
for(i=0;i<3;i++)
new_cfg[i]=RecBuf[7+i];
new_cfg[0]|=0x80;
W_block(WPAGE1,i2c_addr,new_cfg,3);
wait_1ms();
cr_cfg[0]&=0x7f;
W_block(WPAGE0,i2c_addr,cr_cfg,3);
}
else
{
for(i=0;i<3;i++)
new_cfg[i]=RecBuf[7+i];
new_cfg[0]|=0x80;
W_block(WPAGE0,i2c_addr,new_cfg,3);
wait_1ms();
R_block(WPAGE1,RPAGE1,i2c_addr,cr_cfg,3);
cr_cfg[0]&=0x7f;
W_block(WPAGE1,i2c_addr,cr_cfg,3);
}
cl_ack_ct(RecBuf[5],RecBuf[3],1);
}
return 1;
}
/*******************************************************************
读配置函数
函数原型:char Rd_cfg(void)
功 能:
********************************************************************/
char Rd_cfg(void)
{
uchar i;
uchar cr_cfg[3];
cs=0;
switch(RecBuf[3])
{
case 1 :
i2c_addr=i2c_addr_rainconfig;
SenBuf[3]=0x01;
break;
case 2 :
i2c_addr=i2c_addr_levelconfig;
SenBuf[3]=0x02;
break;
}
/*-----------查找当前值---------------*/
R_block(WPAGE0,RPAGE0,i2c_addr,cr_cfg,3);
if((cr_cfg[0]&0x80)!=0x80)
{
R_block(WPAGE1,RPAGE1,i2c_addr,cr_cfg,3);
}
cr_cfg[0]&=0x7f;
SenBuf[5]=(RecBuf[5]|0x80);
SenBuf[6]=0x03;
strncpy(&SenBuf[7],cr_cfg,3);
for(i=0;i<SenBuf[6]+7;i++)
cs+=SenBuf[i];
SenBuf[SenBuf[6]+7]=cs;
SenBuf[SenBuf[6]+8]=FRAME_END_CHAR;
Senlen=SenBuf[6]+9;
return 1;
}
/*******************************************************************
写配置条件函数
函数原型: char Wr_Conditions(void)
功 能:
********************************************************************/
char Wr_Conditions(void)
{
unsigned char i,j;
unsigned char xdata cd_cfg[11][10],new_cd[11][10];
cs=0;
for(i=0;i<11;i++)
for(j=0;j<10;j++)
{
cd_cfg[i][j]=0x00;
new_cd[i][j]=0x00;
}
for(i=0;i<RecBuf[6]/10;i++)
for(j=0;j<10;j++)
{
new_cd[i][j]=RecBuf[9+j+10*i];
}
switch(RecBuf[3])
{
case 1 :
i2c_addr=i2c_addr_rnct;
for(i=0;i<11;i++)
{
rain_cd[i].cd_time=0;
rain_cd[i].cd_data=0;
}
//-----------更改雨量门限---------------//
for(i=0;i<11;i++)
{
rain_cd[i].cd_time=CHAR_TO_LONG(&new_cd[i][0],4);
rain_cd[i].cd_data=CHAR_TO_LONG(&new_cd[i][4],6);
}
new_cfg=1;
break;
case 2 :
i2c_addr=i2c_addr_lvct;
for(i=0;i<11;i++)
{
level_cd[i].cd_time=0;
level_cd[i].cd_data=0;
}
//-----------更改水位门限---------------//
for(i=0;i<11;i++)
{
level_cd[i].cd_time=CHAR_TO_LONG(&new_cd[i][0],4);
level_cd[i].cd_data=CHAR_TO_LONG(&new_cd[i][4],6);
}
new_cfg=2;
break;
}
//-----------查找当前值并写入修改后的值---------------//
R_block(WPAGE2,RPAGE2,i2c_addr,&cd_cfg[0][0],110);
if((cd_cfg[0][0]&0x80)==0x80)
{
new_cd[0][0]|=0x80;
W_block(WPAGE3,i2c_addr,&new_cd[0][0],110);
wait_1ms();
cd_cfg[0][0]&=0x7f;
W_block(WPAGE2,i2c_addr,&cd_cfg[0][0],110);
}
else
{
new_cd[0][0]|=0x80;
W_block(WPAGE2,i2c_addr,&new_cd[0][0],110);
wait_1ms();
R_block(WPAGE3,RPAGE3,i2c_addr,&cd_cfg[0][0],110);
cd_cfg[0][0]&=0x7f;
W_block(WPAGE3,i2c_addr,&cd_cfg[0][0],110);
}
cl_ack_ct(RecBuf[5],RecBuf[3],1);
return 1;
}
/*******************************************************************
读配置条件函数
函数原型:char Rd_Conditions(void)
功 能:
********************************************************************/
char Rd_Conditions(void)
{
uchar i,j;
int k=0;
unsigned char xdata cr_cd[11][10];
cs=0;
for(i=0;i<11;i++)
for(j=0;j<10;j++)
{
cr_cd[i][j]=0x00;
}
switch(RecBuf[3])
{
case 1 :
i2c_addr=i2c_addr_rnct;
SenBuf[3]=0x01;
break;
case 2 :
i2c_addr=i2c_addr_lvct;
SenBuf[3]=0x02;
break;
}
R_block(WPAGE2,RPAGE2,i2c_addr,&cr_cd[0][0],110);
wait_1ms();
if((cr_cd[0][0]&0x80)!=0x80)
{
R_block(WPAGE3,RPAGE3,i2c_addr,&cr_cd[0][0],110);
}
cr_cd[0][0]&=0x7f;
SenBuf[5]=(RecBuf[5]|0x80);
SenBuf[6]=0;
for(i=0;i<11;i++)
{
if((cr_cd[i][5]==0x00)&&(cr_cd[i][6]==0x00)&&(cr_cd[i][7]==0x00)
&&(cr_cd[i][8]==0x00)&&(cr_cd[i][9]==0x00))
{
continue;
}
else
{
for(j=0;j<10;j++)
{
SenBuf[9+j+10*k]=cr_cd[i][j];
}
k++;
SenBuf[6]+=10;
}
}
SenBuf[7]=(char)(k/10)+0x30;
SenBuf[8]=(char)(k%10)+0x30;
SenBuf[6]+=2;
for(i=0;i<SenBuf[6]+7;i++)
cs+=SenBuf[i];
SenBuf[SenBuf[6]+7]=cs;
SenBuf[SenBuf[6]+8]=FRAME_END_CHAR;
Senlen=SenBuf[6]+9;
return 1;
}
/*******************************************************************
初始化配置函数
函数原型:
功 能:
********************************************************************/
char Wr_i2c(void)
{
unsigned char i;
unsigned char xdata init[128];
unsigned char page;
for(i=0;i<sizeof(init);i++)
{
init[i]=0xff;
}
switch(RecBuf[7])
{
case 0 : page=WPAGE0;break;
case 1 : page=WPAGE1;break;
case 2 : page=WPAGE2;break;
case 3 : page=WPAGE3;break;
case 4 : page=WPAGE4;break;
case 5 : page=WPAGE5;break;
case 6 : page=WPAGE6;break;
case 7 : page=WPAGE7;break;
}
W_block(page,i2c_addr_rainfall,init,sizeof(init));
cl_ack_ct(RecBuf[5],RecBuf[3],1);
return 1;
}
/*******************************************************************
读配置函数
函数原型:
功 能:
********************************************************************/
char Rd_i2c(void)
{
uchar i;
unsigned char wpage,rpage;
unsigned char xdata init[128];
switch(RecBuf[7])
{
case 0 : wpage=WPAGE0;rpage=RPAGE0;break;
case 1 : wpage=WPAGE1;rpage=RPAGE1;break;
case 2 : wpage=WPAGE2;rpage=RPAGE2;break;
case 3 : wpage=WPAGE3;rpage=RPAGE3;break;
case 4 : wpage=WPAGE4;rpage=RPAGE4;break;
case 5 : wpage=WPAGE5;rpage=RPAGE5;break;
case 6 : wpage=WPAGE6;rpage=RPAGE6;break;
case 7 : wpage=WPAGE7;rpage=RPAGE7;break;
}
R_block(wpage,rpage,i2c_addr_rainfall,init,sizeof(init));
for(i=0;i<sizeof(init);i++)
{
SenBuf[i]=init[i];
}
Senlen=sizeof(init);
return 1;
}
/*******************************************************************
时间同步函数
函数原型: char Set_time(void)
功 能:
********************************************************************/
char Set_time(void)
{
unsigned int set_time;
unsigned char i;
if((RecBuf[7]>=0x30)&&(RecBuf[7]<0x33)&&
(RecBuf[8]>=0x30)&&(RecBuf[8]<=0x39)&&
(RecBuf[9]>=0x30)&&(RecBuf[9]<=0x39))
{
set_time=CHAR_TO_INT(&RecBuf[7],3);
level_1min=(set_time%60)*50; //水位采集上报秒间隔定时20ms
rain_1min=(set_time%60)*50; //雨量采集上报秒间隔
r_time=set_time/60; //雨量采集上报间隔
l_time=set_time/60; //水位采集上报间隔
rfcd_1min=(set_time%60)*1000; //雨量秒间隔
save_time=set_time/60; //雨量存储间隔
for(i=0;i<11;i++)
rfcd_time[i]=set_time/60;//雨量采集加报间隔定时1ms
cl_ack_ct(RecBuf[5],RecBuf[3],1);
}
else
{
cl_ack_ct(RecBuf[5],RecBuf[3],0);
}
return 1;
}
/*******************************************************************
处理函数
函数原型: void process(void)
功 能:
********************************************************************/
char process(void)
{
char flag=0;
if(r_end)
{
cs=0;
SenBuf[0]=FRAME_START_CHAR;
SenBuf[1]=add[0];
SenBuf[2]=add[1];
SenBuf[4]=FRAME_START_CHAR;
switch(fc_flag)
{
case 0x02 :
flag=Rd_collect();
break;
case 0x04 :
flag=Wr_cfg();
break;
case 0x05 :
flag=Rd_cfg();
break;
case 0x06 :
flag=Wr_Conditions();
break;
case 0x07 :
flag=Rd_Conditions();
break;
case 0x0a :
flag=config_basic_waterlevel();
break;
case 0x0b :
flag=Set_time();
break;
case 0x0c :
flag=config_Multiplier_rainfall();
break;
case 0x00 :
flag=Wr_i2c();
break;
case 0x01 :
flag=Rd_i2c();
break;
default:
break;
}
rec_lamp=!rec_lamp;
}
if(flag)
{
r_end=0;
s_end=0;
p_end=1;
con_485=S_CON;
TI=1;
send_lamp=!send_lamp;
return 1 ;
}
return 0 ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -