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

📄 framemodule.c

📁 该程序完成了c8051外围电路的驱动和串口协议的编写。希望能给大家学习51单片机带来帮助
💻 C
📖 第 1 页 / 共 5 页
字号:
//*******************************************************************************
//Copyright (c) 2007,派利斯电子(北京)有限公司 硬件部
//文件名称: Framemodule.c
//摘    要: 本文件主要包含PT2060程序中框架部分的操作
//当前版本: D-1 
//作    者:  佟文杰
//完成日期: 4/13/2007
//修 改 人:
//修改原因:
//修改日期:
//*******************************************************************************
#define FRAMEMODULE_C

#include <math.h>
#include "hardware.h"
#include "currentmodule.h"
#include "channelstatus.h"
#include "Framemodule.h"
#include "adsample.h"
#include "alarm.h"
#include "can.h"
#include "comm.h"
#include "flashmodule.h"
#include "C8051F020.H"			//主函数的头文件调用最后全归结到调用framemodule.h文件

//extern unsigned int SamplePTR0; ///////////////////////////////////
//unsigned int idata SamplePTR0BAK;
//unsigned char idata uchRMSFlag;
//unsigned char idata uchRMSFlagBAK;

xdata union para1 All;
xdata struct Status MainModule;
extern xdata unsigned int  uiHeartbeatValue;

unsigned int idata uiHeartBeatNumber;
unsigned int idata uiHeartbeatcount;		//20080322



//------------------------------------------------------------------------------------------
//以下函数是框架调用的SET函数
//-----------------------------------------------------------------------------------------
void SetSystemOkStatusMain(unsigned char uchOkStatus)
{
	MainModule.uchSystemOKStatus = uchOkStatus;	
}

void SetChannelOkStatusMain(unsigned char uchChannel,unsigned char uchOkStatus)
{							                                           
	MainModule.uchChannelOK[uchChannel - 1] = uchOkStatus;
}

void SetPowerStatusMain(unsigned char uchPowerStatus)
{
	MainModule.uchPowerStatus = uchPowerStatus;
}

void SetAlarmStatusMain(unsigned char uchChannel, unsigned char uchAlarmStatus)	  
{
	MainModule.uchChannelAlarm[uchChannel - 1] = uchAlarmStatus;	
}

void SetCurrentMeasureValueMain(unsigned char uchChannel,float iValue)
{							                                    
	MainModule.iCurrentMeasureValue[uchChannel - 1] = iValue;	
}

void SetPercentValueMain(unsigned char uchChannel,float iValue)
{							                                  
	MainModule.iPercentValue[uchChannel - 1] = iValue;	
}

void SetGapVoltageMain(unsigned char uchChannel,int iValue)
{						                                     
	MainModule.iGapVoltage[uchChannel - 1] = iValue;
}

void SetHWTripleStatusMain(unsigned int uchHWTripleStatus)		
{
	MainModule.uchHWTripleStatus = uchHWTripleStatus;
}

void SetHWBypassStatusMain(unsigned char uchBypassStatus)	
{
	MainModule.uchHWBypassStatus = uchBypassStatus;
}

void SetModuleStatusMain(unsigned char uchModuleStatus)		
{
	unsigned char xdata uchTempStatus;

	if ((uchModuleStatus == 0x04) || (uchModuleStatus == 0x01) || (uchModuleStatus == 0x02)
			|| (uchModuleStatus == 0x03))
	{
		uchTempStatus = uchModuleStatus;	//模块类型如果是运行、Config、标定和测试则负值,否则是0X00,什么也不执行
	} 
	else
	{
		uchTempStatus = 0x01;
	}	
	MainModule.uchModuleFlag = uchTempStatus;
}

void SetCalibrationStatusMain(unsigned char uchChannel, unsigned char uchCalibrationStatus)		
{
	MainModule.uchCalibrationStatus[uchChannel - 1] = uchCalibrationStatus;
}

void SetSampleCompleteStatusMain(unsigned char uchCompleteStatus)
{
	MainModule.uchSamplelCompleteStatus = uchCompleteStatus;
}




void SetHWConfigStatusMain(unsigned char uchHWConfigStatus)
{
	MainModule.uchHWConfigStatus = uchHWConfigStatus;
}

void SetNOTOKGapVoltageMain(unsigned char uchChannel,int iValue)
{						                                      
	MainModule.iNOTOKGapVoltage[uchChannel - 1] = iValue;
}




