📄 devmain.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 + -