Koernerbrot
Level-2
- Beiträge
- 20
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Guten Morgen,
ich baue gerade ein kleines Nebenprogramm, welches zum Start des Hauptprogrammes Json-Dateien einlesen soll, um die Motoren mit individuellen Camming Kurven zu bestücken. Alles schön und gut, befolge ich den Starting-Guid im Infosys zur jsonxml Bibliothek ( https://infosys.beckhoff.com/index....1031/tcplclib_tc3_jsonxml/3916587275.html&id= ). Syntax verstanden und auf mein Problem hin umgewandelt, heraus kam das hier als meine Variablenliste:
Und das als mein eigentlicher Code:
Ausprobiert und ... Error, jsonProp bleibt 0 obwohl im jsonRoot etwas drinnen steht wenn es startet. Daraufhin habe ich selber nach Fehlern geguckt, auch welche gefunden, aber alle nur in den anderen Teilen meines Codes. KI gefragt: Hat nur Verbesserungsvorschläge fürs Error Handling, Externen von Beckhoff selber gefragt: Sieht ihm alles richtig aus, weiß nicht warum es nicht klappen sollte.
Ich selber bin überfragt, liegt es daran das ich die Dateien auf meinem PC liegen habe und nicht auf der PLC selber liegen? (Ist so ne Beckhoff SpS mit Touchscreen, läuft Windows 10 drauf) Meine Json Datei hat auch das richtige Format und ich habe es auch mit einer kleineren Datei versucht. (Original sind es zwei Arrays mit jeweils 360 Werten, zum Testen bin ich mal auf jeweils 6 Werten runtergegangen.)
Die Funktion wird in meinem Hauptprogramm als Funktionsbaustein implementiert um 4 unterschiedliche Kurven lesen zu können zum testen habe ich jetzt aber Manuell ein Dateinspeicherort festgelegt.
ich baue gerade ein kleines Nebenprogramm, welches zum Start des Hauptprogrammes Json-Dateien einlesen soll, um die Motoren mit individuellen Camming Kurven zu bestücken. Alles schön und gut, befolge ich den Starting-Guid im Infosys zur jsonxml Bibliothek ( https://infosys.beckhoff.com/index....1031/tcplclib_tc3_jsonxml/3916587275.html&id= ). Syntax verstanden und auf mein Problem hin umgewandelt, heraus kam das hier als meine Variablenliste:
C-ähnlich:
FUNCTION_BLOCK Json_Parser_Kontraer
VAR_INPUT
Execute : BOOL;
FilePath : STRING;
END_VAR
VAR_OUTPUT
Cam_REF : MC_CAM_REF;
Busy : BOOL;
Error : BOOL;
Done : BOOL;
END_VAR
VAR
jsonParser : FB_JsonDomParser;
jsonProp : SJsonValue;
jsonRoot : SJsonValue;
jsonIterator : SJsonValue;
jsonIteratorEnd : SJsonValue;
ArrayOutput : ARRAY[0..359,0..1] OF LREAL;
x : INT;
y : INT;
Status : INT;
END_VAR
Und das als mein eigentlicher Code:
Code:
IF Execute = TRUE THEN
//Datei öffnen und nach Master Array suchen
jsonParser.LoadDocumentFromFile('C:\Kurventest\Kontraerbewegung_Beispiel.json',Execute);
jsonRoot := jsonParser.GetDocumentRoot();
IF jsonRoot <> 0 THEN
jsonProp := jsonParser.FindMember(jsonRoot, 'Master');
ELSE
Error := TRUE;
RETURN;
END_IF
//Überprüfen ob der Array nicht leer ist
IF (jsonProp <> 0) THEN
jsonIterator := jsonParser.ArrayBegin(jsonProp);
jsonIteratorEnd := jsonParser.ArrayEnd(jsonProp);
WHILE jsonIterator <> jsonIteratorEnd DO
IF (jsonProp <> 0) THEN
ArrayOutput[x,0] := jsonParser.GetInt(jsonIterator);
ELSE
Error := TRUE;
RETURN;
END_IF
jsonIterator := jsonParser.NextArray(jsonIterator);
x := x + 1;
END_WHILE
x := 0;
//Das selbe wird nochmal für den "Slave" wiederholt
jsonProp := jsonParser.FindMember(jsonRoot, 'Slave');
jsonIterator := jsonParser.ArrayBegin(jsonProp);
jsonIteratorEnd := jsonParser.ArrayEnd(jsonProp);
WHILE jsonIterator <> jsonIteratorEnd DO
IF (jsonProp <> 0) THEN
ArrayOutput[x,1] := jsonParser.GetINT(jsonIterator);
ELSE
Error := TRUE;
RETURN;
END_IF
jsonIterator := jsonParser.NextArray(jsonIterator);
x := x + 1;
END_WHILE
x := 0;
//Array in MC_CAM_REF schieben
IF SIZEOF(ArrayOutput) > 0 THEN
Cam_REF.pArray := ADR(ArrayOutput);
Cam_REF.ArraySize := SIZEOF(ArrayOutput);
Cam_REF.TableType := MC_TABLETYPE_EQUIDISTANT;
Cam_REF.NoOfRows := 360;
Cam_REF.NoOfColumns := 2;
Done := TRUE;
Busy := TRUE;
ELSE
Error := TRUE;
RETURN;
END_IF
ELSE
Error := TRUE;
RETURN;
END_IF
END_IF
Ausprobiert und ... Error, jsonProp bleibt 0 obwohl im jsonRoot etwas drinnen steht wenn es startet. Daraufhin habe ich selber nach Fehlern geguckt, auch welche gefunden, aber alle nur in den anderen Teilen meines Codes. KI gefragt: Hat nur Verbesserungsvorschläge fürs Error Handling, Externen von Beckhoff selber gefragt: Sieht ihm alles richtig aus, weiß nicht warum es nicht klappen sollte.
Ich selber bin überfragt, liegt es daran das ich die Dateien auf meinem PC liegen habe und nicht auf der PLC selber liegen? (Ist so ne Beckhoff SpS mit Touchscreen, läuft Windows 10 drauf) Meine Json Datei hat auch das richtige Format und ich habe es auch mit einer kleineren Datei versucht. (Original sind es zwei Arrays mit jeweils 360 Werten, zum Testen bin ich mal auf jeweils 6 Werten runtergegangen.)
Die Funktion wird in meinem Hauptprogramm als Funktionsbaustein implementiert um 4 unterschiedliche Kurven lesen zu können zum testen habe ich jetzt aber Manuell ein Dateinspeicherort festgelegt.