void SetModuleChannelParaStatusMain(unsigned char uchModuleChannelParaFlag)
{
	MainModule.uchModuleChannelParaStatus = uchModuleChannelParaFlag;
}

void RunChannelParaJudge(void)
{
	unsigned char xdata i;
	if (MainModule.uchModuleChannelParaStatus == 0x01)
	{
		for (i=1; i<3; i++)
		{
			JudgeChannelParaRight(i);		
		}

		InitFramemoduleParameters();

		MainModule.uchModuleChannelParaStatus = 0x00;
	}
	else
	{
		return;
	}
}

//---------------------------------------------------------------------------
// 以上部分为主模块调用需要的状态的函数,供系统上报系统事件使用
//------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
//函数名称:unsigned int SensitiveChange(unsigned int Sensitive,unsigned int uiUnit, unsigned int uiChannelType)
//功    能:灵敏度转换函数	  
//输入参数:转换之前的灵敏度,单位,通道类型
//返    回:转换之后的灵敏度
//完成日期:4/16/2007			  
//---------------------------------------------------------------------------------------
unsigned int SensitiveChange(unsigned int Sensitive,unsigned int uiUnit, unsigned int uiChannelType)
{
	float idata fTemp = 0;

    if((uiChannelType>0 && uiChannelType<13) || (uiChannelType == 25) || (uiChannelType == 26)) 		//proximity probe
	{
		
	}
	else if (uiChannelType == 13)		   //加速度
	{
		fTemp = Sensitive;
	}
	else if((uiChannelType == 14) || (uiChannelType == 16)) //速度
	{
		switch( uiUnit )
		{
			case 0:		 				// No unit	
				break;
			case 2:					   //mm/s
				fTemp = Sensitive;
				break;
			case 3:					  //ips
				fTemp = Sensitive;	
				break;
		}	
	}			
else if((uiChannelType == 15) || (uiChannelType == 17) || (uiChannelType == 18)|| (uiChannelType == 22) || (uiChannelType == 28)) 	//位移			//velocity
	{
		switch( uiUnit )		 //输出位移   与10的输出一样
		{
			case 0:		 				// No unit	
				break;
			case 4:						// mm
				fTemp = Sensitive;
				break;
			case 5:						// um
				fTemp = Sensitive;
				break;
			/*case 6:						// mil
				fTemp = Sensitive;
				break;
			case 10:					// Inch
				fTemp = Sensitive;
				break;		 */
			case 6:			  //HHH				// mil
				fTemp = Sensitive * 10;
				fTemp = fTemp / 25.4;
				break;
			case 10:					// Inch
				fTemp = Sensitive * 10;
				fTemp = fTemp / 25.4;
				break;
			default:
				fTemp = Sensitive;
				break;
		}	
	}			
	else
	{
		fTemp = Sensitive;	
	}
	return (unsigned int)Sensitive;
}

//--------------------------------------------------------------------------------------
//函数名称:unsigned int UnifyUnit(int iValue, int iExponentValue, unsigned int uiUnit)
//功    能:测量单位的转换	
//输入参数:转换之前的数值,指数,单位代号
//返    回:转换之后的数值
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
unsigned int UnifyUnit(int iValue, int iExponentValue, unsigned int uiUnit)
{
	float idata fTemp = 0;

	switch( uiUnit )
	{
		case 0:		 									// No unit	
			fTemp = iValue;
			fTemp = fTemp * pow(10.0, iExponentValue);
			break;
		case 1:					   						// g
			fTemp = iValue;
			fTemp = fTemp * pow(10.0, iExponentValue);
			fTemp = fTemp * 100;
			break;
		case 2:					   						// mm/s
			fTemp = iValue;
			fTemp = fTemp * pow(10.0, iExponentValue);
			fTemp = fTemp * 100;			 //由100改到了10
			break;
		case 3:											// ips
			fTemp = iValue;
			fTemp = fTemp * pow(10.0, iExponentValue);
			fTemp = fTemp * 100;
			//fTemp = fTemp * 25.4;				 //20加  1009
			fTemp = fTemp * 25.0;
			break;
		case 4:											// mm
			fTemp = (float)iValue * 100;			 //HHH
			fTemp = fTemp * pow(10.0, iExponentValue);
			break;
		case 5:											// um
			fTemp = iValue;
			fTemp = fTemp * pow(10.0, iExponentValue);
			break;
		case 6:											// mil
			//fTemp = (float)iValue * 25.4;
			fTemp = (float)iValue * 25.0;
			fTemp = fTemp * pow(10.0, iExponentValue);
			break;
		case 7:											// rpm
			fTemp = iValue;
			fTemp = fTemp * pow(10.0, iExponentValue);
			break;
		case 8:											// Hz
			fTemp = iValue;
			fTemp = fTemp * pow(10.0, iExponentValue);
			break;
		case 9:											// ℃
			fTemp = iValue;
			fTemp = fTemp * pow(10.0, iExponentValue);
			break;
		case 10:										// Inch
			fTemp = (float)iValue * 100;
			fTemp *= 25.0;
			//fTemp *= 25.4;								//HHH
 			fTemp = fTemp * pow(10.0, iExponentValue);
			break;
		default:
			fTemp = iValue;
			fTemp = fTemp * pow(10.0, iExponentValue);
			break;
	}
	return (unsigned int)fTemp;
}
 

