Snap7 / LibNoDave Lesegeschwindigkeit

Krumnix

Level-3
Beiträge
1.454
Reaktionspunkte
190
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Habe einen IPC per Ethernet an einer 317-3PN/DP angeschlossen und möchte einen DB, welcher 1600 Byte groß ist jede Sekunde auslesen.
Es ist geplant, dass dieser DB auf 9000 Byte vergrößert werden soll.

Frage:
Welche Library würdet ihr empfehlen?
Wie schnell kann ich diesen DB komplett auslesen?
Was könnte ich machen, um die Leserate zu optimieren, damit ich die spätere Größe auch handeln kann?

Danke!
 
Wirklich eine 317-3? Ich kenne bis jetzt nur die 317-2.
Welche MLFB-Nummer hat die denn? Und welche Firmwareversion? und welche Zykluszeit?
Normalerweise werden bei der 300er die Anfragen am Systempunkt bearbeitet. Je nach ausgehandelter Creditzahl werden entsprechend viele Anfragen bearbeitet, wenn diese da sind. D.h. die Kommunikationsbibliothek diese unterstützt oder Du den Auftrag selbst in Häppchen splittest und die Häppchen parallel (z.B. in eigenen Threads) abfrägst.
Normalerweise sollte eine solche Übertragungsrate machbar sein, wenn auch das Netzwerk mitspielt.
Bei ACCON-AGLink ist ein Beispielprogramm dabei (AGLink40_Performance), das auf die SPS zugreift und unterschiedliche Blockgrößen abfrägt. Dazu wir der größte DB ermittelt oder per Kommandozeile vorgegeben. Anhand der Ausgabe siehst Du dann, was Deine konkrete SPS in Deinem Umfeld leisten kann. Das Beispielprogramm funktioniert auch in der Demoversion. Du musst nur die Verbindung entsprechend konfigurieren (Doku dabei). Bei Problemen unseren Support fragen.
Ach ja: bei den neueren 317er und der 319er gibt es in der Hardwarekonfig eine Einstellung die sinngemäß "optimierte BuB-Kommunikation" heißt. Dann wird dir Kommunikation nicht mehr am Systempunkt sondern zu jedem beliebigen Zeitpunkt (wie bei der 400er) durchgeführt. Habe selbst noch nicht getestet, wie sich dies auf die Performance auswirkt. Wenn Du Tests durchführst, bin ich auf die Ergebnisse gespannt.
Eine weitere Performancesteigerung kannst Du erreichen, wenn Du mehrere Verbindungen parallel zur SPS aufbaust. Der Gewinn bei einer 400er liegt dann bei ca. 15-20%.
Wenn Du weitere Fragen zu dem Thema Kommunikationsperformance hast, kannst Du Dich gerne an mich wenden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit Snap7 ist auch noch die BSend/BRecv-Schnittstelle möglich, dazu musst du aber in der SPS eine Verbindung anlegen und den BSend entsprechend antriggern.
Aus einer IM151-8 CPU lese ich mit Snap7 darüber bei einer Zykluszeit von 100ms die Datenmenge von 8000 Bytes in ~150ms.

BSend/BRecv hat auch noch den Vorteil, dass du damit konsistente Daten gewährleisten kannst wenn du die Sendedaten vorher entsprechend umkopierst. Bei "normaler" S7-Kommunikation ist das sehr aufwändig.

Wenn du das SPS-Programm anpassen kannst, dann wäre auch eine "nackte" TCP-Verbindung eine Möglichkeit.
 
Ach ja: bei den neueren 317er und der 319er gibt es in der Hardwarekonfig eine Einstellung die sinngemäß "optimierte BuB-Kommunikation" heißt. Dann wird dir Kommunikation nicht mehr am Systempunkt sondern zu jedem beliebigen Zeitpunkt (wie bei der 400er) durchgeführt. Habe selbst noch nicht getestet, wie sich dies auf die Performance auswirkt. Wenn Du Tests durchführst, bin ich auf die Ergebnisse gespannt.

Vorsicht:
Damit verlierst du den Zykluskontrollpunkt. Und das hat auch Auswirkungen auf HMI. Ein Panel liest und schreibt dann "willkürlich".
Ist also sehr mit Vorsicht zu geniesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
BSend/BRecv hat auch noch den Vorteil, dass du damit konsistente Daten gewährleisten kannst wenn du die Sendedaten vorher entsprechend umkopierst. Bei "normaler" S7-Kommunikation ist das sehr aufwändig.
Die Konsistenz ist klar ein Vorteil. Der Nachteil, man muss projektieren und kann nicht einfach von außen zugreifen. Darüber hinaus waren bei meinen Messungen (schon Jahre her) BSend/BReceive langsamer als der normale Zugriff von außen.
 
Wirklich eine 317-3? Ich kenne bis jetzt nur die 317-2.

Da vergisst man einen Zusatz und schon geht die Welt unter :) -> 317TF-3PN/DP zur Steuerung von einer Presse mit Überschleifbewegungen (daher die T).

Die Daten sind recht Zeitunkritisch, da diese in dem DB durch die SPS mit Zeitstempel eingetragen werden. Der Kunde hatte erst nur bestimmte Werte verlangt, möchte nun aber noch
Strings mit in dem DB aufzeichnen, so dass dieser halt auf 9.000 Byte steigt.
Ich würde die 9.000 Byte halt als Byte-Stream auslesen und dann in C aufspalten in Bit, Int und Strings. Das funktioniert auch. Mir wurde nur ein wenig schwindelig, als ich nach dem Fertigstellen des DBs
9.000 Byte Größe angezeigt bekommen habe :)

Ok, dann scheinen meine Befürchtungen erstmal nicht so kritisch zu sein. Danke für eure Infos.
 
Zurück
Oben