📄 readtemp.c
字号:
Road_Dat += 1 ; // 路数值,(在储存温度值用)
if (Road_Dat >= TEMP_NUMBER)
Road_Dat = 0 ;
TempRelayOnoff(ON,Road_Dat) ; // 接通下一个继电器
if (Road_Dat > 0)
if (Read_Number > 1)
Read_Number -= 2 ;
}
}
/*************************************************************************************************************
* 函数名称 :
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 : 处理温度数据
**************************************************************************************************************/
void NeatenTemp(void)
{
if (Read_Time >= READ_TIME) // 转换时间
{
Read_Time = CLEAR ;
ReadTempDat() ; // 读温度数据
TempCs(ON) ; /* 进行温度转换 */
}
}
/*************************************************************************************************************
* 函数名称 : void ConstantTemp(uchar road)
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 : road 第几路控温
**************************************************************************************************************/
void ConstantTemp(uint8 road)
{
uint16 temp ;
// 是否有断线// 设置温度大于0 // 设置温度要大于实际温度
if ((Thermocouple_Open[road] != TEMP_OPEN) && (Site_Temp[road] > 0) && ((Site_Temp[road] << 2) > Fact_Temp[road]))
{
temp = (Site_Temp[road] << 2) - Fact_Temp[road] ; // 算实际相差几度
if (temp <= (SiteFack_Temp << 2)) // 在设定范围内运行检测程序
{
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_Temp[road] << 2)) // 瞬间温度比设置温度小
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_Temp[road] << 2)) // 判断实际温度是否过大
{
Old_NewTemp[road] = ((Site_Temp[road] - 1) << 2) ;
}
}
}
/*************************************************************************************************************
* 函数名称 :
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 : 控温程序
**************************************************************************************************************/
void ControlTemp(void)
{
uint8 road ;
for (road = 0;road < TEMP_NUMBER;road++)
{
ConstantTemp(road) ;
}
}
/*************************************************************************************************************
* 函数名称 : void HeatUPCheckTempTime(void)
* 功能描述 : 加温计时,检测温度周期时间计时
* 实际参数 :
* 返回值 :
* 说明 :
**************************************************************************************************************/
void HeatUPCheckTempTime(void)
{
uint8 number ;
for (number = 0;number < TEMP_NUMBER;number++) // 有几路温度TEMP_NUMBER
{
if ((Site_Temp[number] << 2) > Fact_Temp[number]) // 计时检测温度周期
Check_TempTime[number]++ ;
else
Check_TempTime[number] = 0 ; // 在过温或相差非常大的时候,计数器清0
if (HeatUp_Time[number])
{
TempHeatOnOff(HEAT_ON,number);
Thermocouple_Open[number] = TEMP_HEAT_UP ; // 置加热信息
HeatUp_Time[number]-- ;
}
else
{
TempHeatOnOff(HEAT_OFF,number);
if (Thermocouple_Open[number] == TEMP_HEAT_UP)
Thermocouple_Open[number] = TEMP_CLOSE ; // 置位不加热信息
if (Thermocouple_Open[number] != TEMP_HEAT_UP)
if (Thermocouple_Open[number] != TEMP_OPEN)
Thermocouple_Open[number] = TEMP_CLOSE ;
}
}
}
/*************************************************************************************************************
* 函数名称 : void TimerRun(void)
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 : 时间定时器
**************************************************************************************************************/
void TimerRun(void)
{
if (Time_Int != Old_Time_Int) // 累加时间中断
{
Old_Time_Int = Time_Int ; // 下次比较
Read_Time += 1 ; // 读温度时间
HeatUPCheckTempTime() ; // 加温,检测计时器
}
}
/*************************************************************************************************************
* 函数名称 :
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 : 初始化变量
**************************************************************************************************************/
void InitializeDat(void)
{
uint8 d,c ;
for (c = 0;c < TEMP_NUMBER;c++)
{
for (d = 0;d < ALL_READ;d++)
{
All_Temp[c][d] = 0 ; // 全清零
}
}
for (c = 0;c < TEMP_NUMBER;c++)
{
Check_TempTime[c] = 0 ;
Old_NewTemp[c] = 0 ;
New_Temp[c] = 0 ;
HeatUp_Time[c] = 0 ;
Thermocouple_Open[c] = 0 ;
Disp_Temp[c] = 0 ;
}
TempRelayOnoff(ON,0) ; /* 选通第一路热电偶 */
Delay0(READ_DELAY) ;
TempCs(ON) ; /* 进行温度转换 */
Read_Time = CLEAR ;
}
/*************************************************************************************************************
* 函数名称 :
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 : 主程序
**************************************************************************************************************/
void TempControl(void)
{
static uint8 Inint_Dat = 0 ;
if (Inint_Dat == 0)
{
InitializeDat() ; // 初始化
Inint_Dat = 0xff ;
}
if ((SiteFack_Temp > MAX_TEMP) || (SiteFack_Temp < MIN_TEMP))
SiteFack_Temp = TYP_TEMP ;
if ((Check_TempTimeCycle > MAX_SEC) || (Check_TempTimeCycle < MIN_SEC))
Check_TempTimeCycle = TYP_SEC ;
TimerRun() ; // 时间处理
NeatenTemp() ; // 处理温度
ControlTemp() ; // 控温
}
/*************************************************************************************************************
* 函数名称 :
* 功能描述 :
* 实际参数 :
* 返回值 :
* 说明 :
**************************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -