📄 fgauphostcomm.cpp
字号:
//UpHostComm.c
/************************************************************
****作用:查询串口的数据,根据当前的协议,转换为对应的指令。
**** 包含发送数据的函数
****
************************************************************/
#include "StdAfx.h"
#ifndef _AFXDLL
#include "config.h"
#endif
extern const U8 FGA4100_RIGHT_ANSWER[];
extern const U8 get_data[];
extern U8 g_ucTeso2;
extern U8 g_ucTestNO;
extern U16 FLOWSEP;
extern U16 HCDelayTime;
extern U32 U32_sofetime;
extern U16 U16_MeasureRecord[30*5];//30秒数据缓存
extern U8 g_ucMachineAddr;
extern U8 g_uccontrolsta;
extern U8 g_ucProtocol;
extern _UP_HOST_CMD_INFO g_HostCmdInfo;
extern _VEHICLE_INFO g_VehicleInfo;
extern _DEV_FGA4100_DATA g_FGA4100CurData;
extern _DEV_FGA4100_DATA g_HighIdleData;
extern _DEV_FGA4100_DATA g_IdleData;
extern U32 g_nLastPointer; // FGA 保存数据当前指针
extern U8 RegNoData[12];
extern _All_Data0 g_alldata;
const U8 DerectReplyCode[7]={'X'/*0*/,'X','A','Z','I','U','T'};
BOOL CheckCmdFormatFOFEN(unsigned char* pReadData,
unsigned short nLen,
unsigned char ucMachineAddr,
_UP_HOST_CMD_INFO* pHostCmdInfo)
{
U8 i,uc;
U16 wCmdData;
nLen = ucMachineAddr;
// 1.开始5个BYTE应该是 {0x7E,0x01,0xF4,0x0A,0x7E}
if(pReadData[0]!=0Xaa|pReadData[1]!=0x55)
{
return FALSE;
}
if(i < 5) return FALSE;
// 2.检查校验和
i = ~GetCheckSum(pReadData+5,pReadData[5]+1);
uc = *(pReadData+pReadData[5]+6);
// (2005-12-06)暂时不要校验,最终要加上的
//if(i != uc) return FALSE;
// 3.分析命令
wCmdData = pReadData[3]*256+pReadData[4];
uc = pReadData[10];
if(wCmdData == READ_STATUS){
pHostCmdInfo->ucRawCmdPara = READ_STATUS;
}else if (wCmdData == GET_PPMDATA) {
pHostCmdInfo->ucRawCmdPara = GET_PPMDATA;
}else if (wCmdData == GET_GDATA) {
pHostCmdInfo->ucRawCmdPara = GET_GDATA;
//else pHostCmdInfo->ucRawCmdPara = enuFGA4100Cmd_PumpOff;
}else if (wCmdData == GET_NATURALDATA) {
pHostCmdInfo->ucRawCmdPara = GET_NATURALDATA;
}else if (wCmdData == GET_ALLDATA) {
pHostCmdInfo->ucRawCmdPara = GET_ALLDATA;
}else if (wCmdData == FGA_LIBRATION){
pHostCmdInfo->ucRawCmdPara = FGA_LIBRATION;
}else if (wCmdData == TEST_LOWPPM){
pHostCmdInfo->ucRawCmdPara = TEST_LOWPPM;
}else if (wCmdData == NO_CALIBRATION ){
pHostCmdInfo->ucRawCmdPara = NO_CALIBRATION ;
}else if (wCmdData == CO2_CALIBRATION ){
pHostCmdInfo->ucRawCmdPara = CO2_CALIBRATION ;
}else if (wCmdData == O2_CALIBRATION){
pHostCmdInfo->ucRawCmdPara = O2_CALIBRATION;
}else if (wCmdData == PRESS_CALIBRATION){
pHostCmdInfo->ucRawCmdPara = PRESS_CALIBRATION;
}else if (wCmdData == GET_SAVADATA){
pHostCmdInfo->ucRawCmdPara = GET_SAVADATA;
}else if (wCmdData == TEMP1_CALIBRATION){
pHostCmdInfo->ucRawCmdPara = TEMP1_CALIBRATION;
}else if (wCmdData == TEMP2_CALIBRATION) {
pHostCmdInfo->ucRawCmdPara = TEMP2_CALIBRATION;
}else if (wCmdData == DRY_CALIBRATION ) {
pHostCmdInfo->ucRawCmdPara = DRY_CALIBRATION ;
}else if (wCmdData == SPEED_CALIBRATION){
pHostCmdInfo->ucRawCmdPara = SPEED_CALIBRATION;
}else if (wCmdData == ZERO_PERFORM0){
pHostCmdInfo->ucRawCmdPara = ZERO_PERFORM0;
}else if (wCmdData == ZERO_CO2PERFORM0){
pHostCmdInfo->ucRawCmdPara = ZERO_CO2PERFORM0;
}else if (wCmdData == ZERO_NOPERFORM){
pHostCmdInfo->ucRawCmdPara = ZERO_NOPERFORM;
}else if (wCmdData == LEAK_CHECK){
pHostCmdInfo->ucRawCmdPara = LEAK_CHECK;
}else if (wCmdData == HANDUP_TEST ){
pHostCmdInfo->ucRawCmdPara = HANDUP_TEST ;
}else if (wCmdData == SET_READ_MODE){
pHostCmdInfo->ucRawCmdPara = SET_READ_MODE;
}else if (wCmdData == SET_READ_VMAS){
pHostCmdInfo->ucRawCmdPara = SET_READ_VMAS;
}else if (wCmdData == SET_READ_TIME){
pHostCmdInfo->ucRawCmdPara = SET_READ_TIME;
}else if (wCmdData == CONTROL_LOAD){
pHostCmdInfo->ucRawCmdPara = CONTROL_LOAD;
}else if (wCmdData == SOFE_WARE_TIME ){
pHostCmdInfo->ucRawCmdPara = SOFE_WARE_TIME ;
}else return FALSE;
return TRUE;
}
void ShortToChar(U16 wData,U8* pByte)
{
if(wData>9999)
{
pByte[0] =pByte[1] =pByte[2] =pByte[3] ='9';
return;
}
pByte[0] = (unsigned char)(wData/1000)+'0';
pByte[1] = (unsigned char)((wData%1000)/100)+'0';
pByte[2] = (unsigned char)((wData%100)/10)+'0';
pByte[3] = (unsigned char)(wData%10)+'0';
}
void ReplyUpHostFofenFGA (U16 nCmdCode,U8 ucExtraByte,_DEV_FGA4100_DATA* pDevData)
{
U8 Buf[350];
U16 i;
U32 nLen;
U8 *pU8;
memset(Buf,0,sizeof(Buf));
/*g_alldata.wHC=5000;
g_alldata.wCO=1;
g_alldata.wCO2=1;
g_alldata.wO2=15;
g_alldata.wNO=5000;
g_alldata.S_RPM=0X1112;
g_alldata.temp_oil=0X1314;
g_alldata.wO2_1=18;
g_alldata.wCO2_1=5;
g_alldata.gHC=0X1920;
g_alldata.gCO=0X2122;
g_alldata.gCO2=0X2324;
g_alldata.gNO=0X2526;
g_alldata.add_gdata=0X2728;
g_alldata.add_Vdata=0X2930;
g_alldata.Bleed_natur=0X3132;
g_alldata.temp_natur=0X3334;
g_alldata.coefRH=0X3536;*/
Buf[0]=0x55;Buf[1]=0xAA;//memcpy(Buf,(U8*)FGA4100_RIGHT_ANSWER,12);//Buf[8]= 0x71;Buf[9]= 0x28;Buf[10]= 0x01;Buf[11]= 0x01;
switch(nCmdCode){
case Cmd_Unkown:// 发回错误应答{7e01 c638 7101 906e}
Buf[2]= 0x02;Buf[3]= 0x00;Buf[4]= 0x00;
Buf[5]=GetCheckSum(Buf,5);
nLen = 6;
break;
case READ_STATUS://读系统状态参数
Buf[2]=0x01;
Buf[3]=g_FGAStat.ucFGAFace;
Buf[4]=GetCheckSum(Buf,4);
nLen = 5;
break;
case GET_PPMDATA://取浓度参数
pU8 =(U8*)&g_alldata;
Buf[2]=17;
for(i=0;i<14;i++){Buf[3+i]=*(pU8+i);}
if(g_ucTeso2){Buf[17]=g_alldata.wCO2_1;Buf[18]=(g_alldata.wCO2_1>>8);}
else{Buf[17]=g_alldata.wO2_1;Buf[18]=(g_alldata.wO2_1>>8);}
Buf[19]=g_FGAStat.ucFGAFace;
Buf[20]=GetCheckSum(Buf,20);
nLen = 21;
break;
case GET_GDATA://取质量参数
pU8 =(U8*)&g_alldata;
Buf[2]=15;
for(i=0;i<12;i++)
{Buf[3+i]=*(pU8+i+18);}
Buf[15]=(U8)g_alldata.R_XSB;Buf[16]=(U8)(g_alldata.R_XSB>>8);
Buf[17]=g_FGAStat.ucFGAFace;
Buf[18]=GetCheckSum(Buf,18);
nLen = 19;
break;
case GET_NATURALDATA://取环境参数
Buf[2]=6;
Buf[3]= g_alldata.Bleed_natur;Buf[4]=(g_alldata.Bleed_natur>>8);
Buf[5]= g_alldata.temp_natur;Buf[6]=(g_alldata.temp_natur>>8);
Buf[7]= g_alldata.coefRH;Buf[8]=(g_alldata.coefRH>>8);
Buf[9]=GetCheckSum(Buf,9);
nLen = 10;
break;
case GET_ALLDATA://取所有参数
pU8 =(U8*)&g_alldata;
Buf[2]=31;
for(i=0;i<14;i++)
{Buf[3+i]=*(pU8+i);}
if(g_ucTeso2){Buf[17]=g_alldata.wCO2_1;Buf[18]=(g_alldata.wCO2_1>>8);}
else{Buf[17]=g_alldata.wO2_1;Buf[18]=(g_alldata.wO2_1>>8);}
for(i=0;i<14;i++)
{Buf[19+i]=*(pU8+i+18);}
Buf[33]=g_FGAStat.ucFGAFace;
Buf[34]=GetCheckSum(Buf,34);
nLen = 35;
break;
case FGA_LIBRATION://校准五气平台
Buf[2]=3;Buf[3]=0x06;Buf[4]=0x06;
Buf[5]=ucExtraByte;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case TEST_LOWPPM:US0_putchar(7);//低浓度气体测量
Buf[2]=3;Buf[3]=0x07;Buf[4]=0x07;
Buf[5]=ucExtraByte;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case NO_CALIBRATION://NO平台校准
Buf[2]=3;Buf[3]=0x08;Buf[4]=0x08;
Buf[5]=ucExtraByte;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case CO2_CALIBRATION://CO2平台校准
Buf[2]=3;Buf[3]=0x09;Buf[4]=0x09;
Buf[5]=ucExtraByte;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case O2_CALIBRATION://O2校准
Buf[2]=3;Buf[3]=0x10;Buf[4]=0x10;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case PRESS_CALIBRATION:US0_putchar(4);//大气压力校准
Buf[2]=3;Buf[3]=0x11;Buf[4]=0x11;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case GET_SAVADATA://取20S的缓存数据
pU8 =(U8*)&U16_MeasureRecord;
Buf[2]=200;
for(i=0;i++;i<200)
{
Buf[3+i]=*(pU8++);
}
Buf[203] = GetCheckSum(Buf,203);
nLen = 204;
break;
case TEMP1_CALIBRATION:US0_putchar(6);//校准稀释后气体温度
Buf[2]=3;Buf[3]=0x13;Buf[4]=0x13;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case TEMP2_CALIBRATION :US0_putchar(7);//校准环境温度
Buf[2]=3;Buf[3]=0x14;Buf[4]=0x14;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case DRY_CALIBRATION:US0_putchar(8);//湿度的校准
Buf[2]=3;Buf[3]=0x15;Buf[4]=0x15;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case SPEED_CALIBRATION: //转速的校准
Buf[2]=3;Buf[3]=0x16;Buf[4]=0x16;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case ZERO_PERFORM0://调零五气平台
Buf[2]=3;Buf[3]=0x17;Buf[4]=0x17;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case ZERO_CO2PERFORM0: //调零CO2平台
Buf[2]=3;Buf[3]=0x18;Buf[4]=0x18;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case ZERO_NOPERFORM://调零NO平台
Buf[2]=3;Buf[3]=0x19;Buf[4]=0x19;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case LEAK_CHECK://泄露检查
Buf[2]=3;Buf[3]=0x20;Buf[4]=0x20;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case HANDUP_TEST://吸附测试
Buf[2]=3;Buf[3]=0x21;Buf[4]=0x21;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
break;
case SET_READ_MODE://系统的工作模式读取//和设置
Buf[2]=3;Buf[3]=0x22;Buf[4]=0x22;
if(ucExtraByte)
{
Read24c256((U8*)Buf+5,(U16)ROM_ADDR_TESTO2,1);
Read24c256((U8*)Buf+6,(U16)ROM_ADDR_TESTNO,1);
Buf[7]=g_FGAStat.ucFGAFace;Buf[8]=GetCheckSum(Buf,8);
nLen = 9;
}
else
{
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
}
break;
case SET_READ_VMAS:US0_putchar(3);//设置/读取文氏管流量和气泵抽气流量
if(ucExtraByte)
{
Buf[2]=5;Buf[3]=0x23;Buf[4]=0x23;
Read24c256((U8*)Buf+5,(U16)ROM_ADDR_FLOWSEP,2);
Buf[7]=g_FGAStat.ucFGAFace;Buf[8]=GetCheckSum(Buf,8);
nLen = 9;
}
else
{
Buf[2]=3;Buf[3]=0x23;Buf[4]=0x23;
Buf[5]=g_FGAStat.ucFGAFace;Buf[6]=GetCheckSum(Buf,6);
nLen = 7;
}
break;
case SET_READ_TIME:US0_putchar(4);//设置/读取气路延时
if(ucExtraByte)
{
Buf[2]=5;Buf[3]=0x24;Buf[4]=0x24;
Read24c256((U8*)Buf+5,(U16)ROM_ADDR_HCDelayTime,2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -