Programm mit Ablauf
Dependencies: EPOS2 mbed-rtos mbed
Fork of Projekt_Kugelbahn by
Diff: main.cpp
- Revision:
- 13:cc43e546f310
- Parent:
- 12:9e90d7a5a8c6
- Child:
- 14:bee23de5dff0
--- a/main.cpp Tue Oct 18 14:16:09 2016 +0000 +++ b/main.cpp Wed Oct 19 10:02:02 2016 +0000 @@ -9,24 +9,7 @@ Serial pc(USBTX, USBRX); // (tx, rx) CAN can(p9, p10); // Can Pin def -/* -int velocity = 3000; -int acceleration = 50000; -int deceleration = 50000; -int anzahl_zyklen = 1000000; -int absolvierte_zyklen = 0; -int ActualPos = 0; -int DemandPos = 0; -int ActualCurrent = 0; -int DemandCurrent = 0; -int counter=0; -int counter2=0; -bool start = true; - -int counter_s = false; -int counter_s2 = false; -*/ DigitalIn usv_ready(p23); InterruptIn buffering(p24); DigitalIn replace_battery(p25); @@ -36,6 +19,9 @@ DigitalOut led3(LED3); DigitalOut led4(LED4); +bool epos1_homing = false; +bool epos3_homing = false; + bool node1_homed = false; bool node2_homed = false; bool node3_homed = false; @@ -47,18 +33,23 @@ bool Power_ein = true; bool node5_grundposition = false; -int homing = false; -int ready = false; -int ausfahren = false; -int einfahren = false; -int usv = false; +bool ausfahren = false; +bool einfahren = false; +bool usv = false; int current_step = 1; //HOMING int ausfahren_step = 1; int einfahren_step = 1; int usv_step = 1; -int ErrorState; +int ErrorState1; +int ErrorState2; +int ErrorState3; +int ErrorState4; +int ErrorState5; +int ErrorState6; +int ErrorState7; +float speed = 1.2; -void interrupt_usv(){ +void interrupt_usv(){ //Funktion, wird aufgeruffen durch den interrupt des USV's current_step = 5; wait_ms(10); } @@ -109,64 +100,30 @@ led3 = 0; led4 = 0; MyEpos5.SetDigOut(4, 1); - -/* usv_ready.mode(PullUp); - buffering.mode(PullUp); - replace_battery.mode(PullUp); -*/ - //************** Initialisierung **************// - - /* HOMING METHODEN: - Homing Method 7 :Home Switch Positive Speed & Index - Homing Method 11:Home Switch Negative Speed & Index - Homing Method 23: Home Switch Positive Speed - Homing Method 27: Home Switch Negative Speed - Homing Method -3: Current Threshold Positive Speed - Homing Method -4: Current Threshold Negative Speed - - */ - //Motortype 10: EC-Motor - -/* MyEpos1.SetPar(10,4430, 7, 3500, 38); //Set the motor parameter( Motortype, Current limit, Pole pairs, max velocity, thermal time constant winding)#EINGESTELLT - MyEpos1.SetHomingPar(-4, 100, 100, 1000); //Set Homing Parameter (homing mode, speed, acceleration, offset) #EINGESTELLT - MyEpos1.Reset(); - - MyEpos2.SetPar(10,4430, 7, 3500, 38); //Set the motor parameter( Motortype, Current limit, Pole pairs, max velocity, thermal time constant winding)#EINGESTELLT - MyEpos2.SetHomingPar(27, 100, 100, 0); //Set Homing Parameter (homing mode, speed, acceleration, offset) - MyEpos2.Reset(); - - MyEpos3.SetPar(10,4430, 7, 3500, 38); //Set the motor parameter( Motortype, Current limit, Pole pairs, max velocity, thermal time constant winding)#EINGESTELLT - MyEpos3.SetHomingPar(-3, 100, 100, 1000); //Set Homing Parameter (homing mode, speed, acceleration, offset) #EINGESTELLT - MyEpos3.Reset(); - - MyEpos4.SetPar(10,4430, 7, 3500, 38); //Set the motor parameter( Motortype, Current limit, Pole pairs, max velocity, thermal time constant winding)#EINGESTELLT - MyEpos4.SetHomingPar(23, 100, 100, 8000); //Set Homing Parameter (homing mode, speed, acceleration, offset)#EINGESTELLT - MyEpos4.Reset(); - - MyEpos5.SetPar(10,4430, 7, 3500, 38); //Set the motor parameter( Motortype, Current limit, Pole pairs, max velocity, thermal time constant winding)#EINGESTELLT - MyEpos5.SetHomingPar(23, 100, 100, 0); //Set Homing Parameter (homing mode, speed, acceleration, offset)#EINGESTELLT - MyEpos5.Reset(); - - MyEpos6.SetPar(10,3440, 1, 12000, 3.8); //Set the motor parameter( Motortype, Current limit, Pole pairs, max velocity, thermal time constant winding)#EINGESTELLT - MyEpos6.SetHomingPar(11, 100, 100, -7000); //Set Homing Parameter (homing mode->35=Actual Position, speed, acceleration, offset)#EINGESTELLT - MyEpos6.Reset(); - - MyEpos7.SetPar(10,2660, 1, 3100, 2.76); //Set the motor parameter( Motortype, Current limit, Pole pairs, max velocity, thermal time constant winding) - MyEpos7.SetHomingPar(23, 100, 100, 0); //Set Homing Parameter (homing mode, speed, acceleration, offset) - MyEpos7.Reset(); -*/ - + while(1){ if(MyEpos1.GetError() != 0 or MyEpos2.GetError() != 0 or MyEpos3.GetError() != 0 or MyEpos4.GetError() != 0 or MyEpos5.GetError() != 0 /*or MyEpos6.GetError() != 0 or MyEpos7.GetError() != 0*/){ current_step = 7; //FEHLER - ErrorState = MyEpos5.GetError(); + ErrorState1 = MyEpos1.GetError(); + ErrorState2 = MyEpos2.GetError(); + ErrorState3 = MyEpos3.GetError(); + ErrorState4 = MyEpos4.GetError(); + ErrorState5 = MyEpos5.GetError(); wait(0.1); - pc.printf("ErrorState: %d\r\n", ErrorState); + pc.printf("ErrorState Panels/Kopf: Panel Aussen Linkss=%d, Panel Innen Links=%d, Panel Aussen Rechts=%d, Panel Innen Rechts=%d, Kopf=%d\r\n", ErrorState1, ErrorState2, ErrorState3, ErrorState4, ErrorState5); } - switch (current_step){ +/* if(MyEpos6.GetError() != 0 or MyEpos7.GetError() != 0){ + current_step = 76; //FEHLER + ErrorState6 = MyEpos6.GetError(); + ErrorState7 = MyEpos7.GetError(); + wait(0.1); + pc.printf("Bohrgestell/Bohrer ErrorState: Bohrgestell=%d, Bohrer=%d\r\n", ErrorState6, ErrorState7); + } + +*/ switch (current_step){ case 1://HOMING: led1 = 1; @@ -191,6 +148,9 @@ MyEpos5.MoveAbsolute(-60000,800,100,100); //Kopf pc.printf("Fahren auf -60000\n"); while(MyEpos5.TargetReached()!=1){ + if(MyEpos5.GetError() == 1){ + break; + } } pc.printf("Target reached\n"); node5_homed = true; @@ -198,17 +158,38 @@ } if (node1_homed == false){ - pc.printf("Homing1\n"); - MyEpos1.Homing(); //Solarpanel_Aussen_Links - node1_homed = true; + if(epos1_homing == false){ + MyEpos1.MoveVelocity(-400, 100, 100); //Fährt auf Endschalter vor Beginn mit Stromhoming + epos1_homing = true; + } +/* if(MyEpos1.GetError() != 0){ + current_step = 7; + break; + } +*/ if(MyEpos1.GetDigIn(4) == 1){ + pc.printf("Homing1\n"); + MyEpos1.Homing(); //Solarpanel_Aussen_Links + node1_homed = true; + break; + } break; } if (node3_homed == false){ - pc.printf("Homing3\n"); - MyEpos3.Homing(); //Solarpanel_Aussen_Rechts - node3_homed = true; + if (epos3_homing == false){ + MyEpos3.MoveVelocity(400, 100, 100); //Fährt auf Endschalter vor Beginn mit Stromhoming + epos3_homing = true; + } +/* if(MyEpos3.GetError() != 0){ + current_step = 7; + break; + } +*/ if(MyEpos3.GetDigIn(4) == 1){ + pc.printf("Homing3\n"); + MyEpos3.Homing(); //Solarpanel_Aussen_Rechts + node3_homed = true; + } break; } @@ -220,7 +201,10 @@ break; } - if (node1_homed == true and node2_homed == false){ + if (node1_homed == true and node2_homed == false){ + if (node5_grundposition == false){ + MyEpos5.MoveAbsolute(-60000,800,100,100); //Kopf + } pc.printf("Homing2\n"); MyEpos2.Homing(); //Solarpanel_Innen_Links node2_homed = true; @@ -244,10 +228,13 @@ break; } - if (node2_homed==1 and node4_homed==1 and node5_grundposition == false){ - MyEpos5.MoveAbsolute(0,800,100,100); //Kopf + if (node2_homed == true and node4_homed == true and node5_grundposition == false){ + MyEpos5.MoveAbsolute(500,800*speed,100,100); //Kopf wait(0.1); while(MyEpos5.TargetReached() != 1){ + if(MyEpos5.GetError() == 1){ + break; + } wait(0.1); } node5_grundposition = true; @@ -256,8 +243,8 @@ if (node1_homed == true and node2_homed == true and node3_homed == true and node4_homed == true and node5_homed == true and node6_homed == true and node7_homed == true){ pc.printf("Homing beendet\n"); - node5_grundposition == false; - Power_ein == true; + node5_grundposition = false; + Power_ein = true; MyEpos1.Power(0); MyEpos2.Power(0); MyEpos3.Power(0); @@ -266,9 +253,6 @@ MyEpos5.Power(0); current_step = 2;//BEREIT; } - - - led1 = 0; @@ -288,138 +272,21 @@ MyEpos4.Power(1); MyEpos5.Power(1); einfahren = false; - current_step = 6; + ausfahren_step = 1; + current_step = 3; wait(0.5); } wait_ms(10); led2 = 0; break; - - - case 3://START_AUSFAHREN: - - break; - - - case 5://USV: - pc.printf("USV\n"); - led4 = 1; - MyEpos5.SetDigOut(4,1); - switch (usv_step){ - case 1: -// wait(0.1); -// if (node1_homed == true){ -// MyEpos1.MoveAbsolute(0,500,500,500); //Panel_Aussen_Links - MyEpos1.MoveAbsolute(2000,500,500,500); //Panel_Aussen_Links -// wait(0.1); -// } -// if (node3_homed == true){ -// MyEpos3.MoveAbsolute(0,500,500,500); //Panel_Aussen_Rechts - MyEpos3.MoveAbsolute(-2000,500,500,500); //Panel_Aussen_Rechts - wait(0.1); -// } -/* if (node7_homed == true){ - MyEpos7.MoveAbsolute(0,500,500,500); // Bohrer - wait(0.1); - } - */// wait(0.1); -// usv_step = 2; - if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1){ - usv_step = 2; - wait(0.1); - } - break; - - case 2: -// if (MyEpos1.TargetReached()==1){ -// wait(1); - MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links - MyEpos2.MoveAbsolute(0,500,500,500); //Panel_Innen_Links -// wait_ms(10); -// } -// if (MyEpos3.TargetReached()==1){ -// wait(1); - MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Links - MyEpos4.MoveAbsolute(0,500,500,500); //Panel_Innen_Links -// wait_ms(10); -// } -// wait(0.1); -/* if (node4_homed == true and MyEpos3.TargetReached()==1){ - wait(1); - MyEpos4.MoveAbsolute(0,500,500,500); //Panel_Innen_Links - wait_ms(10); - } - if (node6_homed == true and MyEpos7.TargetReached()==1){ - wait(1); - MyEpos6.MoveAbsolute(0,500,500,500); // Bohrer - wait_ms(10); - } -*/ wait(0.1); - if (MyEpos2.TargetReached()==1 and MyEpos4.TargetReached()==1 /*and MyEpos6.TargetReached()==1*/){ - usv_step = 3; - wait(0.1); - } - break; - - case 3: - MyEpos5.MoveAbsolute(0,800,500,500); //Kopf - wait(0.1); - if (MyEpos5.TargetReached()==1){ - usv_step = 4; - wait(0.1); - } - break; - - case 4: - /*while (MyEpos5.TargetReached()==0){ - wait_ms(10); - }*/ -/* MyEpos1.Power(0); - MyEpos2.Power(0); - MyEpos3.Power(0); - MyEpos4.Power(0); - MyEpos5.Power(0); - MyEpos6.Power(0); - MyEpos7.Power(0); - usv_step = 5; -*/ MyEpos1.Power(0); - MyEpos2.Power(0); - MyEpos3.Power(0); - MyEpos4.Power(0); - MyEpos5.Power(0); - MyEpos6.Power(0); - MyEpos7.Power(0); - usv_step = 5; - wait(0.1); - break; - - case 5: - if(buffering == 1){ - led3 = 1; - } else { - led3 = 0; - current_step=1; - usv_step=1; - ausfahren_step=1; - einfahren_step=1; - } - /*if (buffering == 0){ - current_step = 1; - usv_step = 1; - }*/ - wait(1); - break; - } - led4 = 0; - break; - - case 6://Test + + case 3://ABLAUF // pc.printf("Läuft...\n"); led3 = 1; if (einfahren == false){ switch (ausfahren_step){ case 1: - MyEpos5.MoveAbsolute(-150000,800,100,100); //Kopf + MyEpos5.MoveAbsolute(-150000,800*speed,100*speed,100*speed); //Kopf ausfahren_step = 2; wait(1); break; @@ -428,17 +295,17 @@ if (MyEpos5.TargetReached()==1){ MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Rechts - MyEpos2.MoveAbsolute(310000,500,100,100); //Panel Innen Links - MyEpos4.MoveAbsolute(-310000,500,100,100); //Panel Innen Rechts + MyEpos2.MoveAbsolute(310000,500*speed,100*speed,100*speed); //Panel Innen Links + MyEpos4.MoveAbsolute(-310000,500*speed,100*speed,100*speed); //Panel Innen Rechts ausfahren_step = 3; wait(1); } break; case 3: - if (MyEpos2.TargetReached()==1 and MyEpos4.TargetReached()==1){ - MyEpos1.MoveAbsolute(318000,500,100,100); //Panel Aussen Links - MyEpos3.MoveAbsolute(-318000,500,100,100); //Panel Aussen Rechts + if (MyEpos2.GetActualPos() > 280000 and MyEpos4.GetActualPos() < -280000){ + MyEpos1.MoveAbsolute(318000,500*speed,100*speed,100*speed); //Panel Aussen Links + MyEpos3.MoveAbsolute(-318000,500*speed,100*speed,100*speed); //Panel Aussen Rechts ausfahren_step = 4; wait(1); @@ -452,6 +319,8 @@ wait(1); } break; + + }//switch (ausfahren_step) }//if (einfahren == false) @@ -460,21 +329,18 @@ ausfahren_step = 1; switch (einfahren_step){ case 1: -/* MyEpos1.MoveAbsolute(1000,500,100,100); //Panel Aussen Links - MyEpos3.MoveAbsolute(-1000,500,100,100); //Panel Aussen Rechts -*/ MyEpos1.MoveAbsolute(2000,500,100,100); //Panel Aussen Links - MyEpos3.MoveAbsolute(-2000,500,100,100); //Panel Aussen Rechts + MyEpos1.MoveAbsolute(4000,500*speed,100*speed,100*speed); //Panel Aussen Links + MyEpos3.MoveAbsolute(-4000,500*speed,100*speed,100*speed); //Panel Aussen Rechts einfahren_step = 2; wait(0.1); break; case 2: - if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1){ -// wait(0.1); + if (MyEpos1.GetActualPos() < 20000 and MyEpos3.GetActualPos() > -20000){ MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Rechts - MyEpos2.MoveAbsolute(0,500,100,100); //Panel Innen Links - MyEpos4.MoveAbsolute(0,500,100,100); //Panel Innen Rechts + MyEpos2.MoveAbsolute(0,500*speed,100*speed,100*speed); //Panel Innen Links + MyEpos4.MoveAbsolute(0,500*speed,100*speed,100*speed); //Panel Innen Rechts einfahren_step = 3; wait(0.1); } @@ -482,8 +348,7 @@ case 3: if (MyEpos2.TargetReached()==1 and MyEpos4.TargetReached()==1){ - MyEpos5.MoveAbsolute(0,500,100,100); //Kopf -// wait(1); + MyEpos5.MoveAbsolute(1000,500*speed,100*speed,100*speed); //Kopf MyEpos1.Power(0); MyEpos2.Power(0); MyEpos3.Power(0); @@ -505,11 +370,104 @@ }//switch(einfahren_step) }//if einfahren == true) led3 = 0; + break; + + case 5://USV: + pc.printf("USV\n"); + led4 = 1; + MyEpos5.SetDigOut(4,1); + switch (usv_step){ + case 0: + MyEpos1.Power(1); + MyEpos2.Power(1); + MyEpos3.Power(1); + MyEpos4.Power(1); + MyEpos5.Power(1); + MyEpos6.Power(1); + MyEpos7.Power(1); + usv_step = 1; + break; + + case 1: + MyEpos1.MoveAbsolute(2000,500,500,500); //Panel_Aussen_Links + MyEpos3.MoveAbsolute(-2000,500,500,500); //Panel_Aussen_Rechts + wait(0.1); + + if (MyEpos1.TargetReached()==1 and MyEpos3.TargetReached()==1){ + usv_step = 2; + wait(0.1); + } + break; + + case 2: + + MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links + MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Links + + MyEpos2.MoveAbsolute(0,500,500,500); //Panel_Innen_Links + MyEpos4.MoveAbsolute(0,500,500,500); //Panel_Innen_Links + wait(0.1); + + if (MyEpos2.TargetReached()==1 and MyEpos4.TargetReached()==1 /*and MyEpos6.TargetReached()==1*/){ + usv_step = 3; + wait(0.1); + } + break; + + case 3: + MyEpos5.MoveAbsolute(0,800,500,500); //Kopf + wait(0.1); + if (MyEpos5.TargetReached()==1){ + usv_step = 4; + wait(0.1); + } + break; + + case 4: + MyEpos1.Power(0); + MyEpos2.Power(0); + MyEpos3.Power(0); + MyEpos4.Power(0); + MyEpos5.Power(0); + MyEpos6.Power(0); + MyEpos7.Power(0); + usv_step = 5; + wait(0.1); + break; + + case 5: + if(buffering == 1){ + led3 = 1; + } else { + led3 = 0; + Power_ein = true; + current_step=1; + usv_step=0; + ausfahren_step=1; + einfahren_step=1; + } + wait(1); + break; + }//switch(usv_step) + led4 = 0; + break; + + case 6: + pc.printf("Fehler RESET Bohrer\n"); + MyEpos5.MoveVelocity(0, 500, 500); + MyEpos6.MoveVelocity(0, 500, 500); + wait(3); + MyEpos5.Reset(); + MyEpos5.Power(1); + MyEpos6.Reset(); + MyEpos6.Power(1); + //node1_homed = false; + //node2_homed = false; + current_step = 3; break; case 7: - pc.printf("Fehler RESET\n"); -// if(MyEpos5.GetDigIn(3) == 1){ + pc.printf("Fehler RESET\n"); MyEpos1.MoveVelocity(0, 500, 500); MyEpos2.MoveVelocity(0, 500, 500); MyEpos3.MoveVelocity(0, 500, 500); @@ -526,26 +484,28 @@ MyEpos4.Power(1); MyEpos5.Reset(); MyEpos5.Power(1); + epos1_homing = false; + epos3_homing = false; node1_homed = false; node2_homed = false; node3_homed = false; node4_homed = false; node5_homed = false; + Power_ein = true; + if(MyEpos2.GetActualPos() < 100000 or MyEpos4.GetActualPos() > -100000){ + MyEpos1.MoveAbsolute(0,500,100,100); //Panel Aussen Links + MyEpos3.MoveAbsolute(0,500,100,100); //Panel Aussen Rechts + MyEpos2.MoveAbsolute(0,500,100,100); //Panel Innen Links + MyEpos4.MoveAbsolute(0,500,100,100); //Panel Innen Rechts + while (MyEpos2.TargetReached() != 1 or MyEpos4.TargetReached() != 1){ + if(MyEpos2.GetError() == 1 or MyEpos4.GetError() == 1){ + break; + } + } + } current_step = 1; wait(0.1); -// } - -// MyEpos5.MoveVelocity(0,500,500); - wait(0.1); - -/* MyEpos1.Reset(); - MyEpos2.Reset(); - MyEpos3.Reset(); - MyEpos4.Reset(); - MyEpos5.Reset(); - wait(0.5); - */ - + break; }//switch (current_step) }//while