Byte in String wandeln

matchef

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

Ich stehe wiedermal auf dem Schlauch, und zwar lese ich einen String über mehrere Eingangsbyte's ein...

Beispiel:
Deklaration in Symboltabelle:
String1 PEB 254
String2 PEB 255
String3 PEB 256
String4 PEB 257
etc....

Dann habe ich den String ja in Bytes augeteilt. In dem String ist eigenlich eine Zahl hinterlegt.

z.b.
String1 PEB 254 = 49
String1 PEB 255 = 55
String1 PEB 256 = 53

ergibt ja die Zahl 175....
nun würde ich gerne alle Bytes zusammen fügen zu einem String und danach den String mit dem FC37 in eine Dint wandeln...

Nur leider krieg ich den String so nicht zusammen.

Strin1 Deklariert lokal als String[10]
wert_dint Deklariert lokal als DINT

L String1
T #strin1[1]
L String2
T #strin1[2]
L String3
T #strin1[3]
etc.

CALL "STRNG_DI"
S :=#strin1
RET_VAL:=#wert_dint

leider kommt dabei nur 0 raus....

Kann mir vielleicht einer von euch einen Tipp geben wie ich das zum laufen bringen könnte?

Gruss matchef
 
der string hat einen kopf mit max. länge und tatsächlicher länge, der fehlt bei dir, deswegen ist er nicht auswertbar

lesetipp: hilfe zum datentyp string
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für den Tip, ich habs auch so getestet aber leider das gleiche Porblem...

Strin1 Deklariert lokal als String[10] mit Adresse 2.0

LAR1 P##strin1
L 10
T LB [AR1,P#2.0]
L 3
T LB [AR1,P#3.0]

L '1'
T #strin1[1]
L '2'
T #strin1[2]
L '3'
T #strin1[3]


CALL "STRNG_DI"
S :=#strin1
RET_VAL:=#komma_dint

Hier kommt von "komma_dint" auch nur 0 raus

was sehe ich das falsch?
 
Strin1 Deklariert lokal als String[10]

LAR1 P##strin1
L 10 // deklarierte Länge
T LB [AR1,P#0.0]
L 3 // tatsächliche Länge
T LB [AR1,P#1.0]

L '1'
T LB [AR1,P#2.0] // 1.Nutz-Byte
L '2'
T LB [AR1,P#3.0] // 2.Nutz-Byte
L '3'
T LB [AR1,P#4.0] // 3.Nutz-Byte


CALL "STRNG_DI"
S :=#strin1
RET_VAL:=#komma_dint

Versuch es doch mal so ...

Gruß
Larry
 
hmmm ich dachte ich muss dem string das beim aufrufen nochmals mitgeben? so habe ich das auf jeden fall verstand in der Hilfe Datentyp String.

Ich muss doch den ersten Wert auf den Platz [1] geben und nicht die Max. länge?
 
@Matchef:
Die Step7-Hilfe beschreibt eigentlich ganz gut den Aufbau eines Strings. Dieser hat einen Header, in dem die deklarierte Länge [Byte 0] und die tatsächliche Länge [Byte 1] steht. Die Nutz-Daten des Strings folgen dann ab Byte 2 ...

Gruß
Larry
 
Versuch es doch mal so ...

Gruß
Larry

ja das habe ich verstanden, ich war mir nur nicht sicher ob dieser Header bei [1] oder beginnt oder nicht, wenn ich ja einen string in einem DB deklariere und in dann
anspreche mit [1] ist das ja automatisch das 3te Byte des String, d.h. das 1.Nutzbyte...

hey Larry, cool so gehts doch tatsächlich :D...warum kann ich diese Funktion nicht in einem FB Baustein aufrufen? Bei mir gehts nur in einen FC...


Gruss matchef
 
Zuletzt bearbeitet:
ja es stand immer 0 als Ergebniss...evtl. hatte ich aber noch was in der Dekleration des Strings falsch oder so, nun fuktionierts wunderbar!

Danke an alle für die schnell und gute Hilfe!

Gruss matchef
 
Zurück
Oben