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

Ergebnis 1 bis 7 von 7

Thema: Zu lange Verarbeitungszeit beim schreiben mit Libnodave

  1. #1
    Registriert seit
    07.01.2011
    Ort
    Rhein-Neckar
    Beiträge
    36
    Danke
    1
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Morgen Zusammen!

    Bin in letzter Zeit hier etwas aktiv gewesen und habe nun mein Programm soweit fertig - es Kopiert einen String aus ca. 72 Zeichen in den DB einer S7 mit hilfe der Libnodave.dll

    Das ganze klappt soweit auch gut - nur leider benötigt das Kopieren in die Steuerung deutlich zu lange.. im moment brauche ich ca. 2-3.Sekuden bis der ganze String kopiert wurde...

    Hat jemand eine Idee wie ich das ganze reduzieren könnte?

    Habe es schonmal versucht über eine "prepareWriteRequest();" zu verbessern allerdings schaffe ich es mit diesen Kommandos absolut nicht in die Steuerung zu schreiben...

    Code:
    int len = textstring.Length;
    int i = len;
    while (i > 0)
    {
           //Ermittle die aktuelle länge des Strings
           int aktuellelenge = textstring.Length;
           //Konvertiere den String ins einen char im Ascii
           Int16 zeichen = (Int16)char.Parse(textstring.Substring(aktuellelenge - 1, 1));
     
           //Verkürtze mit jeder Schleife den String um 1
           if (textstring.Length > 1)
           {
                textstring = textstring.Remove(aktuellelenge - 1, 1);
           }
           //Nun in die SPS schreiben!
           dc.writeBytes(libnodave.daveDB, dbnummer, i, intlen, BitConverter.GetBytes(libnodave.daveSwapIed_16(zeichen)));
           i = i - 1;
    }
    Zitieren Zitieren Zu lange Verarbeitungszeit beim schreiben mit Libnodave  

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

    Standard

    warum schreibst du denn immer nur ein Zeichen und nicht die 72 Bytes auf einmal?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren hmmm  

  3. #3
    Registriert seit
    07.01.2011
    Ort
    Rhein-Neckar
    Beiträge
    36
    Danke
    1
    Erhielt 6 Danke für 6 Beiträge

    Lächeln

    Hey, danke für die schnelle Antwort!

    Da ich jedes Zeichen des Strings erstmal in Ascii übersetzte dachte ich es wär das einfachste die ganze Übertragung jeweils in der Schleife zu lösen..

    Du meinst eine Lösung in dieser Richtung?!


    Code:
    i = 2 
    //startadresse?? 
    intlen = 53 
    //kommplette länge des Strings?
    zeichen = abcde... 
    //aber sicherlich nicht als String? vorher in ascii umwandlen und das dann komplett kopieren?! 
     
    dc.writeBytes(libnodave.daveDB, dbnummer, i, intlen, zeichen);

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

    Standard

    in was arbeitest du denn?? Csharp? Wenn ja, da mach Ich es so: Encoding.ASCII.GetBytes(value);
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  5. #5
    Registriert seit
    07.01.2011
    Ort
    Rhein-Neckar
    Beiträge
    36
    Danke
    1
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Ja exakt! C# - ok das ist mir auch soweit geläufig, jetzt stellt sich nur wieder die frage wie ich den "buffer" indem ich meine sachen ablege wieder an libnodave weitergebe...
    Code:
    string textin = "ABCD";
    byte[] buffer = {};
    buffer = Encoding.ASCII.GetBytes(textin);
     
    dc.writeBytes(libnodave.daveDB, dbnummer, i, intlen, buffer);
    Kommt das so hin? Wenn ich den Buffer in die Console.Schreibe ( über Convert.ToString(buffer); - erhalte ich nur ein "System.Byte[]

    Lg Dominik

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

    Standard

    Jo, so ungefaehr, intlen würde ich noch durch buffer.Length ersetzen! Du musst nur darauf achten, dein string darf nich größer als deine pdu size minus header sein!

    Kannst dir auch mal meine lib ansehen, die baut auf libnodave auf, da kannst du direkt strings lesen znd schreiben (http://jochensserver.dyndns.org/wordpress/?page_id=200)
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  7. #7
    Registriert seit
    07.01.2011
    Ort
    Rhein-Neckar
    Beiträge
    36
    Danke
    1
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
    string textin = "ABCD";
    byte[] buffer = {};
    buffer = Encoding.ASCII.GetBytes(textin); 
    dc.writeBytes(libnodave.daveDB, dbnummer, i, textin.Length, buffer);

    hat Funktionier! vielen vielen Dank!

Ähnliche Themen

  1. Bereichslängenfehler beim Schreiben
    Von Stemmann im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 26.11.2010, 13:28
  2. libnodave.net Zyklusschwankungen beim schreiben
    Von TimoS im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 19.09.2010, 13:30
  3. Verarbeitungszeit S7 - 400 zu S7 - 300
    Von lukm im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 10.07.2006, 14:17
  4. Antworten: 11
    Letzter Beitrag: 18.04.2006, 19:52
  5. Antworten: 3
    Letzter Beitrag: 17.02.2005, 12:23

Lesezeichen

Berechtigungen

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