In meiner Schrittkette lasse ich im case "beginn_Sensor_fahrt" die Motoren S4 und S5 in Richtung der beiden Kap.Sensoren fahren.
Im darauffolgenden case "suche_Ref_Sensor" sollte dann sowohl der Motor S4 als auch der Motor S5 gestoppt werden, sobald sie den jeweiligen Sensor erreicht haben.
Es stoppt jedoch nur S4, S5 dreht einfach weiter obwohl er den Sensor erreicht hat.
Wenn ich für jeden Motor einen eigenes switch/case Scenario mache funktionert es, da kann ich dann aber immer nur einen Motor nach dem anderen betreiben und stoppen.
Mein Wunsch wäre jedoch, dass sich beide Motoren gleichzeitig bewegen, und nach betättigung des jeweiligen Kap.Sensors unabhängig voneinander stoppen.
Ich denke die MobaTool´s können das, es liegt sicher nur an meinem Sketch.
/***************************************/
/* beginn der Referenzfahrt */
/***************************************/
case beginn_Sensor_fahrt:
S4.rotate(1);
S5.rotate(-1);
Z_Start = AUS;
Zustand = suche_Ref_Sensor;
break;
/********************************************************/
/* suche Referenz mit Kap. Sensor S4 und S5 */
/********************************************************/
case suche_Ref_Sensor:
if ( Z_Kap_Sensor_Drehtisch_unten == 0 ) { // wenn Drehtisch in Position, stoppt Kap.Sensor S4
S4.rotate(0);
if ( Z_Kap_Sensor_vert_Schwenktisch == 0 ) { // wenn Drehtisch in Position, stoppt Kap.Sensor S4
S5.rotate(0);
}
Z_Start = AUS;
Zustand = Weiche;
}
break;
Die Bedingung ( Z_Kap_Sensor_vert_Schwenktisch == 0 ) ist von der ersten abhängig.
Wenn die erreicht ist, gehst Du aber schon in den Zustand Weiche. - Damit ist der Schwenktisch unerreichbar.
Wenn Du beide willst, dann musst auch beide abfragen und warten bis beide durch sind.
case suche_Ref_Sensor:
if ( Z_Kap_Sensor_Drehtisch_unten == 0 ) { // wenn Drehtisch in Position, stoppt Kap.Sensor S4
S4.rotate(0);
}
if ( Z_Kap_Sensor_vert_Schwenktisch == 0 ) { // wenn Drehtisch in Position, stoppt Kap.Sensor S4
S5.rotate(0);
}
if (Z_Kap_Sensor_Drehtisch_unten && Z_Kap_Sensor_vert_Schwenktisch)
{
Z_Start = AUS;
Zustand = Weiche;
}
break;
ob das besonders clever ist, las ich mal so stehen.
PS: Mindestens ein Kommentar passt nicht zu Inhalt.
Ich würde das anders aufbauen.
Da Dein Switch Case noch mehr hat, habe ich das jetzt nur auf das runtergebrochen, was oben stand.
Es kommen dann zwei Funktionen raus, die Du immer wieder verwenden kannst.
case beginn_Sensor_fahrt:
Z_Start = AUS;
Zustand = suche_Ref_Sensor;
break;
case suche_Ref_Sensor:
if (!referenzDrehtisch() && !referenzSchwenktisch())
{
Z_Start = AUS;
Zustand = Weiche;
}
break;
bool referenzDrehtisch()
{
if ( Z_Kap_Sensor_Drehtisch_unten == 0 ) { // wenn Drehtisch in Position, stoppt Kap.Sensor S4
S4.rotate(0);
}
else
{
S4.rotate(1);
}
return Z_Kap_Sensor_Drehtisch_unten;
}
bool referenzSchwenktisch()
{
if ( Z_Kap_Sensor_vert_Schwenktisch == 0 ) { // wenn Drehtisch in Position, stoppt Kap.Sensor S4
S5.rotate(0);
}
else
{
S5.rotate(-1);
}
return Z_Kap_Sensor_vert_Schwenktisch;
}
Leider zeigst Du nur einen Ausschnitt aus deinem Sketch, da kann man nicht viel erkennen. Wenn man blockadefrei programmiert, muss der Parallel-Betrieb auch mit einem getrennten switch/case für jeden Motor funktionieren.