📄 serial.c
字号:
&&(isdigit(Serial_0_Data[57])==1)) //x
{
x=((uint)(Serial_0_Data[53]-0x30)*1000);
x+=((uint)(Serial_0_Data[54]-0x30)*100);
x+=((uint)(Serial_0_Data[55]-0x30)*10);
x+=(Serial_0_Data[57]-0x30);
LJSJ=x;
LJSJ_Err=0;
}
else
{
LJSJ_Err++;
ERR_YES_OR_NO=1; //错误总开关置1,有错误发生!!!
if(LJSJ_Err>5) //超过5次错误,清零
{
LJSJ_Err=0;
LJSJ=0;
}
}
}
/*********************************************/
//函数名称:StartTimerData(void)
//函数功能:起始时间数据提取函数
//输入参数:无
//输出参数:无
//返 回 值:无
/*********************************************/
void StartTimerData(void)
{
if((Serial_0_Data[58]==toascii(' ')) //空格
&&(isdigit(Serial_0_Data[59])==1) //M
&&(isdigit(Serial_0_Data[60])==1) //M
&&(Serial_0_Data[61]==toascii('-')) //-
&&(isdigit(Serial_0_Data[62])==1) //D
&&(isdigit(Serial_0_Data[63])==1) //D
&&(Serial_0_Data[64]==toascii(' ')) //
&&(isdigit(Serial_0_Data[65])==1) //H
&&(isdigit(Serial_0_Data[66])==1) //H
&&(Serial_0_Data[67]==toascii(':')) //:
&&(isdigit(Serial_0_Data[68])==1) //M
&&(isdigit(Serial_0_Data[69])==1)) //M
{
Start_Month=((Serial_0_Data[59]-0x30)*10);
Start_Month+=(Serial_0_Data[60]-0x30);
Start_Date=((Serial_0_Data[62]-0x30)*10);
Start_Date+=(Serial_0_Data[63]-0x30);
Start_HH=((Serial_0_Data[65]-0x30)*10);
Start_HH+=(Serial_0_Data[66]-0x30);
Start_MM=((Serial_0_Data[68]-0x30)*10);
Start_MM+=(Serial_0_Data[69]-0x30);
QSSJ_Err=0;
}
else
{
QSSJ_Err++;
ERR_YES_OR_NO=1; //错误总开关置1,有错误发生!!!
if(QSSJ_Err>5) //超过5次错误,清零
{
QSSJ_Err=0;
Start_Month=0;
Start_Date=0;
Start_HH=0;
Start_MM=0;
}
}
}
/*********************************************/
//函数名称:BXL_Data(void)
//函数功能:泵效率数据提取函数
//输入参数:无
//输出参数:无
//返 回 值:无
/*********************************************/
void BXL_Data(void)
{
uchar x=0;
if((Serial_0_Data[70]==toascii(' ')) //空格
&&(isdigit(Serial_0_Data[71])==1) //x
&&(isdigit(Serial_0_Data[72])==1) //x
&&(isdigit(Serial_0_Data[73])==1)) //x
{
x=((Serial_0_Data[71]-0x30)*100);
x+=((Serial_0_Data[72]-0x30)*10);
x+=(Serial_0_Data[73]-0x30);
BXL_1=x;
BXL_Err=0;
}
else
{
BXL_Err++;
ERR_YES_OR_NO=1; //错误总开关置1,有错误发生!!!
if(BXL_Err>5) //超过5次错误,清零
{
BXL_Err=0;
BXL_1=0;
}
}
if((Serial_0_Data[74]==toascii(' ')) //空格
&&(isdigit(Serial_0_Data[75])==1) //x
&&(isdigit(Serial_0_Data[76])==1) //x
&&(isdigit(Serial_0_Data[77])==1)) //x
{
x=((Serial_0_Data[75]-0x30)*100);
x+=((Serial_0_Data[76]-0x30)*10);
x+=(Serial_0_Data[77]-0x30);
BXL_2=x;
BXL_Err=0;
}
else
{
BXL_Err++;
ERR_YES_OR_NO=1; //错误总开关置1,有错误发生!!!
if(BXL_Err>5) //超过5次错误,清零
{
BXL_Err=0;
BXL_2=0;
}
}
}
/*********************************************/
//函数名称:YJ_Type_Data(void)
//函数功能:预警类型数据提取函数
//输入参数:无
//输出参数:无
//返 回 值:无
/*********************************************/
void YJ_Type_Data(void)
{
if((Serial_0_Data[78]==toascii(' '))) //空格
{
if(Serial_0_Data[79]==toascii('L'))//井漏 2
{
YJ_Type=2;
}
else
{
if(Serial_0_Data[79]==toascii('Y')) //井涌 3
{
YJ_Type=3;
}
else
{
if(Serial_0_Data[79]==toascii('P')) //井喷 1
{
YJ_Type=1;
}
else
{
YJ_Type=0; //正常
}
}
}
YJ_Type_Err=0;
}
else
{
YJ_Type_Err++;
ERR_YES_OR_NO=1; //错误总开关置1,有错误发生!!!
if(YJ_Type_Err>5) //超过5次错误,清零
{
YJ_Type_Err=0;
YJ_Type=0;
}
}
}
/*********************************************/
//函数名称:CLEAR_Data(void)
//函数功能:终端机清零按键操作结果数据提取函数
//输入参数:无
//输出参数:无
//返 回 值:无
/*********************************************/
void CLEAR_Data(void)
{
if((Serial_0_Data[80]==toascii(' '))&&(Serial_0_Data[81]==toascii('1'))) //清零成功!
{
CLEAR_Key=0;
// LJLL=0; //清累计流量
}
}
/*********************************************/
//函数名称:GTZJ_Data(void)
//函数功能:钢套直径数据提取函数
//输入参数:无
//输出参数:无
//返 回 值:无
/*********************************************/
void GTZJ_Data(void)
{
if((Serial_0_Data[82]==toascii(' '))) //空格
{
if((isdigit(Serial_0_Data[83])==1)&&
(isdigit(Serial_0_Data[84])==1)&&
(isdigit(Serial_0_Data[85])==1))
{
//读取#1钢套直径数据1
GT_ZJ1_1=((uint)(Serial_0_Data[83]-0x30)*100+
(Serial_0_Data[84]-0x30)*10+
(Serial_0_Data[85]-0x30));
}
}
if((Serial_0_Data[86]==toascii(' '))) //空格
{
if((isdigit(Serial_0_Data[87])==1)&&
(isdigit(Serial_0_Data[88])==1)&&
(isdigit(Serial_0_Data[89])==1))
{
//读取#1钢套直径数据2
GT_ZJ1_2=((uint)(Serial_0_Data[87]-0x30)*100+
(Serial_0_Data[88]-0x30)*10+
(Serial_0_Data[89]-0x30));
}
}
if((Serial_0_Data[90]==toascii(' '))) //空格
{
if((isdigit(Serial_0_Data[91])==1)&&
(isdigit(Serial_0_Data[92])==1)&&
(isdigit(Serial_0_Data[93])==1))
{
//读取#1钢套直径数据3
GT_ZJ1_3=((uint)(Serial_0_Data[91]-0x30)*100+
(Serial_0_Data[92]-0x30)*10+
(Serial_0_Data[93]-0x30));
}
}
if((Serial_0_Data[94]==toascii(' '))) //空格
{
if((isdigit(Serial_0_Data[95])==1)&&
(isdigit(Serial_0_Data[96])==1)&&
(isdigit(Serial_0_Data[97])==1))
{
//读取#2钢套直径数据1
GT_ZJ2_1=((uint)(Serial_0_Data[95]-0x30)*100+
(Serial_0_Data[96]-0x30)*10+
(Serial_0_Data[97]-0x30));
}
}
if((Serial_0_Data[98]==toascii(' '))) //空格
{
if((isdigit(Serial_0_Data[99])==1)&&
(isdigit(Serial_0_Data[100])==1)&&
(isdigit(Serial_0_Data[101])==1))
{
//读取#2钢套直径数据2
GT_ZJ2_2=((uint)(Serial_0_Data[99]-0x30)*100+
(Serial_0_Data[100]-0x30)*10+
(Serial_0_Data[101]-0x30));
}
}
if((Serial_0_Data[102]==toascii(' '))) //空格
{
if((isdigit(Serial_0_Data[103])==1)&&
(isdigit(Serial_0_Data[104])==1)&&
(isdigit(Serial_0_Data[105])==1))
{
//读取#2钢套直径数据3
GT_ZJ2_3=((uint)(Serial_0_Data[103]-0x30)*100+
(Serial_0_Data[104]-0x30)*10+
(Serial_0_Data[105]-0x30));
}
}
}
/*********************************************/
//函数名称:Serial0_Data_Processing(void)
//函数功能:串口0接收数据处理函数
//输入参数:x
//输出参数:无
//返 回 值:无
/*********************************************/
void Serial0_Data_Processing(void)
{
uchar addr1,addr2,addr3;
if(Serial_0_ok==1)
{
addr1=((AddrNuber/100)%10+0x30); //计算本机地址ASCII码
addr2=((AddrNuber/10)%10+0x30);
addr3=(AddrNuber%10+0x30);
wdt_reset();//喂狗,以免处理中断!
if((Serial_0_Data[1]==toascii('Y'))&&(Serial_0_Data[2]==addr1)&&
(Serial_0_Data[3]==addr2)&&(Serial_0_Data[4]==addr3)&&
(Serial_0_Data[5]==toascii('C'))) //格式为:YXXXC
{
BPL_Data(); //泵排量数据提取
CKYW_Data(); //出口液位数据提取
CKLL_Data(); //出口流量数据提取
CKLS_Data(); //出口流速数据提取
LLC_S_Data(); //流量差(升/秒)数据提取
LLPL_Data(); //理论排量(升/秒)数据提取
LJLL_Data(); //累计流量数据提取
LJSJ_Data(); //累计时间数据提取
StartTimerData(); //起始时间数据提取
BXL_Data(); //泵效率数据提取
YJ_Type_Data(); //预警类型数据提取
CLEAR_Data(); //终端机清零按键操作结果数据提取
GTZJ_Data(); //钢套直径数据提取函数
if(ERR_YES_OR_NO!=0)
{
Serial0_Err_out(); //串口0接收数据错误回送函数
}
if(CLEAR_Key!=0)//累计流量清零确认
{
put0c(0x0a); //数据帧开始
put0c(toascii('Y'));
put0c((AddrNuber/100)%10+0x30);
put0c((AddrNuber/10)%10+0x30);
put0c((AddrNuber)%10+0x30);
put0c(toascii('B'));
put0c(toascii('C'));
put0c(toascii('L'));
put0c(toascii('E'));
put0c(toascii('A'));
put0c(toascii('R'));
put0c(0x0d);
}
if((GT_ZJ1_1!=SET_1_GTZJ_Parameter_1)||
(GT_ZJ1_2!=SET_1_GTZJ_Parameter_2)||
(GT_ZJ1_3!=SET_1_GTZJ_Parameter_3)||
(GT_ZJ2_1!=SET_2_GTZJ_Parameter_1)||
(GT_ZJ2_2!=SET_2_GTZJ_Parameter_2)||
(GT_ZJ2_3!=SET_2_GTZJ_Parameter_3)) //缸套直径参数变更确认
{
put0c(0x0a); //数据帧开始
put0c(toascii('Y'));
put0c((AddrNuber/100)%10+0x30);
put0c((AddrNuber/10)%10+0x30);
put0c((AddrNuber)%10+0x30);
put0c(toascii('B'));
put0c(toascii(' '));
put0c(toascii('G'));
put0c(toascii('T'));
put0c(toascii('Z'));
put0c(toascii('J'));
put0c(toascii(' '));
put0c((SET_1_GTZJ_Parameter_1/100)%10+0x30);
put0c((SET_1_GTZJ_Parameter_1/10)%10+0x30);
put0c((SET_1_GTZJ_Parameter_1)%10+0x30);
put0c(toascii(' '));
put0c((SET_1_GTZJ_Parameter_2/100)%10+0x30);
put0c((SET_1_GTZJ_Parameter_2/10)%10+0x30);
put0c((SET_1_GTZJ_Parameter_2)%10+0x30);
put0c(toascii(' '));
put0c((SET_1_GTZJ_Parameter_3/100)%10+0x30);
put0c((SET_1_GTZJ_Parameter_3/10)%10+0x30);
put0c((SET_1_GTZJ_Parameter_3)%10+0x30);
put0c(toascii(' '));
put0c((SET_2_GTZJ_Parameter_1/100)%10+0x30);
put0c((SET_2_GTZJ_Parameter_1/10)%10+0x30);
put0c((SET_2_GTZJ_Parameter_1)%10+0x30);
put0c(toascii(' '));
put0c((SET_2_GTZJ_Parameter_2/100)%10+0x30);
put0c((SET_2_GTZJ_Parameter_2/10)%10+0x30);
put0c((SET_2_GTZJ_Parameter_2)%10+0x30);
put0c(toascii(' '));
put0c((SET_2_GTZJ_Parameter_3/100)%10+0x30);
put0c((SET_2_GTZJ_Parameter_3/10)%10+0x30);
put0c((SET_2_GTZJ_Parameter_3)%10+0x30);
put0c(0x0d);
}
}
}
Serial_0_ok=0;
}
/*********************************************/
//函数名称:SIGNAL(SIG_USART0_RECV)
//函数功能:串口0中断接收处理函数
//输入参数:无
//输出参数:无
//返 回 值:无
/*********************************************/
SIGNAL(SIG_USART0_RECV)
{
uchar Temp;
Temp=UDR0; //接收数据!
Run_Cn=0;
put1c(Temp);
if(Temp==0x0a) //判断是否为数据帧开始
{
rece_Len_0=0; //串口0接收数据长度=0
recebuf_0[0]=Temp;
rece_Len_0++; //串口0接收数据长度+1
}
else
{
if(rece_Len_0>106){rece_Len_0=0;}
recebuf_0[rece_Len_0]=Temp;
rece_Len_0++;
}
if((Temp==0x0d)&&(recebuf_0[0]==0x0a))//判断数据帧是否结束
{
if(recebuf_0[106]==0x0d)
{
for(rece_Len_0=0;rece_Len_0<106;rece_Len_0++)
{
Serial_0_Data[rece_Len_0]=recebuf_0[rece_Len_0]; //转存串口0接收的数据,等待处理!
recebuf_0[rece_Len_0]=0; //清接收缓存
}
Serial_0_ok=1; //串口0接收数据完成
}
else
{
StaraEnd_Err=1; //起始帧或结束帧错误! 错误编码:11
ERR_YES_OR_NO=1; //错误总开关置1,有错误发生!!!
Serial0_Err_out(); //串口0接收数据错误回送函数
}
}
wdt_reset();//喂狗,以免退出复位
}
/*********************************************/
//函数名称:SIGNAL(SIG_USART0_RECV)
//函数功能:串口1中断接收处理函数
//输入参数:无
//输出参数:无
//返 回 值:无
/*********************************************/
SIGNAL(SIG_USART1_RECV)
{
uchar Temp;
Temp=UDR1; //接收数据!
put1c(0x0a);
put1c(0xB6);
put1c(0xCB);
put1c(0xBF);
put1c(0xDA);
put1c(0xB4);
put1c(0xED);
put1c(0xCE);
put1c(0xF3);
put1c(0xA3);
put1c(0xA1);
put1c(0xD5); put1c(0xE2); put1c(0xCA); put1c(0xC7); put1c(0xB6); put1c(0xCB); put1c(0xBF); put1c(0xDA); put1c(0x31); put1c(0xA3);
put1c(0xAC);
put1c(0xC7);
put1c(0xEB);
put1c(0xB8);
put1c(0xC4); put1c(0xBD); put1c(0xD3);
put1c(0xB6);
put1c(0xCB);
put1c(0xBF);
put1c(0xDA);
put1c(0x30);
put1c(0xA3);
put1c(0xA1);
put1c(0x0d);
wdt_reset();//喂狗,以免退出复位
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -