📄 jf_act.c
字号:
void fun_auto_set_caculate(void) //计算设定值的温度湿度
{
THset10=(int_THset<<3)+(int_THset<<1)+dig_THset; //THset*10+dig_THset=10*THset
fth_actual025 =th_actual10>>2;
switch (th_actual10&0x03)
{
case 1:
{fth_actual025 +=0.25;
break;}
case 2:
{fth_actual025 +=0.5;
break;}
case 3:
{fth_actual025 +=0.75;
break;}
}
Tset025Tm=THset10+fth_actual025;//Tset+0.25Tm
Tset050Tm=Tset025Tm+fth_actual025;//Tset+0.5Tm
Tset075Tm=Tset050Tm+fth_actual025;//Tset+0.75Tm
Tset_025Tm=THset10-fth_actual025;//Tset- 0.25*Tm
Tset_050Tm=Tset_025Tm-fth_actual025;//Tset- 0.5*Tm
Tset_075Tm=Tset_050Tm-fth_actual025;//Tset- 0.75*Tm
RHset05RHm =RHset+(rh_actual>>1); //RHset+0.5RHm
RHset_05RHm =RHset-(rh_actual>>1); //RHset-0.5RHm
if (rh_actual &0x01)
{//当rh_actual个位为1时,移掉的1要补0.5,取消乘法
RHset05RHm +=0.5; //
RHset_05RHm -=0.5; //
}
}
//*******************************************************************
//以下为200704以后从TESTYEJIN程序中的自动判定温湿度转过来。以上为原JF程序。
//*******************************************************************
void fun_auto_set(void) //判定自动所处状态,选择具体模式
{
if (t_value10_20s > (THset10+th_actual10)) //T>Tset+Tm
{//温度过高,关电加热,关加湿,开压缩机
manual_set |=b_comp_onask; //自动制冷\开压缩机、送风机
//20070703去掉 manual_set &=~b_humid_onask; //关加湿
manual_set &=~b_heat1_onask; //关电加热1
manual_set &=~b_heat2_onask; //关电加热2
manual_set &=~b_yvadjust_onask; //D0能量调节阀off
}
else if (t_value10_20s <(THset10-th_actual10)) //T<Tset-Tm
{ //温度过低,开电加热,关加湿,关压缩机,自动制热
manual_set &=~b_comp_onask; //关压缩机
manual_set &=~b_dry_offask; //关除湿
//20070703去掉 manual_set &=~b_humid_onask; //关加湿
fun_2heat_open(); //当一级电加热已经启动15秒后,开第二组电加热
manual_set &=~b_yvadjust_onask; //D0能量调节阀off
}
else
{// Tset-Tm<= T <=Tset+Tm
// if (rh_value_20s <RHset05RHm) //*当RH<RHset+0.5RHm时
// {//当RH<RHset+0.5RHm时
// if (PINB &b_comp) manual_set &=~ b_dry_offask; //湿度低时如压缩机开,则关除湿状态
// }
//20070629开加湿:Tset-Tm<T<Tset+Tm,且RH<RHset-0.5RHm连续20秒
if (rh_low20s_RHset_05RHm>=4) manual_set |=b_humid_onask; //加湿器on
//20070629关闭除湿阀:压缩机运行时间大于60秒,且RH>RHset+RHm连续30秒,关闭除湿阀
if ((rh_high20s_RHsetRHm >=6) && (t_comp_run_times>=1)) manual_set |=b_dry_offask; //D3除湿阀关
//T>Tset且RH>RHset+0.5RHm时,压缩机开始准备运行
if ((t_value10_20s >THset10) && (rh_value_20s >RHset05RHm)) manual_set |=b_comp_onask; //压缩机开
//温湿度模拟量满足T<Tset-Tm,或T<Tset-0.5Tm且RH<RHset-0.5RHm时压缩机开始准备关闭
if (t_value10_20s <(THset10-th_actual10)) manual_set &=~b_comp_onask; //关压缩机 20070604去掉T<Tset-0.5Tm且RH<RHset-0.5RHm时压缩机关闭
//20061120压缩机开且T <Tset-0.25*Tm 一组开时再二组开
if(((PINB &b_comp)==0) &&(t_value10_20s < THset10) && (rh_value_20s >RHset05RHm)) fun_1heat_open2(); //当一级电加热已经启动15秒后,开第二组电加热
if(((PINB &b_comp)!=0) &&(t_value10_20s <Tset050Tm) && (rh_value_20s >RHset05RHm)) fun_1heat_open2();
if(((PINB &b_comp)!=0) &&(t_value10_20s <Tset_025Tm)) fun_1heat_open2();
//当温湿度模拟量满足"T>Tset+0.5Tm且压缩机关"或"T>Tset且RH<RHset且压缩机关"或"T>Tset+Tm且压缩机开"时,关闭一组电加热
//20061120压缩机开且T >Tset+0.25Tm且RH<RHset
if ((t_value10_20s > (Tset050Tm))&& ((PINB &b_comp)==0)) fun_heat2on_close1();
if ((t_value10_20s >THset10) && (rh_value_20s <RHset)&& ((PINB &b_comp)==0)) fun_heat2on_close1();
if (((PINB &b_comp)!=0) &&(t_value10_20s >Tset025Tm)&& (rh_value_20s <RHset) ) fun_heat2on_close1();
if (((PINB &b_comp)!=0) &&(t_value10_20s >Tset075Tm)) fun_heat2on_close1();
// "T<Tset-0.75Tm且压缩机关"或"压缩机关T<Tset+0.25Tm且RH>RHset+0.5RHm"或"压缩机开的情况下,T<Tset+0.5*Tm且RH>RHset"的情况下,一级电加热开
//20061120压缩机开的情况下,T<Tset 一级电加热开
if (((PINB &b_comp)==0) &&(t_value10_20s <Tset025Tm) && (rh_value_20s >RHset05RHm)) fun_1heat_open(); //一级电加热开
if (((PINB &b_comp)!=0) &&(t_value10_20s <Tset050Tm) && (rh_value_20s >RHset)) fun_1heat_open();
if (((PINB &b_comp)==0) &&(t_value10_20s <Tset_075Tm)) fun_1heat_open();
if (((PINB &b_comp)!=0) &&(t_value10_20s <THset10) ) fun_1heat_open();
// if ((t_value >TsetTm)&& (PINB &b_comp) fun_1heat_open();
//关闭2级电加热:当温湿度模拟量满足"T>Tset+0.75Tm且压缩机关"或"T>Tset且RH<RHset-0.5RHm且压缩机关"或"T>Tset+Tm且压缩机开"关闭最后一组电加热。
//20061120压缩机开 T>Tset+0.5Tm且RH<RHset 关闭最后一组电加热
if ((t_value10_20s >Tset075Tm) &&((PINB &b_comp)==0)) fun_heat_off1();
if ((t_value10_20s >THset10) && (rh_value_20s <RHset_05RHm)&&((PINB &b_comp)==0)) fun_heat_off1();
if (((PINB &b_comp)!=0) && (t_value10_20s >Tset050Tm) &&(rh_value_20s <RHset)) fun_heat_off1();
if (((PINB &b_comp)!=0) &&(t_value10_20s >Tset075Tm)) fun_heat_off1();
}
//在自动模式下,当压缩机启动,能量调节电磁阀默认为关。当压缩机开
if (((PINB &b_comp)!=0) &&((manual_set &b_comp_onask)!=0)) //压缩机开
{//20070629开能量调节阀的条件:压缩机开,且T<Tset-0.5Tm连续20秒
if (t_low20s_Tset_050Tm>=4) manual_set |=b_yvadjust_onask; //D1能量调节阀开
if (t_value10_20s > THset10) manual_set &=~b_yvadjust_onask; //D1能量调节阀off
}
else manual_set &=~b_yvadjust_onask; //D1能量调节阀off
//20070629此条件移到外面。当温湿度模拟量满足"RH>RHset连续20秒,关闭加湿器
if (rh_high20s_RHset>=4) manual_set &=~b_humid_onask; //关闭加湿器
//20080417此条件移到外面 //当RH<RHset+0.5RHm时
// if (rh_value_20s <RHset05RHm) manual_set &=~ b_dry_offask; //湿度低时如压缩机开,则关除湿状态//*当RH<RHset+0.5RHm时
if (rh_low20s_RHset05RHm>=4) manual_set &=~ b_dry_offask; //当RH<RHset+0.5RHm时,且连续保持20秒,开除湿阀。
if ((manual_set &b_comp_onask)==0) manual_set &=~ b_dry_offask; //20080417压缩机请求关时除湿请求也关
}
/*二级电加热启动:当一级电加热已经启动15秒后,温湿度模拟量满足"T<Tset-Tm"或"T<Tset且RH>RHset+0.5RHm"
或"压缩机开且T <Tset+Tm且RH>RHset+0.5RHm"的条件下,开第二组电加热。 */
void fun_2heat_open(void)
{ //当一级电加热已经启动15秒后,开第二组电加热
if (PINB &b_heat1)
{
if (t_heat1_on >=3) manual_set |=b_heat2_onask; //D4 电加热2开以5秒计1次,时间最大为250*5=1250s=21min
}
else if (PINB &b_heat2)
{
if (t_heat2_on >=3) manual_set |=b_heat1_onask; //D5 电加热1开
}
else //电加热未启动时先开一级加热,先关先开
{
if (t_heat1_off >=t_heat2_off) manual_set |=b_heat1_onask; //D5 电加热1开
else manual_set |=b_heat2_onask; //D4 电加热2开
}
}
/*、一级电加热启动:在自动模式下当温湿度模拟量满足"T<Tset-Tm"或"T<Tset+0.5Tm且RH>RHset+0.5RHm"
或"压缩机开的情况下,T<Tset+Tm且RH>RHset"的情况下,启动一组电加热,电加热启动遵循先关先开,
即判断两组电加热的关闭时间,关闭时间长的先开。 */
void fun_1heat_open(void)
{//一级电加热启动:如二组电加热都关时,则先关先开,如二组电加热同时开或一组已开时则不需干预。
if (((PINB &b_heat1)==0) &&((PINB &b_heat2)==0 ))
{
if (t_heat1_off >=t_heat2_off) manual_set |=b_heat1_onask; //开电加热1
else manual_set |=b_heat2_onask; //开电加热2
}
}
void fun_heat2on_close1(void) //如两级电加热开时关一级电加热,开时间长的先停止
{
if (((PINB &b_heat1)!=0) &&((PINB &b_heat2)!=0))
{//如两级电加热开时
if (t_heat1_on >=t_heat2_on) manual_set &=~b_heat1_onask; //关电加热1
else manual_set &=~b_heat2_onask; //关电加热2
}
}
void fun_1heat_open2(void) //当一级电加热已经启动15秒后,开第二组电加热,2组开或2组关时不干预
{//当一级电加热已经启动15秒后,开第二组电加热
if (PINB &b_heat1)
{//电加热1已经启动
if (t_heat1_on >=3) manual_set |=b_heat2_onask; //D4 电加热2开以5秒计1次,时间最大为250*5=1250s=21min
}
else if (PINB &b_heat2)
{//电加热2已经启动
if (t_heat2_on >=3) manual_set |=b_heat1_onask; //D5 电加热1开
}
}
void fun_heat_off1(void) //仅仅一组加热开时关开的电加热
{
if (PINB &b_heat1)
{
if ((PINB &b_heat2)==0)
manual_set &=~b_heat1_onask; //关电加热1
}
else if (PINB &b_heat2)
{
if ((PINB &b_heat1)==0)
manual_set &=~b_heat2_onask; //关电加热2
}
}
void fun_rht_compare(void) //在范围内则比较温度湿度是否低于前20秒
{//每次求以前4个(20秒)的平均值,与当前值进行比较,如大于则大于次数+1,如小于则小于次数+1,
//比较完成后存入当前值,求出新的20秒的平均值,不在上下限之间不进行20秒判断,保证t_value10为正数
signed int t_value10_20s_temp; //前面20s温度值
unsigned int rh_value_20s_temp; //前面20s湿度值
if ((flag &b_sht_nofirst)==0)//上电时或故障后第一次读SHT正确==0)
{//刚上电时或出错后首次SHT正确时用当前值为20秒平均值
t_value10_temp_1=t_value10;
t_value10_temp_2=t_value10;
t_value10_temp_3=t_value10;
t_value10_temp_4=t_value10;
t_value10_20s=t_value10;
rh_value_temp_1 =rh_value;
rh_value_temp_2 =rh_value;
rh_value_temp_3 =rh_value;
rh_value_temp_4 =rh_value;
rh_value_20s =rh_value;
flag |=b_sht_nofirst; //上电时或故障后第一次读SHT正确
}
else
{//存入当前值,求出新的20秒的平均值
t_value10_temp_1 =t_value10_temp_2; //将第2值存入第1值
t_value10_20s_temp =t_value10_temp_1;
t_value10_temp_2=t_value10_temp_3; //将第3值存入第2值
t_value10_20s_temp +=t_value10_temp_2;
t_value10_temp_3=t_value10_temp_4; //将第4值存入第3值
t_value10_20s_temp +=t_value10_temp_3;
t_value10_temp_4=t_value10; //将当前值存入第4值
t_value10_20s_temp +=t_value10_temp_4;
t_value10_20s =t_value10_20s_temp>>2; //t_value10_20s/4取前20秒的平均值
//存入当前值,求出新的20秒的平均值
rh_value_temp_1 =rh_value_temp_2; //将第2值存入第1值
rh_value_20s_temp =rh_value_temp_1;
rh_value_temp_2=rh_value_temp_3; //将第3值存入第2值
rh_value_20s_temp +=rh_value_temp_2;
rh_value_temp_3=rh_value_temp_4; //将第4值存入第3值
rh_value_20s_temp +=rh_value_temp_3;
rh_value_temp_4=rh_value; //将当前值存入第4值
rh_value_20s_temp +=rh_value_temp_4;
rh_value_20s =rh_value_20s_temp>>2; //rh_value_20s/4取前20秒的平均值
}
//20070629增加连续
if (rh_value_20s > RHset)
{
rh_high20s_RHset++; //rh_value > RHset时次数加1
if (rh_high20s_RHset>30) rh_high20s_RHset=30;
}
else rh_high20s_RHset=0; //清0
if (rh_value_20s >(RHset +rh_actual))
{
rh_high20s_RHsetRHm++; //rh_value > RHset+RHm时次数加1
if (rh_high20s_RHsetRHm>30) rh_high20s_RHsetRHm=30;
}
else rh_high20s_RHsetRHm=0; //清0
if (rh_value_20s < RHset_05RHm)
{
rh_low20s_RHset_05RHm++; //rh_value < RHset_05RHm时次数加1
if (rh_low20s_RHset_05RHm>30) rh_low20s_RHset_05RHm=30;
}
else rh_low20s_RHset_05RHm=0; //清0
if (t_value10_20s < Tset_050Tm)
{
t_low20s_Tset_050Tm++; //t_value10 < Tset_050Tm时次数加1
if (t_low20s_Tset_050Tm>30) t_low20s_Tset_050Tm=30;
}
else t_low20s_Tset_050Tm=0; //清0
if (rh_value_20s < RHset05RHm)
{//20080417 add rh_value < RHset+05RHm
rh_low20s_RHset05RHm++; //rh_value < RHset+05RHm时次数加1
if (rh_low20s_RHset05RHm>30) rh_low20s_RHset05RHm=30;
}
else rh_low20s_RHset05RHm=0; //清0
}
//自动与手动转换时清manual_set,在开机状态下手动按开关设置,自动按条件设置manual_set,自动下常开风机
void fun_key(void) //读键入紧急按钮、故障复位按钮
{//有键按下且上次已放开,去掉开关机按钮
if (((PINE &b_key_reset_fault)==0) && ((key_temp &b_key_reset_fault)!=0))
{
key_reset_fault_time=0; //刚按下复位按钮时按键时间=0
}
else if ((PINE &b_key_reset_fault)==0)
{ //按下复位按钮时按键时间+1;
if (key_reset_fault_time>=5) //连续按下按钮故障复位5秒时开关机动作,下一次动作需先放开按钮
{
run_state2 |=b_fault_reset; //故障复位命令
fun_fault_beep(); //20080201增加故障报警蜂鸣器子程序
}
else key_reset_fault_time++;
}
else key_reset_fault_time=0; //未按键时清0
// 紧急按钮
if (((PINE &b_key_urgent)==0) && ((key_temp &b_key_urgent)!=0))
{
key_urgent_time=0; //刚按下紧急按钮时按键时间=0
}
else if ((PINE &b_key_urgent)==0)
{ //按下紧急按钮时按键时间+1;
if (key_urgent_time >=5) //连续按下紧急按钮5秒时
{
if (mode & b_urgent)
{//应急状态下则清除应急并关机
mode &=~b_urgent;
mode &=~b_kaiji; //需关机
} //off时手动与自动的状态要求全关
else
{//非应急状态下则置应急开机,取应急的默认设置
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -