⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jf_act.c

📁 一款完整的家用电器程序,具有控制商用机的功能,应用广泛,有一定的参考价值
💻 C
📖 第 1 页 / 共 5 页
字号:
		      	}
		   		else fault_pfilter_times++;
		      }	
		   else  fault_pfilter_times=0;
		  }
		  NOP();
		  if ((fault_state5 &b_fault_lowfan)==0)
		  {
		   //if (PINC & b_lowfan)	 //PC2风机低风压故障LOW-FAN
		   if ((PINC & b_lowfan)==0)	 //20080620 PC2风机低风压故障LOW-FAN
		      {	
		      	if (fault_low_fan_times>=3) 
		      	{
		      		fault_state5 |=b_fault_lowfan;  //风机低风压故障LOW-FAN	
	 	   			fun_fault_beep();	//20080201增加故障报警蜂鸣器子程序
		      	}
		   		else fault_low_fan_times++;
		      }	
		   else  fault_low_fan_times=0;
		  }
		}
	  else 	 t_fan_run++;	//计时+1
    } 
  else 
   { t_fan_run=0;fault_low_fan_times=0;fault_pfilter_times=0;}
   NOP();
   
   if (b_fault_sht_times>=6)
   {//
   	fault_state2 |=b_fault_sht;  //6次后回风探头故障不能自动恢复
   	//SHT无应答时次数到达36时回风探头故障 3 分钟
	  if (sht_noread_time >=t_180s_10s)	//180秒到快测10秒
	  {
	  	t_value=0;rh_value=0;t_value10=0;t_value10_20s=0;rh_value_20s=0;//20071225出错时置0
	  	sht_ok_times=0;	//SHT读正确次数清0
	   	 t_b_fault_sht=0;	//在1秒计时中定义SHT故障是否恢复
	   	 flag &=~b_sht_nofirst;	//上电时或故障后第一次读SHT正确
	  	}
	  else sht_noread_time++;	//20080222改为未读到SHT的计时	
	}
   else if ((fault_state2 &b_fault_sht)==0)
	 {//SHT无应答时次数到达36时回风探头故障 3 分钟
	  if (sht_noread_time >=t_180s_10s)	//180秒到快测10秒
	   	{
	   	fault_state2 |=b_fault_sht;  //SHT 读写错误回风探头故障
		 fun_fault_beep();	//20080201增加故障报警蜂鸣器子程序
	   	t_value=0;rh_value=0;t_value10=0;t_value10_20s=0;rh_value_20s=0;//20071225出错时置0
	   	 b_fault_sht_times++;	//回风探头故障次数+1
	   	 sht_ok_times=0;	//SHT读正确次数清0
	   	 t_b_fault_sht=0;	//在1秒计时中定义SHT故障是否恢复
	   	 flag &=~b_sht_nofirst;	//上电时或故障后第一次读SHT正确
	   	 }
	   else sht_noread_time++;	//20080222改为未读到SHT的计时	 
	   	if (sht_ok_times >=t_10min_15s_std)	//快测时SHT读正确次数)
		    {//无故障时连续10分钟则清除次数
		    	b_fault_sht_times=0;
		    }
		else sht_ok_times++; 
	  }

   if (fault_tongxun_times>=6)fault_state2 |=b_fault_tongxun;  //6次后通讯故障不能自动恢复
   else if ((fault_state2 &b_fault_tongxun)==0)
   {//正常下如连续60秒未正确收到通讯则置通讯故障,停止整机,应急时通讯故障不作用
	//快测时通讯故障时间为3秒
	if (rxd_nogood_time >=t_1min_3s_std) 
	  {
		  fault_state2 |=b_fault_tongxun; 
		  fault_tongxun_times++;	//次数+1
	 	  fun_fault_beep();	//20080201增加故障报警蜂鸣器子程序
	 	  tongxun_ok_time=0;	//通讯正常时间
	 	  t_b_fault_tongxun=0;	//通讯故障时间
		}
	else rxd_nogood_time++; //通讯故障连续时间 ,在正确接收到显示板通讯时清0
	
	if (tongxun_ok_time >=t_10min_10s_std)
	  {//无故障时连续10分钟则清除次数
		 fault_tongxun_times=0;
	  }
	else tongxun_ok_time++; 
	}
	
 //20080228增加在1秒计时SHT故障不恢复时间10分钟后仍不能恢复正常,则故障成立 	
  if (((fault_state2 &b_fault_sht)!=0) &&(b_fault_sht_times<6))
    {
  	if (t_b_fault_sht>t_10min_10s_std)
  	  {
  		b_fault_sht_times=6;
  		fun_fault_beep();	//20080201增加故障报警蜂鸣器子程序
  	  }
  	else t_b_fault_sht++;	//在20秒计时中定义SHT故障是否恢复
  	}	
  //20080228增加在1秒计时通讯故障10分钟后仍不能恢复正常,则故障成立 	
  if (((fault_state2 &b_fault_tongxun)!=0) &&(fault_tongxun_times<6))
    {
  	if (t_b_fault_tongxun>600)
  	  {
  		fault_tongxun_times=6;
  		fun_fault_beep();	//20080201增加故障报警蜂鸣器子程序
  	  }
  	else t_b_fault_tongxun++;	//在20秒计时中定义SHT故障是否恢复
  	}	 	   
   }   
 

 void fun_fault_guanji(void) //故障停机立即关所有执行机构 关闭压缩机、电加热、加湿器,风机  
  {
  	PORTB &=~b_comp;		//PB6压缩机COMPoff
   	PORTC &=~b_yv_dry;
   	PORTG &=~ b_yv_adjust; //关PG1调节阀YV-ADJUST
	PORTG &=~b_ofan; //PG0冷凝风机OFAN关
	PORTD &= ~b_heat_comp;
	PORTD &= ~b_yv_comp;
	PORTD &=~ b_humid;	//PD0加湿HUMID关
	  NOP();
	  PORTD &=~ b_yv_in;	//PD1进水阀YV-IN关
	  PORTD &=~ b_yv_out;	//PD5排水阀YV-OUT关	
	  PORTB &=~ b_heat1;	//关电加热1
	  PORTB &=~ b_heat2;	//关电加热2
	  PORTG &=~b_fan;	//停止风机
	  manual_set=0x04;	//20080312故障停机时除加湿外请求清0
  	}
   
  void fun_guanji(void)	//正常关机
  {
	PORTD &=~ b_humid;	//PD0加湿HUMID关
	  NOP();
	  PORTD &=~ b_yv_in;	//PD1进水阀YV-IN关
	  PORTD &=~ b_yv_out;	//PD5排水阀YV-OUT关	
	  PORTB &=~ b_heat1;	//关电加热1
	  PORTB &=~ b_heat2;	//关电加热2
	  PORTG &=~ b_yv_adjust; //关PG1调节阀YV-ADJUST
	if (PINB &b_comp)   fun_comp_off();	//关压缩机
	else //关压缩机后再关外风机,最后延时180秒关内风机
	   {
		if (PING &b_ofan) fun_ofandelayoff(); //冷凝风机等待延时关	
		else if (PING &b_fan) fun_fan_delay_off(); //内风机等待延时关	
	   }
  }
  void fun_guanji_sht(void)	//正常关机,风机保持原状
  {
	manual_set=manual_set&0x84;	//20080312回风探头故障时除风机、加湿外其它清0
	PORTD &=~ b_humid;	//PD0加湿HUMID关
	  NOP();
	  PORTD &=~ b_yv_in;	//PD1进水阀YV-IN关
	  PORTD &=~ b_yv_out;	//PD5排水阀YV-OUT关	
	  PORTB &=~ b_heat1;	//关电加热1
	  PORTB &=~ b_heat2;	//关电加热2
	  PORTG &=~ b_yv_adjust; //关PG1调节阀YV-ADJUST
	if (PINB &b_comp)   fun_comp_off();	//关压缩机
	else //关压缩机后再关外风机,最后延时180秒关内风机
	   {
		if (PING &b_ofan) fun_ofandelayoff(); //冷凝风机等待延时关
	   }
	if (mode & b_kaiji) //开机
	  {
		if ((mode&b_manual_on)==0)  //自动on
		{//自动开机时内风机开
			if ((PING &b_fan)==0)fun_fan_delay_on(); //内风机关时等待内风机延时启动
			}
		else	//手动
		{//手动开机时如内风机请求开则开,否则为关
			if (manual_act_ask &b_fan_onask)
			{if ((PING &b_fan)==0)fun_fan_delay_on();} //内风机关时等待内风机延时启动
			else if (PING &b_fan) fun_fan_delay_off(); //关机时内风机等待延时关
			}	
	  } 	
	else if (PING &b_fan) fun_fan_delay_off(); //关机时内风机等待延时关	
  }    	   

  void fun_comp_off(void)	//关压缩机
  { //压缩机最小运行时间到时关压缩机、除湿阀、调节阀,内风机及冷凝风机延时关
//20080201  	if (mode & b_fast_test) run_state  |= b_comp_run; //20071113快测时取消压缩机延时关;
   if (run_state &b_comp_run)	//压缩机最小运行时间计时到
      {
	PORTB &=~b_comp;	// 关压缩机
	PORTC &=~b_yv_dry;	//b_yv_dry=0
	PORTD &=~b_yv_comp;	//PD7压缩机阀YV-COMP
	if (PING &b_ofan) fun_ofandelayoff(); //冷凝风机等待延时关
 	} 
 }
 
  void fun_comp_off_fault(void)  //故障时关压缩机立即停止 
   {
   	PORTB &=~ b_comp;  //压缩机off
   	PORTC &=~b_yv_dry;	//b_yv_dry=0
	PORTD &=~b_yv_comp;	//PD7压缩机阀YV-COMP
	if (PING &b_ofan) fun_ofandelayoff(); //冷凝风机等待延时关
   }
 
