Betriebsartumschaltung...

schnecke

Level-1
Beiträge
148
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich habe da mal eine grundsätzliche Frage, wie das am Sinnvollsten gelöst werden kann.

In einer Anlage soll es einen Hand- u. einen Automatikbetrieb geben. Sowohl der Hand- als auch der Automatikbetrieb sind in einem separaten FC programmiert.

Wenn nun von der einen in die andere Betriebsart umgeschaltet wird, so müssen ja auch die Ausgänge, die in der jeweiligen Betriebsart gesetzt waren, wieder rückgesetzt werden.

Wie macht man das am besten, denn die zuvor gewählte Betriebsart wird nach der Umschaltung in die andere Betriebsart ja nicht mehr aufgerufen?

Vielen Dank!
 
In einer Anlage soll es einen Hand- u. einen Automatikbetrieb geben. Sowohl der Hand- als auch der Automatikbetrieb sind in einem separaten FC programmiert.

Wenn nun von der einen in die andere Betriebsart umgeschaltet wird, so müssen ja auch die Ausgänge, die in der jeweiligen Betriebsart gesetzt waren, wieder rückgesetzt werden.

Wie macht man das am besten, denn die zuvor gewählte Betriebsart wird nach der Umschaltung in die andere Betriebsart ja nicht mehr aufgerufen?

Du musst im Prinzip für jeden Ausgang wissen wie er sich Betriebsartenwechsel verhalten soll.
Soll der Zustand erhalten bleiben, dann verwendest du S/R-Glieder zur Ansteuerung, soll er auf Null gehen, dann nimmst du "=".

Ich persönlich bin kein großer Freund dieser Baustein-Umschaltung. Die Ausgangsansteuerung packe ich meist in einen eigenen Baustein und verknüpfe die Betriebsarten entsprechend.


Gruß
Dieter
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich persönlich bin großer Freund dieser Baustein-Umschaltung. Die Ausgangsansteuerung packe ich meist in einen eigenen Baustein und verknüpfe die Betriebsarten entsprechend.
Gruß
Dieter

Genau so ist das. Ich finde die "Bausteinumschaltung" ist eine schlechte Lösung.
 
Habe das noch nie so gesehen, dass man zwei Abläufe programmiert für Hand und Auto. Ist das nicht doppelte Arbeit? Gut, je nach Anwendung macht das vielleicht Sinn, aber den sehr ich bei sowas nicht. Ich tendiere da mehr zu einem Auto + Hand Pfad pro Ausgang. Entweder Auto mit diesen Bedingungen oder hand mit anderen.
 
Habe das noch nie so gesehen, dass man zwei Abläufe programmiert für Hand und Auto. Ist das nicht doppelte Arbeit? Gut, je nach Anwendung macht das vielleicht Sinn, aber den sehr ich bei sowas nicht. Ich tendiere da mehr zu einem Auto + Hand Pfad pro Ausgang. Entweder Auto mit diesen Bedingungen oder hand mit anderen.

da stimme ich zu!

Gruß
Tommi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe das noch nie so gesehen, dass man zwei Abläufe programmiert für Hand und Auto. Ist das nicht doppelte Arbeit? Gut, je nach Anwendung macht das vielleicht Sinn, aber den sehr ich bei sowas nicht. Ich tendiere da mehr zu einem Auto + Hand Pfad pro Ausgang. Entweder Auto mit diesen Bedingungen oder hand mit anderen.

Vielen Dank für eure Antworten...

1) Verwendet man also z.B. einen Auto- und Handpfad pro Ausgang, so darf dieser Ausgang jedoch nicht über S/R-Glieder, sondern nur über eine Zuweisung angesteuert werden, richtig?

2) Für den Fall, dass bereits eine Betriebsartumschaltung mittels zwei Bausteinen besteht und darin auch Ausgänge über S/R-Glieder angesteuert werden - wie können dann diese Ausgänge wieder rückgesetzt werden, wenn eine andere Betriebsart angewählt wurde? Ich meine, das Problem ist ja dann, dass der Baustein, in dem noch Ausgänge gesetzt sind, gar nicht mehr aufgerufen wird... Kann man dann z.B. im OB1 programmieren, dass mit negativer Flanke vom Betriebsartschalter (z.B. Automatikbetrieb) die noch aktiven Ausgänge rückgesetzt werden?
 
