TIA OPC UA auf S7-1500

Mephisto

Level-2
Beiträge
242
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Ich möchte mit einer CPU 1517-3 PN/DP via OPC UA Server mit einem Unified Automation OPC UA Client kommunizieren.
Ich möchte große Arrays übertragen. Eine gültige Kommunikation erhalte ich nur bei einer maximalen Array-Größe von 65536 Elementen (in meinem Fall: INT).
Ich kann jedoch mehrere Arrays mit dieser maximalen Größe abfragen, wobei die Performance stark einbricht (Aktualisierung alle 5-10sec.)
Nun meine Fragen:
  1. Woher kommt die 65536 Grenze? Server oder Client?
  2. Wie liest der Client das Array ein? R/W, Registered R/W oder Subscribed? (Subscribed würde mir am besten passen, da ich zyklisch übertragen möchte).
Ich muss für ein Projekt (Nein, kein Hornbach-Projekt) große Datenmengen übertragen und bin aktuell am Versuchen, wo das Mengengerüst an seine Grenzen stößt. Also in Punkto Größe und Übertragungsintervall. Leider findet man dafür keine Zahl. Weder bei Siemens noch mit Google.
 
Das ist die Grenze eine UINT, deshalb.

Ich würde niemals den OPC-Server auf der 1500er gebrauchen bei solchen Mengen an Daten. Wie viel kostet dort die Aktivierung? Softing in seiner neusten Version kann auch auf die Optimierten Bausteine der 12 und 1500er zugreifen. Ich würde dir den empfehlen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
65536 INTs = 128 kB. Davon mehrere.
Und 5 Sekunden Takt ist angeblich zu langsahm.
Also, genau wieviel Daten und genau welchen Takt brauchst du ?

Deltalogic hat ein PC Treiber der ohne OPC arbeitet. Es sollte effizienter sein als ein OPC Verbindung. Leider gibt es kein Info auf Deltalogics webseite genau welche Leistungsdaten es hat. Aber du kannst ein Trial ausprobieren. Wenn es nicht geht mit ein direkten Treiber, dann geht es bestimmt auch nicht mit OPC.

Vielleicht ist besser die Daten zu behandeln innerhalb von der Steuerung.
Mit ein S7-1507S Soft-SPS (für IPCx27E) und das S7-1500 ODK kann man sehr viel machen.

Es wundert mich was du machen sollst mit so viel Daten.
Z.b. 3-mal arrays mit 65536 INTs produziert 384 kB pro Sekunde, 1.32 GB pro Stunde, 31 GB pro Tag.
 
Hallo!
Mir persönlich geht es darum, was MÖGLICH ist. Das ganze soll eine gepufferte Datenübertragung werden. In Der SPS werden Daten in ein Array, dass als Umlaufarchiv fungiert gespeichert.
Der PC liest den Teil des Arrays, der sich seit seinem letzten Lesen geändert hat. Es wird also nicht das gesamte Array ausgelesen. Wenn ich damit rechne, dass der PC alle 300ms neu lesen kann, rechne ich mit einer zu übertragenden Nutzdatenmenge von ca. 240kByte in Summe.

Das ein UINT 65536 Werte darstellen kann, weiß ich auch. Meine Frage war aber: Kann der OPC UA Server der S7-1500 keine größeren Array verwalten oder kann es der UA Expert Client nicht lesen? Ich kann beim Client leider nur ein einzelnes Element oder das ganze Array lesen, aber keinen Teilbereich. Oder geht das doch irgendwie?

Die Daten, die ins Array geschrieben werden, werden mit einer Zykluszeit von 1ms oder eventuell auch 500µs eingelesen. Da scheidet dann die S7-1507S schonmal aus, weil ich nur mehr PN IRT fähige Komponenten verwenden kann. Auch PN RT scheidet hier aus.

Zum Preis: Siemens gibt den Listenpreis für den OPC UA Server Large mit 300€ an.

Das Schöne daran: Der Kunde kann für seine PC-Software verschiedene Steuerungen einsetzen, da alle über OPC UA direkt angesprochen werden können und keine Zusatzsoftware am PC benötigen.

