TIA Problematik in der Script generierung mit dem LSTREAM_JSON_Serializer

S4vla

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

ich tausche mit einem MQTT-Broker Daten aus und generiere über den LSTREAM_JSON_Serializer Baustein von Siemens ein JSON-Script, das unteranderem in einem Array mehrere Messdaten der Anlage enthalten soll.
In den JSON_Serializer kann man über die folgende Tabelle den JSON Code in einem Datenbaustein erstellen.


Type:[Sint] -1 Default
0 Object
1 Array
2 String
3 Number
4 Bool

Key:
[String]Name of the Key; ' ' = default
Value:[String]Value of the Keyname
Depth:[SInt]
Hierarchical depth of the object

Das Array "measurements" hat die eigestellte tiefe von 1.
Die Sensornamen, Sensorwerte, Sensor unit und das Objekt "limits" liegt in einer eigestellten tiefe von 2.
Die werte im Objekt limits liegen in einer eigestellten tiefe von 3.
Das ziel ist das dieser Code erstellt und an dem Broker übergegen werden soll:

Javascript:
"measurements":
[ {"sensor": "Sensor 1","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
 {"sensor": "Sensor 2","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
 {"sensor": "Sensor 3","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
 {"sensor": "Sensor 4","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
 {"sensor": "Sensor 5","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
 {"sensor": "Sensor 6","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
 {"sensor": "Sensor 7","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
 {"sensor": "Sensor 8","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
 {"sensor": "Sensor 9","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
 {"sensor": "Sensor N","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}]

Bei einem einzelenen Sensor mit der selben Tiefe (Array=1, Sensordaten und objekt limit = 2 und im Objektwerte = 3) wird der Code im Broker richtig angezeigt.

Javascript:
"measurements": [
{"sensor": "Sensor 1","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}
]

Sobald aber zwei oder mehrere Sensoren hinzugefügt werden, spaltet sich das Array auf und direkt nach der ersten [ fügt sich ein {} hinein.

Beispiel mit zwei Sensoren:
Javascript:
"measurements": [
{},{ "sensor": "Sensor 1","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}},},
{ "sensor": "Sensor 2","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}}}

Beispiel mit 10 Sensoren:
Javascript:
"measurements":
[ {},{ "sensor": "Sensor 1","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}},},
{ "sensor": "Sensor 2","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 3","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 4","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 5","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 6","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor 7","value": 10,"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9},},
{ "sensor": "Sensor N","value": ,10"unit": "%","limits": {"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9}}}}

Folgende dinge habe ich auch schon ausprobiert:

Wenn ich dann ohne das Objekt und ohne den Inhalt von "limits:{}" arbeite, wird mit der gleichen Strukturtiefe in dem Array der Code im richtigen Format angezeigt und das Array auch wieder geschlossen.

Javascript:
"measurements":
[ {"sensor": "Sensor 1","value": 10,"unit": "%"}
 {"sensor": "Sensor 2","value": 10,"unit": "%"}
 {"sensor": "Sensor 3","value": 10,"unit": "%"}
 {"sensor": "Sensor 4","value": 10,"unit": "%"}
 {"sensor": "Sensor 5","value": 10,"unit": "%"}
 {"sensor": "Sensor 6","value": 10,"unit": "%"}
 {"sensor": "Sensor 7","value": 10,"unit": "%"}
 {"sensor": "Sensor 8","value": 10,"unit": "%"}
 {"sensor": "Sensor 9","value": 10,"unit": "%"}
 {"sensor": "Sensor N","value": 10,"unit": "%"}]

Bei verwendnung von der Tiefe 1 bei beiden bereichen sieht der Code wie folgt aus und somit auch nicht verwendbar:

Javascript:
"measurements": [
                                {"sensor": "Sensor 1","value": 10,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,},
                                { "sensor": "Sensor 2","value": ,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,},
                                { "sensor": "Sensor 3","value": ,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,},
                                { "sensor": "Sensor 4","value": ,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,},
                                { "sensor": "Sensor 5","value": ,"unit": "%","limits": {,"min_prc": 0,"max_prc": 10,"min_lim": 1,"max_lim": 9,}
                                }}}}}]

Ich hoffe meine Problemstellung ist somit ersichtlich und jemand hier weiß vielleicht in dieser Richtung einen passenden Lösungsansatz.
 
Zuletzt bearbeitet:
Zurück
Oben