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

📄 devmain.cpp

📁 采用LPC的芯片做的气体排放检测,包括气体成分分析,数据的处理,数据传输给工作站.
💻 CPP
字号:
//DevMain.c
/*////////////////////////////////////////////////////////////////////
FAM_100流量分析系统
*////////////////////////////////////////////////////////////////////
#include	"stdafx.h"

//#ifndef		_AFXDLL
#include  "config.h"
#include	"target.h"
//extern	U8	KeyScan(void);	
//extern		REG8	TimeDispBuf[8];
//#else
extern	U8	TimeDispBuf[8];		//extern表示通知编译器其声明的函数或变量可以在本模块及其他模块中使用,为全局变量,只声明,未定义
//#endif
/*==========================================================**
**		全局变量在这里声明	(保留FTY的参数,但是做区分)		**
**==========================================================*/
//	公共变量
//U8		g_ucKeyDownData;

U8		g_ucKeyData;
U8		g_ucOldSubMenu;//定义无符号8位整形变量
U8		ucSubMenu;

U8		g_ucTeso2;
U8	g_uccontrolsta;
U8	g_ucTestVMAS;
U8	g_ucTestNO;
U8  g_ucMachineAddr;

U8	g_ucBaudRate;
U8	g_ucMessageCode;
U8	g_ucProtocol;
U8	Data373_2;
U8	g_ucInterface;

U8		g_PrinterType;
U8		g_ucReset;
U8		g_ucPrintColumn;
U8		g_ucRPM_P_S_I;//	test Position / Stroke / Igniting

U8	RegNoData[12]="粤E-55555";



	U8	TimeDispBuf[8];

	
U32		g_nLastDataRecord;	//	FTY 保存数据当前指针
U32		g_nLastPointer;		//	FGA 保存数据当前指针
U32		nResetRecord;
U32     U32_sofetime;

_FGA_STAT	g_FGAStat;

int			g_iPenuVar;
float		g_fPEF=0.5f;

U16 FLOWSEP;
U16 HCDelayTime;
float Kcoef,Kcoef1,Kbleed,Kbleed1,Ktemp1,Ktemp2;

U16  U16_O2calibration;
U16  U16_O2data;
U16  U16_O2data1;
U16  U16_timecount;
float Ko2;
float Co2;
extern   _All_Data0 g_alldata;


_UP_HOST_CMD_INFO g_HostCmdInfo;//结构体类型
MENU_ITEM_DATA	g_CurrentData;
MENU_ITEM_DATA	g_ChangeMenu;//结构体类型


//	FGA专有
_DEV_FGA4100_DATA	g_FGA4100CurData;
_DEV_FGA4100_DATA	g_HighIdleData;
_DEV_FGA4100_DATA	g_IdleData;
U16		MeasureRecord[10];	//	300*16*2=9,600*16	个BYTE
_VEHICLE_INFO		g_VehicleInfo;
extern	U8 AvoidFlashBuf[];
U8		AvoidFlashBuf[64]={0};
U16     U16_o2updata[20];
U16     U16_o2downdata[20];     

//extern O2_Timer[64];
extern O2_Blage;
extern Timer1_count;