//--------------------------------------------------------------------------------------
//函数名称:void InitAlarmPara(void)
//功    能:初始化报警参数	  
//输入参数:无
//返    回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void InitAlarmPara(void)
{
	unsigned char idata i = 0;

	for(i=0; i<2; i++)
	{		
		SetFallingAlertL(i+1, UnifyUnit(All.Para.Ch[i].iFallingAlertL, All.Para.Ch[i].iExponentValue, All.Para.Ch[i].uiMeasureUnit));	//??    tong modify	
		SetFallingDangerL(i+1, UnifyUnit(All.Para.Ch[i].iFallingDangerL, All.Para.Ch[i].iExponentValue, All.Para.Ch[i].uiMeasureUnit));	//??	tong modify
		SetFallingAlertH(i+1, UnifyUnit(All.Para.Ch[i].iFallingAlertH, All.Para.Ch[i].iExponentValue, All.Para.Ch[i].uiMeasureUnit));	//??	tong modify
		SetFallingDangerH(i+1, UnifyUnit(All.Para.Ch[i].iFallingDangerH, All.Para.Ch[i].iExponentValue, All.Para.Ch[i].uiMeasureUnit));	//??	tong modify
		SetAlertLow(i+1, UnifyUnit(All.Para.Ch[i].iAlertLow, All.Para.Ch[i].iExponentValue, All.Para.Ch[i].uiMeasureUnit));	
		SetDangerLow(i+1, UnifyUnit(All.Para.Ch[i].iDangerLow, All.Para.Ch[i].iExponentValue, All.Para.Ch[i].uiMeasureUnit));	
		SetAlertHigh(i+1, UnifyUnit(All.Para.Ch[i].iAlertHigh, All.Para.Ch[i].iExponentValue, All.Para.Ch[i].uiMeasureUnit));	
		SetDangerHigh(i+1, UnifyUnit(All.Para.Ch[i].iDangerHigh, All.Para.Ch[i].iExponentValue, All.Para.Ch[i].uiMeasureUnit));	
		SetAlertDelay(i+1, All.Para.Ch[i].uiAlertDelay);	
		SetDangerDelay(i+1, All.Para.Ch[i].uiDangerDelay);
		SetLatchStatus(i+1, All.Para.Ch[i].uiLatch);	
		SetEnableStatusALM(i+1, All.Para.Ch[i].uiChEnable);	
		SetAlertTypeStatusALM(i+1, All.Para.Ch[i].uiAlertType);		//设置报警类型
		SetChannelTypeALM(i+1, All.Para.Ch[0].uiChType);		   
	}
}

//--------------------------------------------------------------------------------------
//函数名称:void InitDAPara(void)
//功    能:初始化DA参数	  
//输入参数:无
//返    回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void InitDAPara(void)
{
	unsigned char i;
	for(i=0; i<2; i++)
	{
		SetDAZero(i+1, All.Para.Channel[i].uiDAZero);
		SetDAFull(i+1, All.Para.Channel[i].uiDAFull);
	}
}

//--------------------------------------------------------------------------------------
//函数名称:void InitChannelStatusPara(void)
//功    能:初始化通道参数	  
//输入参数:无
//返    回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void InitChannelStatusPara(void)
{
	unsigned char idata i;

	for(i=0; i<2; i++)
	{
		SetGapLow(i+1, All.Para.Ch[i].iGapLow);
		SetGapHigh(i+1, All.Para.Ch[i].iGapHigh);
//		SetEnableStatusChannel(i+1,All.Para.Ch[i].uiChEnable);
		SetChTypeChannel(i+1, All.Para.Ch[i].uiChType);
	}						  

	if (All.Para.Ch[0].uiChType == 22)
	{

⌨️ 快捷键说明

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