Files
CMS79F5335_Demo/范例程序(C语言)/IH-CMS79F53X5-C-V1.0/__REL_IhDebug.c
2026-10-19 15:33:00 +08:00

662 lines
16 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**************************************************************************
**************************************************************************/
#include "Define_Global.h"
#if _MODE_IHDEBUG_
/**************************************************************************
--------------------------------- 变量定义 --------------------------------
**************************************************************************/
volatile unsigned char Del_SendStatus;
volatile unsigned int StatusWork;
volatile unsigned int StatusError;
volatile unsigned int StatusProtect;
volatile unsigned char Count_IhDebugComm;
volatile unsigned int Del_IhDebugComm;
//-------------------------------------------------------------------------
volatile bit B_SendStatus_IhDebug;
volatile bit B_TestComm_IhDebug;
volatile bit B_CommErr_IhDebug;
//*************************************************************************
volatile unsigned int Bak_StatusWork;
volatile unsigned int Bak_StatusError;
volatile unsigned int Bak_StatusProtect;
volatile unsigned char Bak_PowerWork;
volatile unsigned char Bak_TimeAll_JXHeat;
volatile unsigned char Bak_TimeOn_JXHeat;
volatile unsigned char Bak_Num_LxLowAll;
volatile unsigned char Bak_Num_LxLowOn;
volatile unsigned int Bak_Num_TestCM;
//-------------------------------------------------------------------------
volatile bit B_Bak_JXNoCheck;
volatile bit B_Bak_JXCheckPan;
volatile bit B_Bak_LxLow;
/**************************************************************************
* 函数名称:REL_DealSendCurve
* 函数功能:发送数据处理(曲线)
* 入口参数:id = 发送ID值
* 出口参数:发送数据值
* 备 注:内部调用
**************************************************************************/
unsigned int REL_DealSendCurve(unsigned char id)
{
switch(id)
{
case 0: //【曲线1数据】
return (unsigned int)AD_Volatage; //市电电压AD【9bit】
case 1: //【曲线2数据】
return (unsigned int)AD_Current; //工作电流AD【9bit】
case 2: //【曲线3数据】
return (unsigned int)AD_TmprPan; //锅底温度AD【8bit】
case 3: //【曲线4数据】
#ifndef _pAD_TOP
return 0;
#else
return (unsigned int)AD_TmprTop; //顶部温度AD【8bit】
#endif
case 4: //【曲线5数据】
return (unsigned int)AD_TmprIgbt; //IGBT温度AD【8bit】
case 5: //【曲线6数据】
return (unsigned int)AD_VRef; //内部基准电压AD【9bit】
case 6: //【曲线7数据】
return (unsigned int)Vol.flo.integer + C_Vol_Comp; //市电电压(V)
case 7: //【曲线8数据】
return (unsigned int)CurrentReal; //实际工作电流(A*256)
case 8: //【曲线9数据】
return (unsigned int)PowerReal; //实际输出功率(W)
case 9: //【曲线10数据】
return (unsigned int)PowerSet; //设置输出功率(W)
case 10://【曲线11数据】
return (unsigned int)Buf_PPGTMR; //当前PPGTMR值
case 11://【曲线12数据】
return (unsigned int)Count_Syn; //检锅振荡个数
case 12://【曲线13数据】
return (unsigned int)Time_Syn; //检锅振荡脉宽
case 13://【曲线14数据】
return (unsigned int)Count_BackPress; //1级过压保护计数
case 14://【曲线15数据】
return (unsigned int)Count_IgbtProtect; //IGBT硬件保护计数
default:
return 0;
}
}
/**************************************************************************
* 函数名称:REL_DealSendStatus
* 函数功能:发送数据处理(状态)
* 入口参数:id = 发送ID值
* 出口参数:发送ID值 + 发送数据值
* 备 注:内部调用
**************************************************************************/
unsigned long REL_DealSendStatus(unsigned char id)
{
volatile unsigned long data;
//---------------------------------------------------------------------
if(B_SendStatus_IhDebug)
{
B_SendStatus_IhDebug = 0; //完成状态发送
switch(id)
{
case 1: //【工作状态】
data = 0xE0;
data <<= 16;
data += StatusWork;
return data;
case 2: //【故障状态】
data = 0xE1;
data <<= 16;
data += StatusError;
return data;
case 3: //【保护状态】
data = 0xE2;
data <<= 16;
data += StatusProtect;
return data;
default:
return 0;
}
}
else
{
return 0;
}
}
/**************************************************************************
* 函数名称:REL_DealReceData
* 函数功能:接收数据处理
* 入口参数:id = 接收ID值、value = 接收数据值
* 出口参数:发送ID值 + 发送数据值
* 备 注:内部调用
**************************************************************************/
unsigned long REL_DealReceData(unsigned char id, unsigned int value)
{
volatile unsigned long data;
//*********************************************************************
if((id & 0xF0) == 0xE0) //【发送回传】
{
switch(id & 0x0F)
{
case 0:
Bak_StatusWork = value; //工作状态
break;
case 1:
Bak_StatusError = value; //故障状态
break;
case 2:
Bak_StatusProtect = value; //保护状态
break;
default:
break;
}
}
//*********************************************************************
else if(id == 0xA0) //【工作命令】
{
if(TestOne(value,0))
{
if(!B_Heat_En)
{
SetBit(value,1); //风扇强制使能
B_Fan_En = 1; //风扇使能
}
B_Heat_En = 1; //加热使能
}
else
{
B_Heat_En = 0;
}
if(TestOne(value,1))
{
B_Fan_En = 1; //风扇使能
}
else
{
B_Fan_En = 0;
}
if(TestOne(value,2))
{
B_Buzz_En = 1; //蜂鸣器使能
}
else
{
B_Buzz_En = 0;
}
if(TestOne(value,3))
{
ClrBit(value,3);
ClrBit(value,2); //蜂鸣器强制关闭
B_Buzz_En = 0;
if(!B_Buzz_Out)
{
Buzz_Short_One(); //蜂鸣器短鸣1声
}
}
if(TestOne(value,4))
{
ClrBit(value,4);
ClrBit(value,2); //蜂鸣器强制关闭
B_Buzz_En = 0;
if(!B_Buzz_Out)
{
Buzz_Long_One(); //蜂鸣器长鸣1声
}
}
if(TestOne(value,5))
{
if(!B_Bak_JXNoCheck)
{
ClrBit(value,6); //间隙加热使能(检锅)强制关闭
B_Bak_JXCheckPan = 0;
}
B_Bak_JXNoCheck = 1; //间隙加热使能(不检锅)
}
else
{
B_Bak_JXNoCheck = 0;
}
if(TestOne(value,6))
{
if(!B_Bak_JXCheckPan)
{
ClrBit(value,5); //间隙加热使能(不检锅)强制关闭
B_Bak_JXNoCheck = 0;
}
B_Bak_JXCheckPan = 1; //间隙加热使能(检锅)
}
else
{
B_Bak_JXCheckPan = 0;
}
if(TestOne(value,7))
{
if(!B_PPGDP_Can)
{
ClrBit(value,9); //连续低功率强制关闭
B_Bak_LxLow = 0;
}
B_PPGDP_Can = 1; //抖频使能
}
else
{
if(B_PPGDP_Can)
{
SetBit(value,8); //抖频使能强制禁止
B_PPGDP_Dis = 1; //抖频禁止
}
B_PPGDP_Can = 0;
}
if(TestOne(value,8))
{
B_PPGDP_Dis = 1; //抖频禁止
}
else
{
B_PPGDP_Dis = 0;
}
if(TestOne(value,9))
{
if(!B_Bak_LxLow)
{
ClrBit(value,7); //抖频使能强制关闭
B_PPGDP_Can = 0;
SetBit(value,8); //抖频使能强制禁止
B_PPGDP_Dis = 1; //抖频禁止
}
B_Bak_LxLow = 1; //连续低功率使能
}
else
{
B_Bak_LxLow = 0;
}
}
//---------------------------------------------------------------------
else if((id & 0xF0) == 0xB0) //【工作参数】
{
switch(id & 0x0F)
{
case 0: //加热输出功率(×10W)
Bak_PowerWork = value;
break;
case 1: //加热间隙总时间(×0.5秒)
Bak_TimeAll_JXHeat = value;
break;
case 2: //加热间隙开时间(×0.5秒)
Bak_TimeOn_JXHeat = value;
break;
case 3: //加热连续低功率总个数
Bak_Num_LxLowAll = value;
break;
case 4: //加热连续低功率开个数
Bak_Num_LxLowOn = value;
break;
default:
break;
}
}
//---------------------------------------------------------------------
else if((id & 0xF0) == 0xC0) //【配置参数】
{
switch(id & 0x0F)
{
case 0: //PPG导通延时
ValueTime_PPGDly = value;
break;
case 1: //电压浪涌
ValueVol_VolSurge = value;
break;
case 2: //电流浪涌
ValueVol_CurrSurge = value;
break;
case 3: //导通台阶
ValueVol_OnStep = value;
break;
case 4: //1级过压
ValueVol_BackPress1 = value;
break;
case 5: //1级过压PPG下降步进
ValuePPG_BackPress1 = value;
break;
case 6: //2级过压
ValueVol_BackPress2 = value;
break;
default:
break;
}
}
//*********************************************************************
else if(id == 0x80) //【测试命令】
{
if(TestOne(value,0))
{
if(!B_Test_PanCheck)
{
ClrBit(value,1); //PPG测试强制关闭
B_Test_PPGOut = 0;
}
B_Test_PanCheck = 1; //检锅测试开启
}
else
{
B_Test_PanCheck = 0;
}
if(TestOne(value,1))
{
if(!B_Test_PPGOut)
{
ClrBit(value,0); //检锅测试强制关闭
B_Test_PanCheck = 0;
}
B_Test_PPGOut = 1; //PPG测试开启
}
else
{
B_Test_PPGOut = 0;
}
if(TestOne(value,2))
{
B_Test_CM_RA0 = 1; //比较器测试开启(RA0)
}
else
{
B_Test_CM_RA0 = 0;
}
if(TestOne(value,3))
{
B_Test_CM_RB7 = 1; //比较器测试开启(RB7)
}
else
{
B_Test_CM_RB7 = 0;
}
if(TestOne(value,4))
{
B_Test_PGA = 1; //PGA测试开启(RC0)
}
else
{
B_Test_PGA = 0;
}
if(TestOne(value,5))
{
B_Test_SlopeCurr = 1; //电流斜率测试开启
}
else
{
B_Test_SlopeCurr = 0;
}
if(TestOne(value,6))
{
B_ErrorCheck_Dis = 1; //禁止硬件故障检测
}
else
{
B_ErrorCheck_Dis = 0;
}
if(TestOne(value,7))
{
B_LosePanCheck_Dis = 1; //禁止电流丢锅检测
}
else
{
B_LosePanCheck_Dis = 0;
}
}
//---------------------------------------------------------------------
else if((id & 0xF0) == 0x90) //【测试参数】
{
switch(id & 0x0F)
{
case 0: //检锅测试-PPGTMR值
ValuePPG_Single = value;
break;
case 1: //PPG测试-PPGTMR值
PPGTMR_TestPPG = value;
break;
case 2: //比较器测试-通道
Bak_Num_TestCM = 0xFF00 | value;
break;
case 3: //电流斜率测试-斜率
SlopeCurr_Test = value;
break;
default:
break;
}
}
//*********************************************************************
Del_IhDebugComm = 0; //清通信故障计时
B_CommErr_IhDebug = 0; //清通信故障标志
B_TestComm_IhDebug = 1; //开始检测通信故障
if((id >= 0xE0) || (id < 0x80))
{
return 0;
}
else
{
data = id;
data <<= 16;
data += value;
return data;
}
}
/**************************************************************************
* 函数名称:REL_ReceSendCom
* 函数功能:接收发送公共处理
* 入口参数:无
* 出口参数:无
* 备 注:主循环调用
**************************************************************************/
void REL_ReceSendCom(void)
{
volatile unsigned int i;
static unsigned char Del_JXHeat,Cnt_JXHeat;
static unsigned char Del_DispBackPress;
static bit B_DispBackPress;
/**********************************************************************
接收
**********************************************************************/
B_HeatStop_CheckPan = 0;
B_HeatStop_NoCheck = 0;
if((B_Bak_JXCheckPan || B_Bak_JXNoCheck) && Bak_TimeOn_JXHeat && (Bak_TimeAll_JXHeat > Bak_TimeOn_JXHeat))
{
if(++Del_JXHeat >= 500/C_TimeMS_Main) //0.5s
{
Del_JXHeat = 0;
if(++Cnt_JXHeat >= Bak_TimeAll_JXHeat)
{
Cnt_JXHeat = 0;
}
}
if(Cnt_JXHeat >= Bak_TimeOn_JXHeat)
{
if(B_Bak_JXCheckPan)
{
B_HeatStop_CheckPan = 1; //不加热但检锅
}
else
{
B_HeatStop_NoCheck = 1; //不加热不检锅
}
}
}
else
{
Del_JXHeat = 0;
Cnt_JXHeat = 0;
}
//---------------------------------------------------------------------
PowerWork = Bak_PowerWork;
//*********************************************************************
if(B_Bak_LxLow && Bak_Num_LxLowOn && (Bak_Num_LxLowAll > Bak_Num_LxLowOn))
{
Num_LxLowOn = Bak_Num_LxLowOn;
Num_LxLowOff = (unsigned)Bak_Num_LxLowAll - Bak_Num_LxLowOn;
}
else
{
Num_LxLowOn = 0;
Num_LxLowOff = 0;
}
//*********************************************************************
if((B_Test_CM_RA0 || B_Test_CM_RB7) && Bak_Num_TestCM)
{
ValueCM_Test = 0x08 | ((unsigned)Bak_Num_TestCM & 0x07);
}
else
{
ValueCM_Test = 0;
}
//---------------------------------------------------------------------
if(B_Test_PGA)
{
ValuePGA_Set |= 0x02;
}
else
{
ValuePGA_Set &= ~0x02;
}
/**********************************************************************
发送
**********************************************************************/
if(B_Protect_BackPress)
{
B_DispBackPress = 1; //过压保护显示
}
if(B_DispBackPress)
{
if(Del_DispBackPress >= 500/C_TimeMS_Main) //500ms
{
B_DispBackPress = 0; //退出过压保护显示
}
else
{
Del_DispBackPress++;
}
}
else
{
Del_DispBackPress = 0;
}
//---------------------------------------------------------------------
i = 0;
if(B_Pan_Error) SetBit(i,0); //检锅故障(未接线盘)
if(B_Pan_No) SetBit(i,1); //无锅
if(B_Pan_Have) SetBit(i,2); //有锅
if(B_Pan_Steel) SetBit(i,3); //钢锅
if(B_Pan_Iron) SetBit(i,4); //铁锅
if(B_Zero_No) SetBit(i,5); //无过零
else
{if(!B_Zero_60Hz) SetBit(i,6); //过零频率 = 50Hz
else SetBit(i,7);} //过零频率 = 60Hz
if(B_PPG_Out) SetBit(i,8); //正常加热
if(B_PPGStop_NoCheck) SetBit(i,9); //加热暂停,不检锅
if(B_PPGStop_CheckPan) SetBit(i,10); //加热暂停,并检锅
if(Flag1_Error | Flag2_Error) SetBit(i,11); //故障停止加热
if(B_Protect_Stop) SetBit(i,12); //保护停止加热
if(Status_PPGDP & 0x02) SetBit(i,13); //抖频开启
if(Status_LxLow & 0x02) SetBit(i,14); //连续低功率开启
StatusWork = i; //工作状态
//---------------------------------------------------------------------
i = 0;
if(B_EVolLow) SetBit(i,0); //市电电压过低
if(B_EVolHigh) SetBit(i,1); //市电电压过高
if(B_EIgbtOpen) SetBit(i,2); //IGBT-NTC开路
if(B_EIgbtClose) SetBit(i,3); //IGBT-NTC短路
if(B_EIgbtOver) SetBit(i,4); //IGBT-NTC超温
if(B_EPanOpen) SetBit(i,5); //锅底-NTC开路
if(B_EPanClose) SetBit(i,6); //锅底-NTC短路
if(B_EPanOver) SetBit(i,7); //锅底-NTC超温
if(B_EPanFail) SetBit(i,8); //锅底-NTC失效
if(B_ETopOpen) SetBit(i,9); //顶部-NTC开路
if(B_ETopClose) SetBit(i,10); //顶部-NTC短路
if(B_ETopFail) SetBit(i,11); //顶部-NTC失效
if(B_CommErr_IhDebug) SetBit(i,12); //通信故障
StatusError = i; //故障状态
//---------------------------------------------------------------------
i = 0;
if(TestOne(Status_PPGStop,0)) SetBit(i,0); //1级过压比较器计数溢出
if(TestOne(Status_PPGStop,1)) SetBit(i,1); //电压浪涌
if(TestOne(Status_PPGStop,2)) SetBit(i,2); //电流浪涌
if(TestOne(Status_PPGStop,3)) SetBit(i,3); //2级过压
if(TestOne(Status_PPGStop,4)) SetBit(i,4); //导通台阶过高
if(TestOne(Status_PPGStop,5)) SetBit(i,5); //PPG看门狗溢出
if(B_DispBackPress) SetBit(i,6); //过压保护
StatusProtect = i; //保护状态
//---------------------------------------------------------------------
if(++Del_SendStatus >= 100/C_TimeMS_Main) //150ms
{
Del_SendStatus = 0;
B_SendStatus_IhDebug = 1; //发送状态
}
/**********************************************************************
通信故障
**********************************************************************/
if(!B_TestComm_IhDebug)
{
Del_IhDebugComm = 0; //未开始检测通信故障
B_CommErr_IhDebug = 0; //清通信故障标志
}
else if(++Del_IhDebugComm >= 1000/C_TimeMS_Main) //1s
{
Del_IhDebugComm = 0;
B_CommErr_IhDebug = 1; //通信故障
if(++Count_IhDebugComm & 0x01)
{
B_Fan_En = 1;
}
else
{
B_Fan_En = 0;
}
B_Heat_En = 0;
B_Buzz_En = 0;
B_Test_PanCheck = 0;
B_Test_PPGOut = 0;
}
}
/**************************************************************************
**************************************************************************/
#endif