Die Alternativen wären:
Softnet OPC DA mit dem Nachteil der Software am PC (+Lizenz) und ich muss die DBs absolut adressieren
Softnet OPC UA mt dem Nachteil der Software am PC (+Lizenz)

Oder habt ihr einen Vorschlag für mich, wie der Kunde direkt auf meine optimierten DBs zugreifen kann?

Primär gilt meine Frage jedoch nach wie vor OPC UA wie bereits in meinem ersten Post beschrieben.
 
Nach lesen dein letzten Eintrag, verstehe ich noch nicht welchen Datenrate das du brauchst.
Die Nutzdaten kommen mit 500µs Takt. Wieviele Daten ?

Wenn du ein grossen Array als Umlaufarchiv einrichtet, und dein Kunde nur ein Teil davon ablesen soll, wie weiss er welche Zellen von den Array das er lesen soll ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Als Beispiel: Ich lese alle 500µs 256Byte ein und schreibe die in ein Array. Das Array soll groß genug sein, um 1sec. puffern zu können. Der PC liest alle 300ms den Teil des Array, der neu ist aus.
Woher weiß es der PC? Die Steuerung inkrementriert bei jedem Schreibzyklus einen Zähler. Der PC vergleicht seinen gespeicherten Zählerstand mit dem aktuellen und weiß von wo bis wo er lesen muss. Und nun möchte ich drei dieser Arrays auslesen.
 
Näher erklärt:

Ursprünglich hast du erklärt das du ein grossen Array (oder mehrere grossen Array) übertragen willst.
Aber eigentlich willst du nur die Daten senden die sich geändert hat, was Sinn macht.
Deswegen, wenn du ein Pufferung machen willst, kannst du das machen, aber die Daten die du per OPC UA übertragen willst, soll nur ein kleinen Teil von den grossen Array sein.
Deswegen erstellst du en ein kleinere "Sendefach". In dein SPS Program kopierst du dann jeden Sekunde die geänderte Daten von Pufferarray ins Sendefach. Im Sendefach hast du dann auch den Zähler.
Der OPC UA Client holt dann die Daten von Sendefach.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das bringt so nichts. Wenn ich aus meinem großen Puffer Daten in einen kleineren Puffer schreibe, kann ich gleich auf den großen Puffer verzichten. Ich möchte ja Unterbrechungen in der Kommunikation überbrücken.
Und ja, der Client sollte immer nur einen kleinen Teil eines großen Array lesen. Dazu müssen aber Client und Server fähig sein, dieses große Array zu adressieren. Zudem kann es im Extremfall vorkommen, dass das gesamte Array übertragen werden muss (z.B.: nach Sendeausfall).
 
Aber nun noch eine Frage zu dem FAQ:
Es ist hier von Elementen die Rede. Ist ein Element ein Array oder ist ein Element ein Array-Element?
 
zunächst mal: DANKE für den FAQ Link.

Jetzt noch eine Frage zum FAQ:
Es ist die Rede von einem Beispiel, indem Elemente vom Typ WSTRING übertragen wurden.
Ein undefinierter WSTRING ist ja 256Byte lang. Also könnte ich doch durch Manipulation meines Datentyps mein Array vergrößern.
Ein Beispiel:
Array[1..10000]of Int ich kann 10000 INT übertragen
Array[1..10000]of Dint ich kann 20000 INT übertragen
Array[1..10000]of Lint ich kann 40000 INT übertragen
Ist meine Folgerung so richtig?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Diesen FAQ redet über "Index Range Support". Also, ob der OPC UA Client ein Teil von ein Array lesen oder schreiben kann, oder nur den ganzen Array.
Es ist für WinCC v7, aber ich denke es gelt jeder OPC UA Client.
https://support.industry.siemens.com/cs/cz/en/view/109746486

Deine Frage über der Definition von "Element", bin auch nicht 100% sicher. Aber wenn man 10000 grosse Arrays mit 50 ms übertragen kann, dann wurde es mich überraschen.

Wenn du die Daten "asynkorn" übertragen können willst, dann einfach den von der OPC UA Client gelesene Zähler an den SPS zurückschreiben.
Dann kann der SPS steuern welche Daten von Puffer gelesen werden, und es kann sogar ein Alarm auslösen wenn das abholen von Daten bei der OPC UA Client zu langsahm ist.
 
Zurück
Oben