Step 7 Array of Byte umwandeln in eine Realzahl

kranbau

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

folgendes Problem:

Über Profibus bekomme ich den Messwert eines Lastmessbolzen. Der Teilnehmer übergibt mir, wie in den Anhängen Dargestellt 16 Bytes in HEX, diese wiederrum sind in ASCII auf Zahlen umzuwandeln.
Als fertige Lösung benötige ich am Ende Byte 4 - 13 als real Zahl, um mathematische Operationen vorzunehmen.

Jemand einen denkanstoß/Idee wie ich das ganze Umwandeln kann?

Danke!

Lastmessbolzen1.jpgLastmessbolzen.jpg
 
Als fertige Lösung benötige ich am Ende Byte 4 - 13 als real Zahl, um mathematische Operationen vorzunehmen.
Kann es sein, dass Du Byte 3 - 12 meinst?

Mit dem Format, das Du bekommst, ist es etwas kompliziert. Mit den Standard IEC-Konvertern ist hier nichts zu machen. Ich würde in einem anderen DB einen String mit der maximalen Länge 9 anlegen, anschließend manuell die aktuelle Länge auf 9 setzen und die Bytes 3 - 9 und 11 - 12 dort ab Byte 2 zusammenhängend hin kopieren (also als Byte 2 - 10). Anschließend kannst Du diesen String mit der IEC-Standardfunktion STRNG_DI konvertieren. Jetzt hast Du Deine Zahl um Faktor 100 zu groß. Jetzt noch nach REAL umwandeln und durch 100 teilen. Fertig.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

danke für die Antwort. Genau, ich meine natürlich ab Byte 3!

Leider bin ich noch nicht so tief in der materie drin. Könntest du auf den Part des Kopierens in den String etwas genauer eingehen?

Danke!
 
Achtung, in dem Telegramm sind weitere Sicherheiten eingebaut!

Wenn da die Last mit errechnet wird, kann das bei einem Kran (Themenstarter heisst kranbau) schon aus Gründen der Sicherheit gefährlich werden, nur mal eben so zu rechnen!
 
Das ist das wenigste. Du musst einfach nur die Bytes, die die Ziffern Deines Originalstrings enthalten fortlaufend ab Byte 2 in den neuen String kopieren.
Dein neuer String hat ja seine Anfangsadresse: DBx.DBBy.
Jetzt kopierst Du aus Deinem Originalstring
DBa.DBB3 nach DBx.DBBy+2
DBa.DBB4 nach DBx.DBBy+3
...
DBa.DBB9 nach DBx.DBBy+8
DBa.DBB11 nach DBx.DBBy+9
Dba.DBB12 nach DBx.DBBy+10
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine Hilfe, diese berrechnung Dient natürlich nicht einer Sicherheitsgerrichteten Funktion, sondern lediglich zu Visualisierungs zwecken.

Ich bin also nun soweit, wie im Anhang dargestellt. Ich versuche die ersten 4 Ziffern als INT zu bekommen.

Wo liegt mein Fehler?

Grüße

Lastmessbolzen11.jpgLastmessbolzen111.jpg
 
Zuletzt bearbeitet:
Das ist das wenigste. Du musst einfach nur die Bytes, die die Ziffern Deines Originalstrings enthalten fortlaufend ab Byte 2 in den neuen String kopieren.
Dein neuer String hat ja seine Anfangsadresse: DBx.DBBy.
Jetzt kopierst Du aus Deinem Originalstring
DBa.DBB3 nach DBx.DBBy+2
DBa.DBB4 nach DBx.DBBy+3
...
DBa.DBB9 nach DBx.DBBy+8
DBa.DBB11 nach DBx.DBBy+9
Dba.DBB12 nach DBx.DBBy+10
Du musst ab Byte 2 in den neuen STRING schreiben. Hast Du Dir mal in der Hilfe den Aufbau des STRING-Formats angeschaut?
 
Zurück
Oben