Serielle Kommunikation, ReceivedString als Transition?

Monty87

Member
Beiträge
23
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
ich habe wiedermal ein Problem mit meiner RS232 Kommunikation

In einem dauerhaft aufgerufenem Programm (namens Datenuebertragung)benutze ich die FBs SendString und ReceiveString.
Dieses Programm wird dann von einer Ablaufsteuerung bedient:
Zuerst sende ich in einem Schritt einen Befehl. Bevor der nächste Schritt abgearbeitet werden kann muss ich nun erst eine Antwort des RS232 Gerätes abwarten. Dazu wollte ich die boolsche Ausgangsvariable ReceivedString des FBs ReceiveString als Transition verwenden. Also nur wenn Datenuebertragung.ReceivedString TRUE ist solls weiter gehen. Das will aber nicht finkionieren. Die Schrittkette hängt vor dieser Transition fest.

Dabei wird ReceivedString aber TRUE. Sonst würde der ReceiveCounter im Programm Datenuebertragung ja nicht funktionieren:
IF ReceivedString THEN
ReceiveCounter := ReceiveCounter + 1;
END_IF

Das versteh ich nicht ganz...
Wieso kann ich diese Variable nicht als Transition in der Ablaufsteuerung verwenden?

mfg
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.621
Punkte Reaktionen
3.478
Vielleicht ist die nur einen Zyklus lang da und das reicht u.U. nicht für eine Transition.
Setze doch mal eine extra Variable

IF ReceivedString THEN
ReceiveCounter := ReceiveCounter + 1;
Receive_ok := True;
END_IF

Diese Variable nimmst du als Transitionsbedingung und setzt sie im Schritt nach der Transition wieder auf False.
 
OP
M

Monty87

Member
Beiträge
23
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hi
guter Tipp werde ich morgen mal versuchen.

Aber kurz ne Frage zu nem ganz anderen Thema:
Kann ich in der Visu durch das Klicken einer Schaltfläche einer IntegerVariable einen festen Wert zu weisen?

Der Sinn ist, in dieser Variable sollen nur bestimmte Werte möglich sein.
Durch Klicken auf die Schaltfläche A soll der Wert zb 1 werden und durch klicken der Schaltfläche B 2 usw. Im Prinzip wie eine Checkbox.

Habe mal ganz frech versucht einfach bei Variable toogeln einen Befehl reinzuschreiben (i_Typ:= 1). Das klappt wohl nicht^^
aber vielleicht gibt es einen anderen Trick oder muss ich einen aufwendigen Block schreiben der das mit boolschen Variablen steuert... das wäre ganz schön Aufwand...
 
OP
M

Monty87

Member
Beiträge
23
Punkte Reaktionen
0
Hi,

tatsächlich, mit einer Variable die länger TRUE ist funktioniert es jetzt. Vielen Dank.

zu dem anderen Problem hat scheinbar keiner eine Idee? Dann werde ich wohl nicht drum herrumkommen irgendetwas selber zu basteln..

mfg
 

StructuredTrash

Well-known member
Beiträge
1.098
Punkte Reaktionen
290
Wenn Du mit den Schaltflächen die einzelnen Bits einer Integervariablen tastest, ist der Aufwand überschaubar.
Code:
VAR
   varButtons:WORD;  (* Schaltfläche 1 tastet varButtons.0, Schaltfläche 2 varButtons.1, Schaltfläche 3 varButtons.2 usw *)
   varIntValue:INT;
END_VAR

CASE varButtons OF
   2#00000001: varIntValue:=1;
   2#00000010: varIntValue:=2;
   2#00000100: varIntValue:=3;
(* usw. *)
END_CASE
 
Oben