JASON STRING über TCP in HEX-Format senden

STEEDUHAN

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

ich möchte über einen TCP-Port einen JSON-Befehl senden. Leider hat meine Sendeeinheit nur die Möglichkeit, Strings in HEX-Code (ASCII) anzulegen.
Eigentlich sollte aber eine ASCII-Hex-Code funktionieren, oder? Die Frage ist, muss ich dann einen bestimmten Header/Footer dazu packen? In welcher Reihenfolge sendet man das? Hier mal ein Beispiel, damit man besser versteht was ich meine:

Mein Empfänger möchte z.B. den String: {"cmdName":"power_on"}

Ich habe das jetzt so in Hex übersetzt: 7b22636d644e616d65223a22706f7765725f6f6e227d

Geht aber nicht. Ich habe es auch rumgedreht und von hinten nach vorne geschickt - o.E..

Hat jemand eine Idee und/oder einen Tipp?
Leider kann ich auch nicht mehr zum Empfänger sagen, hier ist im Handbuch nur der Port angegeben, der genutzt werden kann und dann die einzelnen Befehlssätze (wie der oben genannte). Wenn man das mit einem Sender schickt, der einen JASON-Treiber nutzt (SPS) dann funktioniert das wohl. Was macht der Treiber zusätzlich mit dem Befehl?

Danke Euch!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Leider hat meine Sendeeinheit nur die Möglichkeit, Strings in HEX-Code (ASCII) anzulegen.
Welche Sendeeinheit? Welche SPS verwendest du? Welche Programmiersoftware verwendest du?

HEX ist normalerweise einfach nur eine Anzeige-Darstellungsform. So gut wie keine Kommunikationseinrichtung verlangt wirklich, dass HEX-Codes als Zeichen übertragen werden, z.B. soll das ASCII-Zeichen '0'übertragen werden, dann wird das ASCII-Zeichen mit der Nummer 48 dez = 16#30 = '0' übertragen. Schreibe einfach deine Zeichenfolge als lesbarer Text in einen String und versuche es damit, z.B. '{"cmdName":"power_on"}'
Welche Zeichen verwendet deine unbekannte Programmiersoftware zur Kennzeichnung von Strings? Braucht man dieses Zeichen im String, dann muss man das irgendwie in den String hineinbasteln (Escape-Zeichen, Zeichencode ...?) Also erstmal die obigen Fragen beantworten.
 
Hallo,

leider ist das hier nicht so, die Meisten werden meine Geräte nicht kennen.
Der Sender ist ein Pro-face HMI mit der Software GP-Pro EX. GP-Pro EX kann eine TCP-Verbindung herstellen, mit einer Ziel IP und einem Port. Kann aber keine Strings verarbeiten, sondern nur ASCII-Zeichen als HEX-Code. Ich muss also jedes Zeichen des Strings, in einen ASCII-Hex-Code wandeln.
Der Empfänger ist ein Roboter, der eben auch diesen TCP-Port unterstützt, aber eben einen Befehl in JASON-Format erwartet - wie oben dargestellt. Ich habe leider keine Ahnung, ob es reicht, den JASON-Code 1:1 in einen ASCII-HEX-Code zu wandeln, oder ob eben noch ein Header oder/und Footer erwartet wird, oder in welcher Reihenfolge die einzelnen Zeichen angeordnet werden müssen. Leider gibt das dass Handbuch des Roboters nicht her.

Danke aber schon mal für Deine Antwort.
 
Da hängt auch keine Steuerung oder Sonstiges zwischen Hmi und Roboter, welches die Aufgabe des Sendens übernehmen könnte? Um welchen Typ Roboter geht es denn?

JSON verwendet die Unicode (UTF8) Kodierund und es unterstützt auch keine Hexadezimalzeichen(JSON nicht mit JSON5 verwechseln). D.h. du müsstest, selbst wenn du es nach Hex formatiert bekommst, auf der Gegenseite wieder umformatieren nach UTF8
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Welcher Empfänger ist das denn
Hallo,

leider ist das hier nicht so, die Meisten werden meine Geräte nicht kennen.
Der Sender ist ein Pro-face HMI mit der Software GP-Pro EX. GP-Pro EX kann eine TCP-Verbindung herstellen, mit einer Ziel IP und einem Port. Kann aber keine Strings verarbeiten, sondern nur ASCII-Zeichen als HEX-Code. Ich muss also jedes Zeichen des Strings, in einen ASCII-Hex-Code wandeln.
Der Empfänger ist ein Roboter, der eben auch diesen TCP-Port unterstützt, aber eben einen Befehl in JASON-Format erwartet - wie oben dargestellt. Ich habe leider keine Ahnung, ob es reicht, den JASON-Code 1:1 in einen ASCII-HEX-Code zu wandeln, oder ob eben noch ein Header oder/und Footer erwartet wird, oder in welcher Reihenfolge die einzelnen Zeichen angeordnet werden müssen. Leider gibt das dass Handbuch des Roboters nicht her.

