# Kunden Adressierung



## BaumimGarten (2 Dezember 2021)

Hi Leute,

Kann mir bitte jemand Hilfestellung für mein Problem geben, wie ich das gestalten soll.
Ich habe ein Programm geschrieben in den Daten aus Anlagen eingespeist werden sollen und in einer Weboberfläche dargestellt werden sollen. 
Da das System verschiedene Werte aus der Anlage verarbeiten soll, die ich zum Stand jetzt noch nicht weiß, ist die Frage wie ich die neuen Werte bzw. Variablen in meinem Programmcode adressieren soll. Der Kunde soll nämlich anstatt in meinem Programm seine neu erstellten Variablen zu adressieren, einfach nur seine Datenwerte auf bestimmte Speicherorte bzw. Variablen schreiben. 
Der Datensatz der in die Weboberfläche eingespeist werden soll  ungefähr so aussehen:

'{"ts":+1638436570748,"values":{"Value1":+0.0000000000000E+0,"Value2":+0.0000000000000E+0,"Value3":+0.000000E+0}}'

Ich hab schon ein bisschen in Foren rumgeguckt und Sachen wie indirekte oder absolute Adressierung gefunden genauso wie die Peek und Poke Funktion oder Any Pointer von Tia 

Ich arbeite auf einer 1511T Steuerung mit TIA 17.


----------



## MFreiberger (2 Dezember 2021)

Moin BaumimGarten,

wie kommunizierst Du denn mit dem Kunden?
- OUC?
- OPC UA?
- S7-Verbindung?
- ...

Hinweis: Peek Poke und AnyPointer sollten nicht das Mittel der Wahl sein. Zudem stellt sich ja erstmal die Frage, wie Du die Daten zur Verfügung stellst? Optimiert (ohne absolute Adresse) oder nicht optimiert (mit absoluter Adresse)?

VG


MFreiberger


----------



## BaumimGarten (2 Dezember 2021)

Danke für die schnelle Antwort.
Ich kommuniziere über MQTT und das SPS Programm soll auf den Anlagen des Kunden laufen. 
Also die SPS erhält über die Anlage zum Beispiel ein Temperaturwert und diese soll mit dem dazu gehörigen Zeitstempel über MQTT auf eine Weboberfläche geschickt werden. 
Es geht mir hauptsächlich um das Thema der Adressierung, da ich alles andere schon Fertig programmiert und getestet habe. Ich hab bis jetzt simulierte Werte umgewandelt und über MQTT in der Weboberfläche als Graphen ausgegeben. 
Ich will dem Kunden quasi nur einen Weg bereiten um seine eigenen Werte, passend auf seine Anlage, an das Programm anbinden zu können, ohne groß was im Programm zu ändern.
Falls noch Unklarheiten sind, bitte einfach fragen.


----------



## MFreiberger (2 Dezember 2021)

BaumimGarten schrieb:


> Es geht mir hauptsächlich um das Thema der Adressierung, [..]


Ja, und genau da zielt meine Frage bzgl. optimiertem oder nicht optimiertem DB hin.

Wenn Du optimierte DBs angelegt hast, erhälst Du keine absolute Adresse (vom der Speicherplatzadresse mal ganz abgesehen).
Nur bei nicht optimierten DBs kannst Du auf absolute Adressen zugreifen. 

Vielleicht geht Deine Frage aber auch eher in die Richtung nach der Syntax, mit der Du bei der MQTT-Programmierung auf die absoluten Adressen eines nicht optimierten DBs zugreifst?
Da kann ich Dir leider nicht helfen, da ich von MQTT keine Ahnung habe.

Vielleicht kannst Du mal etwas Programmcode bzw. den Inhalt eines DB posten. Dann kann man vielleicht besser unterstützen.

VG

MFreiberger


----------



## BaumimGarten (2 Dezember 2021)

ich kann ja die Optimierung jeder Zeit aufheben, das würde meinen Programm nicht viel abbrechen. Hab ich schon getestet
Für die Adressierung hab ich auch die Optimierung ausgestellt und kann die Offsets sehen nur leider hab ich damit noch nicht viel gearbeitet um genau zu wissen wie ich die Adressierung bzw. das Pushen auf den Speicherort mache.
Deswegen kam ich auf die Peek and Poke Funktion. 
Meine erste Idee ist, dass man eine Eingabe macht, in der Dateneingänge bzw. die Variablen auf ein Stück DatenArray "gepoket" wird und dann ein Zähler das Array ausliest um weiter Variablen über die Eingabe auf die nächsten freien Stellen des Arrays zuschreiben.

Ich hoffe ich hab das einigermaßen erklärt.


----------



## MFreiberger (2 Dezember 2021)

Moin,

Du willst also einen FIFO mit Eingaben bespaßen und über die Programmierung der Verbindung (egal ob MQTT oder irgend etwas anderes) soll der FIFO ausgelesen werden und der Austrag gesendet werden?
Also quasi ein Sendepuffer oder Sendestack?

Da würde ich etwas anders vorgehen:
für den Puffer einen optimierten DB verwenden. Das Eintragen/Austragen des Puffers in SCL programmieren. Den Austrag auf eine adressierbare Variable (Merker, nicht optimierter DB, ..) schreiben und versenden.

VG

MFreiberger


----------



## Blockmove (2 Dezember 2021)

Schmeiß MQTT in die Tonne und nimm OPC UA.
Bei OPC UA kannst du den Variablenhaushalt einer Steuerung auslesen.
Du brauchst nichts über Speicherort oder dergleichen wissen.
Die Steuerung sagt dir Variablennamen, Typ, Read/Write.
Viel, viel einfacher als MQTT


----------



## BaumimGarten (2 Dezember 2021)

So ähnlich ich würde es eher als Sendestack verbuchen. 



MFreiberger schrieb:


> Das Eintragen/Austragen des Puffers in SCL programmieren. Den Austrag auf eine adressierbare Variable (Merker, nicht optimierter DB, ..) schreiben und versenden.


Wie würdest du denn sowas im Detail machen ?


----------



## BaumimGarten (2 Dezember 2021)

Blockmove schrieb:


> Schmeiß MQTT in die Tonne und nimm OPC UA.
> Bei OPC UA kannst du den Variablenhaushalt einer Steuerung auslesen.
> Du brauchst nichts über Speicherort oder dergleichen wissen.
> Die Steuerung sagt dir Variablennamen, Typ, Read/Write.
> Viel, viel einfacher als MQTT


wenn das nur so einfach wäre xD 
muss das halt in ein System einspeisen welches mit MQTT kommunizieren soll. 
Wenn es nach mir gehen würde, hätte ich da schon lange OPC UA benutzt ganz besonders den Siemens MQTT Baustein kannst du echt in die Tonne treten.


----------



## Blockmove (2 Dezember 2021)

BaumimGarten schrieb:


> wenn das nur so einfach wäre xD
> muss das halt in ein System einspeisen welches mit MQTT kommunizieren soll.
> Wenn es nach mir gehen würde, hätte ich da schon lange OPC UA benutzt ganz besonders den Siemens MQTT Baustein kannst du echt in die Tonne treten.


Bevor ich mir MQTT auf einer 1500er antue, nehm ich ein OPC-UA - MQTT - Gateway.


----------

