📄 last5.c
字号:
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 + -