Danke aber schon mal für Deine Antwort.
Ich glaube Du musst da nochmals einiges nachlesen.
Erstens ein String besteht aus ASCII Zeichen, soweit es kein WSTRING ist.
Zweitens einen ASCII-Hex-Code gibt es nicht. Die Gegenstelle erwartet Zeichen, die, soweit es kein WSTRING ist, im Speicher und bei der Übertragung per Netzwerk als ASCII Code übertragen werden, dabei besitzt jedes Zeichen einen ASCII Code, das A z.B. hat den ASCII Code 65 dezimal. Diesen Code kannst Du jetzt auf verschiedene Arten darstellen, zum Beispiel als Hex-Zahl, dann wäre das die 41Hex für das A, das ist aber nur eine Darstellungsart. Es kann natürlich sein, dass die Gegenstelle einzelne Hex-Ziffern als String erwartet, also, z.B. A0, dann müsste 65 und 48 gesendet werden.
Du musst halt die JSON-Daten als String nachbilden und diese dann als Bytestrom senden.
 
Zuletzt bearbeitet:
Da hängt auch keine Steuerung oder Sonstiges zwischen Hmi und Roboter, welches die Aufgabe des Sendens übernehmen könnte? Um welchen Typ Roboter geht es denn?

JSON verwendet die Unicode (UTF8) Kodierund und es unterstützt auch keine Hexadezimalzeichen(JSON nicht mit JSON5 verwechseln). D.h. du müsstest, selbst wenn du es nach Hex formatiert bekommst, auf der Gegenseite wieder umformatieren nach UTF8
Dann dürfte es aber schwierig werden, es sei denn das HMI besitzt eine gewisse Intelligenz und man kann Funktionen implementieren oder beherrscht WSTRINGS, soweit diese UTF-8 kodiert sind, das weiß ich leider nicht..
 
Dann dürfte es aber schwierig werden, es sei denn das HMI besitzt eine gewisse Intelligenz und man kann Funktionen implementieren oder beherrscht WSTRINGS, soweit diese UTF-8 kodiert sind, das weiß ich leider nicht..
Ich denke, dass der Roboter wie viele andere Geräte/Tools welche mit Json arbeiten einen Bytestream von Ascii Zeichen im Utf8 Format erwartet
 
Hallo,

das HMI ist sehr leistungsfähig. Ich kann damit auch eigene Treiber schreiben, wenn ich weiß wie. Ihr habt mir schon weiter geholfen.
@Oliver: ich gebe Deinen Text mal so an Dich zurück. Es gibt sehr wohl einen ASCII-HEX-Code so wie auch einen DEZ. Sonst musst Du bitte alle Ersteller der ASCII-Tabellen mit HEX-Code anschreiben, dass die lügen und ich muss meine Anlagen der letzten 30 Jahre anzünden, da die ja gar nicht funktionieren können :):):) SPASS.
Mein Problem ist eben, wie ich die Zeile aufbauen muss, damit die verstanden wird, bzw. ob ein JASON-Empfänger die so überhaupt verstehen kann. Und da habt Ihr mir sehr geholfen, ich werde mal einen anderen Weg versuchen und es mit dem WSTRING und/oder der UTF8 Variante testen. Da muss ich bissel was anderes einsetzen, aber einen Versuch ist es Wert.

DANKE EUCH!!!!
 
Hallo,

das HMI ist sehr leistungsfähig. Ich kann damit auch eigene Treiber schreiben, wenn ich weiß wie. Ihr habt mir schon weiter geholfen.
@Oliver: ich gebe Deinen Text mal so an Dich zurück. Es gibt sehr wohl einen ASCII-HEX-Code so wie auch einen DEZ. Sonst musst Du bitte alle Ersteller der ASCII-Tabellen mit HEX-Code anschreiben, dass die lügen und ich muss meine Anlagen der letzten 30 Jahre anzünden, da die ja gar nicht funktionieren können :):):) SPASS.
Mein Problem ist eben, wie ich die Zeile aufbauen muss, damit die verstanden wird, bzw. ob ein JASON-Empfänger die so überhaupt verstehen kann. Und da habt Ihr mir sehr geholfen, ich werde mal einen anderen Weg versuchen und es mit dem WSTRING und/oder der UTF8 Variante testen. Da muss ich bissel was anderes einsetzen, aber einen Versuch ist es Wert.

