Zu lange Verarbeitungszeit beim schreiben mit Libnodave

dolo280

Level-2
Beiträge
36
Reaktionspunkte
6
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;
}
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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);
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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)
 
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!
 
Zurück
Oben