Workflow Programmierung
In diesem Abschnitt wird beschrieben, wie die Funktionsbausteine der TC3 IoT Functions SPS-Bibliothek in bewährter Weise zu verwenden sind. Der Workflow der Programmierung umfasst die folgenden Schritte:
- Aufruf von FB_IotFunctions_Connector.Execute()
- Überprüfung auf allgemeine Fehler
- Überprüfung auf Lese-/Schreibfehler
- Daten lesen
- Daten schreiben
Die Code-Ausschnitte in diesem Abschnitt basieren auf den folgenden Deklarationen:
PROGRAM MAIN
VAR
fbConnector : FB_IotFunctions_Connector;
fbRead : FB_IotFunctions_Message;
fbWrite : FB_IotFunctions_Message;
nReadError : UINT;
nWriteError : UINT;
nReadData : UINT;
nIn : UINT;
nOut : UINT;
bWrite : BOOL;
END_VAR
Aufruf von FB_IotFunctions_Connector.Execute()
Es wird dringend empfohlen, die Execute-Methode auf der FB_IotFunctions_Connector-Funktionsbausteininstanz als eine der ersten Anweisungen aufzurufen. Diese Methode ist für die Behandlung von Online-Change, die Behandlung von Timeouts und die Kommunikation mit dem TC3 IoT Data Agent zuständig.
fbConnector.Execute();
Überprüfung auf allgemeine Fehler
Sobald die Execute-Methode ausgelöst wurde, sollte der bError-Ausgang des FB_IotFunctions_Connector-Funktionsbausteins überprüft werden, um Fehler bei der Kommunikation mit dem TC3 IoT Data Agent festzustellen.
IF fbConnector.bError THEN
...
END_IF
Überprüfung auf Lese-/Schreibfehler
Wenn der bError-Ausgang der Funktionsbausteininstanz des Connectors TRUE ist, prüfen Sie die individuelle Fehlermeldung des Request-Funktionsbausteins auf Fehler, um sie richtig zu behandeln. Um einen Fehler zu quittieren und zu verhindern, dass er erneut auftritt, rufen Sie die Reset-Methode des Funktionsbausteins auf.
IF fbConnector.bError THEN
IF fbRead.bError THEN
nReadError := nReadError + 1;
fbRead.Reset();
END_IF
IF fbWrite.bError THEN
nWriteError := nWriteError + 1;
fbWrite.Reset();
END_IF
END_IF
Bevor Sie einen neuen Vorgang wie Lesen oder Schreiben starten, überprüfen Sie alle relevanten Statusabfragen, da diese Vorgänge alle Statusinformationen in den Strukturen ST_IotFunctionsMessage und ST_IotFunctionsRequest zurücksetzen.
Daten lesen
Der Lesevorgang empfängt Daten aus dem Puffer und speichert diese Daten in einem Symbol. Der Wert des angegebenen Symbols wird verwendet, um neue Daten mit früheren Daten zu vergleichen. Wenn neue Daten empfangen wurden, wird bDataAvailable auf TRUE gesetzt. Wenn sich der aktuelle Wert des Symbols vom vorherigen Wert unterscheidet, haben sich die Daten geändert und bDataChanged wird auf TRUE gesetzt.
Das heißt, wenn Sie auf neue Daten reagieren wollen, die sich von den zuvor empfangenen Daten unterscheiden, prüfen Sie den Ausgang bDataChanged. Dieser Ausgang wird nur dann auf TRUE gesetzt, wenn der Empfangspuffer eine Änderung des zuvor empfangenen Pakets anzeigt.
IF fbRead.bDataChanged THEN
...
END_IF
Wenn Sie daran interessiert sind, Daten unabhängig von den Daten zu empfangen, die sich von der zuvor empfangenen Payload unterscheiden, prüfen Sie stattdessen den Ausgang bDataAvailable.
IF fbRead.bDataAvailable THEN
...
END_IF
Daten schreiben
Das folgende Beispiel zeigt, wie man einen bedingten Schreibvorgang einrichtet, der nur ausgeführt wird, wenn das bWrite-Flag auf TRUE gesetzt ist. Stellen Sie vor dem Aufruf der Write-Methode sicher, dass der Funktionsbaustein nicht aktiv ist. Wenn Sie in eine belegte Funktionsbausteininstanz schreiben, kehrt der Aufruf zurück, ohne den Schreibvorgang zu starten.
IF bWrite THEN
IF NOT fbWrite.bBusy THEN
bWrite := FALSE;
fbWrite.Write(ADR(nOut), SIZEOF(nOut));
END_IF
END_IF