Betriebsartumschaltung...

Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Michael,

also wenn ich dich richtig verstanden habe, dann könnte man (frau auch :razz:) das Programm wie folgt abändern:

1) In den beiden FC's für die zwei Betriebsarten S/R-Glieder für Merker benutzen.

2) In einem neuen FC die Merker der S/R-Glieder initialisieren, d.h. bei Abwahl einer Betriebsart werden die entspr. Merker rückgesetzt.

3) In einem weiteren FC werden dann die Merker der S/R-Glieder den entsprechenden Ausgängen zugewiesen.

Stimmt das bis hierher?

Falls ja, dann würde das bedeuten, dass in der jeweiligen Betriebsart die Merker je nach Anforderung gesetzt und rückgesetzt werden - und sobald die Betriebsart verlassen wird, diese Merker sozusagen zwangsweise rückgesetzt werden, richtig?

Ohne Dein Programm zu kennen, wäre dies eine Möglichkeit! Diese sollte funktionieren.

zu 1 + 2) genauso kannst Du es machen

zu3) Denk daran zu jedem Ausgang gibt es zwei Pfade (ODER-verknüpft). Pfad 1 - Handbetrieb (Betriebsartmerker HAND); Pfad 2 - Automatik (Betriebsartmerker AUTO).

Viel Erfolg beim Umsetzen.
 
Viel Erfolg beim Umsetzen.

Danke Michael, dann werde ich mal mein Glück versuchen...

Abschließend noch eine Frage dazu:

Angenommen es ist die Betriebsart Automatik angewählt und der Merker M20.0 über ein S/R-Glied in dem entsprechenden FC für Automatik gesetzt. In dem neu hinzugekommenen FC wird über M20.0 der Ausgang A0.0 (Motor) zugewiesen.
Nun schaltet der Bediener vom Automatikbetrieb in den Handbetrieb, ohne den Motor vorher zu stoppen. Jetzt sollte ja in dem "Initialisierungs-FC" über die Anwahl des Handbetriebs der Merker M20.0 rückgesetzt werden.

So, in dem FC für Automatikbetrieb ist ja M20.0 nach wie vor gesetzt und in dem FC für Initialisierung wird M20.0 rückgesetzt.

Warum klappt das überhaupt - nur weil der FC für Automatikbetrieb nicht mehr aufgerufen wird?

Danke für eure super Hilfe...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ohne den Code zu kennen, kann man nur mutmaßen ob das so funktioniert.
Ich mutmaße mal:

Wenn der M20.0 im Automatikbaustein gesetzt wird, musst Du den M20.0 in einem anderen Baustein als dem Automatikbaustein zurücksetzen. (Dieser wird ja nicht mehr aufgerufen) Damit ist der Weg schon mal frei für die Handfunktionen.

Nun kommt der Fall, dass die Betriebsart Automatik eingeschaltet wird. Damit wird der Baustein wieder aufgerufen.
Vermutlich ist es nicht gut, wenn der M20.0 immer sofort gesetzt wird. Das musst Du dann auf jeden Fall ausschließen. Wenn die Setzbedingung mit einem Schrittmerker aus einer Schrittkette gemacht wird, musst Du die Schrittkettenmerker bei Aufruf der Handfunktion auch noch glattbügeln.

So, genug "gemutmaßt"...
 
...So, in dem FC für Automatikbetrieb ist ja M20.0 nach wie vor gesetzt und in dem FC für Initialisierung wird M20.0 rückgesetzt.

Warum klappt das überhaupt - nur weil der FC für Automatikbetrieb nicht mehr aufgerufen wird?

Danke für eure super Hilfe...

Ja genau.

Hier mal ein möglichst kleines Programmbeispiel:

OB1: // Zyklischer Programmaufruf

CALL FC1 // Betriebsart
CALL FC2 // Initialisieren

U M1.0
SPB AUTO
CALL FC3 // HAND-Betrieb
SPA OUT

AUTO: CALL FC4 // AUTOMATIK-Betrieb
OUT: CALL FC5 // Ausgänge zuweisen
BE

FC1; // Betriebsart
U E1.0 // Taster AUTOMATIK als "SCHLIESSER"
S M1.0 // Betriebsart AUTOMATIK aktiv

UN E1.1 // Taster HAND als "ÖFFNER"
R M1.0 // Betreibsart HAND aktiv
BE

FC 2; // Initialisieren
UN M1.0 // HAND aktiv
R M40.0 // Irgend ein AUTOMATIK-Merker
R M40.1
R ...

U M1.0 // AUTOMATIK aktiv
R M20.0 // Irgend ein HAND-Merker
R M20.1
R ...

FC3 // HAND
U Mx.x
S M20.0
...
U My.y
R M20.0
BE

FC4 // AUTO
U Mx.x
S 40.0
...
U My.y
R M40.0
BE

FC5 // Ausgänge zuweisen
O(
U M 20.0 // Irgend ein Merker aus der Betriebsart HAND
UN M 1.0 // HAND aktiv
)
O(
U M 40.0 // Irgend ein Merker aus der Betriebsart AUTO
U M 1.0 // Automatik aktiv
)
= A 4.0
...
BE

So könnte das Programm aussehen. Ein kleiner Schönheitsfehler ist nun noch da, achte drauf, das Du Merker nimmst, die nicht in der Hardwarekonfiguration auf remanent gesetzt sind! Alternativ, kannst Du auch den CPU-Anlauf überwachen. Im OB1 aus den Lokaldaten kannst Du den CPU-Status (Neustart, Kaltstart...) auswerten. Hieraus generier ich mir eine Flanke zum zusätzlichen initialisieren!

Grüße
Michael
 
@Michael: Lieben Dank für dein sehr aussagekräftiges Programmbeispiel und deine Bemühungen - denke damit komme ich jetzt super klar!

@All: Vielen Dank auch an die anderen mit ihren (für mich) sehr wertvollen Tipps...
 
Zurück
Oben