📄 05.c
字号:
void readreplase(void)//继电器释放或电能表复位
{
unsigned char *q;
//p=(unsigned char *)&rel;
q=(unsigned char *)&systemsetup.sbzh;
switch(rxbuf[2])
{
case 0x00:
if(rxbuf[3]==0x00)
{
break;
}
else
{
switch(rxbuf[3])
{
case 1:
if((rxbuf[4]==0x00)&&(rxbuf[5]==0xff))
rel.lockstate|=0x0001; ///??????????????????????????
else if((rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
rel.lockstate&=0xfffe;
else
{
answernum=0x01;
exceptionalanswer();
}
break;
case 2:
if((rxbuf[4]==0x00)&&(rxbuf[5]==0xff))
rel.lockstate|=0x0002;
else if((rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
rel.lockstate&=0xfffd;
else
{
answernum=0x01;
exceptionalanswer();
}
break;
case 3:
if((rxbuf[4]==0x00)&&(rxbuf[5]==0xff))
rel.lockstate|=0x0004;
else if((rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
rel.lockstate&=0xfffb;
else
{
answernum=0x01;
exceptionalanswer();
}
break;
case 4:
if((rxbuf[4]==0x00)&&(rxbuf[5]==0xff))
rel.lockstate|=0x0008;
else if((rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
rel.lockstate&=0xfff7;
else
{
answernum=0x01;
exceptionalanswer();
}
break;
case 5:
if((rxbuf[4]==0x00)&&(rxbuf[5]==0xff))
rel.lockstate|=0x0010;
else if((rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
rel.lockstate&=0xffef;
else
{
answernum=0x01;
exceptionalanswer();
}
break;
case 6:
if((rxbuf[4]==0x00)&&(rxbuf[5]==0xff))
rel.lockstate|=0x0020;
else if((rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
rel.lockstate&=0xffdf;
else
{
answernum=0x01;
exceptionalanswer();
}
break;
case 7:
if((rxbuf[4]==0x00)&&(rxbuf[5]==0xff))
rel.lockstate|=0x0040;
else if((rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
rel.lockstate&=0xffbf;
else
{
answernum=0x01;
exceptionalanswer();
}
break;
case 8:
if((rxbuf[4]==0x00)&&(rxbuf[5]==0xff))
rel.lockstate|=0x0080;
else if((rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
rel.lockstate&=0xff7f;
else
{
answernum=0x01;
exceptionalanswer();
}
break;
case 0xff:
if((rxbuf[4]==0x00)&&(rxbuf[5]==0xff))
rel.lockstate|=0xffff;
else if((rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
rel.lockstate&=0x0000;
else
{
answernum=0x01;
exceptionalanswer();
}
break;
default:
answernum=0x05;
exceptionalanswer();
break;
}
}
break;
case 0x01:
if((rxbuf[3]==0xff)&&(rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
{
flag. edgcl=1;//电表复位
}
break;
case 0x10:
if((rxbuf[3]==0xff)&&(rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
{
flag.evecl=1;// 清除事件记录
}
break;
case 0x20:
if((rxbuf[3]==0xff)&&(rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
{
flag.limicl=1;//清除最大最小值
}
break;
case 0x30:
if((rxbuf[3]==0xff)&&(rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
{
flag.warnflag=1;//定值清零
}
break;
case 0x40:
if((rxbuf[3]==0xff)&&(rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
{
flag.feeflag=1;//费率清零
}
break;
case 0x50:
if((rxbuf[3]==0xff)&&(rxbuf[4]==0x00)&&(rxbuf[5]==0x00))
{
*(q+2)=rxbuf[5];
*(q+3)=rxbuf[4];//更改设备地址
}
break;
default:
answernum=0x01;
exceptionalanswer();
break;
}
if(answernum==0x00)
{
txbuf[0]=rxbuf[0];
txbuf[1]=rxbuf[1];
txbuf[2]=rxbuf[2];
txbuf[3]=rxbuf[3];
txbuf[4]=rxbuf[4];
txbuf[5]=rxbuf[5];
txbuf[6]=rxbuf[6];
txbuf[7]=rxbuf[7];
P3OUT |= BIT7; //P3.7为高电平为发送模式
flag.transfer_ok=FAULT;
i=0;
do
{
TXBUF1=txbuf[i];
while((IFG2 & UTXIFG1) == 0) // USART0 TX buffer ready?
{
_NOP();
}
i++;
}while(i<8);
}
flag.transfer_ok=TRUE;
i=0;
answernum=0x00;
for(i=0;i<140;i++)
{
rxbuf[i]=0;
txbuf[i]=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -