Problem mit bedingten Sprüngen

I

Ino91

Guest
Zuviel Werbung?
-> 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:
Hallo,
mir fehlt da ein bißchen die Info, was es mit dem M0.0 auf sich hat. Anscheinend hat der in den beiden Code-Teilen eine ganz unterschiedlich Funktion.
Dann ... welche Variablen werden durch die Eingabefelder der jeweiligen Visu-Seiten beschrieben ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann gelöscht werden.
Warum soll das gelöscht werden? :confused:

Das Forum ist doch nicht nur für Deine Probleme zuständig.
Vlt. kommt ja mal ein Anderer mit einem ähnlichen oder gar gleichen Problem und für den ist es doch dann super, dazu gleich eine Lösung zu finden.
(Vorausgesetzt hier bemüht mal jemand die Suche :roll:)
 
M0.0 war eigentlich als Merkerbit dafür gedacht, dass das Touchpanel mir mitteilt, wenn das Bild "Gesamtsteuerung" aktiv ist.
Das hat allerdings nicht so funktioniert, wie ich das dachte.
Meine Lösung dafür war eine anlagenspezifische Lösung:
Wenn ich den automatischen Regelbetrieb einschalte, bekomme ich dafür von der Anlage eine Rückmeldung.
Die Gesamtsollwerteingabe ist nur relevant, wenn ich diesen Regelbetrieb für alle 3 Slaves aktiv habe.
Daher habe ich, statt auf die Meldung des Touchpanels zu bauen, nun die Rückmeldung der Slaves genutzt.
Heißt:
Zunächst einmal ist der Gesamtsollwert der Wert, der in die Berechnungsgrößen eingetragen wird.
L MD 100 //Gesamtsollwert
T MD 62 //Berechnungswert L1
T MD 66 //Berechnungswert L2
T MD 70 //Berechnungswert L3

Wenn ich von allen 3 Slaves die Rückmeldung bekomme, der Regelbetrieb nach Sollwerteingabe sei aktiviert, gilt der Gesamtsollwert als Führungsgröße.
Wenn dies nicht der Fall ist, überschreiben die 3 Einzelsollwerte den Gesamtsollwert in der nachträglichen Berechnung. (Multiplikation mit einem Normierungsfaktor, der sich bei mir über eine Messreihe mit einem geeichten Messgerät ergeben hat)
Das Ganze sieht dann so aus:
U E 2.1 //Rückmeldung Regelbetrieb L1
U E 6.1 //Rückmeldung Regelbetrieb L2
U E 10.1 // Rückmeldung Regelbetrieb L3
SPB thL1 //bedingter Sprung zu "then L1"
L MD 34 //Einzelsollwerteingabe L1
T MD 62 //Berechnungswert L1 <- wird nur durchgeführt, wenn die obige Bedingung nicht erfüllt ist!
thL1: L MD 62 //Berechnungswert L1, entweder Gesamtsollwert oder bei Nichterfüllung der obigen Bedingung Einzelsollwerteingabe L1
DTR
L supergeheimer Normierungsfaktor
*R
RND
T MD 50 //Zwischenspeichern des Ergebnisses
L MW 52 //Laden des Lowwords - das verwendete Zahlenspektrum umfasst nur ~12 Bit, lediglich für die Normierung ist ein Doppelwort für Gleitpunktoperationen nötig
T MW 10 //Transferwort, das nach einer weiteren kurzen Verarbeitung zum Slave L1 geschickt wird

Soweit funktioniert alles einwandfrei ;)
 
Zurück
Oben