Wie wärs denn damit:

1.
Doppelzuweisungen bei Ausgängen sind zu vermeiden! Klare Zustände sind für eine Funktion wichtig! Nimm statt der Ausgänge Merker und weise die in einem separaten Baustein den etsprechenden Ausgängen zu.

2.
Betriebsarten, setzte bzw. rücksetze Dir für die Betriebsart einen Merker z. B. HAND (R M1.0), AUTOMATIK (S M1.0)
Farge je nach Betriebsart Deine S/R-Glieder ab und versetze diese auf den Anfangswert (initialisieren). Zum Schluss weist Du je nach Betriebsart deine S/R-Glieder mit UND (Betriebsart-Merker) dem entsprechenden Ausgang zu.

z. B:

// Initialisieren

U M 1.0 // "0" = Hand; "1" = Automatik
R M 20.0 // Irgend ein Merker aus der Betriebsart HAND
...
UN M 1.0 // "0" = Hand; "1" = Automatik
R M 40.0 // Irgend ein Merker aus der Betriebsart HAND
...

// Ausgang zuweisen

O(
U M 20.0 // Irgend ein Merker aus der Betriebsart HAND
UN M 1.0 // "0" = Hand; "1" = Automatik
)
O(
U M 40.0 // Irgend ein Merker aus der Betriebsart HAND
U M 1.0 // "0" = Hand; "1" = Automatik
)
= A 4.0
 
Zuletzt bearbeitet:
wenn nicht Hand dann Automatik halte ich für bedenklich
Ein Wechsel der Betriebsart sollte bewusst erfolgen sprich mit Druck auf einen Taster.
was passiert z. Bsp. wenn das Kontaktelement vom Taster abfällt ( dann würde dadurch sofort die Betriebart gewechselt werden).
grüsse
Udo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn nicht Hand dann Automatik halte ich für bedenklich

Hi Udo,
ich denke das kommt auf die Anwendung an!

Zudem hat die Betriebsart auch nichts mit dem grundsätzlichen Personenschutz der Anlage über einen entsprechenden Sicherheitskreis (NOT-AUS, Schutztüren, ...) zu tun.
 
Hi Udo,
ich denke das kommt auf die Anwendung an!

Zudem hat die Betriebsart auch nichts mit dem grundsätzlichen Personenschutz der Anlage über einen entsprechenden Sicherheitskreis (NOT-AUS, Schutztüren, ...) zu tun.

Hallo Michael,

au man, dazu könnten wir ein eigenes Thema aufmachen.

Was ist eigentlich eine Betriebsart?

Hand/Automatik - nur bei aktiven Schutzeinrichtungen - sind für den einen Betriebsarten, für den anderen Funktionen.


Normalbetrieb/Sonderbetrieb - das erste bei aktiven- das zweite bei teilweise inaktiven Schutzeinrichtungen, sind auf
jeden Fall Betriebsarten.

Dann wird auch noch zwischen "Betriebsart Automatik" (nur angewählt) und "Automatikbetrieb" (läuft) unterschieden.

Schön kompliziert.

Gruß
Tommi
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
je nach größe des Projektes kann auch ein FB dazu dienen.

zB
Code:
Call FBxx
  Freigabe:   //  not-aus, bereichx,usw
  Hand/Auto:   //  0=auto   1=hand  
  Handein:      //   taster x oder m vom prog.
  Autoein:      //   m vom prog.
  Rückmeldung:   //   zb ini ventil zu, motorschütz angezogen...
  Aktor:        //   ventil ein, motor ein.....
  Status:      //   Byte für visu  ,   ein,aus,störung,.......
  Störung:    //    Störungsbit
 
Prinzipiell funktioniert eine Struktur wie diese fast immer:

Automatikmerker zuweisen:
Code:
UN #Automatik
L 0
T #Schrittkettenmerkerwort

... Schrittkette...

