📄 rs485.c
字号:
#include "fDETDeclare.H"
#include "DETConst.H"
#include "RS485BUF_DEF.H"
void fRS485Analysis(void)
{
unsigned char CrcLen,CrcL,CrcH;
unsigned char *Crcbuf, DETModule;
EPCS=0; //喂狗
EPCS=1;
if(RS485Buffer[3]==0x10){
if((RS485Buffer[1] == MODULETYPE) &&
(RS485Buffer[6]==MODULETYPE)){ //模块功能不容许改变
ResetFlag=0;
InitCounter=0;
ResetFlag1=0;
fSetModuleAddr();
return;
}
else{ //否则发命令数据错
//填写命令号
RS485Buffer[4]=0x03; //填写应答标志
RS485Buffer[5]=0;
TransmitAck();
return;
}
}
DETModule= RS485Buffer[2]&0xf7;
if((RS485Buffer[1] == MODULETYPE)
&&( DETModule==(MODULEADDRESS&0xf7))) {
//地址匹配,分析该命令
ResetFlag=0;
InitCounter=0;
ResetFlag1=0;
Crcbuf=RS485Buffer+1; //校正的命令单元的起始地址
CrcLen=RS485Buffer[5]+5; //命令单元长度
Crc1021(Crcbuf,CrcLen,&CrcH,&CrcL);
if((RS485Buffer[CrcLen+1]==CrcL)
&&(RS485Buffer[CrcLen+2]==CrcH)){
//CRC校验正确,分析命令
//ATT命令处理
switch(RS485Buffer[3]) {
case 0x40:
TESTFLAG=1;
fSetDetCalBase();//设置功率校准基点
break;
case 0x41:
TESTFLAG=1;
fReadDetCalBase();//读功率校准基准
break;
case 0x11:
TESTFLAG=0;
fDETStateCheck(); //查表
break;
case 0x12:
TESTFLAG=0;
fModuleVersionCheck();
default://命令号错
RS485Buffer[4]=0x02; //填写应答标志
RS485Buffer[5]=0; //填写命令长度
TransmitAck();
break;
}
}
else {
//发CRC错误应答命令
RS485Buffer[4]=0x01; //填写应答标志
RS485Buffer[5]=0;
TransmitAck();
}
}
else
REN = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -