# Grundlegendes zu SPS OPC-UA SAP



## WAR (19 Juli 2017)

Hallo @ all,

verstehe ich das richtig, wenn ich Variablen von  meiner SPS 1516 f an SAP schicken möchte, dann muss ich über ein Windows  PC/PG mittels SAP-PCo die Daten verschicken?
Oder kann die SPS direkt an SAP schicken?

So  verstehe ich es: In der 1516 f wird der OPC-Server aktiviert, damit  kann man dann über OPC-UA mit dem UA-Clint (Windows PC/PG) sprechen und  dann weiter mit SAP?

Beste Grüße


----------



## Thomas_v2.1 (22 Juli 2017)

Der OPC-Server ist passiv. Solange ihm ein Client nicht sagt "gib mir den Variablenwert von Variable xy" oder "schreibe Wert z auf Variable xy" macht er von sich aus nichts.
Ein aktives "Schicken" von Variablenwerten initiativ vom OPC-Server heraus ist nicht möglich. Üblicherweise verwendet man über OPC dann entsprechende Handshake-Signale.

Beispielsweise möchtest du von der SPS heraus der OPC-Client-Anwendung etwas mitteilen, diese führt eine Aktion aus und soll das Ergebnis der SPS mitteilen.
Du legst dazu in der SPS eine Variable die zyklisch vom OPC-Client gelesen wird. Wenn du der OPC-Client-Anwendung aus der SPS heraus etwas mitteilen willst, dann setzt du diese Variable auf 1.
Die Anwendung bekommt diese Änderung mit, führt eine entsprechende Aktion aus und teilt dir nach Beendigung der Aktion über Schreiben auf eine weitere Variable mit, dass die Aktion mit Erfolg oder mit Fehler beendet wurde. Wenn du das in der SPS mitbekommst, setzt du die Triggervariable in der SPS zurück und bist bereit für eine nächste Aktion.


----------



## samow (18 Oktober 2017)

Hallo,
wenn das SAP-PCo direkt der OPC Client ist, dann müssen hier die Variablenwerte direkt interpretiert werden. Genau wie Thomas sagt, wird ein Handshake benötigt. Setzt man noch eine Middleware ein, lassen sich solche Aufgaben auch aus SAP auslagern um flexibler zu bleiben. In dem Zusammenhang ist der OPC Router evtl. hilfreich: https://inray.de/produkte/kopplung-von-spsen-mit-sap-systemen/


----------



## Thomas_v2.1 (18 Oktober 2017)

@samow: Ich weiß nicht ob es sinnvoll ist, hier jetzt massenhaft alte Postings auszugraben um in der Antwort Werbung auf euer Produkt zu platzieren. Wenn das Thema aktuell ist und dem Fragensteller das bei seinem Problem weiterhilft finde ich das durchaus noch Ok.
Aber das was du hier machst ist Spam.


----------



## samow (20 Oktober 2017)

@Thomas_v2.1: Hallo, sorry, wenn das hier so rüber kam. Aber ich dachte eine drei Monate altes Thema wäre noch nicht wirklich zu alt, um darauf zu antworten. Im Zweifel hätte der OPC Router denke ich schon helfen können.


----------



## volker (28 November 2017)

Ich hol das Thema nochmal hoch weil ich auch ein paar Fragen zu OPC haben.
Auch bei  uns geht es um eine 1500er mit PCo-SAP (OPC-Client). Denke das ist aber übertragbar auf andere Server/Clients.

Habe auch mal mit jemanden aus der IT gesprochen. Aber so richtig wusste der auch nicht Bescheid.

Der PCo fordert eine Var (eine Var aus einem DB) an.
Was passiert jetzt genau?
Kopiert der Server nun den Variablenwert in eine Art Zwischenpuffer des Servers oder liest der PCo direkt aus dem DB.
Ich vermute mal Zwischenpuffer. Sonst würde die Einstellungen in der CPU zu kürzeste Aktualisierungszeit und Abtastzeit für mich keinen Sinn ergeben.
So ganz verstehe ich das aber nicht.
Gelesen habe ich. PCo (oder jede andere Client) fordert alle 10ms die Var an. Min Aktualisierungszeit steht aber auf 100ms. PCo bekommt also nur alle 100ms einen neuen Wert.
Wie funktioniert das da der Server ja nicht aktiv sendet?