U #Schritt_5
O #Schritt_6
= #Automerker_Ventil_A

Handmerker zuweisen:
Code:
U #Hand
U #Taste_Ventil_A
= #Handmerker_Ventil_A

Falls es noch einen Ablauf für die Grundstellung gibt:
Code:
UN #Grundstellungsfahrt
L 0
T #Schrittkettenmerkerwort

... Schrittkette ...

U #Schritt4
= #GS_Merker_Ventil_A

Ausgang zuweisen:
Code:
U #Automerker_Ventil_A
O #Handmerker_Ventil_A
O #GS_Merker_Ventil_A
= #Ausgang_Ventil_A

Ich mache normalerweise einen Baustein für Automatik, einen für Grundstellung, und einen für den Ausgang. In dem Baustein für den Ausgang mache ich meistens am Anfang die Handfunktion. Das sind in der Regel ja nicht so viele Zeilen Code. Wenn die Handfunktion aufwändiger ist, mache ich dafür auch schon mal einen eigenen Baustein. Ach ja, die Betriebsarten werden in einem eigenen Betriebsarten-Baustein gehandelt.
 
Lieben Dank für die Hilfe und Beispiele!

2.
Betriebsarten, setzte bzw. rücksetze Dir für die Betriebsart einen Merker z. B. HAND (R M1.0), AUTOMATIK (S M1.0)
Farge je nach Betriebsart Deine S/R-Glieder ab und versetze diese auf den Anfangswert (initialisieren). Zum Schluss weist Du je nach Betriebsart deine S/R-Glieder mit UND (Betriebsart-Merker) dem entsprechenden Ausgang zu.

z. B:

// Initialisieren

U M 1.0 // "0" = Hand; "1" = Automatik
R M 20.0 // Irgend ein Merker aus der Betriebsart HAND
...
UN M 1.0 // "0" = Hand; "1" = Automatik
R M 40.0 // Irgend ein Merker aus der Betriebsart HAND
...

// Ausgang zuweisen

O(
U M 20.0 // Irgend ein Merker aus der Betriebsart HAND
UN M 1.0 // "0" = Hand; "1" = Automatik
)
O(
U M 40.0 // Irgend ein Merker aus der Betriebsart HAND
U M 1.0 // "0" = Hand; "1" = Automatik
)
= A 4.0

1) Müsste es in den Zeilen hinter "U M1.0" nicht heißen: Irgend ein Merker aus der Betriebsart AUTOMATIK ?

2) Diese Art von Programmierung geht aber doch nicht mehr, wenn schon je ein FC für Hand- u. Automatikbetrieb besteht, in dem jeweils die Ausgänge gesetzt werden, oder? Denn für diesen Fall war ja meine Frage, wie kann ich dann bei einer Betriebsartumschaltung die gesetzten Ausgänge rücksetzen, weil ja nach der Umschaltung in die andere Betriebsart die FC nicht mehr aufgerufen wird. Wie gesagt die Ausgangszuweisung besteht bereits in den einzelnen FC's!

Können für diesen Fall einfach im OB1 die Ausgänge rückgesetzt werden, z.B.

UN M1.0 // Betriebsart Automatik abgewählt
R M20.0 // Irgend ein Merker aus der Betriebsart AUTOMATIK

Würde das so klappen?
 
Hallo Tigerente,

ja - stimmt. Aber das Programm ist nun so programmiert. Mit dem entsprechenden Wissen würde ich es jetzt auch so programmieren, wie von euch vorgeschlagen...

Aber dieses Programm ist schon Bestand und daher (nur für diesen spez. Fall) nochmals meine Frage:

Wie kann ich bei einer Betriebsartumschaltung (mit zwei FC's) die gesetzten Ausgänge einer angewählten Betriebsart rücksetzen, weil ja nach der Umschaltung in die andere Betriebsart der FC nicht mehr aufgerufen wird. Wie gesagt, die Ausgangszuweisung besteht bereits in den einzelnen FC's!

Können für diesen Fall einfach im OB1 die Ausgänge rückgesetzt werden, z.B.

UN M1.0 // Betriebsart Automatik abgewählt
R M20.0 // Irgend ein Merker aus der Betriebsart AUTOMATIK

Würde das so klappen?

Danke...
 
1) Müsste es in den Zeilen hinter "U M1.0" nicht heißen: Irgend ein Merker aus der Betriebsart AUTOMATIK ?

