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

Seite 4 von 8 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 73

Thema: Verwendung DotNetSiemensPLCToolBoxLibrary von Jochen Kühner

  1. #31
    hanjo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.10.2010
    Beiträge
    28
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Jochen


    Das Testprojekt habe ich im Anhang beigelegt.
    Die entscheidenden Aufrufe befinden sich unter Tab-Reiter „Variablenliste“.

    Variante 1 - Lesen eines zusammenhängenden Bytearrays mit deiner DLL

    Variante 4 - Lesen eines zusammenhängenden Bytearrays mit LibNoDave
    Meiner Meinung wird in deiner DLL das Bytearray in gleicher Weise gelesen wie laut LibNoDave, eben mit ReadManyBytes.
    Ich glaube nicht, dass es mit der fehlenden Optimierung zu tun hat.
    Viele Grüsse hanjo
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Na klar geht es - anbei der Code  

  2. #32
    hanjo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.10.2010
    Beiträge
    28
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Jochen

    im Anhang habe ich ergänzend die AWL-Quelle für den Test-DB3500 und eine VAT (Excel) zum schnelleren testen beigelegt.
    Du kannst ja die DB-Nummer auch in eine andere umbenennen.
    Bitte beachte, dass die DB-Nummer in meinem Code fix hinterlegt ist - die müsste dann auch geändert werden.
    Die VAT kannst du aus der Exceldatei über die Zwischenablage in dein SPS-Projekt importieren.

    Viele Grüsse hanjo
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Noch was als Ergänzung  

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

    Standard

    Ein paar Infos....

    Das ist schon mal falsch:
    Code:
     'Konfigurationsmenü Verbindung 1
    Configuration.ShowConfiguration("SPS1", True)
    PLCCon1.Configuration.ConnectionName = "SPS1"
    der Code sollte so ausehen:
    Code:
    'Konfigurationsmenü Verbindung 1
            Configuration.ShowConfiguration("SPS1", True)
            PLCCon1 = New PLCConnection("SPS1")
    Und bei mir dauert das lesen von 700 Bytes entweder über ReadTag oder über ReadManyBytes um die 110ms... also bei beiden gleich lang...
    Sicher das dein readManyBytes auch funktioniert hat? den res value wertest du nämlich nicht aus!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

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

    Standard

    PS:

    Habs auch noch so probiert:

    Code:
    Dim aa As New List(Of PLCTag)
                aa.Add(aVar)
    
                xTime2.Reset()
                xTime2.UhrStart()
                
                PLCCon1.ReadValues(aa) 'Neue Funktion Bytearray direkte Rückgabe 
    
                
                xTime2.UhrStop()
                txtDauer.Text = xTime2.DauerNanoSec
    Dauert auch fast genau 110ms...

    Hab dabei auch noch ein Bug bei ReadManyValues gefunden, wenn ein Tag nicht in die PDU gepasst hat! Fix dazu kommt...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  5. #35
    hanjo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.10.2010
    Beiträge
    28
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Jochen

    die Instanz der Verbindung "SPS1" habe ich im Modul "mdl_Globals" bereits als Public PLCCon1 as New PLCConnection("SPS1") angelegt.

    Ich dachte, dass ich dieser Instantz dann im
    'Konfigurationsmenü Verbindung 1
    einfach nur zuordnen muss.

    Das readManyBytes über die LibNoDave hat funkkktioniert-es ist aber korrekt, das Res habe ich nicht ausgewertet.

    Mein Hardwareaufbau war:
    S7-400
    CPU417-4
    CP443-1

    Ich probier es am Montag noch mal.

    Vielen Dank für deine Bemühungen.

    Gruss hanjo

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

    Standard

    Zitat Zitat von hanjo Beitrag anzeigen
    Hallo Jochen

    die Instanz der Verbindung "SPS1" habe ich im Modul "mdl_Globals" bereits als Public PLCCon1 as New PLCConnection("SPS1") angelegt.
    Das Problem ist, das New PLCConnection("SPS1") im Konstruktor aus der Registry liest. Ich könnte auch reinmachen das die Config vor dem Verbindungsaufbau nochmals gelesen wird, dann wird diese Zeile überflüssig:
    Code:
    PLCCon1 = New PLCConnection("SPS1")
    aber den ConnectioNamen nochmals zuweisen wie hier:
    Code:
    PLCCon1.Configuration.ConnectionName = "SPS1"
    ist auf jeden Fall nicht nötig!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  7. #37
    hanjo ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.10.2010
    Beiträge
    28
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke für die Erklärung !

    Ich werde es jetzt so ausführen wie von dir vorgeschlagen.

    Gruss hanjo

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

    Standard

    Hab jetzt auch mal noch ne optimier Funktion bei ReadValues eingebaut, diese kombiniert verschiedene Tags wenn das Ende eines Tags nicht weiter als 4 Byte entfernt liegt! Oder auch überlappende Bytes werden kombiniert!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren So...  

  9. #39
    Registriert seit
    28.07.2009
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Hab jetzt auch mal noch ne optimier Funktion bei ReadValues eingebaut, diese kombiniert verschiedene Tags wenn das Ende eines Tags nicht weiter als 4 Byte entfernt liegt! Oder auch überlappende Bytes werden kombiniert!
    Ja, so eine Optimierung hab ich auch schon mal realisiert. Aber das theoretische Optimum ist bei einer Lücke mit 16 Bytes.

    Jede Antwort hat einen Protokoll-Overhead von 4 Bytes. Aber auch der Request hat einen Overhead von 12 Bytes!. Mit jedem Paket das angefordert wird, gibt das einen Overhead von 4+12 = 16 Bytes. Es ist also effizienter, eine Lücke von 16Bytes mitzulesen, als das in zwei Aufrufen zu machen.

    Aus der praktischen Erfahrung ergab sich sogar, daß für die effektive Bandbreite das Optimum bei einer Lücke von 20(!) Bytes liegt. Das ergibt zwar wieder mehr Busverkehr, aber im Datendurchsatz (kB/sec) ist hier das Maximum zu messen. (Kann aber abhängig vom SPS-Typ sein). Vermutlich tut sich die SPS intern auch leichter, einen längeren Block am Stück zu kopieren, als zwei kleine.

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Forscher Beitrag anzeigen
    Ja, so eine Optimierung hab ich auch schon mal realisiert. Aber das theoretische Optimum ist bei einer Lücke mit 16 Bytes.

    Jede Antwort hat einen Protokoll-Overhead von 4 Bytes. Aber auch der Request hat einen Overhead von 12 Bytes!. Mit jedem Paket das angefordert wird, gibt das einen Overhead von 4+12 = 16 Bytes. Es ist also effizienter, eine Lücke von 16Bytes mitzulesen, als das in zwei Aufrufen zu machen.

    Aus der praktischen Erfahrung ergab sich sogar, daß für die effektive Bandbreite das Optimum bei einer Lücke von 20(!) Bytes liegt. Das ergibt zwar wieder mehr Busverkehr, aber im Datendurchsatz (kB/sec) ist hier das Maximum zu messen. (Kann aber abhängig vom SPS-Typ sein). Vermutlich tut sich die SPS intern auch leichter, einen längeren Block am Stück zu kopieren, als zwei kleine.
    Also das das mit den 16 Bytes stimmt bin kann Ich nicht glauben, da Ich in eine Anfrage bei einer PDU größe von 240 Bytes 17 Tags bekomme, wenn diese jedoch alle 16 Bytes auseinander liegen würden, und Ich alle zusammenfassen würde, müsste meine Antwort 16*17 als mindestens 272 Bytes groß sein, was nicht mehr in eine PDU passt....
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. DotNetSiemensPLCToolBoxLibrary
    Von explosiv im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 14.06.2011, 00:13
  2. [Geburtstagsthread] Jochen Kühner
    Von rostiger Nagel im Forum Stammtisch
    Antworten: 17
    Letzter Beitrag: 09.05.2011, 22:16
  3. Zugang zu Step7 Daten Projekt Jochen Kühner
    Von hanjo im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 07.04.2011, 23:18
  4. DotNetSiemensPLCToolBoxLibrary 64 Bit support.
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 24.03.2011, 13:04
  5. Jochen Kühner hat Geburtstag
    Von Rainer Hönle im Forum Stammtisch
    Antworten: 7
    Letzter Beitrag: 12.05.2010, 22:51

Lesezeichen

Berechtigungen

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