Tipps für Kommunikation zu S7-1500

frosch

Level-2
Beiträge
13
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

jetzt mal eine Frage an die Profis der Kommunikation:

Ich habe in einem Projekt eine S7-1515SP PC (open controller mit Windows) und soll aus einer übergeordneten Anwendung Daten aus der SPS auslesen, was berechen und danach wieder in die SPS schreiben.

Die Daten, die gelesen werden sind nicht viele (2x Real), nach dem berechnen bekomme ich ein Array mit mehr als 100.000 Einträgen, die je Eintrag 2x real und 1x byte beinhalten. Und, das soll dann in einen DB geschrieben werden. Damit kann ich nur einen "optimierten DB" verwenden. Somit fallen z.B. "libnodave" oder "snap7" raus.

In VBA habe ich schon eine Anwendung geschrieben, die über OPC UA funktioniert. Leider ist das recht langsam. Zudem soll die Anwendugn um einige Funktionen erweitert werden. Also kann ich sie auch grade neuschreiben.

Welche Art der Kommunikation könnt ihr empfehlen? Blockweise schreiben der Daten über OPC UA oder welche Möglichkeiten gibt es? Am liebsten würe mir, wenn ich das Array komplett schreiben könnte.
Während des schreibens steht die Anlage, hier spielt die Zykluszeit keine Rolle.
Vom VBA möchte ich weg, VB.net würde ich mir noch zutrauen, C#.net eher nicht.

Hat jemand eine gute Idee?
 
Zuletzt bearbeitet:
Also Snap7 kann auch BSEND/BRECV, was bei der 1500er angeblich 65535 als max. Nutzdatengröße beherrscht. Das könnte man unter Verwendung von z.B. 20 verschiedenen R_IDs in Array-Bereiche stückeln, sodass man im SPS Programm wenig Aufwand hat um das alles wieder zusammenzusetzen.

Rein TCP/IP ist natürlich auch möglich, da muss man aber schon etwas Erfahrung haben um das robust zu bekommen, gerade wenn verschiedene Teile zusammengesetzt werden müssen, da würde ich mir noch ein zugeschnittenes Protokoll auf TCP aufgesetzt selber überlegen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sinatic Net als OPC UA server ist wesentlich performanter als die in die S7 CPU integrierte OPC UA server.

Alternativ konnte Accon AG Link sein. Dies kann optimierte Bausteine lesen und schreiben und ist noch performanter als ein PC bassierte OPC UA server.
 
Die Daten, die gelesen werden sind nicht viele (2x Real), nach dem berechnen bekomme ich ein Array mit mehr als 100.000 Einträgen, die je Eintrag 2x real und 1x byte beinhalten.
mich würde mal interessieren was das für 100000 datensätze sein sollen. was wird denn da so berechnet?
 
mich würde mal interessieren was das für 100000 datensätze sein sollen. was wird denn da so berechnet?
Guten Morgen,

Die Daten setzen sich aus einer X und einer Y Koordinate (Real) und einem Triggerbyte zusammen. Es handelt sich um einer Presse/Stanze, die bis zu 400.000 Löcher in ein Blech stanzen soll. Dabei ist ein max. Fahrweg von 20mm in 150ms eine Herausforderung gewesen, wobei die Max.-Grenzen (Geschwindigkeit und Anzahl Stnazungen) nicht gleichzeitig bzw. nur selten benötigt werden.

Zum berechnen der Positionen benötigen wir ein "Tool" welches alle Positionen im Voraus berechnet und in der SPS ablegt um von jeder beliebigen Position aus zu starten. An sich, ein sehr interessantes Projekt.

Simatic Net als OPC UA wäre noch eine Alternative. Welches Produk würde dann benötigt werden? Ich kann grade nur das im folgenden Link finden. Hier ist leider kein Verweis auf das entsprechende Produkt drin - oder ich sehe den Wald vor lauter Bäumen nicht.

Simatic OPC Server
 
Zuviel Werbung?
-> Hier kostenlos registrieren
AGLink von Deltalogic kann direkt aus optimierten DBs lesen.

 
Vielen Dank für alle Antworten hier im Forum.
Wir haben die "Herausforderung" gelöst:
Den OPC UA Server in der CPU aktiviert und dann mit der UAClientHelper API aus diesem Beispiel:
OPC UAClientHelperAPI
auf dei SPS zugegriffen.

Leider erweist sich die Schreibgeschwindigkeit als Problem. Wenn wir für jede einzelne Position einen X-Wert, Y-Wert und Triggerbyte schreiben wird das recht langsam (~32000 Positionen 10min). Beim Strukturierten Zugriff auf die Werte (Struct mit X, Y, Triggebyte) reduziert sich die Dauer um ein Drittel.

Um das ganze noch weiter zu beschleunigen verfolgen wir den Ansatz die Daten in 1000er Blöcken zu schreiben (Zugriff Array[0..999] of Struct[X,Y,Trigger]). Versuchsweie ging das superschnell. Dazu muss aber ein Handshake mit der SPS programmiert werden, der die Daten dann an die richtige Stelle schreibt.

Ein Problem gibt es aber heute noch: mit der aktuellen UAClientHelperAPI kann man nicht strukuriert in die SPS mit Firmware >2.9 bzw. >21.9 schreiben. Diese Problem ist bei Siemens bekannt und wird hoffentlich bald behoben.
O-Ton: es wird in Kürze ein Update zu diesem Anwendungsbeispiel geben.

Na dann warten wir mal ab ;-)
 
Zurück
Oben