DANKE EUCH!!!!
Nochmals, Hex, Dezimal, Binär, latainische Zahlen, sind keine Codes, sondern Darstellungsformen, weswegen es auch keine wirklichen Konvertierungsfunktionen gibt, um eine Zahl in hexadezimaler Schreibweise in eine in dezimaler Schreibweise umzuwandeln.
0001 0001 oder 11Hex oder 17Dez oder XVII ist alles das Selbe nur anders geschrieben.
BCD ist hingegen ein Code, weil da 11Hex nicht 17Dez entspricht, sondern 11Dez.
Was Du meinst ist ein ASCII Code in hexadezimaler Schreibweise, dadurch wird das aber nicht zu einem HEX-ASCII-Code, es bleibt ein ASCII-Code nur anders geschrieben, kann man übrigens auch im Internet nachlesen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Sender ist ein Pro-face HMI mit der Software GP-Pro EX. GP-Pro EX kann eine TCP-Verbindung herstellen, mit einer Ziel IP und einem Port. Kann aber keine Strings verarbeiten, sondern nur ASCII-Zeichen als HEX-Code. Ich muss also jedes Zeichen des Strings, in einen ASCII-Hex-Code wandeln.
Ich habe mit GP-Pro EX noch nie gearbeitet, aus dem GP-Pro EX Referenzhandbuch "21 Verwenden von Skripts" entnehme ich aber, dass es sehr wohl mit Strings umgehen kann. Den String {"cmdName":"power_on"} müsste man z.B. ungefähr so in einen Byte-Puffer bekommen:
Code:
_strset(databuf0,"{")
_strcat(databuf0, 0x22)    //0x22 = 34 = '"' (das doppelte Anführungszeichen)
_strcat(databuf0, "cmdName")
_strcat(databuf0, 0x22)
_strcat(databuf0, ":")
_strcat(databuf0, 34)
_strcat(databuf0, "power_on")
_strcat(databuf0, 34)
_strcat(databuf0, "}")
(mir scheint, dass Strings automatisch ein 0-Byte am Ende haben)
 
Ich habe mit GP-Pro EX noch nie gearbeitet, aus dem GP-Pro EX Referenzhandbuch "21 Verwenden von Skripts" entnehme ich aber, dass es sehr wohl mit Strings umgehen kann. Den String {"cmdName":"power_on"} müsste man z.B. ungefähr so in einen Byte-Puffer bekommen:
Code:
_strset(databuf0,"{")
_strcat(databuf0, 0x22)    //0x22 = 34 = '"' (das doppelte Anführungszeichen)
_strcat(databuf0, "cmdName")
_strcat(databuf0, 0x22)
_strcat(databuf0, ":")
_strcat(databuf0, 34)
_strcat(databuf0, "power_on")
_strcat(databuf0, 34)
_strcat(databuf0, "}")
(mir scheint, dass Strings automatisch ein 0-Byte am Ende haben)
Das Problem dabei ist nur, dass eine Stringverarbeitung dem OP nicht hilft, da JSON, laut Internet, UTF-8 nutzt.
 
OK, dafür fehlt mir, das muss ich zugeben, das Detailwissen. Das heißt in UTF-8 belegen diese Zeichen dann auch nur ein Byte?
Ja.
Ich habe das hier auch mal an einem Beispiel erläutert:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kann aber keine Strings verarbeiten, sondern nur ASCII-Zeichen als HEX-Code. Ich muss also jedes Zeichen des Strings, in einen ASCII-Hex-Code wandeln.
Bist Du sicher, dass dieser unnötig umständliche Weg tatsächlich gemeint ist? Warum?
Der Empfänger ist ein Roboter, ...
Ich kann mir einfach nicht vorstellen, dass Dein Roboter seine kostbare Zeit mit dem Dekodieren Deines Codes totschlagen möchte. Wozu sollte er das tun wollen? Diese Kodierung, von der ich glaube, dass Du sie meinst, bringt doch gar nix, ausser, dass sie doppelt so viele Bytes belegt.
... der eben auch diesen TCP-Port unterstützt, aber eben einen Befehl in JASON-Format erwartet - wie oben dargestellt. Ich habe leider keine Ahnung, ob es reicht, den JASON-Code 1:1 in einen ASCII-HEX-Code zu wandeln, oder ob eben noch ein Header oder/und Footer erwartet wird, oder in welcher Reihenfolge die einzelnen Zeichen angeordnet werden müssen. Leider gibt das dass Handbuch des Roboters nicht her.
Versuch es doch einfach mal ...
- mit ohne JASON-Code 1:1 in einen ASCII-HEX-Code wandeln
- mit ohne Header
- mit ohne Footer
- mit ohne irgendwelche GewissensBisse!
 
Zurück
Oben