Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: Schnelle Datenübertragung mit DotNetSiemensPLCToolBoxLibrary (LibNoDave) Nummer 2

  1. #1
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Ausrufezeichen


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe folgende vb.net Applikation erstellt um beliebige, frei konfigurierbare Datenpakete (INT, DWORD, STRING[255], FLOAT) von konfigurierbaren SPSen (IP-Adresse, Rack 0, Slot 2) zu lesen.

    Die Log-Ergebnisse werden in Dateien im Ordner D:\MyDocuments geschrieben. Mir geht es dabei auch um Zeitmessungen.

    Ich habe festgestellt, dass die Lese-Zeit stark von der Anzahl der zu lesenden Daten abhaengt. Hier mal eine Gegenueberstellung von zwei Faellen.

    Station 1: Datenpaket GROSS

    8x INT, 4x STRING, 4x DWORD, 4x REAL

    Lesezeit von zu Hause: 170 ms
    Lesezeit in der Firma: 100 ms

    Capture2.JPG


    Station 2: Datenpaket KLEIN

    8x INT, 4x DWORD, 4x REAL

    Lesezeit von zu Hause aus: 30 ms
    Lesezeit in der Firma: 15 ms

    Capture1.JPG


    Es scheint, dass nicht die Netzwerkperformance oder die Netzwerkkarte des PC der Flaschenhals ist, sondern die SPS, da diese zur Zusammenstellung des Datenpaketes einfach mehr Zeit benoetigt.

    Wie kann ich die Lesegeschwindigkeit bei Datenmengen um die 1000 Byte noch vergroessern?
    Angehängte Dateien Angehängte Dateien
    Geändert von Burkhard (24.09.2015 um 22:00 Uhr)
    Zitieren Zitieren Schnelle Datenübertragung mit DotNetSiemensPLCToolBoxLibrary (LibNoDave) Nummer 2  

  2. #2
    Burkhard ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Capture3.JPG

    Hier nochmal eine Gegenueberstellung der Zeitmessung von Station1 und Station2.

  3. #3
    Registriert seit
    06.04.2013
    Beiträge
    208
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zitat Zitat von Burkhard Beitrag anzeigen

    Wie kann ich die Lesegeschwindigkeit bei Datenmengen um die 1000 Byte noch vergroessern?
    Hallo Burkhard,

    wie du meinem Thema entnehmen kannst, liegt der Schlüssel in der Parallelen Anfrage bei der SPS. http://www.sps-forum.de/newreply.php...reply&p=596888

    Code:
    Parallel.Invoke(Task1, Task2, Task3, Task4);
    Wird die Datenmenge zu groß, werden mehrere PDUs nacheinander versendet. Um dies zu vermeiden, musst du die zu lesenden Pakete aufteilen auf die Größe eines PDU.

    Anschließend erstellst du mehrere Verbindungen zur selben SPS und sendest die PDUs parallel los.

    Damit solltest du auf die Lesezeit von 15/30 ms auch für die 1000 Byte kommen.
    Geändert von Hans54216 (25.09.2015 um 07:46 Uhr)

  4. #4
    Burkhard ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ah, ok. Ich habe ja in meinem Programm bereits parallele Threads. Fuer jede SPS habe ich einen eigenen Thread. Pro Thread/SPS habe ich aber nur eine Verbindung. Eine PDU hat bei mir die Groesse 240 Byte. Das ist ziemlich wenig. Ein einziger String, was ja ein Byte-Array ist, passt da ja nicht mal komplett rein, wobei ich aber eigentlich gar nicht so grosse Strings brauche, wenn ich Seriennummern oder gescannte Barcodes einlese.

    Allerdings ein Array of Real oder Int ueberschreitet schnell die Groesse einer PDU. Ich denke es ist schwierig, aber es sollte irgendwie machbar sein, auch ein Array aufzuteilen und einzeln einzulesen.

    Ich werde den Ansatz gleich mal ueberpruefen! Danke erstmal, Hansi!
    Geändert von Burkhard (25.09.2015 um 08:10 Uhr)

  5. #5
    Burkhard ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    SPS1 (Thread/Verbindung1): 8 x INT, 4x DINT, 4x REAL

    34 Millisekunden

    Capture1.JPG

    SPS1 (Thread/Verbindung 2): 1x STRING[127]

    34 Millisekunden

    Capture2.JPG

    SPS1 (Thread/Verbindung 3) 1x STRING[127]

    39 Millisekunden

    Capture3.JPG

    SPS1 (Thread/Verbindung 4): 1x STRING[127]

    27 Millisekunden

    Capture4.JPG

    SPS1 (Thread/Verbindung 5): 1x STRING[127]

    34 Millisekunden

    Capture5.JPG
    Geändert von Burkhard (25.09.2015 um 10:06 Uhr)

  6. #6
    Burkhard ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    SPS2 (Thread/Verbindung 6): 8x INT, 4x DINT, 4x REAL

    15 Millisekunden

    Capture6.JPG

    SPS 3 (Thread/Verbindung 7): 8x INT, 4x STRING[255], 4x DWORD, 4x REAL

    90 Millisekunden

    Capture7.JPG

    Hier nochmal die Logaufzeichnung aller Verbindungen:

    Capture-All.JPG

    Was auffaellig ist, dass die SPS 1 insgesamt 5 Threads/Verbindungen laufen hat und dadurch die Gesamtlesezeit von 30ms nicht die 15 Millisekunden von SPS2 erreicht, die nur eine Verbindung offen hat.
    Geändert von Burkhard (25.09.2015 um 10:32 Uhr)

  7. #7
    Registriert seit
    06.04.2013
    Beiträge
    208
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zitat Zitat von Burkhard Beitrag anzeigen
    Was auffaellig ist, dass die SPS 1 insgesamt 5 Threads/Verbindungen laufen hat und dadurch die Gesamtlesezeit von 30ms nicht die 15 Millisekunden von SPS2 erreicht, die nur eine Verbindung offen hat.
    Welche Zeit erreichst du, wenn du an SPS1 nur ein PDU z.B. ein DWORD anforderst?

    Selbst wenn du nicht die 15 ms erreichst, mit 30 ms hast du die Zeit mehr als gedrittelt (alt 100 ms).

  8. #8
    Burkhard ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Das stimmt, Hans. Ich habe nochmal eine andere Frage. Wen ich die Datenuebertragung mit der Toolbox-Library mit einem OPC-Server vergleiche, hinsichtlich des Funktionsprinzipes (PDU Size) und der Uebertragungs-Geschwindigkeit. Wie sieht das da aus, wenn ich mit einem OPC Server 1000 Byte von 14 SPSen lesen will?

    Arbeitet der OPC-Server auch mit PDUs?

    Findet da auch Multi-Threading statt beim lesen der OPC-Tags?

    Und wie sieht es mit der Aktualisierungs-Zeit bei OPC-Tags aus (bei 14 SPSen a 1000 Byte)?

    Liege ich da auch im Bereich von 30ms oder ist das eher 300ms?
    Geändert von Burkhard (26.09.2015 um 05:00 Uhr)

  9. #9
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Der Opc arbeitet genau gleich, wobei er wahrscheinlich nicht mehrere Connections benutzt, Solltest du aber auch können, indem du mehrere Verbindungen einrichtest!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  10. #10
    Burkhard ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.11.2007
    Beiträge
    123
    Danke
    19
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo lieber Jochen,

    nochmal vielen Dank fuer deine tolle Toolbox-Library. Sie funktioniert echt gut. Ich habe an meiner Anwendung weiter programmiert. Hast du schonmal Gelegenheit gehabt sie runterzuladen und auszuprobieren?

    Das tolle ist, dass man verschiedene SPSen mit ihren IP-Addressen parametrieren kann und dann pro SPS beliebige Variablenlisten mit copy/paste importieren kann. Es werden dann im Hintergrund so viele Verbindungen geoeffnet damit die Zykluszeit so niedrig wie moeglich ist.
    Geändert von Burkhard (26.09.2015 um 17:57 Uhr)

Ähnliche Themen

  1. Antworten: 17
    Letzter Beitrag: 29.09.2015, 07:18
  2. DotNetSiemensPLCToolBoxLibrary -> nun mit Full-Manged TCP Connection
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 09.02.2015, 23:29
  3. Antworten: 0
    Letzter Beitrag: 22.03.2014, 15:48
  4. Datenübertragung mit t_send
    Von Papa_Bene im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 29.09.2010, 12:26
  5. Antworten: 0
    Letzter Beitrag: 09.03.2007, 19:22

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •