📄 framemodule.c
字号:
JudgeAndReportSpecialSystemEvenStatus(MainModule.uchReportNumber + 3);
}
}
}
}
break;
case 0x02: //Config状态
break;
case 0x03:
if (MainModule.uchSelfTestControlStatus == 0x00) //停止自检
{
StopSelfLEDControl();
}
else if (MainModule.uchSelfTestControlStatus == 0x02)
{
StartSelfLEDControl();
}
else if (MainModule.uchSelfTestControlStatus == 0x03)
{
StopSelfLEDControl();
}
break;
case 0x04: //标定
switch(MainModule.uchCalibrationStatus[0]) //第一通道
{
case 0: //电流标定,
CalculateCalibrateValue(1,0xff);
// InitCalibrationPara(1);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[0] = 0xff; //不做任何标定
InitFramemoduleParameters(); //标定完成后重新初始化
break;
case 1: //Caculate Zero
CalculateCalibrationAD(1,0);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[0] = 0xff;
InitFramemoduleParameters();
break;
case 2: //Caculate Span
CalculateCalibrationAD(1,1);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[0] = 0xff;
InitFramemoduleParameters();
break;
case 3: //GAP Zero
CalculateCalibrateGAPAD(1,0);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[0] = 0xff;
InitFramemoduleParameters();
break;
case 4: //GAP Span
CalculateCalibrateGAPAD(1,1);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[0] = 0xff;
InitFramemoduleParameters();
break;
case 5: //温度模块的标定
break;
case 6: // 温度模块的标定
break;
case 7: // 温度模块的标定
break;
case 8:
DirectCurrentOutput(1, 430); //输出大约2.50到2.51mA的电流
s_uchDACalibrationComplete1 = 1;
MainModule.uchCalibrationStatus[0] = 0xff;
break;
case 9:
DirectCurrentOutput(1, 3700); //输出大约21.29到21.30mA的电流
s_uchDACalibrationComplete1 = 1;
MainModule.uchCalibrationStatus[0] = 0xff;
break;
default: //Do Nothing
break;
}
switch(MainModule.uchCalibrationStatus[1]) //第二通道
{
case 0: //不标定,
CalculateCalibrateValue(2,0xff);
// InitCalibrationPara(2);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[1] = 0xff;
InitFramemoduleParameters(); //标定完成后重新初始化
break;
case 1: //Caculate Zero
CalculateCalibrationAD(2,0);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[1] = 0xff;
InitFramemoduleParameters();
break;
case 2: //Caculate Span
CalculateCalibrationAD(2,1);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[1] = 0xff;
InitFramemoduleParameters();
break;
case 3: //GAP Zero
CalculateCalibrateGAPAD(2,0);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[1] = 0xff;
InitFramemoduleParameters();
break;
case 4: //GAP Span
CalculateCalibrateGAPAD(2,1);
WriteSystemPara(0, (unsigned char *)&All.Array, PARALENGTH*2);
MainModule.uchCalibrationStatus[1] = 0xff;
InitFramemoduleParameters();
break;
case 5: //温度模块的标定
break;
case 6: // 温度模块的标定
break;
case 7: // 温度模块的标定
break;
case 8:
DirectCurrentOutput(2, 430); //输出大约2.50到2.51mA的电流
s_uchDACalibrationComplete2 = 1;
MainModule.uchCalibrationStatus[1] = 0xff;
break;
case 9:
DirectCurrentOutput(2, 3700); //输出大约21.29到21.30mA的电流
s_uchDACalibrationComplete2 = 1;
MainModule.uchCalibrationStatus[1] = 0xff;
break;
default: //Do Nothing
break;
}
break;
}
}
//--------------------------------------------------------------------------------------
//函数名称:void CaculateReportMeasureValue(unsigned char uchChannel)
//功 能:根据状态计算返回上位机的实时测量值
//输入参数:通道号
//返 回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void CaculateReportMeasureValue(unsigned char uchChannel)
{
long xdata lTempReportCurrentMeasureValue;
if ((MainModule.uchEnableStatus[uchChannel - 1] == 1) && (MainModule.uchChannelOK[uchChannel - 1] == 0))
{
if (MainModule.uchNotOKToOKStatus[uchChannel - 1] == 1)
{
lTempReportCurrentMeasureValue = (long)MainModule.iPercentValue[uchChannel - 1] * All.Para.iDataSpan / 5000;
if (lTempReportCurrentMeasureValue > 32767)
{
lTempReportCurrentMeasureValue = 32767;
}
MainModule.iReportCurrentMeasureValue[uchChannel - 1] = lTempReportCurrentMeasureValue;
}
}
else if ((MainModule.uchEnableStatus[uchChannel - 1] == 1) && (MainModule.uchChannelOK[uchChannel - 1] != 0))
{
MainModule.iReportCurrentMeasureValue[uchChannel - 1] = 0;
}
else if (MainModule.uchEnableStatus[uchChannel - 1] == 0)
{
MainModule.uchChannelOK[uchChannel - 1] = 0; //通道状态及间隙电压为零
MainModule.iReportCurrentMeasureValue[uchChannel - 1] = 0; //实时测量值为零
MainModule.uchChannelGapStatus[uchChannel - 1] = 0;
}
FeedDog();
}
//--------------------------------------------------------------------------------------
//函数名称:void SetNotOKToOKFlag(unsigned char uchChannel,unsigned char uchNOTOKTOOKFlag)
//功 能:将NOTOK到OK状态的标志创送到框架模块
//输入参数:通道号,标志位
//返 回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void SetNotOKToOKFlag(unsigned char uchChannel,unsigned char uchNOTOKTOOKFlag)
{
MainModule.uchNotOKToOKStatus[uchChannel - 1] = uchNOTOKTOOKFlag;
}
//--------------------------------------------------------------------------------------
//函数名称:void SetFullScale(unsigned int uiFullScaleValue)
//功 能:将满量程数据范围设置到框架参数中
//输入参数:满量程数据范围数据
//返 回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void SetFullScale(unsigned int uiFullScaleValue)
{
All.Para.iDataSpan = uiFullScaleValue;
}
//--------------------------------------------------------------------------------------
//函数名称:void CaculateReportGapValue(unsigned char uchChannel)
//功 能:根据状态计算返回上位机的实时间隙电压值
//输入参数:通道号
//返 回:无
//完成日期:4/16/2007
//---------------------------------------------------------------------------------------
void CaculateReportGapValue(unsigned char uchChannel)
{
if (MainModule.uchEnableStatus[uchChannel - 1] == 1)
{
MainModule.iReportCurrentGAPValue[uchChannel - 1] = MainModule.iGapVoltage[uchChannel - 1];
if ((All.Para.Ch[0].uiChType == 13) || (All.Para.Ch[0].uiChType == 14) || (All.Para.Ch[0].uiChType == 16)
|| (All.Para.Ch[0].uiChType == 17) || (All.Para.Ch[0].uiChType == 18)) //
{
if(MainModule.uchChannelOK[uchChannel - 1] != 0)
{
MainModule.iReportCurrentGAPValue[uchChannel - 1] = MainModule.iNOTOKGapVoltage[uchChannel - 1];
}
else
{
;
}
}
}
else
{
MainModule.uchChannelOK[uchChannel - 1] = 0;
MainModule.uchChannelGapStatus[uchChannel - 1] = 0;
MainModule.iReportCurrentGAPValue[uchChannel - 1] = 10 * 1000; //间隙电压×1000
}
}
//--------------------------------------------------------------------------------------
//函数名称:void SetGapStatusMain(unsigned char uchChannel)
//功 能:状态模块给主框架设置通道Gap状态
//输入参数:通道号;Gap状态
//返 回:无
//完成日期:6/21/2007
//---------------------------------------------------------------------------------------
void SetGapStatusMain(unsigned char uchChannel, unsigned char uchGapStatus)
{
MainModule.uchChannelGapStatus[uchChannel - 1] = uchGapStatus;
}
//-----------------------------------------------------------------------
//函数名称: unsigned char AlertStatus(unsigned char uchChannel)
//功 能:返回通道的Alert状态
//输入参数:通道号
//返 回:1 Alert 有报警; 0 Alert 无报警
//完成日期:6/21/2007
//-----------------------------------------------------------------------
unsigned char AlertStatus(unsigned char uchChannel)
{
unsigned char uchAlarmStatus = 0;
uchAlarmStatus = MainModule.uchChannelAlarm[uchChannel - 1] & 0x06;
if(uchAlarmStatus != 0)
{
return 1;
}
else
{
return 0;
}
}
//-----------------------------------------------------------------------
//函数名称: unsigned char DangerStatus(unsigned char uchChannel)
//功 能:返回通道的Danger状态
//输入参数:通道号
//返 回:1 Danger 有报警; 0 Danger 无报警
//完成日期:6/21/2007
//-----------------------------------------------------------------------
unsigned char DangerStatus(unsigned char uchChannel)
{
unsigned char uchAlarmStatus = 0;
uchAlarmStatus = MainModule.uchChannelAlarm[uchChannel - 1] & 0x09;
if(uchAlarmStatus != 0)
{
return 1;
}
else
{
return 0;
}
}
//-----------------------------------------------------------------------
//函数名称: void ChannelStatus(unsigned char uchChannel)
//功 能:将通道的各个状态组合到一个字节中,目的是上报状态时应用
//输入参数:通道号
//返 回:通道状态
//完成日期:6/21/2007
//-----------------------------------------------------------------------
unsigned char ChannelStatus(unsigned char uchChannel)
{
unsigned char xdata uchChannelStatus;
unsigned char xdata uchTempData[2];
unsigned char xdata uchTempTripleData;
uchChannelStatus = 0;
if (MainModule.uchEnableStatus[uchChannel - 1] == 1)
{
if (MainModule.uchChannelOK[uchChannel - 1] == 0) //当通道OK时,使原值,否则无论是通道高报警或是低报警,通道都是NOT OK
{
uchTempData[uchChannel - 1] = 0;
}
else
{
uchTempData[uchChannel - 1] = 1;
}
uchChannelStatus |= uchTempData[uchChannel - 1];
uchChannelStatus |= (AlertStatus(uchChannel) << 1);
uchChannelStatus |= (DangerStatus(uchChannel) << 2);
JudgeBypassFlag(uchChannel);
uchChannelStatus |= (MainModule.uchBypassFlag[uchChannel - 1] << 3);
uchTempTripleData = JudgeTripleStatus(uchChannel);
uchChannelStatus |= (uchTempTripleData << 4);
uchChannelStatus |= ((All.Para.Ch[uchChannel - 1].uiChEnable ^ 0x01) << 5);
/* if (MainModule.uchChannelGapStatus[uchChannel - 1] == 0)
{
uchTempData[uchChannel - 1] = 0;
}
else
{
uchTempData[uchChannel - 1] = 1;
} */
if (All.Para.Ch[0].uiChType == 22)
{
if ((MainModule.uchChannelGapStatus[0] == 0) && (MainModule.uchChannelGapStatus[1] == 0))
{
uchTempData[uchChannel - 1] = 0;
}
else
{
uchTempData[uchChannel - 1] = 1;
}
}
else
{
if (MainModule.uchChannelGapStatus[uchChannel - 1] == 0)
{
uchTempData[uchChannel - 1] = 0;
}
else
{
uchTempData[uchChannel - 1] = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -