VAR_INPUT
bSend : BOOL; //Start send at rising edge
bResetError : BOOL; //Reset Error
sStructName : STRING;
udiSizeOfData : UDINT; // size of struct for data to be send
pData : PVOID; // Adress of struct for data to be send
sContentType : STRING:='application/json'; //optional (init with 'application/json')
sStructNameResult : STRING; //optional (e.g. 'ST_MesCheckSerialsResponse' / init depending on eCurrentMesMode)
udiSIzeOfDataResult : UDINT; // size of struct for data to be received
pResult : PVOID; // Adress of struct for data to be received
sHostname : STRING;
sIdentifier : STRING;
uiPort : UINT;
END_VAR
IF pResult<> 0 THEN
fbJsonDataType.SetSymbolFromJson(sResultValue, sStructNameResult, udiSIzeOfDataResult, pResult );
ELSE
bError:=TRUE;
sErrorText:='No valid inputs';
END_IF
Das ist ja schlecht. Dann vllt. mit dem Hinweis von Tschoke...Hi,
danke für die schnelle Antwort.
Ja das habe ich versucht... leider bleibt der immer auf 0
Hi, danke dir für den Hinweis...
TYPE ST_MesStandardResponse :
STRUCT
RESULT_CODE: INT;
RESULT_TEXT: STRING;
END_STRUCT
END_TYPE
TYPE ST_MesCheckMaterialResponse :
STRUCT
RESULT_CODE : INT;
RESULT_TEXT : STRING;
SETUP : ARRAY[0..2] OF ST_MesCheckMaterialResponseEntry;
END_STRUCT
END_TYPE
TYPE ST_MesCheckMaterialResponseEntry :
STRUCT
DESCRIPTION: STRING;
VALID: INT;
MATERIAL_BIN: STRING;
PARTNUMBER: STRING;
SETUP_POSITION: STRING;
BATCH_1: STRING;
QTY_TOTAL: REAL;
QTY_CURR: REAL;
END_STRUCT
END_TYPE
TYPE ST_MesCheckSerialsResponse :
STRUCT
RESULT_CODE : INT;
SERIAL_NUMBERS : ARRAY[0..1] OF ST_MesCheckSerialsResponseEntry;
RESULT_TEXT : STRING;
END_STRUCT
END_TYPE
TYPE ST_MesCheckSerialsResponseEntry :
STRUCT
SERIAL_NUMBER : STRING;
RESULT_CODE : DINT;
RESULT_TEXT : STRING;
END_STRUCT
END_TYPE
Naja, da du ja Adresse und Länge der Struktur weißt, könnte man ja mit MEMSET alle Bytes der Struktur auf "0" setzen und temporär wegkopieren mit MEMCPY.Ich müsste irgendwie in meinem FB die Struktur, die von außen auf den Input gelegt wird mit einem Standard-Wert initialisieren. Dann könnte ich ja relativ leicht auswerten, ob sich was getan hat... aber da finde ich gerade keine Lösung, da ich im Baustein ja nicht die Struktur, sondern nur deren Adresse habe. Ich weiß ja in dem Moment auch nicht wie die Struktur aussieht, die von außen drauf gegeben wird...
Ja, das war mein aller erster Ansatz mit MEMSET = 0Naja, da du ja Adresse und Länge der Struktur weißt, könnte man ja mit MEMSET alle Bytes der Struktur auf "0" setzen und temporär wegkopieren mit MEMCPY.
Dann SetSymbolFromJson ausführen und das Ergebnis mit dem "wegkopiertem" mit Hilfe von MEMCMP vergleichen.
Ist aber keine schöne Lösung. Man muss dann ausschließen können, dass die Struktur mit "0" initialisiert auf jeden Fall kein gültiges Ergebnis sein darf.
Hmh... also die Struktur mit einem komplett leeren Byte-Array verglichen habe ich jetzt noch nicht ausprobiert.... bisher hatte ich auch noch nie den Fall, dass ich eine komplett leere Antwort bzw. mit lauter 0 bekommen habe... könnte vielleicht gehen....Einfach eine Byte Array Variable mit der Max. möglichen Strukturgröße deklarieren. Diese ist ja bekannt.
Mir fällt gerade auf, dass man ja gar nicht wegkopieren muss, da in dem Array ja alles "0" ist und darauf ja nie geschrieben wird.
Einfach eine Byte Array Variable mit der Max. möglichen Strukturgröße deklarieren. Diese ist ja bekannt.
Mir fällt gerade auf, dass man ja gar nicht wegkopieren muss, da in dem Array ja alles "0" ist und darauf ja nie geschrieben wird.
Hmh... also die Struktur mit einem komplett leeren Byte-Array verglichen habe ich jetzt noch nicht ausprobiert.... bisher hatte ich auch noch nie den Fall, dass ich eine komplett leere Antwort bzw. mit lauter 0 bekommen habe... könnte vielleicht gehen....
Werd mich nochmal melden
Im Endeffekt muss ich nur eine Lösung finden, um zu sagen ob das Schreiben in die Struktur funktioniert hat oder nicht (Daten gültig oder nicht) Die separate Auswertung der Daten ist erst mal zweitranging.
jsonDoc := fbJson.ParseDocument(sMessage);
bHasMember := fbJson.HasMember(jsonDoc, 'RESULT_CODE');
IF (bHasMember) THEN
bHasMember := FALSE;
jsonProp := fbJson.FindMember(jsonDoc, 'RESULT_CODE');
nResultCode := fbJson.GetString(jsonProp);
END_IF
IF nResultCode >= 0 THEN
// hat funktioniert
ELSE
// hat nicht funktioniert
END_IF
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?