I
Ino91
Guest
-> Hier kostenlos registrieren
Hello Community,
Ich habe hier ein kleines Problem mit bedingten Sprüngen...und ich bin wahrscheinlich einfach nur blind für den Fehler.
Folgende Problemstellung:
Es sollen 3 Transformatoren über eine Sollwerteingabe entweder einzeln oder synchron gesteuert werden.
Dafür gibt es auf dem verwendeten Touchpanel jeweils ein Bild für die Einzelsteuerungen und ein Bild für die Gesamtsteuerung, wo entsprechend jeweils die Einzel- bzw die Gesamtsollwerteingabe stattfindet.
Nun soll, wenn das Bild "Gesamtsteuerung" auf dem Touchpanel aktiv ist, ein Merker gesetzt werden.
Wenn dieser Merker aktiv ist, soll der eingegebene Gesamtsollwert die Einzelsollwert überschreiben und dann an den Slave weitergeben.
(einfache if-Anweisung in C)
Wenn der Merker nicht aktiv ist, sollen die Einzelsollwerte nicht überschrieben werden.
Eigentlich eine relativ einfache Geschichte, die jedoch nicht so recht hinhauen will.
Ich hatte mir das so vorgestellt: Wenn der Merker "Gesamtsteuerung" aktiv ist, wird ein bedingter Sprung ausgeführt, nach dem der Gesamtsollwert in die Einzelsollwert-Doppelwörter überschrieben wird, die für weitere Berechnungen verwendet werden.
Wenn nicht, wird ein anderer Sprung ausgeführt, der dieses Überschreiben überspringt und die Einzelsollwerte werden in diese Berechnungs-Doppelwörter übertragen.
Folgender Code in AWL ist bisher dabei herausgekommen:
Gesamtsollwertweitergabe:
U M 0.0 //Merker Gesamtsteuerung
SPB then
UN M 0.0
SPB else
then: L MD 100 //Gesamtsollwert
T MD 62 //"Berechnungsdoppelwort" L1
L MD 100
T MD 66
L MD 100
T MD 70
else: NOP 0
^- Hier wird anscheinend der "then"-Teil übersprungen, obwohl nach "U M 0.0" das VKE = 1 ist. Heißt der Sprung auf "then" findet nicht statt, der Sprung auf else allerdings schon.
Der Merker M0.0 für die Gesamtsteuerung ist aber definitiv auf 1 gesetzt!
Einzelsollwert L1:
U M 0.0
SPB thL1
L MD 34 //Eingabe Einzelsollwert L1
T MD 62 //Berechnungsdoppelwort L1
thL1: L MD 62
DTR
L 8.428261e-001 //Normierungsfaktor für Sollwertausgabe (durch Messreihe ermittelt)
*R
RND
T MD 50
L MW 52 //Laden des Lowwords, da Doppelwörter lediglich für Gleitpunktoperationen gebraucht werden. Zahlenspektrum ~0-3000)
T MW 10 //Transfer in das Merkerwort, das den Sollwert schlussendlich an den Slave weitergibt
Nun ist die Situation folgende:
Wenn ich im Bild Gesamtsteuerung bin und einen Sollwert für alle 3 Phasen eingebe, passiert schlichtweg nichts.
Wenn ich nun Sollwerte für die einzelnen Phasen eingebe, überschreibt dieser Sollwert den Gesamtsollwert immer und die Trafos fahren so, dass sie die Einzelsollwerte erfüllen.
Unpraktisch, wenn man für alle 3 Trafos meinetwegen 1,5 kA einstellen möchte und sie aber auf 0 fahren, weil in den Bildern für die Einzelsollwerte noch 0 steht.
Ich bin in AWL noch nicht so bewandert, kann aber relativ gut in C / C++ programmieren...nur hilft mir das hier relativ wenig weiter^^
Gruß
Melvin
Kann gelöscht werden. Ich habe eine andere Lösung gefunden.
Es lag tatsächlich daran, dass dieses eine Bit nicht gesetzt wurde und das VKE doch 0 war.
Sorry.
Zuletzt bearbeitet: