TIA RS232 Anweisung Send_P2P Ansteuerung Rührer

zaprena123

Level-1
Beiträge
24
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

leider hänge ich an den Anweisungen für die P2P-Kommunikation via RS232.
Verstehe ich die Anweisung Send_P2P richtig, dass ich unter der Variable BUFFER die Daten angebe die ich an das CM senden will?
Mit dem CM wird ein Rührer angesteuert, die RS 232 Schnittstellenparameter hab ich bereits angepasst.
Im Handbuch des Rührers finde ich weiter den Befehl "Rxxxx\r\n", wobei xxxx die Drehzahl des Rührers in rpm sein sollen.
Wie kann ich denn "Rxxxx\r\n" in der Variablen Buffer verpacken? Buffer muss ja ein Array aus gleichen Datentypen sein, ich komme leider nicht weiter...
Oder muss ich den Befehl dann in einzelne Teile zerlegen?
Habe das Gefühl es ist super einfach, aber hänge irgendwie fest...


Macht es Sinn Kriterien festzulegen, wann eine Nachricht anfängt und endet?

Danke schonmal!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
An den Send_P2P hängst du idealerweise ein Array of Byte dran.
dann schiebst du den String in das Array
1697695811739.png

Code:
Strg_TO_Chars(Strg   := "Datenbaustein_1"."string",
              pChars := 0,
              Cnt    => "Datenbaustein_1".länge,
              Chars  := "Datenbaustein_1".bytearray);

jetzt ist aber vermutlich \r\n als CR LF zu senden. das heisst du müsstest den String verkürzen. die länge auswerten und an die folgenden bytes im Array noch ein CR UND LF einfügen. Die länge + die zwei zeichen muss du dann als Sendelänge am Send P2P angeben.

das würde dann so aussehen
Code:
Strg_TO_Chars(Strg   := "Datenbaustein_1"."string",
              pChars := 0,
              Cnt    => "Datenbaustein_1".länge,
              Chars  := "Datenbaustein_1".bytearray);

"Datenbaustein_1".bytearray["Datenbaustein_1".länge] := 16#0D;
"Datenbaustein_1".bytearray["Datenbaustein_1".länge + 1] := 16#0A;

am besten beobachtest du das mit einem Terminalprogramm wie REALTERM oder ähnlichem.

Zu bedenken ist noch. Will er die RPM als Zeichen oder als Zahl. entsprechend müsstest du noch etwas mehr wandeln.
 
Zuletzt bearbeitet:
An den Send_P2P hängst du idealerweise ein Array of Byte dran.
dann schiebst du den String in das Array
Anhang anzeigen 72251

Code:
Strg_TO_Chars(Strg   := "Datenbaustein_1"."string",
              pChars := 0,
              Cnt    => "Datenbaustein_1".länge,
              Chars  := "Datenbaustein_1".bytearray);

jetzt ist aber vermutlich \r\n als CR LF zu senden. das heisst du müsstest den String verkürzen. die länge auswerten und an die folgenden bytes im Array noch ein CR UND LF einfügen. Die länge + die zwei zeichen muss du dann als Sendelänge am Send P2P angeben.

das würde dann so aussehen
Code:
Strg_TO_Chars(Strg   := "Datenbaustein_1"."string",
              pChars := 0,
              Cnt    => "Datenbaustein_1".länge,
              Chars  := "Datenbaustein_1".bytearray);

"Datenbaustein_1".bytearray["Datenbaustein_1".länge] := 16#0D;
"Datenbaustein_1".bytearray["Datenbaustein_1".länge + 1] := 16#0A;

am besten beobachtest du das mit einem Terminalprogramm wie REALTERM oder ähnlichem.

Zu bedenken ist noch. Will er die RPM als Zeichen oder als Zahl. entsprechend müsstest du noch etwas mehr wandeln.
Danke dir! Die RPM sollten als Zahl ankommen, das passt dann aber mit deinem Code oder?
Und noch eine Frage zu dem letzten Teil, wenn ich das mit := 16#0D und 16#0A aufnehme, nehme ich denn bei Datenbaustein_1.string das \r\n aus dem Startwert raus? Weil dann ist es ja doppelt gemoppelt oder?

Danke schonmal :)
 
Genau der Startwert enthält dann nur die Zeichen ohne CRLF.
Ob es eine Zahl oder ein Zeichen ist sieht man dem Code jetzt nicht an. da ich ja einfach xxxx gesetzt habe.
Aber geh mal davon aus dass die Zahl als Zeichen gewünscht ist.
 
Zurück
Oben