Char in Dint Wandeln (CP340 RS232)

Rauchegger

Level-2
Beiträge
377
Reaktionspunkte
22
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich bekomme von einen Sensor das Messergebnis über RS232 und speicher es mit dem Baustein FB2_P_REC in den DB20 ab! Der Sensor liefert ca. 20MW/Sec und sendet sie fortlaufend!

Der DB20 hat 18 Bytes im Format Char und das Empfangene ASCII Protokoll sieht so aus /0B0D00+xxxxxxumqq (xxxxxx: Abstandswert in μm)

Wie kann Ich nun diese Byte8-13 zusammen in eine DINT umwandeln?

Und wie kann Ich den CP340 dazu bewegen mir die Daten fortlaufend zu Aktualisieren?

Danke im vorraus

Mfg
 
Wie kann Ich nun diese Byte8-13 zusammen in eine DINT umwandeln?
- lege in einem DB eine Stringvariable an: sVal : STRING[6] := '000000' <-- 6 Zeichen Anfangswert festlegen
- kopiere die 6 Byte 'xxxxxx' in diesen sVal (indirekt mit AR1/AR2 oder mit SFC20 oder byteweise sVal[1]:=byte[8], sVal[2]:=byte[9]...)
- wandle den String sVal in DINT mit FC37 STRING_DI (Standard Library > IEC Function Blocks)

Und wie kann Ich den CP340 dazu bewegen mir die Daten fortlaufend zu Aktualisieren?
immer wieder den FB2_P_REC aufrufen, der sollte anzeigen wenn ein neues Telegramm empfangen wurde

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PS: kann es sein, daß Dein Empfangsbaustein nicht P_REC heißt sondern Du den FB2 P_RCV benutzt? Dieser zeigt am Ausgang NDR an, wenn Empfangsdaten vom CP34x in den DB übernommen wurden, an LEN steht die Anzahl empfangener Zeichen.
Zur Beschreibung Deines FB markiere den Baustein und drücke F1.

Harald
 
Wie immer gibt es viele Wege:
1. Du kannst die Foren-Suche bemühen, da findest du viele Beiträge, z.Bsp. das: http://www.sps-forum.de/showthread.php/39661-Byte-in-String-wandeln?highlight=String+wandeln

Duchstring war "String wandlen", es ginge auch "Char wandeln" usw.

2. Die einfachste Methode: Du greifst direkt absolut in den DB.
Du nimmst Byte 8, machst aus der Char eine Int indem du 48dez oder 30hex von dem Byte subtrahierst (Ascii-Code von 0 = 48dez, 1=49dez usw.)
Du hast immer 6 Stellen?
Dann rechnest du
Deine Zahl =
((Byte 1 - 48 ) *100000) +
((Byte 2 - 48 ) *10000) +
((Byte 3 - 48 ) *1000) +
((Byte 4 - 48 ) *100) +
((Byte 5 - 48 ) *10) +
((Byte 6 - 48 ))

Deine Zahl als DINT.
Eleganter ginge das mit indirekter Adressierung.

3. Du extrahierst mittels der Funktion MID (Standard-Library IEC-Function-Blocks) den WerteString, änderst ihn gegebenenfalls so, dass er mit der Funktion String_DI (So hieß die glaube ich) aus der gleichen Library gewandelt werden kann.
 
Zurück
Oben