Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Datei lesen erhöht die Zykluszeit extrem

nar21
2010-07-08
2010-07-08
  • nar21 - 2010-07-08

    Hallo,

    in meinem Projekt muss ich eine Datei zeilenweise einlesen, was ich mit SysFileRead ausführe. Die SP RTE läuft auf einem handelsüblichen PC mit Festplatte.

    Ohne die Leseroutine zeigt mit die Zykluszeitanzeige 17µs an. Mit Dateilesefunktion über 1100ms. Die Datei wird von der Festplatte gelesen.

    Das gleiche Projekt auf einem Industriedisplay mit CoDeSys läuft mit aktive Dateilesefunktion bei 80ms. Gelesen wird dort von einer mäßigen SD Karte.

    Die Festplatte hat zwar eine gewisse Zugriffszeit, aber der Unterschied zwischen Display und PC ist doch etwas sehr goß. Hat jemand eine Ahnung was da in die Suppe spuckt?

    Anbei ein Quellcodeauszug zu dem was ich als lesefunktion entworfen habe.

    FOR j := 0 TO 80 DO                                                 
       (*read item*)
       dwReturn := SysFileRead(File:=hFile, Buffer:=ADR(buffer), Size:=1);    (*read one byte*)
       (*check if EOF*)
       eofReached := SysFileEOF(File := hFile) AND (dwReturn = 0);            
       (*exit handling for read line*)
       IF ((j >= 80) OR ((dwReturn = 0) OR eofReached) THEN                     
          EXIT;                                                      
       END_IF;
       (*get line string until line end found*)
       IF buffer <> '$R' THEN                                 
          outString := CONCAT(STR1:=outString, STR2:=buffer);               
       END_IF;
    END_FOR;
    
     
  • Rainer.R - 2010-07-08

    Hallo,

    hab zufällig heute meine Zeiten an der Anlage gemessen, und auf deinen Bericht hin daselbe Programm am Laptop nochmals gemessen.

    Hier kurz die Zeiten, die sich an den verschiedenen Plattformen erhalten habe.

    Das (bei mir) schreiben auf Platte läuft in einer separaten Application und die Taskzeit wrude and die durchschnittliche Zykluszeit

    angepasst.

    lamer Prozessor mit schnelle Platte?

    Plattform Anlagenrechner mit Platte: ohne: 0,085 ms mit schreiben: 224,5 ms Durchschnitt: 3,677 ms

    Durchschitt/ohne = 43,2

    schneller Prozessor mit lamer Platte?

    Plattform Laptop mit Platte: ohne: 0,017 ms mit schreiben: > 400ms Durchschnitt: 5,2 ms

    Duchschnitt/ohne = 305,8

    Das Verhätnis wurde zwischen durchschnittlicher Zykluszeit und aktueller Zykluszeit ohne Plattenzugriff gebildet, da der Schreibzyklus

    nicht genau überprüft werden konnte.

    Fazit: Zwei unterschiedliche Prozessoren und Platten machen bei mir diesen Unterschied aus.

    Was nutzt dein Industriedisplay als Speicher?

    Gruß Rainer

     
  • nar21 - 2010-07-08

    PC ist mit einem E5400 bei 2,7GHz ausgestattet. Auch die Platte ist eine schnelle (habe derzeit keine Daten zur Hand).

    Das Industriedisplay ist ein XV-102 Gerät von Microinnovation. Hier wurden allerdings Soft-SPS und Datenzugriff direkt von der SD-Karte betrieben und der interne Flash vollkommen aussen vor gelassen.

    Speicher ist eine Class 2 2GB SD-Karte von Panasonic, laut c't Tool ca. 4MB/s schreiben und 2MB/s lesen.

    Es werden pro SPS Zyklus ca. 50 Byte gelesen. Die Datei wird zu Beginn geöffnet und nach Erreichen des Dateiendes geschlossen.

    Gruß,

    M

     

Log in to post a comment.