/*#ifndef WIN32
	void  WdtFeed(void){  WDFEED = 0xAA;   WDFEED = 0x55;}//看门狗喂狗操作
	//=================================================
	void  WdtStar(void)//启动看门狗
	{
		WDTC = 0x0100;						// 设置WDTC,喂狗重装值
		WDMOD = 0x03;						// 设置并启动WDT
		WdtFeed();							// 进行喂狗操作
	}
	void Abort_Handler(void)
	{
		if(*(uint32*)0x1fc == 0x87654321)	WdtStar();
		while(1);
	}

	void	ENABLE_485_RXD(void)
	{
		IOCLR0 = DE485;
		//IOCLR0 = RE485;
		Data373_2 &= (~RE485);
   		Write373_2(Data373_2);
	}
	void		ENABLE_485_TXD(void)
	{
		IOSET0 = DE485;
		//IOSET0 = RE485;
		Data373_2 |= (RE485);
   		Write373_2(Data373_2);
	}
	void		DISABLE_485(void)		
	{
		IOCLR1 = DE485;
		//IOSET0 = RE485;
		Data373_2 |= (RE485);
   		Write373_2(Data373_2);
	}
#endif*/
void	Init_g_Verialble(void)
{
    U16 spanATP,spanGasT,spanEnvT,coefRH,spanRH;
	U8	Buf[128];
	//Write24c256((U8*)DATA,0x00,sizeof(DATA));
	memset((U8*)Buf,0,sizeof(Buf));
	Read24c256((U8*)Buf,0,40);
	//SendBlock(1,Buf,sizeof(Buf));
	//	1.稀释比测量方式
	if(Buf[ROM_ADDR_TESTO2]&1)		g_ucTeso2 	= 1;
	else							g_ucTeso2 	= 0;
	//	2.流量测量方式
	if((Buf[ROM_ADDR_TESTVMAS] & 0x01))		g_ucTestVMAS 	= 1;
	else							g_ucTestVMAS 	= 0;
	//	3.NO测量模式
	if((Buf[ROM_ADDR_TESTNO ] & 0x01))		g_ucTestNO 	= 1;
	else							g_ucTestNO 	= 0;
	//   4.大气压力校准
	//memcpy((U8*)&slope,Buf+ROM_ADDR_slope,2);
	memcpy((U8*)&spanATP,Buf+ROM_ADDR_spanATP,2);
    Kbleed=((float)10100/(float)33536);
	if(spanATP>1100|spanATP<900)
	{
	     Kbleed1=1.;  
	}
	else 
	{
	     Kbleed1=(float)spanATP/1000.;
	}
	//5,环境湿度校准
	//memcpy((U8*)&coefRH,Buf+ROM_ADDR_coefRH,2);
	memcpy((U8*)&spanRH,Buf+ROM_ADDR_spanRH,2);
	Kcoef=1.0;
	if(spanRH<900|spanRH>1100)
	{
	     Kcoef1=1. ;
	}
	else
	{
	     Kcoef1=(float)spanRH/1000.;
	}
	
	
	//6,气体温度校准参数
	memcpy((U8*)&spanGasT,Buf+ROM_ADDR_spanGasT,2);
	if(spanGasT>1100|spanGasT<900)
	{
	     Ktemp1=1.;
	}
	else
	{
	     Ktemp1=(float)spanGasT/1000.;
	}
	//6,环境温度校准参数
	memcpy((U8*)&spanEnvT,Buf+ROM_ADDR_spanEnvT,2);
	if(spanEnvT>1100|spanEnvT<900)
	{
	     Ktemp2=1;
	}
	else
	{
	     Ktemp2=spanEnvT/1000.;
	}
	//7.转速校准
	//8。低流量限值
	memcpy((U8*)&g_iPenuVar,Buf+ROM_ADDR_PENU_VAR,4);
	if((g_iPenuVar < -5000) || (g_iPenuVar >-500))	g_iPenuVar = -1000;
	//9.读取文氏管的流量值
	//FLOWSEP=Buf[ROM_ADDR_FLOWSEP-1]+Buf[ROM_ADDR_FLOWSEP]*256;
	memcpy((U8*)&FLOWSEP,Buf+ROM_ADDR_FLOWSEP,2);
	memcpy((U8*)&Ko2,Buf+ROM_ADDR_Ko2,4);
	memcpy((U8*)&Co2,Buf+ROM_ADDR_Co2,4);
	
}
/*BOOL	voidFunc(U8* pData)
{
	*pData = *pData;
	return TRUE;
}*/

change_RAM()
{
    Timer1_count=0;
    g_ucProtocol=0;
    O2_Blage=0;
    U16_timecount=1;
    // Ko2=1.1;
    //Co2=2.6;
    // Write24c256((U8*)&Ko2,(U16)ROM_ADDR_Ko2,4);
    //Write24c256((U8*)&Co2,(U16)ROM_ADDR_Co2,4);
    memset((U8*)&g_alldata,0,sizeof(g_alldata));
    memset((U8*)&g_FGA4100CurData,0,sizeof(_DEV_FGA4100_DATA));
    memset((U8*)&U16_o2updata,0,sizeof(U16_o2updata));
    memset((U8*)&U16_o2downdata,0,sizeof(U16_o2downdata));
}
void purdata(void);

int main(void)
{ 	
     // Sleep(1000);
	 //U8 nLen;
     TargetInit();// 硬件初始化 
     Init_g_Verialble();//读EPROM并进行初始化
     change_RAM();
     FGAWarmUpMeasure();//预热
     FGAZero(1);//给所有平台调零
     Sleep(20000);
     while(1)
   	 {
   	        //US0_putchar(11);
            //purdata();
   	        //Get_Countreasult();//排放总量计算
           // READ_ADresult();//读四路AD转换
           
            SleepAndQueryMsg(1000);//处理上位机通讯
   	 }   	
} 

void purdata(void)//计算稀释后的氧浓度
{
 
  U32 data;
  U8  data1;
  //U8 i,j,k,l;
  U16_O2data1=0;
  data=0;
  for(data1=0;data1<20;data1++)
  {data+=U16_o2updata[data1];}
  data=(U16)(data/20);
  /*i=(U8)((data%10)+'0');
  j=(U8)((data/10)%10+'0');
  k=(U8)((data/100)+'0');
  l=' ';
  US1_putchar(k);
  US1_putchar(j);
  US1_putchar(i);
  US1_putchar(l);
  US1_putchar(l);*/
  U16_O2data1=data;
  data=0;
  for(data1=0;data1<20;data1++)
  {data+=U16_o2downdata[data1];}
  data=(U16)(data/20);
  /*i=(U8)((data%10)+'0');
  j=(U8)((data/10)%10+'0');
  k=(U8)((data/100)+'0');
  l=' ';
  US1_putchar(k);
  US1_putchar(j);
  US1_putchar(i);
  US1_putchar(l);
  US1_putchar(l);*/
  U16_O2data1+=data;
  if(U16_timecount>0)
  {
       if(U16_timecount++>60)
       {
              U16_timecount=0;//保存大气氧浓度/以代校准
              U16_O2data=U16_O2data1;
       }
  }
  g_alldata.wO2_1=(U16)(Ko2*U16_O2data1+Co2);
  US0_putchar(g_alldata.wO2_1);
  US0_putchar(g_alldata.wO2_1>>8); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -