OnChange-Mechanismen
Der OnChange-Mechanismus ist vorrangig für die Verwendung mit dem SendDataAsString-Mechanismus vorgesehen. Es gibt verschiedene Hinweise zu der Nutzung dieses Mechanismus.
Unterschied der verschiedenen Methoden
Die SendData-Methode und die SendDataAsString-Methode werden als Retain-Nachrichten gesendet. Das hat den Effekt, dass eine neu verbundene App automatisch die zuletzt gesendeten Daten zur Verfügung hat, auch wenn gerade keine Daten gesendet werden.
Wenn die jeweiligen OnChange-Methoden verwendet werden, werden die Nachrichten nicht als Retain-Nachrichten gesendet. Bei einer neuen Verbindung sollte der aktuelle Stand der Daten als Retain-Nachricht gesendet werden, damit auch die neu verbundene App-Instanz den aktuellen Stand der Daten zur Verfügung hat. Weitere Informationen zu den OnChange-Methoden können unter SendData_OnChange und SendDataAsString_OnChange entnommen werden.
Hinzufügen von Variablen/Widgets
Wenn der SendDataAsString-Mechanismus verwendet wird, muss ein bestimmter Aufbau des JSON-Dokuments berücksichtigt werden. Wenn zwischen zwei Aufrufen Änderungen (Hinzufügen/Löschen oder Anpassen) am Aufbau gemacht werden, sind folgende Punkte zu beachten:
- Wird eine Variable/ein Widget hinzugefügt und es ist keine Änderung der Reihenfolge gewünscht, kann der Parameter ForceUpdate auf FALSE bleiben.
- Wird eine Variable/ein Widget hinzugefügt und es ist eine Änderung der Reihenfolge gewünscht, muss der Parameter ForceUpdate für einen Aufruf auf TRUE gesetzt werden. Anschließend sollte er wieder auf FALSE gesetzt werden.
- Wird eine Variable/ein Widget gelöscht, muss die Seite in der App einmal geschlossen und wieder geöffnet werden.
- Wird eine Variable/ein Widget in Bezug auf die Metadaten verändert (bspw. Umkonfiguration eines Widgets) muss ForceUpdate für einen Aufruf auf TRUE gesetzt werden, ansonsten werden nur die Werte des Widgets aktualisiert. Anschließend sollte er wieder auf FALSE gesetzt werden.
Weitere Hinweise
- Der Parameter bNewAppSubscribe des FB_IotCommunicator-Bausteins geht für einen Zyklus auf TRUE, wenn sich eine neue App-Instanz mit dem Topic auf dem Message Broker verbindet. Durch diesen Parameter kann der richtige Zeitpunkt zum Senden einer Retain-Nachricht identifziert werden.
- Der Parameter nActiveAppInstances des FB_IotCommunicator-Bausteins gibt die Anzahl an verbundenen App-Instanzen an. Wenn keine App verbunden ist, kann auf das Senden von Daten verzichtet werden, um Performance und Datenmenge einzusparen.
Aufbau TwinCAT JSON
Die TwinCAT IoT Communicator-Produktpalette benutzt für die Kommunikation ein JSON-Format mit dem Namen TwinCAT JSON: Im Folgenden wird der Aufbau eines TwinCAT JSON-Dokuments am Beispiel der Widgets Steckdose und Lüftung beschrieben.
{
"Timestamp" : "2022-08-04T07:15:06.176",
"GroupName" : "Widget Testpage",
"Values" : {
"sPageDesc" : "TwinCAT JSON Page",
"stPlug" : {
"sDisplayName" : "",
"bOn" : true,
"sMode" : "Manual",
"aModes" : [ "Manual", "Automatic" ]
},
"stVent" : {
"sDisplayName" : "",
"bOn" : true,
"nValue" : 725,
"nValueRequest" : 400,
"sMode" : "Manual",
"aModes" : [ "Manual", "Automatic" ]
}
},
"MetaData" : {
"sPageDesc" : {
"iot.DisplayName" : "Info",
"iot.ReadOnly" : "true"
},
"stPlug" : {
"iot.DisplayName" : "Plug Widget",
"iot.ReadOnly" : "false",
"iot.WidgetType" : "Plug",
"iot.PlugModeVisible" : "true",
"iot.PlugModeChangeable" : "false"
},
"stVent" : {
"iot.DisplayName" : "Ventilation Widget",
"iot.ReadOnly" : "false",
"iot.WidgetType" : "Ventilation",
"iot.VentilationSliderVisible" : "true",
"iot.VentilationValueRequestVisible" : "false",
"iot.VentilationModeVisible" : "true",
"iot.VentilationModeChangeable" : "false"
},
"stVent.nValue" : {
"iot.Unit" : "ppm",
"iot.MinValue" : "400",
"iot.MaxValue" : "1400"
}
},
"ForceUpdate":false
}
Bereich | Beschreibung |
---|---|
Timestamp | Muss pro Nachricht einen Timestamp im Format: "YYYY-MM-DDThh:mm:ss.fff" enthalten z. B. "2022-08-04T07:15:06.176". |
GroupName | Name des Einstiegsknotens des Communicator-Bausteins in der App. |
Values | Die anzuzeigenden Werte, angefangen auf der ersten Seite, mit anschließender Verschachtelung. |
MetaData | Alles, was in SPS-Attributen umgesetzt ist (bspw. die Konfiguration der Widgets). |
ForceUpdate | Optionaler Parameter. Wird beim OnChange-Mechanismus dafür eingesetzt, nach Änderungen ein Update zu triggern. Genauere Informationen unter OnChange-Mechanismen. |