Tipps für Kommunikation zu S7-1500

frosch

Member
Beiträge
13
Punkte Reaktionen
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:

Thomas_v2.1

Well-known member
Beiträge
8.509
Punkte Reaktionen
2.597
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.
 

JesperMP

Well-known member
Beiträge
7.084
Punkte Reaktionen
1.434
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.
 

volker

Supermoderator
Teammitglied
Beiträge
5.567
Punkte Reaktionen
960
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?
 
OP
F

frosch

Member
Beiträge
13
Punkte Reaktionen
2
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
 

Tschoke

Well-known member
Beiträge
86
Punkte Reaktionen
68
Zuviel Werbung?
->Hier kostenlos registrieren
AGLink von Deltalogic kann direkt aus optimierten DBs lesen.

 
OP
F

frosch

Member
Beiträge
13
Punkte Reaktionen
2
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 ;-)
 
Oben