Jepp, ist'n Copy & Paste Fehler, sorry.

Können für diesen Fall einfach im OB1 die Ausgänge rückgesetzt werden, z.B.

UN M1.0 // Betriebsart Automatik abgewählt
R M20.0 // Irgend ein Merker aus der Betriebsart AUTOMATIK

Würde das so klappen?

Nicht unbedingt, denn dann würdest Du ja permanent den Ausgang zurücksetzen!

Ich würde allle Ausgangszuweisungen in den Betrtiebsartenbausteinen durch Merker oder DB-Bit's ersetzen und diese dann wie zuvor beschrieben initialisieren. Die Ausgänge weist Du dann verknüpft mit der jeweiligen Betriebsart in einen eigenen Baustein zu. Ich würde das nicht im OB1 machen, das wird zu unübersichtlich. In der Regel werden von hier die entsprechenden Strukturen (Bausteine) des Programms aufgerufen!
 
Nicht unbedingt, denn dann würdest Du ja permanent den Ausgang zurücksetzen!

Ich würde allle Ausgangszuweisungen in den Betrtiebsartenbausteinen durch Merker oder DB-Bit's ersetzen und diese dann wie zuvor beschrieben initialisieren. Die Ausgänge weist Du dann verknüpft mit der jeweiligen Betriebsart in einen eigenen Baustein zu. Ich würde das nicht im OB1 machen, das wird zu unübersichtlich. In der Regel werden von hier die entsprechenden Strukturen (Bausteine) des Programms aufgerufen!

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?
 
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?


Hört sich schon ganz gut an. Aber die Merker musst du schon explizit zurücksetzen, das passiert nicht zwangsweise automatisch. Natürlich nur, wenn du es auch so programmierst.

Um deine eigentliche Frage zu beantworten: Wenn du wenig Arbeit damit haben willst und dich nicht dafür interessierst eine sauber Struktur bzw. Lesbarkeit deines Programms zu haben, kannst du es "Quick & dirty" programmieren. Z.B. in den beiden Betriebsarten FCs, im ersten Zyklus des Aufrufs alle Ausgände zurücksetzten via Flanke. Dafür bräuchtest du dann nur einen Initialisierungs Merker:

Code:
u #Automatik_init               // Automatikbetrieb wurde initialisiert
spb LOS                             // Überspringe dads Rücksetzen der Ausgänge, wenn schon initialisiert
set                                    // VKE auf true setzen
R A0.0                               // Ausgänge zurücksetzen
R A0.1
...
// alternativ, wenn alle Ausgänge zurückgesetzt werden sollen ginge auch:

L 0
T AW0                               // Vorsicht, hiermit setzt du alle Ausgänge von A0.0 bis A1.7 zurück!

set 
S #Automatik_init              // Initialisierungsmerker setzen, damit nicht jeden Zyklus alles zurückgesetzt wird
R #Hand_init                     // Initialisierungsmerker aus dem Hand-FC natürlich nicht vergessen
LOS: nop 0                        // ab hier dann Automatikablauf.....

...

Andere Möglichkeit:

Code:
// in einem anderen FC/OB über den Betriebsartenmerker alles rücksetzen

u #Automatik_Merker        // Merker für Automatik ein
fp #Flanken_Merker
R A0.0
R A0.1
...                                    // das Gleiche dann für Hand und vor Allem VOR dem Aufruf der Betriebsarten FCs!

Aber wie gesagt, das ist nicht grad die eleganteste Art dieses Problem zu lösen. Besser ist es auf jeden Fall in den Betriebsarten FCs Merker zu verwenden und diese dann in einem anderen FC an die Ausgänge zu verknüpfen. Es sollte nach Möglichkeit ein Ausgang nur an einer Stelle im Programm beschrieben werden und dann am Besten nur mit "=".
 
Zurück
Oben