//若电流小于0.6Iset进水阀开,关排水阀; 
//若电流大于1.1Iset开排水阀,开进水阀;
//20080217若电流Iset<I≤1.1Iset时,如果排水阀开着,则进水阀跟排水阀维持原状态,如果排水阀关着,则关进水阀
//20080217若电流0.9Iset≤I≤Iset时,进水阀跟排水阀维持原状态。
//20080217若电流0.6Iset≤I<0.9Iset时,如果排水阀开着,则关闭排水阀跟进水阀。如果排水阀关着,则进水阀维持原状态(开着就保持开着,关着就保持关着);
void fun_humid_i_act(unsigned   char  imax10) //按电流大小来动作加湿器程序
{
 	float c1=0.6;	//c1=0.9;	
    float c2=0.9;	//
    float c3=1.1;	//
    float imax_temp1,imax_temp2,imax_temp3;
    imax_temp1 =c1*imax10;	//Imax×0.6
    imax_temp2 =c2*imax10;	//Imax×0.9
    imax_temp3 =c3*imax10;	//Imax×1.1
   
	if (i_humid10 <imax_temp1)	//当I1<Ir*0.6时,YV1得电,加湿器进水
	  {//高水位无连续10秒才可以动作进水阀
		if (t_highwater_ok>=10)PORTD |=b_yv_in;	//手动进水开进水阀YV-IN开
		else PORTD &=~b_yv_in;	//PD1进水阀YV-IN关
		PORTD &= ~b_yv_out;	//PD5排水阀YV-OUT关	
	  }
	else  if (i_humid10 >imax_temp3)	//当I1>Iset*1.1时,YV2得电,加湿器排水
	  {//20080128改为若电流大于1.1Iset开排水阀(开进水阀)
	  	if (t_highwater_ok>=10)PORTD |=b_yv_in;	//20080128手动进水开进水阀YV-IN开
		else PORTD &=~b_yv_in;	//PD1进水阀YV-IN关
		PORTD |= b_yv_out; //PD5排水阀YV-OUT得电	
	  }
	else if (i_humid10 >imax10)
	{//若电流Iset<I≤1.1Iset时,如果排水阀开着,则进水阀跟排水阀维持原状态,如果排水阀关着,则关进水阀
		if ((PIND &b_yv_out)==0)PORTD &= ~b_yv_in;	//排水阀关时,加湿器停止进水
	}
	else  if (i_humid10 <imax_temp2)
	 {//20080217若电流0.6Iset≤I<0.9Iset时,如果排水阀开着,则关闭排水阀跟进水阀。如果排水阀关着,则进水阀维持原状态(开着就保持开着,关着就保持关着);
	 	if (PIND &b_yv_out)
	 	{
		 	PORTD &= ~ b_yv_out; //0.6Iset≤当I1<0.9Iset时,关排水电磁阀
		 	PORTD &= ~b_yv_in;	 //PD1进水阀YV-IN关
		}
	 }
	 
}

