Hallo Willibald,
Ich will mal versuchen dir einige Tips zu deinem Problem zu geben.
Als erstes würde ich die zulässigen Werte für die erlaubten Betriebsarten anders wählen.
zb.
Wert = 0 bedeutet „Anwahl nicht möglich“
Wert = 1 bedeutet „Betriebsart 1"
Wert = 2 bedeutet „Betriebsart 2"
Wert = 3 bedeutet „Betriebsart 3"
Wert = 4 bedeutet „Betriebsart 4"
usw.
Der Vorteil ist im Fall dass eine neue, noch nicht vorhandene "Betriebsart"
hinzugefügt wird, deine Werte-Skala nach oben "offen" bleibt und beliebig viele
Betriebsarten hinzugefügt werden können.
Im OP17 würde ich die Variable "Betriebsart" (zb. DB1.DBB0) mit einer Symboliste verbinden.
Die Liste "Betriebsart" würde dann folgendermassen aussehen.
Wert;Textsymbol
0 = "Anwahl nicht möglich"
1 = "Betriebsart 1"
2 = "Betriebsart 2"
3 = "Betriebsart 3"
4 = "Betriebsart 4"
Ich geh mal davon aus, dass dir bekannt ist wie die Symbollisten in Protool erstellt und mit einer Variabeln verbunden werden.
Der Bediener kann dann mittels "SHIFT" und Pfeiltaste "UP" / "DOWN" die Betriebsart auswählen.
So, jetzt weiter zum S7 Programm....
Als erstes ist es wichtig zu wissen wann die Betriebsart gewechselt wurde.
Dafür würde ich dir empfehlen mit einer Hilfsvariabeln zu arbeiten.
Nennen wir sie einfach mal.... "MB0 = Aktuelle Betriebsart der Maschine"
MB 0 ist also die Betreibsart in der die Maschine augeblicklich arbeitet.
In deinem Programm müsstest du überall DB1.DBB0 in MB 0 umändern.
MB 0 muss verschieden von 0 sein, damit die Maschine eingeschaltet werden kann.
Wie kann man jetzt einen Betriebsarten-Wechsel im Progarmm abfangen? Ganz einfach im OB1.
Es bietet sich an, im OB 1 einen kleinen Test zu machen, der dir sagt dass einen neue Eingabe gemacht wurde.
L DB1.DBB0
L MB 0
<>I
CC FC1
Im FC1 kann jetzt die eigentliche Überprüfung der Bedingungen für die einzelnen Betriebsarten stattfinden.
FC1
Netzwerk 1 :Sprungverteiler für OP17-Eingabe "Betriebsart"
L DB1.DBB 0
SPL ERR //Wert liegt ausserhalb des zulässigen Bereichs
SPA ERR //Wert=0 und ist ebenfalls unzulässig.
SPA BA1 //Wert=1 für "Betriebsart 1" / Sprung zur Marke "BA1"
SPA BA2 //Wert=2 für "Betriebsart 2" / Sprung zur Marke "BA2"
SPA BA3 //Wert=3 für "Betriebsart 3"
SPA BA4 //Wert=4 für "Betriebsart 4"
ERR: SPA END
Netzwerk 2 :Bedingungen für "Betriebsart 1"
BA1: SET
U(
//Hier stehen deine Bedingungen für "Betriebsart 1"
)
SPBN END
L DB1.DBB0
T MB 0
BEA
Netzwerk 3 :Bedingungen für "Betriebsart 2"
BA2: SET
U(
//Hier stehen deine Bedingungen für "Betriebsart 2"
)
SPBN END
L DB1.DBB0
T MB 0
BEA
Netzwerk 4 :Bedingungen für "Betriebsart 3"
BA3: SET
U(
//Hier stehen deine Bedingungen für "Betriebsart 3"
)
SPBN END
L DB1.DBB0
T MB 0
BEA
Netzwerk 5 :Bedingungen für "Betriebsart 4"
BA4: SET
U(
//Hier stehen deine Bedingungen für "Betriebsart 4"
)
SPBN END
L DB1.DBB0
T MB 0
BEA
Netzwerk 6 :Wenn die Bedingungen nicht erfüllt waren um eine Änderung zu übernehmen.
END: NOP 0
L 0
T DB1.DBB0 // Die Eingabe im OP wird überschrieben und der Text „Anwahl nicht möglich“ angezeigt.
T MB 0 // Die Hilfsvariable "Aktuelle Betriebsart" wird auch auf 0 gesetzt. !
BE
So müsste es eigentlich funktionieren.
Zu bedenken ist lediglich die Tatsache dass die Komunikation zwischen S7 und OP17 etwas Zeit braucht
und der Text „Anwahl nicht möglich“ erst nach 1-2 Sekunden angezeigt wird.
Mit der Protool Variabeln-Eigenschaft "Erfassungszyklus" kann man das aber bis auf 0,2 Sek reduzieren.
(Protool Voreinstellung ist hier immer 1 Sek.)
Ich hoffe ich konnte dir hiermit einige gute Tips geben.....
Gruss
Guido