3 Word Variablenwerte mit einer Word Variable weiterreichen

Luzie

Level-1
Beiträge
77
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

da ich ja noch immer weiterlernen muss bin ich wieder an einen Punkt angelangt wo ich nicht weiss ob das überhaupt so geht wie ich es mir Vorstelle.
Da ich über Modbus drei verschieden Zeitwerte mit nur einer Variable an die Visu übermitteln möchte da die Darstellung auf den Zustand bezogen ist, und einem Feld angezeigt werden soll, hatte ich folgendes Versucht und bin dabei gescheitert.

Code:
Zeit := (Filterzeit > 16#000  AND Zustand = 0);
Zeit := (Rueckspzeit > 16#000 AND Zustand = 4);
Zeit := (Klarspzeit > 16#000 AND Zustand = 6);

geht das Überhaupt auf diese Weise? Da dies sehr Speziell ist findet man dafür keine Lösung im web. Daher Frage ich hier einmal nach.

Danke euch
 
Vielleicht mit einer CASE- Anweisung:

Code:
 CASE Zustand OF
0: Zeit:= Filterzeit;

4: Zeit:= Rueckspuelzeit;

6: Zeit:= Klarspuelzeit;

ELSE

Zeit:=16#0000;

END_CASE;

CASECASE-Anweisung

Mit der CASE-Anweisung kann man mehrere bedingte Anweisungen mit derselben Bedingungsvariablen in ein Konstrukt zusammenfassen.
Syntax:

CASE<Var1>
OF
<Wert 1>: <Anweisung 1>
<Wert 2>: <Anweisung 2>
<Wert3, Wert4, Wert5: <Anweisung 3>
<Wert6 .. Wert10 : <Anweisung 4>
...
<Wert n>: <Anweisung n>
ELSE <ELSE-Anweisung>
END_CASE;

Eine CASE-Anweisung wird nach folgendem Schema abgearbeitet:

  • Wenn die Variable in <Var1> den Wert <Wert i> hat, dann wird die Anweisung <Anweisung i> ausgeführt.
  • Hat <Var 1> keinen der angegebenen Werte, dann wird die <ELSE-Anweisung> ausgeführt.
  • Wenn für mehrere Werte der Variablen, dieselbe Anweisung auszuführen ist, dann kann man diese Werte mit Kommatas getrennt hintereinander schreiben, und damit die gemeinsame Anweisung bedingen.
  • Wenn für einen Wertebereich der Variablen, dieselbe Anweisung auszuführen ist, dann kann man den Anfangs- und Endwert getrennt durch zwei Punkte hintereinanderschreiben, und damit die gemeinsame Anweisung bedingen.
Beispiel.:
CASE INT1 OF
1, 5: BOOL1 := TRUE;
BOOL3 := FALSE;
2: BOOL2 := FALSE;
BOOL3 := TRUE;
10..20: BOOL1 := TRUE;
BOOL3:= TRUE;
ELSE
BOOL1 := NOT BOOL1;
BOOL2 := BOOL1 OR BOOL2;
END_CASE;
 
Zuletzt bearbeitet:
Danke Dingo,

es kann so einfach gehen. Ich musste die Eingangsvariable nur von WORD in ein LINT umwandeln und schon ging das auch mit der CASE Anweisung. nun klappt es so wie ich es mir vorgestellt hatte.

gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da ich . . . drei verschiedene Zeitwerte mit nur einer Variable an die Visu übermitteln möchte da die Darstellung auf den Zustand bezogen ist, und einem Feld angezeigt werden soll, hatte ich folgendes Versucht . . .
Trotz Haralds und Dingos Antworten habe ich leider immer noch nicht geschnallt, was Du meinst.
Woran erkennt man in der Visu die Zustands-abhängige Bedeutung?
Wird der Zustand denn noch zusätzlich in einer separaten Variablen übermittelt oder wird er mit dem TemperaturWert zusammen gewurschtelt und übermittelt?
 
Hallo Heinileini,

Hintergrund: Abfrage der Zustände eine Automatik 6 Wege Ventil, dort übergebe ich die die einzelnen Zustände an die Visu damit ich weiß in welcher Pos. das Ventil gerade steht. Dies wir mit dem Zustandsautomaten geregelt. Da ich aber zusätzlich noch wissen möchte wie lange bleibe ich in diesem Zustand brauchte ich noch die Zeitangabe. Da diese aber an einer bestimmten Pos. in der Visu stehen sollte ging es nur so.
siehe Bild.
Anzeige.JPG
Zustand =0
zustand1.JPG
Zustand =1 oder 2

ich hoffe du hast nun den Hintergrund verstanden warum so
 
nur zeigt er mir nun die Filterzeit auch in allen anderen zuständen an Sind 10 davon. das soll er aber nicht.
Das liegt daran, daß Deine Frage/Aufgabe missverständlich und unvollständig formuliert war. Deshalb habe ich nur angedeutet wie Du die Zuweisung abhängig von 3 Zuständen machen könntest. Wenn Du eigentlich 10 Zustände hast, dann könntest Du das Beispiel selber entsprechend erweitern.
Jetzt wo klar ist was Du eigentlich meintest ist die Verwendung von CASE mehr zu empfehlen als IF..THEN..ELSIF.

Ich musste die Eingangsvariable nur von WORD in ein LINT umwandeln und schon ging das auch mit der CASE Anweisung.
Warum LINT - hätte ein INT nicht auch gereicht? Ist Dein WORD "Zustand" nicht sowieso eigentlich ein INT?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok ich gebe zu ich habe am Anfang wo etwas Falsch angefangen, hatte die meisten Sachen mit LINT versehen, aber um das zu ändern würde wieder ewig dauern. daher belasse ich das jetzt so wie es ist.
Im nächsten Projekt werde ich besser darauf achten.
Bin halt noch Anfänger und lerne immer wieder was neues Dazu.
 
Zurück
Oben