⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fgauphostcomm.cpp

📁 采用LPC的芯片做的气体排放检测,包括气体成分分析,数据的处理,数据传输给工作站.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//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 + -