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

📄 last5.c

📁 C8051F020的头文件
💻 C
📖 第 1 页 / 共 5 页
字号:
	   wz1_fault_timer=0;
       wz1_fault_flag=0;
	   wz1_touch_flag=0;
	   while(1) // 等待周期测量开始
	      {if(wz1_touch_flag==1) // 第一次检测到位置传感器1可靠触发标志,清空周期测量计时器
		      {cycle_measure_timer=0;
			   xianshi_hanzi_dan(6,18,85);//显示“一”
			   for(timer0_10ms=0;timer0_10ms<200;);
			   break;
			  }
		   if(wz1_fault_flag==1) break; // 如果位置传感器1故障则退出
		   if(in_bp_start==1) break; // 如果变频启动信号撤消则退出循环
		  }
       wz1_touch_flag=0;
       if(wz1_fault_flag!=1) // 如果位置传感器正常则继续学习
          {while(1)
		     {if(wz1_touch_flag==1) // 再次检测到位置传感器1可靠触发标志,周期测量结束
			    {
				 xianshi_hanzi_dan(6,18,86);//显示“二”

			                                    // chongci_num_min  // 此时已经获得实测最小冲次数

				 chongci_num_max=(uint)(60000/cycle_measure_timer); // 计算实测最大冲次数(已经乘10)

                 if(chongci_num_set>chongci_num_max)
				    {chongci_num_set=chongci_num_max;
				     SM_Send(CHIP_ROM,addr_chongci_num_set,chongci_num_set);
                    }
				 if(chongci_num_set<chongci_num_min)
				    {chongci_num_set=chongci_num_min;
				     SM_Send(CHIP_ROM,addr_chongci_num_set,chongci_num_set);
                    }
                 if(chongci_num_max<chongci_num_min)
				    {chongci_num_max=chongci_num_min;
				     SM_Send(CHIP_ROM,addr_chongci_num_max,chongci_num_max);
                    }

                 SM_Send(CHIP_ROM,addr_chongci_num_set,chongci_num_set);

                                                                    // 计算上冲程冲次数(已经乘10)
                 chongci_num_up=(float)(chongci_num_set*(chongcheng_speed_ratio_set+10))/20;

                                                                    // 计算下冲程冲次数(已经乘10)
                 chongci_num_down=(float)(chongci_num_set*(chongcheng_speed_ratio_set+10))/
                                                                    (2*chongcheng_speed_ratio_set);

                                                                    // 计算与设定冲次数对应的PWM数值
                 pwm_chongci_num_set=(float)((chongci_num_set-chongci_num_min)*255)/
                                                                    (chongci_num_max-chongci_num_min);

                                                                    // 计算上冲程PWM数值
                 pwm_data_up=(float)((chongci_num_up-chongci_num_min)*255)/
                                                                    (chongci_num_max-chongci_num_min);

                                                                    // 计算下冲程PWM数值
                 pwm_data_down=(float)((chongci_num_down-chongci_num_min)*255)/
                                                                    (chongci_num_max-chongci_num_min);
				 bp_study_flag=1;
                 SM_Send(CHIP_ROM,addr_bp_study_flag,(uchar)(bp_study_flag)); 
				                                                    // 存储变频学习完成标志,只能键盘清除
                 SM_Send(CHIP_ROM,addr_chongci_num_max,chongci_num_max);
				 SM_Send(CHIP_ROM,addr_chongci_num_min,chongci_num_min);
                 SM_Send(CHIP_ROM,addr_pwm_chongci_num_set,pwm_chongci_num_set);
				 SM_Send(CHIP_ROM,addr_pwm_data_up,pwm_data_up);
                 SM_Send(CHIP_ROM,addr_pwm_data_down,pwm_data_down);
                 break;
			    }
              //if(wz1_fault_flag==1) break; // 如果位置传感器1故障则退出
			  if(in_bp_start==1) break; // 如果变频启动信号撤消则退出循环
             }
          }// end of "if(wz1_fault_flag!=1)"

       }// end of "if(bp_study_flag==0)"


       current_a_max_measure=0; //---------------变频稳定运行监测---------------
	   current_b_max_measure=0;
       current_c_max_measure=0;
	   current_a_present_measure=0;
	   current_b_present_measure=0;
	   current_c_present_measure=0;
	   menu_bp_run(); // 显示“变频启动静态界面”
       xianshi_spaces_data(1,10,3,1,chongci_num_set,1);// 设定的冲次数
       xianshi_spaces_data(2,12,3,1,chongcheng_speed_ratio_set,1);//冲程速度比
       xianshi_spaces_data(4,11,3,0,current_a_present_measure,1);//显示a,b,c三相电流瞬时值
	   xianshi_spaces_data(4,15,3,0,current_b_present_measure,1);
       xianshi_spaces_data(4,19,3,0,current_c_present_measure,1);
	   xianshi_spaces_data(5,14,3,0,current_a_max_measure,1);//显示上冲程峰值电流
	   xianshi_spaces_data(6,14,3,0,current_b_max_measure,1);//显示下冲程峰值电流
       xianshi_spaces_hanzi(7,11,infor_hanzi30,9);// 工作状态:“变频运行”
	   xianshi_spaces_hanzi(8,17,infor_hanzi34,2);// 位置传感器一:“正常”
	   xianshi_spaces_hanzi(9,17,infor_hanzi34,2);// 位置传感器二:“正常”
	   wz1_touch_flag=0; // 清位置传感器1可靠触发标志
       //cycle_finish_counter=0;

	   while(1) // 变频稳定运行监测开始
         {
              if(in_bp_fault==0) // 如果检测到变频器的故障信号
		         {
				  for(timer0_10ms=0;timer0_10ms<10;); // 延时100毫秒消抖
				  if(in_bp_fault==0)
				     {SM_Send(CHIP_ROM,addr_bp_start_flag,1);//存储变频启动标志
			          gp_start_flag=1; // 置工频启动标志
					  switch_bp_gp();
			          break;
                     }
                 }
              if((current_a_low_fault_flag||current_b_low_fault_flag||current_a_low_fault_flag)
			      &&(in_bp_fault==1)) // 如果变频器无故障信号且电流过小则如下:
                 {
				  bp_fault_flag=1; // 置变频故障标志并存储,只能通过键盘清除
				  SM_Send(CHIP_ROM,addr_bp_fault_flag,1);
			      gp_start_flag=1; // 置工频启动标志
                  switch_bp_gp();
			      break;
				 }
              if(in_bp_start==1) // 如果变频启动信号撤消则退出循环
			    {for(timer0_10ms=0;timer0_10ms<50;); // 延时500毫秒消抖
				 if(in_bp_start==1)
				   {PCA0CPH0=5;
				    bp_start_flag=0;//清除相关标志
					SM_Send(CHIP_ROM,addr_bp_start_flag,0);//变频退出时清除变频启动标志
				    break;
                   }
                }
              if(volt_ab_fault_flag||volt_bc_fault_flag||volt_ca_fault_flag) // 有电压故障则退出
		         {SM_Send(CHIP_ROM,addr_bp_start_flag,1);//存储变频启动标志
				  gp_start_flag=1; // 置工频启动标志				  
				  switch_bp_gp();
				  break;
                 }
              if(current_a_high_fault_flag||current_a_high_fault_flag||current_a_high_fault_flag) 
                 {                                                          // 变频器电流过大
				  SM_Send(CHIP_ROM,addr_bp_start_flag,1);//存储变频启动标志
			      gp_start_flag=1; // 置工频启动标志
				  switch_bp_gp();
			      break;
				 }

              if((wz1_fault_flag==1)||(wz2_fault_flag==1)) // 判断位置传感器1和2故障情况
		         {PCA0CPH0=pwm_chongci_num_set; // 任何一个发生故障,则保证冲次数
				  wz1_touch_flag=0;
				  wz2_touch_flag=0;
			     }
              if(wz1_fault_flag==1) // 判断位置传感器1故障情况
		         {xianshi_spaces_hanzi(8,17,infor_hanzi35,2);// 位置传感器一:“异常”
				 }
              else xianshi_spaces_hanzi(8,17,infor_hanzi34,2);// 位置传感器一:“正常”
              if(wz2_fault_flag==1) // 判断位置传感器2故障情况
		         {xianshi_spaces_hanzi(9,17,infor_hanzi35,2);// 位置传感器二:“异常”
				 }
              else xianshi_spaces_hanzi(9,17,infor_hanzi34,2);// 位置传感器二:“正常”

              if(wz1_touch_flag==1)//wz1触发判断和处理,调整上冲程速度
		         {wz1_touch_flag=0;
				  PCA0CPH0 = pwm_data_up;
			      xianshi_spaces_data(6,14,3,0,current_a_max_measure,1);//刷新下冲程峰值电流
                  current_a_max_measure=0;
		         }
              if(wz2_touch_flag==1)//wz2触发判断和处理,调整下冲程速度
		         {wz2_touch_flag=0;
				  PCA0CPH0 = pwm_data_down;
				  xianshi_spaces_data(5,14,3,0,current_a_max_measure,1);//刷新上冲程峰值电流
                  current_a_max_measure=0;
                 }

			  // 三相电流电压切换采样,每相连续采样20毫秒取平均
              iu_channel_select(1);//iu1
	          ad_channel_select(0);//ad0// 采样a相电流
              i=ad_sampling();
			  current_a_present_measure=(float)(i)*150/4095+i_a_compensate;
     		  current_a_max_measure= (current_a_max_measure>current_a_present_measure)?
			                          current_a_max_measure:current_a_present_measure;
			                                        // 筛选a相电流最大值current_a_max_measure
		      if(current_a_present_measure>current_max_set)
			     {current_a_high_fault_counter+=1;} // 电流过大时高电流故障计数器加1
              else current_a_high_fault_counter=0;
			  if(current_a_present_measure<current_min_set)
			     {current_a_low_fault_counter+=1;}  // 电流过小时低电流故障计数器加1
              else current_a_low_fault_counter=0;

		      ad_channel_select(1);//ad1// 采样ab相电压
              i=ad_sampling();
		      volt_ab_present_measure=(float)(i)*500/4095+u_ab_compensate;
              if((volt_ab_present_measure>volt_max_set)||(volt_ab_present_measure<volt_min_set)) 
		         {volt_ab_fault_counter+=1;}        // 电压异常时电压故障计数器加1
              else volt_ab_fault_counter=0;


              iu_channel_select(2);//iu2
	          ad_channel_select(0);//ad0// 采样b相电流
              i=ad_sampling();
              current_b_present_measure=(float)(i)*150/4095+i_b_compensate;
     		  current_b_max_measure= (current_b_max_measure>current_b_present_measure)?
			                          current_b_max_measure:current_b_present_measure;
			                                        // 筛选b相电流最大值current_b_max_measure
		      if(current_b_present_measure>current_max_set)
			     {current_b_high_fault_counter+=1;} // 电流过大时高电流故障计数器加1
              else current_b_high_fault_counter=0;
			  if(current_b_present_measure<current_min_set)
			     {current_b_low_fault_counter+=1;}  // 电流过小时低电流故障计数器加1
              else current_b_low_fault_counter=0;


		      ad_channel_select(1);//ad1// 采样bc相电压
              i=ad_sampling();
              volt_bc_present_measure=(float)(i)*500/4095+ u_bc_compensate;
              if((volt_bc_present_measure>volt_max_set)||(volt_bc_present_measure<volt_min_set)) 
		         {volt_bc_fault_counter+=1;}        // 电压异常时电压故障计数器加1
              else volt_bc_fault_counter=0;


              iu_channel_select(3);//iu3
	          ad_channel_select(0);//ad0// 采样c相电流
              i=ad_sampling();
              current_c_present_measure=(float)(i)*150/4095+i_c_compensate;
     		  current_c_max_measure= (current_c_max_measure>current_c_present_measure)?
			                          current_c_max_measure:current_c_present_measure;
			                                        // 筛选c相电流最大值current_b_max_measure
		      if(current_c_present_measure>current_max_set)
			     {current_c_high_fault_counter+=1;} // 电流过大时高电流故障计数器加1
              else current_c_high_fault_counter=0;
			  if(current_c_present_measure<current_min_set)
			     {current_c_low_fault_counter+=1;}  // 电流过小时低电流故障计数器加1
              else current_c_low_fault_counter=0;


		      ad_channel_select(1);//ad1// 采样ca相电压
              i=ad_sampling();
              volt_ca_present_measure=(float)(i)*500/4095+ u_ca_compensate;
              if((volt_ca_present_measure>volt_max_set)||(volt_ca_present_measure<volt_min_set)) 
		         {volt_ca_fault_counter+=1;}        // 电压异常时电压故障计数器加1
              else volt_ca_fault_counter=0;

              xianshi_spaces_data(4,11,3,0,current_a_present_measure,1);//显示a,b,c三相电流瞬时值
	          xianshi_spaces_data(4,15,3,0,current_b_present_measure,1);
              xianshi_spaces_data(4,19,3,0,current_c_present_measure,1);

          if(current_a_high_fault_counter>5) // 如果大电流故障连续5次以上(时间<6s),则置大电流故障标志并退出
		     {current_a_high_fault_flag=1;}
		  if(current_b_high_fault_counter>5)
		     {current_b_high_fault_flag=1;}
		  if(current_c_high_fault_counter>5)
		     {current_c_high_fault_flag=1;}
			 
          if(current_a_low_fault_counter>5) // 如果小电流故障连续5次以上(时间<6s),则置小电流故障标志并退出
		     {current_a_low_fault_flag=1;}
		  if(current_b_low_fault_counter>5)
		     {current_b_low_fault_flag=1;}
		  if(current_c_low_fault_counter>5)
		     {current_c_low_fault_flag=1;}


		  if(volt_ab_fault_counter>2)   // 如果电压故障连续2次以上(时间<3s),则置电压故障标志并退出
		    {volt_ab_fault_flag=1;}
		  if(volt_bc_fault_counter>2)
		    {volt_bc_fault_flag=1;}
		  if(volt_ca_fault_counter>2)
		    {volt_ca_fault_flag=1;}

//===========================================================
          // 程序: 加冲次数和冲程速度比调整
          if(key_value_main==1)//在变频运行时按设置键则直接调整冲次数和冲程速度比
		    {chongci_num_max  = SM_Receive (CHIP_ROM,addr_chongci_num_max); //最大冲次数读取
             chongci_num_min  = SM_Receive (CHIP_ROM,addr_chongci_num_min); //最小冲次数读取
			 xianshi_spaces_data(1,10,3,1,chongci_num_set,0);
			 xianshi_spaces_data(2,12,3,1,chongcheng_speed_ratio_set,1);
             for(timer0_10ms=0;timer0_10ms<30;);
             key_value_main=0;
             key_flag=1;
             while(1)
                {for(timer0_10ms=0;timer0_10ms<10;);
	             if(key_value_main==6)
	                {//按确认键退出     //计算并存储设置项
					 //chongci_num_min  // 此时已经获得实测最小冲次数
                     //chongci_num_max  // 此时已经获得实测最大冲次数
                     SM_Send(CHIP_ROM,addr_chongci_num_set,chongci_num_set);
					 SM_Send(CHIP_ROM,addr_chongcheng_speed_ratio_set,chongcheng_speed_ratio_set);
                     // 计算上冲程冲次数(已经乘10)
                     chongci_num_up=(float)(chongci_num_set*(chongcheng_speed_ratio_set+10))/20;
                     // 计算下冲程冲次数(已经乘10)
                     chongci_num_down=(float)(chongci_num_set*(chongcheng_speed_ratio_set+10))/
                                                                 (2*chongcheng_speed_ratio_set);
                     // 计算与设定冲次数对应的PWM数值
                     pwm_chongci_num_set=(float)((chongci_num_set-chongci_num_min)*255)/
                                                                 (chongci_num_max-chongci_num_min);
                     // 计算上冲程PWM数值
                     pwm_data_up=(float)((chongci_num_up-chongci_num_min)*255)/
                                                                 (chongci_num_max-chongci_num_min);
                     // 计算下冲程PWM数值
                     pwm_data_down=(float)((chongci_num_down-chongci_num_min)*255)/
                                                                 (chongci_num_max-chongci_num_min);
                     SM_Send(CHIP_ROM,addr_pwm_chongci_num_set,pwm_chongci_num_set);
				     SM_Send(CHIP_ROM,addr_pwm_data_up,pwm_data_up);
                     SM_Send(CHIP_ROM,addr_pwm_data_down,pwm_data_down);
                     //退出之前恢复正常显示
                     xianshi_spaces_data(1,10,3,1,chongci_num_set,1);
			         xianshi_spaces_data(2,12,3,1,chongcheng_speed_ratio_set,1);

		             for(timer0_10ms=0;timer0_10ms<30;);
		             key_value_main=0;
                     key_flag=0;
		             break;

⌨️ 快捷键说明

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