Stringverarbeitung, Zeichenkette

qpec_hagen

Level-1
Beiträge
105
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community,
ich habe eine "nackte" Zeichenkette ohne Kopf. Gibt es hier eine Möglichkeit bei Siemens diese beiden Bytes zu erzeugen? Das erste Byte wäre kein Problem. Das ist bei mir statisch, aber wie komme ich an das Zweite?
LG Manuel
 
Das zweite Byte ist natürlich schwierig. Woran erkennst du dass dein String zu Ende ist? Wenn du eine Ende-Kennung hast wie z.B. das letzte Zeichen ist hex00 oder wenn du weißt wie lange dein String ist ist es wiederum kein Problem.
 
Woher kommt die Zeichenkette?
Wenn du sie z.BSp seriell empfängst, kannst du die Länge u.U. am Empfangsbaustein abgreifen.
 
Meinst du als Endekennung?
In dem Fall nimmst du den String, setzt aber zuerst einmal die beiden Kopfbyte zumindest auf gültige Werte (bei einem kompletten String max. 254,254, glaube ich), sonst funktionieren die Stringfunktionen nicht! Dann nimmst du die IEC-Functions aus der Library (Find) und suchst in dem String nach deinem Sonderzeichen. Dir wird das erste Auftreten des Sonderzeichens mit der Position gemeldet. Diese Position - 1 ist dann deine Stringlänge. Entweder du trägst diese nun einfach an in den Kopf deines String ein (254, 3) oder du schneidest den String aus und kopierst in ihn einen neuen Ergebnisstring. (Auch mit den Stringfunktionen aus der Library)
 
Ich vermute einen Zusammenhang mit: HIER
Da hatte ich die Antwort auch schon gegeben ...

Gruß
Larry

... zustimm ...*ACK*

Leider habe ich keine Endekennung...also keine eindeutige


Es scheint so, dass du (den nackten Text) in variablen Telegrammlängen empfängst.
Du solltest deinen Empfangspuffer löschen, wenn du das aktuelle Telegramm gelesen hast.
Wenn du deinen Empfangspuffer nach einem Empfang leerst (löscht), dann kannst du das Ende an der ersten 00hex (das erste freie Byte nach dem empfangenen Telegramm) im Puffer erkennen.

Bleibt nämlich dein vorheriges Telegramm im Puffer stehen, wird der erste (alte) Teil überschrieben, der verbleibende (alte) Rest im Puffer "hängt" sich einfach an dein neu empfangenes Telegram hintendran und verfälscht es.

Oder du nutzt z.B. das althergebrachte ETX (EndOfText) = 03hex als Endekennzeichen statt "$" ode ">"

Und ich kann mir nicht vorstellen, das der FB_RCV ein NDR ohne LEN rausgibt, da solltes du mal Larrys Rat im Beitrag #11 aus seinem Link oben prüfen.
 
Zuletzt bearbeitet:
Zurück
Oben