-> Hier kostenlos registrieren
Hallo,
habe verschiedene Methoden überlegt was man da machen könnte, bin aber zu keinem vernünftigen Ergebnis gekommen, wie man das am besten lösen könnte. Entweder man programmiert einigermassen allgemeine Lösungen, so wie bei der XML Lösung oder man macht einzelne Lösungen, die für ein spezielles Problem da sind.
Beispiel für eine allgemeine Lösung:
Ausgang mit Array[1..10,1..2] OF STRING(20) -> entsprechende Wertepaare
Da muß man dann wieder die ganzen Wertepaare durchgehen. Oder eine Lösung wie die der Lib von KLM gestern.
Oder eben spezielle Funktionen wie
FC_Switch_1 mit Eingang des ByteArray und Ausgang als Bool
oder
FC_Switches mit Eingang ByteArray und mehrere Ausgänge Switch1, Switch2 als Bool
Ist natürlich auch einiges an Arbeit die ganzen Lösungen zu programmieren.
Um daher auf Deine ursprüngliche Frage zurückzukommen, ich habe mir die Wago Bibliotheken noch einmal angesehen. Da gibt es die WagoAppString, die hat die Funktion 'StringRef_to_PrintableString', damit sollte man das Byte/CharArray in einen String umwandeln können.
Eine ähnliche Funktion ist in der Oscat lib. Da kann man den Quellcode ansehen. Oder Du folgst dem Github Link von hier: http://www.oscat.de/community/index.php/topic,4425.0.html da kannst Du den Quellcode direkt einsehen.
Bei der Wago Funktion hast Du den Vorteil, daß einige nicht darstellbare Zeichen die im Array vorkommen ersetzt werden.
Du mußt nur aufpassen, die max. Anzahl der Zeichen in den Strings beträgt bei Wago 255 und bei Oscat 250. Falls die Response mehr Zeichen hat mußt Du bei der Übergabe der Adresse des CharArray einen Offset dazuaddieren um andere Bereiche der Response auszuwerten.
Leider läßt sich der Beschreibung auch nicht entnehmen ob die Antwort in Unicode ist oder nicht. Bei Unicode funktioniert das alles nicht. Laut Hilfe con e!cockpit wird zwar auch wstring unterstützt, aber die ganzen Funktionen spielen da (noch) nicht mit.
Hoffe das hilft Dir etwas weiter.
habe verschiedene Methoden überlegt was man da machen könnte, bin aber zu keinem vernünftigen Ergebnis gekommen, wie man das am besten lösen könnte. Entweder man programmiert einigermassen allgemeine Lösungen, so wie bei der XML Lösung oder man macht einzelne Lösungen, die für ein spezielles Problem da sind.
Beispiel für eine allgemeine Lösung:
Ausgang mit Array[1..10,1..2] OF STRING(20) -> entsprechende Wertepaare
Code:
Beispiel switch
success result switches switch active switch active switch active '' ''
true { [ 1 true 2 false 3 false ] }
Beispiel call status
success result sessions session direction state '' ''
true { [ 1 outgoing ringing ] }
Beispiel error
success error code param description ''
false { 12 port invalid par }
Da muß man dann wieder die ganzen Wertepaare durchgehen. Oder eine Lösung wie die der Lib von KLM gestern.
Oder eben spezielle Funktionen wie
FC_Switch_1 mit Eingang des ByteArray und Ausgang als Bool
oder
FC_Switches mit Eingang ByteArray und mehrere Ausgänge Switch1, Switch2 als Bool
Ist natürlich auch einiges an Arbeit die ganzen Lösungen zu programmieren.
Um daher auf Deine ursprüngliche Frage zurückzukommen, ich habe mir die Wago Bibliotheken noch einmal angesehen. Da gibt es die WagoAppString, die hat die Funktion 'StringRef_to_PrintableString', damit sollte man das Byte/CharArray in einen String umwandeln können.
Code:
StringRef_to_PrintableString (FUN)
Interface variables
Scope Name Type Comment
Return StringRef_to_Printable String STRING(255)
Input pInString POINTER TO BYTE pointer to the input string
Function
Converts a reference to a character STRING into a CODESYS-printable string.
Function Description
Non-printable characters are converted to spaces (‘ ‘). If a zero is encountered, this will be interpreted as the end of the string. Upper Control chars like 16#7f (DEL) and 16#80..9f are printable in CODESYS and will thus not be replaced.
Eine ähnliche Funktion ist in der Oscat lib. Da kann man den Quellcode ansehen. Oder Du folgst dem Github Link von hier: http://www.oscat.de/community/index.php/topic,4425.0.html da kannst Du den Quellcode direkt einsehen.
Bei der Wago Funktion hast Du den Vorteil, daß einige nicht darstellbare Zeichen die im Array vorkommen ersetzt werden.
Du mußt nur aufpassen, die max. Anzahl der Zeichen in den Strings beträgt bei Wago 255 und bei Oscat 250. Falls die Response mehr Zeichen hat mußt Du bei der Übergabe der Adresse des CharArray einen Offset dazuaddieren um andere Bereiche der Response auszuwerten.
Leider läßt sich der Beschreibung auch nicht entnehmen ob die Antwort in Unicode ist oder nicht. Bei Unicode funktioniert das alles nicht. Laut Hilfe con e!cockpit wird zwar auch wstring unterstützt, aber die ganzen Funktionen spielen da (noch) nicht mit.
Hoffe das hilft Dir etwas weiter.