void unload_power(status_list_node *list_1,status_list_node *list_2) { u8 i,j; s8 label_busy1,label_busy2; turn_flag=1; led_on_off(0); for(i=1;i<33;i++)inquiry_slave_status(i); label_busy2=sort_busynode_list_asc(sort_busy_list_2,list_2); label_busy1=sort_busynode_list_asc(sort_busy_list_1,list_1); for(j=1;j<=label_busy1&&label_busy1>0;j++) { delay_time(5); myled();//计算功率,电压电流与显示按键分开 if(gonglvshishu<95)break; else { if((wugong_computer-wugong_95)>sort_busy_list_1[label_busy1].size) {order_trans_rs485(mybox.myid,sort_busy_list_1[label_busy1].myid,1,1,0);delay_us(10000);label_busy1--;} if((wugong_computer-wugong_95)<=sort_busy_list_1[j].size) {order_trans_rs485(mybox.myid,sort_busy_list_1[j].myid,1,1,0);delay_us(10000);} } } if(gonglvshishu>95) { for(j=1;j<=label_busy2&&label_busy2>0;j++) { delay_time(5); myled();//计算功率,电压电流与显示按键分开 if(gonglvshishu<95)break; else{ if((wugong_computer-wugong_95)>sort_busy_list_2[label_busy2].size) {order_trans_rs485(mybox.myid,sort_busy_list_2[label_busy2].myid,1,2,0);delay_us(10000);label_busy2--;} if((wugong_computer-wugong_95)<=sort_busy_list_2[j].size) {order_trans_rs485(mybox.myid,sort_busy_list_2[j].myid,1,2,0);delay_us(10000);} } } } led_on_off(1); }
void main() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_CLOCK_DIV_2); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DIV_BY_16,155,1); setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); set_pwm1_duty(312); // Inicia el Ciclo de Trabajo PWM1 en 50%. set_pwm2_duty(312); // Inicia el Ciclo de Trabajo PWM2 en 50%. setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); set_tris_a(0b11100000); // set_tris_c(0b10000000); //Pone RC7 como input y RC6 como output (y de 5 a 0 también) set_tris_b(0b00000000); // Habilita como salidas los pines B0, B1,...,B7 set_tris_e(0b010); // ************************ CONFIGURACIÓN PWM1 y PWM2: ************************ int32 brillo=0; int32 exposicion=500; //Tiempo de exposición de la cámara en [ms] int32 der_steps=0; int32 izq_steps=0; int32 led=0; int32 motor=0; int32 direccion=0; int32 pasos=0; int32 velocidad=0; char leido_pantalla[5]; output_low(PIN_B0); output_low(PIN_B1); output_low(PIN_B2); output_low(PIN_B3); output_low(PIN_B4); output_high(PIN_B6); // Siempre en 5V para conectar pull up 10kOhm de RA4 para SLEEP MOTOR 3 (altura) set_pwm1_duty(0); // Mantiene Ciclos en 0 para reducir consumo al iniciar. set_pwm2_duty(0); //*************** INICIO *************** while(true) { char seleccionar=0; output_low(PIN_A2); output_low(PIN_A3); output_low(PIN_A4); printf("Set parameters: e=exposicion(%Ld), v=velocidad(%Ld)\n\r",exposicion,velocidad); printf(" b=brillo(%Ld), d=direccion(%Ld), p=pasos(%Ld)\n\r",brillo,direccion,pasos); printf(" l=led(%Ld), m=motores(%Ld) \n\r",led,motor); seleccionar=getc(); switch(seleccionar) { case 'v': printf("Ingrese Velocidad en [ms] y [ENTER]\n\r"); fgets(leido_pantalla); velocidad=atoi32(leido_pantalla); break; case 'e': printf("Ingrese tiempo de exposicion en [ms] y [ENTER]\n\r"); fgets(leido_pantalla); exposicion=atoi32(leido_pantalla); break; case 'b': printf("Ingrese Ciclo de Trabajo para PWM1 (0-100) (brillo) y [ENTER]:\n\r"); fgets(leido_pantalla); brillo=atoi(leido_pantalla); set_pwm1_duty(brillo*20000000/(100*2000*16)); set_pwm2_duty(brillo*20000000/(100*2000*16)); break; case 'l': printf("Ingrese Led a encender: 0 a 7 y [ENTER]\n\r"); fgets(leido_pantalla); led=atoi32(leido_pantalla); break; case 'd': printf("Ingrese direccion 1=Derecha, 0=Izquierda y [ENTER]\n\r"); fgets(leido_pantalla); direccion = atoi32(leido_pantalla); break; case 'p': printf("Ingrese el numero de pasos a utlizar y [ENTER]\n\r"); fgets(leido_pantalla); pasos = atoi32(leido_pantalla); break; case 'm': printf("Ingrese el numero de motor a utlizar: 1,2 o 3 y [ENTER]\n\r"); fgets(leido_pantalla); motor = atoi32(leido_pantalla); break; case '1': led_on(led); break; case '2': led_off(); break; case '3': motor_move(motor,pasos,direccion); break; case '4': led_on_off(led,exposicion); break; case '5': int32 pasos_restantes; int32 steps; int dir; dir = direccion; steps = pasos; pasos_restantes = pasos; motor_on(motor); while(pasos_restantes > 0){ printf("pasos_restantes: %Ld\n\r",pasos_restantes); delay_us(200); steps = motores4(pasos_restantes,dir,velocidad); pasos_restantes = pasos_restantes - steps; if (pasos_restantes <=0) break; delay_us(200); dir = (dir == 0)?1:0; motores2(2000,dir); } break; case '6': int32 pasos_restantes2; int32 steps2; int dir2; dir2 = direccion; steps2 = pasos; pasos_restantes2 = pasos; motor_on(motor); while(true){ printf("pasos restantes: %Ld\n\r",pasos_restantes2); delay_us(200); steps2 = motores4(pasos_restantes2,dir2,velocidad); delay_us(200); dir2 = (dir2 == 0)?1:0; motores2(2000,dir2); pasos_restantes2 = pasos_restantes2 - steps2; if (pasos_restantes2 <=0) pasos_restantes2 = pasos; } break; case '7': int32 steps3; motor_on(motor); steps3 = motores4(pasos,direccion,velocidad); if (steps3 - pasos < 0){ direccion = (direccion == 0)?1:0; motores2(2000,direccion); delay_us(200); motores3(2147483640,direccion); direccion = (direccion == 0)?1:0; motores2(2000,direccion); } break; case '8': printf("Setup Calibracion Quick\n\r"); motor_on(motor); motores3(2147483640,DERECHA); delay_us(200); motores2(2000,IZQUIERDA); delay_us(200); izq_steps = motores3(2147483640,IZQUIERDA); delay_us(200); motores2(2000,DERECHA); delay_us(200); der_steps = motores3(2147483640,DERECHA); printf("izq_steps ->%Ld<- \n\r",izq_steps); printf("der_steps ->%Ld<- \n\r",der_steps); while(true){ motores2(izq_steps,IZQUIERDA); delay_us(200); motores2(der_steps,DERECHA); delay_us(200); } case '9': printf("Setup Velocidad ...\n\r"); output_high(PIN_A4); motores2(2000,IZQUIERDA); delay_us(200); izq_steps = motores3(2147483640,IZQUIERDA); delay_us(200); motores2(2000,DERECHA); delay_us(200); der_steps = motores3(2147483640,DERECHA); printf("izq_steps ->%Ld<- \n\r",izq_steps); printf("der_steps ->%Ld<- \n\r",der_steps); motores4(izq_steps,IZQUIERDA,velocidad); delay_us(200); motores4(der_steps,DERECHA,200); delay_us(200); break; } } } //FIN MAIN
void turn_power(status_list_node *list_1,status_list_node *list_2)//到功率因素满足稳定条件后,进入电容器轮休函数 { u8 i,j,k,t,q; s8 label_busy1,label_busy2; if(turn_flag==1) { led_on_off(0); for(i=1;i<33;i++)inquiry_slave_status(i); led_on_off(1); turn_label_idle=turn_idlenode_list(turn_idle_list,list_1,list_2);//得到空闲队列 } turn_flag=0; if(turn_label_idle!=0) { led_on_off(0); for(i=1;i<33;i++)inquiry_slave_status(i); label_busy1=sort_busynode_list(sort_busy_list_1,list_1);//刷新list_1的busy表的每个工作节点的工作时间 label_busy2=sort_busynode_list(sort_busy_list_2,list_2);//刷新list_2的busy表的每个工作节点的工作时间 for(i=1;i<=label_busy1;i++) { if(sort_busy_list_1[i].work_time>=TIME_OUT) { for(j=1;j<=turn_label_idle;j++) { if(sort_busy_list_1[i].size==turn_idle_list[j].size) { order_trans_rs485(mybox.myid,turn_idle_list[j].myid,1,turn_idle_list[j].group,1);delay_us(10000); delay_us(100000);//实验看灯延时,真实情况注掉 order_trans_rs485(mybox.myid,sort_busy_list_1[i].myid,1,1,0);delay_us(10000); { k=sort_busy_list_1[i].myid; t=sort_busy_list_1[i].size; sort_busy_list_1[i].work_time=0; for(q=j;q<turn_label_idle;q++) {turn_idle_list[q].myid=turn_idle_list[q+1].myid; turn_idle_list[q].size=turn_idle_list[q+1].size; turn_idle_list[q].group=turn_idle_list[q+1].group; } turn_idle_list[turn_label_idle].myid=k; turn_idle_list[turn_label_idle].size=t; turn_idle_list[turn_label_idle].group=1; } break;//防止本循环中对i,重复匹配投切 } } } } for(i=1;i<=label_busy2;i++) { if(sort_busy_list_2[i].work_time>=TIME_OUT) { for(j=1;j<=turn_label_idle;j++) { if(sort_busy_list_2[i].size==turn_idle_list[j].size) { order_trans_rs485(mybox.myid,turn_idle_list[j].myid,1,turn_idle_list[j].group,1);delay_us(10000); delay_us(100000);//实验看灯延时,真实情况注掉 order_trans_rs485(mybox.myid,sort_busy_list_2[i].myid,1,2,0);delay_us(10000); { k=sort_busy_list_2[i].myid; t=sort_busy_list_2[i].size; sort_busy_list_2[i].work_time=0; for(q=j;q<turn_label_idle;q++) {turn_idle_list[q].myid=turn_idle_list[q+1].myid; turn_idle_list[q].size=turn_idle_list[q+1].size; turn_idle_list[q].group=turn_idle_list[q+1].group; } turn_idle_list[turn_label_idle].myid=k; turn_idle_list[turn_label_idle].size=t; turn_idle_list[turn_label_idle].group=2; } break;//防止本循环中对i,重复匹配投切 } } } } // if(label_idle1==0&&label_idle2==0)break;//无空闲队列 led_on_off(1); } }
void offset_idlepower() //功率补偿函数,三个参数 无功功率 功率因数 空闲队列 { u8 i,j; s8 label_idle1,label_idle2; turn_flag=1; led_on_off(0); for(i=1;i<33;i++)inquiry_slave_status(i); label_idle1=sort_idlenode_list(sort_idle_list_1,system_status_list_1); label_idle2=sort_idlenode_list(sort_idle_list_2,system_status_list_2); for(j=1;j<=label_idle1;j++) { if(done_list1_flag==0) { for(i=0;i<33;i++) { idle_done_nodelist_1[i]=0; } done_list1_flag=1; } delay_time(5); myled(); if(gonglvshishu>90)break; else{ if((wugong_computer)>=(sort_idle_list_1[j].size)) { if(idle_done_nodelist_1[sort_idle_list_1[j].myid]==0) { order_trans_rs485(mybox.myid,sort_idle_list_1[j].myid,1,1,1);delay_us(10000); idle_done_nodelist_1[sort_idle_list_1[j].myid]=1; } } done_count_1++; if(done_count_1==label_idle1) {done_count_1=0;done_list1_flag=0;} } } if(gonglvshishu<90) { for(j=1;j<=label_idle2;j++) { if(done_list2_flag==0) { for(i=0;i<33;i++) { idle_done_nodelist_2[i]=0; } done_list2_flag=1; } delay_time(5); myled(); if(gonglvshishu>90)break; else{ if((wugong_computer)>=(sort_idle_list_2[j].size)) { if(idle_done_nodelist_2[sort_idle_list_2[j].myid]==0) { order_trans_rs485(mybox.myid,sort_idle_list_2[j].myid,1,2,1);delay_us(10000); idle_done_nodelist_2[sort_idle_list_2[j].myid]=1; } done_count_2++; if(done_count_2==label_idle2) {done_count_2=0;done_list2_flag=0;} } } } } led_on_off(1); }