📄 framemodule.c
字号:
//*******************************************************************************
//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 + -