📄 constanttemp.c
字号:
/*************************************************************************************************************
* 函数名称 :
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 :
**************************************************************************************************************/
#include "define.h"
uint xdata Check_TempTime[10] ; // 检测温度周期时间
uint xdata Old_NewTemp[10] ; // 在前一周期的瞬间时间
uint xdata HeatUp_Time[10] ; // 加热时间
/*************************************************************************************************************
* 函数名称 : void Heat_OnOff(bit onoff,uchar road)
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 : 输出发热丝
**************************************************************************************************************/
void Heat_OnOff(bit onoff,uchar road)
{
switch (road)
{
case 0:
Temp_Heat0 = onoff ;
break ;
case 1:
Temp_Heat1 = onoff ;
break;
case 2:
Temp_Heat2 = onoff ;
break ;
case 3:
Temp_Heat3 = onoff ;
break ;
case 4:
Temp_Heat4 = onoff ;
break ;
case 5:
Temp_Heat5 = onoff ;
break ;
case 6:
Temp_Heat6 = onoff ;
break ;
case 7:
Temp_Heat7 = onoff ;
break ;
case 8:
Temp_Heat8 = onoff ;
break ;
case 9:
Temp_Heat9 = onoff ;
break ;
default:
break ;
}
}
/*************************************************************************************************************
* 函数名称 : void ConstantTemp(uchar road)
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 : road 第几路控温
**************************************************************************************************************/
void ConstantTemp(uchar road)
{
uint temp ;
// 是否有断线// 设置温度大于0 // 设置温度要大于实际温度
if ((Thermocouple_Open[road] != 0x22) && (Site_TempDat[road] > 0) && (Site_TempDat[road] > Fact_Temp[road]))
{
temp = Site_TempDat[road] - Fact_Temp[road] ; // 算实际相差几度
if (temp <= SiteFack_Temp) // 在设定范围内运行检测程序
{
if (Check_TempTime[road] >= (Check_TempTimeCycle * SEC_TIME)) // 运算时间周期到了没有
{
Check_TempTime[road] = 0 ; // 清计时时间
if (Old_NewTemp[road] >= New_Temp[road]) // 当前瞬间温度比前周期温度小,
{
HeatUp_Time[road] = (Check_TempTimeCycle + 1) * SEC_TIME ; // 载入加温时间,加1为了连续两周期都加温时,中间见不到停温现象
}
else
{
HeatUp_Time[road] = 0 ; // 加热时间清0
}
if (New_Temp[road] <= Site_TempDat[road]) // 瞬间温度比设置温度小
if ((New_Temp[road] > Old_NewTemp[road]) || (New_Temp[road] <= (Old_NewTemp[road] - 3)))//这样就不会加不上温度,即使加不上,都是一直在加温的
Old_NewTemp[road] = New_Temp[road] ;
}
}
else
{
HeatUp_Time[road] = SEC_TIME ; // 继续不断加温
}
}
else // 没有15度标志,两种情况,温度过高,温度相差大于在15度
{
HeatUp_Time[road] = 0 ; // 清加热时间
if (Fact_Temp[road] >= Site_TempDat[road]) // 判断实际温度是否过大
{
Old_NewTemp[road] = Site_TempDat[road] - 1 ;
}
}
}
/*************************************************************************************************************
* 函数名称 :
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 : 控温程序
**************************************************************************************************************/
void ControlTemp(void)
{
uchar road ;
for (road = 0;road < 10;road++)
{
ConstantTemp(road) ;
}
}
/*************************************************************************************************************
* 函数名称 : void HeatUPCheckTempTime(void)
* 功能描述 : 加温计时,检测温度周期时间计时
* 实际参数 :
* 返回值 :
* 说明 :
**************************************************************************************************************/
void HeatUPCheckTempTime(void)
{
uchar number ;
for (number = 0;number < 10;number++)
{
if (Site_TempDat[number] > Fact_Temp[number]) // 计时检测温度周期
Check_TempTime[number]++ ;
else
Check_TempTime[number] = 0 ; // 在过温或相差非常大的时候,计数器清0
if (HeatUp_Time[number])
{
Heat_OnOff(HEAT_ON,number) ; // 启动发热丝
Thermocouple_Open[number] = 0x11 ; // 置加热信息
HeatUp_Time[number]-- ;
}
else
{
Heat_OnOff(HEAT_OFF,number) ; // 关闭发热丝
if (Thermocouple_Open[number] == 0x11)
Thermocouple_Open[number] = 0x00 ; // 置位不加热信息
}
}
}
/*************************************************************************************************************
* 函数名称 :
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 :
**************************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -