-> Hier kostenlos registrieren
Hallo zusammen,
ich steh irgendwie auf dem Schlauch und das ganz bös...
Hab in meinem Programm 3 Maschinen die nacheinander laufen sollen. Soweit so gut. Sind alle 3 Maschinen bereit, schalte ich diese mit einem Schieberegister nacheinander durch, indem ich eine "1" immer um eine Stelle weiter nach links schiebe in einem Byte (Befehl SHL).
Ist jetzt eine Maschine gestört (Störung, Hand aus, ...), soll diese nicht mehr angesteuert werden. Soweit auch noch gut.
Jetzt kommt der Punkt, an dem ich den Wald vor lauter Bäumen nicht mehr sehe... Warum funktioniert das Umschalten bei der 1. Case-Anweisung, bei der 2. aber nicht???
16#01 ist meine Schieberegisterposition für Maschine 1.
16#02 ist meine Schieberegisterposition für Maschine 3.
16#04 ist meine Schieberegisterposition für Maschine 2.
Also im Prinzip Bit .0, .1 und .2.
Die Umschaltung wird über eine Flankenauswertung (R_TRIG) angetriggert.
Das hier funktioniert ohne Probleme. Bei jedem Impuls zum Wechseln wird entweder Maschine 2 oder 3 angewählt. Maschine 1 ist nicht bereit.
Das hier, steht im gleichen Netzwerk direkt unter der 1. Case-Anweisung funktioniert nicht!?!?!?!
Maschine 1 und 3 sollten angeschaltet werden. Maschine 2 ist gestört.
Bitte nicht von der Reihenfolge der Maschinen verwirren lassen. Das ist schon ok so ;-)
Jemand ne Idee?
ich steh irgendwie auf dem Schlauch und das ganz bös...
Hab in meinem Programm 3 Maschinen die nacheinander laufen sollen. Soweit so gut. Sind alle 3 Maschinen bereit, schalte ich diese mit einem Schieberegister nacheinander durch, indem ich eine "1" immer um eine Stelle weiter nach links schiebe in einem Byte (Befehl SHL).
Ist jetzt eine Maschine gestört (Störung, Hand aus, ...), soll diese nicht mehr angesteuert werden. Soweit auch noch gut.
Jetzt kommt der Punkt, an dem ich den Wald vor lauter Bäumen nicht mehr sehe... Warum funktioniert das Umschalten bei der 1. Case-Anweisung, bei der 2. aber nicht???
16#01 ist meine Schieberegisterposition für Maschine 1.
16#02 ist meine Schieberegisterposition für Maschine 3.
16#04 ist meine Schieberegisterposition für Maschine 2.
Also im Prinzip Bit .0, .1 und .2.
Die Umschaltung wird über eine Flankenauswertung (R_TRIG) angetriggert.
Das hier funktioniert ohne Probleme. Bei jedem Impuls zum Wechseln wird entweder Maschine 2 oder 3 angewählt. Maschine 1 ist nicht bereit.
Code:
REGION KKM 1 hat Fehler
IF ((#I_Bereit_KKM_1 = false) AND (#I_Bereit_KKM_2 = true) AND (#I_Bereit_KKM_3 = true)) THEN
CASE #s_Schieberegister.Schieberegister OF
16#01:
#s_Schieberegister.Schieberegister := 16#02; // --> Umschalten von Maschine 1 (sollte die gestörte Maschine noch angewählt sein) auf Maschine 3
16#02:
#s_Schieberegister.Schieberegister := 16#04; // --> Umschalten von Maschine 3 auf Maschine 2
16#04:
#s_Schieberegister.Schieberegister := 16#02; // --> Umschalten von Maschine 2 auf Maschine 3
END_CASE;
END_IF;
END_REGION ;
Das hier, steht im gleichen Netzwerk direkt unter der 1. Case-Anweisung funktioniert nicht!?!?!?!
Maschine 1 und 3 sollten angeschaltet werden. Maschine 2 ist gestört.
Code:
REGION KKM 2 hat Fehler
IF ((#I_Bereit_KKM_1 = true) AND (#I_Bereit_KKM_2 = false) AND (#I_Bereit_KKM_3 = true)) THEN
CASE #s_Schieberegister.Schieberegister OF
16#01:
#s_Schieberegister.Schieberegister := 16#02; // --> Umschalten von Maschine 1 auf Maschine 3
16#02:
#s_Schieberegister.Schieberegister := 16#01; // --> Umschalten von Maschine 3 auf Maschine 1
16#04:
#s_Schieberegister.Schieberegister := 16#02; // --> Umschalten von Maschine 2 (gesört) auf Maschine 3
END_CASE;
END_IF;
END_REGION ;
Bitte nicht von der Reihenfolge der Maschinen verwirren lassen. Das ist schon ok so ;-)
Jemand ne Idee?
Zuletzt bearbeitet: