SPS-Client
Dieses SPS-Beispiel zeigt die Verwendung der TwinCAT Analytics Storage Provider Bibliothek. Der Beispiel-Code zeigt das Lesen und Schreiben. Damit das Beispiel in sich geschlossen funktioniert, wird sowohl die Verwendung des Analytics Loggers für das Schicken von Messdaten an einen MQTT Message Broker gezeigt wie auch das Einspielen der historischen Daten über den Analytics Stream Helper.
Grundlage ist ein entsprechend aufgesetzter nativer MQTT Message Broker und ein Analytics Storage Provider Service.
Das SPS Beispiel zeigt folgende Ablaufschritte:
- Analytics Logger: Stream von Variablen aus einer Globalen Variablen Liste an einen MQTT Message Broker.
- Analytics Storage Provider: Starten und stoppen von Stores und Aufnahmen, sowie Lesen von Aufnahmen und Lesen der historischen Daten.
- Analytics Stream Helper: Empfangen der historischen Daten vom Analytics Storage Provider und das Mappen der Daten in eine Globale Variablen Liste für die historischen Daten.
Analytics Storage Provider GUID Glossar
Bei der Verwendung des Storage Providers treten verschiedene GUIDs auf, die zur Identifikation von Services und Daten notwendig sind. Nachfolgend wird beschrieben, woher die GUIDs stammen, welchen Zweck sie erfüllen und wo sie ggf. eingesehen werden können.
Der Analytics Daten-Stream welcher vom Analytics Logger verschickt wird, wird im Grunde von drei Parametern beschrieben:
- Topic [STRING]
Wohin werden die Daten geschickt? - TwinCAT SystemID [GUID]
Von welchem TwinCAT System werden die Daten verschickt? - LayoutID / Symbol Info ID [GUID]
Wie sehen die Daten aus? Die GUID ist ein Hash über die Symbolinformationen.
![]() | Um Aufzeichnungen am Storage Provider zu identifizieren, werden die oben genannten Parameter benötigt. |
Auf einem MQTT Message Broker können mehrere Storage Provider verbunden sein. Um einen Storage Provider zu identifizieren, werden zwei Parameter benötigt.
- MainTopic [STRING](Wo werden die Daten/Services bereitgestellt?)
- ProviderGuid [GUID](Eindeutige Kennung des Services)
Um zu erkennen, wer eine Aufnahme am Storage Provider gestartet hat, gibt es die RecorderGuid. Diese GUID wird automatsch an jedem Storage Provider Manager oder Client generiert und an den StartRecord-Kommandos angehängt. In der SPS kann diese frei am StartRecord-Kommando vergeben werden.
Ab der Version 3.2.14 können am StartRecord-Kommando drei weitere GUIDs angegeben werden.
- Storage [GUID]
Diese GUID gibt an, in welchen Storage die Daten abgespeichert werden sollen. Die GUID wird im Analytics Storage Provider Configurator automatisch generiert. Sie kann dort, oder im Analytics Storage Provider Manager ausgelesen werden. Wird keine GUID angegeben wird der Master Storage verwendet. - SubBroker/DataBroker [GUID]
Diese GUID gibt an, von welchem Data Broker der Analytics Stream entgegengenommen werden soll. Der Analytics Storage Provider bietet die Möglichkeit, von mehreren Messagebrokern aufzuzeichnen. Die GUID wird im Analytics Storage Provider Configurator automatisch generiert. Sie kann dort oder im Analytics Storage Provider Manager ausgelesen werden. Wird keine GUID angegeben, wird der Master Data Broker verwendet. - DataKey [GUID]
Mithilfe des DataKeys können laufende Aufnahmen gefunden, ausgelesen und überwacht werden. Dieser DataKey kann in der SPS frei gewählt werden. Wird kein DataKey angegeben, wird automatisch vom Storage Provider ein DataKey generiert.
Nachfolgend einige Screenshots, die die oben beschriebenen Parameter und GUIDs enthalten.
Topic / TwinCAT System ID / Layout (System Info ID)

Storage Provider MainTopic / ProviderGuid / RecorderGuid

Storage GUID

Data Broker GUID

Beispiel-Code-Architektur
Alle relevanten Stellen der Konfiguration und des Programmcodes sind in dem nachfolgenden Bild markiert:

Stream Helper
Für den Empfang der historischen Daten, die von dem Analytics Storage Provider per MQTT verschickt werden.
Variable Live/Historisch
Die GVL ist für die Live-Daten und die GVL_Hist ist für die historischen Daten.
Storage Provider Command Helper Functions
Diese Helper-Funktionen erzeugen die Kommandos für die Kommunikation mit dem Storage Provider Service im JSON-Format.
MAIN Programm
Das Main-Programm ruft die Kommunikation zu dem Analytics Storage Provider auf. Das Main-Historical-Programm realisiert das Mapping der historischen Daten von dem Stream Helper in die GVL_Hist.
Analytics Logger
Sendet die Variablen der GVL an einen MQTT Message Broker.
Beispiel Starten
Hinweis | |
Zu geringer Router Memory kann zu System Abstürzen führen Erhöhen Sie den Router Memory in den Echtzeit Einstellungen auf 256 MB. Zusätzlich wird empfohlen, die maximale Stack Size der Global Task Konfiguration auf 512KB zu erhöhen. |
Bevor das Beispiel gestartet werden kann, müssen Sie an drei unterschiedlichen Stellen den von Ihnen verwendeten MQTT Message Broker einstellen.
Analytics Stream Helper:

Analytics Logger:

MAIN-Programm:

Anschließend müssen Sie das sMainTopic und die sProviderGUID für den FB_ALY_StorageProvider ändern. Zu finden ist diese wie oben in diesem Dokument beschrieben.

Für die Steuerung des Beispiels gehen Sie nun in das MAIN Programm. Mit dem Enum eCtrl können Sie die Aktion einstellen, die Sie durchführen möchten. Es stehen zur Auswahl:
- ReadASPDescription (Beinhaltet auch die Storage Beschreibung)
- ReadDataBroker
- StartStorage
- ShutdownStorage
- StartRecord
- StopRecord
- IsRecordingRunning
- ReadHistoricalStreams
- ReadRecords
- GetHistorical
Mit einer steigenden Flanke an der Variablen bExecute wird die im Enum gewählte Aktion ausgeführt. Sollten Sie mehrere Records gemacht haben, können Sie dies in dem Array aRecordInfo einsehen. Mit dem Index ist es dann möglich, die unterschiedlichen Records auszuwählen. Die Zeitspannen werden ebenfalls angezeigt, diese könnten Sie theoretisch auch noch innerhalb der Zeitspanne anpassen. Dafür müssten Sie die Logik des Beispiels in der Helfer-Funktion F_CreateAlySPGetHistCmd entsprechend anpassen.
Die oben im Dokument herausgesuchte Storage Provider Recorder GUID kann optional in der SPS in der Funktion F_CreateAlySPStartRecordCmd gesetzt werden. Theoretisch kann es eine beliebige GUID sein, sie dient nur der Identifikation des Recorders.
Download: Beispiel