Weiß der Client wann der neue Wert der Var bei ihm 'angekommen' ist?

Bei einer einzelnen Variablen, so sagte mir der IT-ler, ist das wohl so.
Bei einem Array (z.B of INT) ist das wohl nicht der Fall. Also der Client fordert nicht die einzelnen Vars aus dem Array an sondern diirekt das ganze Array.
Was ich schon mal gehört (oder wars gelesen?), habe ist, dass die Vars aus dem Array nicht zwangsläufig in der richtigen Reihenfolge ankommen wie sie im Array liegen.
Weiß der Client nicht wann alle Vars bei ihm angekommen sind?

Wir haben hier einen Studi der seine Masterarbeit über dieses Thema schreibt und nun diverse FB entwickelt um hier eine Kommunikation zu schaffen um sicherzustellen das das alles funktioniert.
Ich habe nicht die gerigste Ahnung was der da versucht zu bauen.
Werde die Tage mal mit dem sprechen damit er mir das mal erklären kann.
Ich kann mir irgendwie nicht vorstellen das bei der Entwicklung von OPC-UA solche Dinge nicht berücksichtigt worden sind.
Zumal immer geschrieben wird um den Transport brauch man sich nicht zu kümmern.

Standart wäre für mich...
Ich fülle einen DB mit Daten die der Clienet holen soll. Ich setze ein Bit 'Daten stehen bereit'. Ist dieses Bit 1 schreibe ich logischerweise keine neuen Daten in diesen DB.
Client holt die Daten und setzt ein Bit 'Daten abgeholt. PLC setzt beide Bits zurück und DB darf neu gefüllt werden.

Gibts es irgenwo Dokus wo der genaue Ablauf der Kommunikation beschrieben wird. Hab gegoogelt aber nicht wirklich brauchbares gefunden


----------



## samow (4 Dezember 2017)

Hallo!
Also bei OPC gibt es mehrere Verfahren. Synchron und asynchron und auch "vom Device" und "vom Cache". Bei asynchroner Kommunikation teilt der OPC Server dem PCo mit, wenn sich die Variable seiner Meinung nach geändert hat. Beim synchronen Verfahren wird ein aktiver Read auf den OPC Server vom PCo ausgelöst. Hierbei gibt es einen von OPC definierten Parameter, der besagt ob direkt vom Device oder vom Cache gelesen werden soll. Ich weiß nicht, ob PCo dies implementiert.
10ms ist dabei eh recht ambitioniert. Die 1500er schafft das vielleicht, aber unter 100ms würde ich nicht gehen.
Die Konsistenz von Daten steuert der OPC Server. Array Datenpunkte sind nach unseren Erfahrungen bei guten OPC Server konsistent. Aber halt nicht typisiert. Einzelne Datenpunkte sind nicht konsistent. Hier kann der Aktualisierungsstand variieren. Je nach aktuellem Stand der Abholung von Daten aus der SPS.
Man kommt hier selten um einen eigen Handshake herum. Das Handshake bit zum Beispiel ist dann am Ende des DB besser aufgehoben, da der OPC Server ja immer von oben anfängt. Aber auch hier kann natürlich ein schlechtes Timing dafür sorgen, dass im Handshake bit schon die 1 steht, aber in der Datenpunkten noch der alte Wert.

Wir lösen das im OPC Router über verschiedene Gruppen und mehrfaches Lesen zur doppelten Absicherung. Auch sollte man natürlich einen hochwertigen OPC Server verwenden (wir nehmen den KepWare).

Unsere Hoffnung ist, dass es mit den komplexen Strukturen, die OPC UA definiert, an dieser Stelle Besserung geben wird.

Grüße
Sören
inray.de


----------