void fun_humid_clean_low(void)	//加湿小清洗
{//若加湿器停机时间小于5小时,则对加湿器进行小换水,加湿器跟进水阀同时上电,延时10秒打开排水阀,进行加湿器桶换水,
//10秒后关闭排水阀。此间(20秒)电流不做比较,20秒后进行电流对比。
	PORTD |=b_humid;	//加湿HUMID上电	//高水位无连续10秒才可以动作进水阀
	if (t_highwater_ok>=10)PORTD |=b_yv_in;	//手动进水开进水阀YV-IN开
	else PORTD &=~b_yv_in;	//PD1进水阀YV-IN关
	t_humid_clean_start++;	//加湿清洗计时清0
	if (t_humid_clean_start>20)	//
	{
		auto_state |=b_humid_clean_end;	//加湿清洗结束
		t_humid_clean_start=0;
		PORTD &= ~ b_yv_out; //加湿清洗结束时,关排水电磁阀
	}
	else if (t_humid_clean_start>10)PORTD |= b_yv_out; //延时10秒打开排水阀YV-OUT
	
}

void fun_humid_clean_big(void)	//加湿大清洗
{//判断加湿器停机时间,若超过5-24小时,则先打开排水阀,加湿器排水时间到后,打开进水阀,
//10秒后关闭排水阀,同时打开加湿器,进入电流对比流程。
	unsigned   char temp=t_outpai_set+10;
	PORTD &=~b_humid;	//PG4加湿HUMID关
	t_humid_clean_start++;	//加湿清洗计时清0
	if (t_humid_clean_start>temp)	//超过加湿器设定//排水时间+10秒时清洗结束
	 {
		auto_state |=b_humid_clean_end;	//加湿清洗结束
		t_humid_clean_start=0;
		PORTD &= ~ b_yv_out; //加湿清洗结束时,关排水电磁阀
		t_humid_run=0;	//清洗结束时清除连续开加湿时间
		auto_state &=~b_humid_clean_big;	//清洗结束时清除
	 }	
	else if (t_humid_clean_start>t_outpai_set)
	 {//加湿器排水时间到后,打开进水阀
		PORTD |= b_yv_out; //延时10秒打开排水阀YV-OUT		//高水位无连续10秒才可以动作进水阀
		if (t_highwater_ok>=10)PORTD |=b_yv_in;	//手动进水开进水阀YV-IN开
		else PORTD &=~b_yv_in;	//PD1进水阀YV-IN关	
	 }
	else 
	 {//先打开排水阀
		PORTD |= b_yv_out; //
		PORTD &=~ b_yv_in;
	 }
}
void fun_humid_paikong(void)	//加湿器排空水
{//20080214当加湿器HUMIN连续闭合时间超过30分钟,断开HUMID,对加湿器进行清洗,
//先打开排水阀、进水阀,加湿器排水时间到后,关闭排水阀,同时打开加湿器,进入电流对比流程	
	PORTD &=~b_humid;	//PG4加湿HUMID关	
	t_humid_paikong++;	//加湿排空计时+1
	if (t_humid_paikong>t_outpai_set)	//超过加湿排水时间时结束
	 {//排水时间到后,关闭排水阀,同时打开加湿器,进入电流对比流程
		//排水空20080417 flag |= b_humid_paikong;	//加湿排空水结束
		t_humid_paikong=0;	//
		PORTD &= ~ b_yv_out; //加湿排空水结束时,关排水电磁阀
		auto_state |=b_humid_clean_end;	//加湿清洗结束
	 }	
	else
	{//先打开排水阀、进水阀,加湿器排水时间到后,关闭排水阀
		if (t_highwater_ok>=10)PORTD |=b_yv_in;	//手动进水开进水阀YV-IN开
		else PORTD &=~b_yv_in;	//PD1进水阀YV-IN关	
		PORTD |= b_yv_out; //开排水阀YV-OUT
		}
}
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -