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:

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