<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Datei lesen erhöht die Zykluszeit extrem</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/dee8c17003/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/dee8c17003/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/dee8c17003/</id><updated>2020-02-28T17:35:24.531000Z</updated><subtitle>Recent posts to Datei lesen erhöht die Zykluszeit extrem</subtitle><entry><title>Datei lesen erhöht die Zykluszeit extrem</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/dee8c17003/?limit=25#0088" rel="alternate"/><published>2020-02-28T17:35:24.531000Z</published><updated>2020-02-28T17:35:24.531000Z</updated><author><name>nar21</name><uri>https://forge.codesys.com/u/nar21/</uri></author><id>https://forge.codesys.com1fc8608801db1a1339bab6bd770e9b066c07c79a</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;PC ist mit einem E5400 bei 2,7GHz ausgestattet. Auch die Platte ist eine schnelle (habe derzeit keine Daten zur Hand).&lt;/p&gt;
&lt;p&gt;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. &lt;/p&gt;
&lt;p&gt;Speicher ist eine Class 2 2GB SD-Karte von Panasonic, laut c't Tool ca. 4MB/s schreiben und 2MB/s lesen.&lt;/p&gt;
&lt;p&gt;Es werden pro SPS Zyklus ca. 50 Byte gelesen. Die Datei wird zu Beginn geöffnet und nach Erreichen des Dateiendes geschlossen.&lt;/p&gt;
&lt;p&gt;Gruß,&lt;/p&gt;
&lt;p&gt;M&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Datei lesen erhöht die Zykluszeit extrem</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/dee8c17003/?limit=25#fcf1" rel="alternate"/><published>2020-02-28T17:35:16.709000Z</published><updated>2020-02-28T17:35:16.709000Z</updated><author><name>Rainer.R</name><uri>https://forge.codesys.com/u/rainer-r/</uri></author><id>https://forge.codesys.com088d80dff095a0a287c3efaf6466c2c0c5971879</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo,&lt;/p&gt;
&lt;p&gt;hab zufällig heute meine Zeiten an der Anlage gemessen, und auf deinen Bericht hin daselbe Programm am Laptop nochmals gemessen.&lt;/p&gt;
&lt;p&gt;Hier kurz die Zeiten, die sich an den verschiedenen Plattformen erhalten habe.&lt;/p&gt;
&lt;p&gt;Das (bei mir) schreiben auf Platte läuft in einer separaten Application und die Taskzeit wrude and die durchschnittliche Zykluszeit &lt;/p&gt;
&lt;p&gt;angepasst.&lt;/p&gt;
&lt;p&gt;lamer Prozessor mit schnelle Platte?&lt;/p&gt;
&lt;p&gt;Plattform Anlagenrechner mit Platte:    ohne: 0,085 ms      mit schreiben: 224,5 ms     Durchschnitt: 3,677 ms&lt;/p&gt;
&lt;p&gt;Durchschitt/ohne = 43,2&lt;/p&gt;
&lt;p&gt;schneller Prozessor mit lamer Platte?&lt;/p&gt;
&lt;p&gt;Plattform Laptop mit Platte:        ohne: 0,017 ms      mit schreiben: &amp;gt; 400ms      Durchschnitt: 5,2 ms&lt;/p&gt;
&lt;p&gt;Duchschnitt/ohne = 305,8&lt;/p&gt;
&lt;p&gt;Das Verhätnis wurde zwischen durchschnittlicher Zykluszeit und aktueller Zykluszeit ohne Plattenzugriff gebildet, da der Schreibzyklus&lt;/p&gt;
&lt;p&gt;nicht genau überprüft werden konnte.&lt;/p&gt;
&lt;p&gt;Fazit: Zwei unterschiedliche Prozessoren und Platten machen bei mir diesen Unterschied aus.&lt;/p&gt;
&lt;p&gt;Was nutzt dein Industriedisplay als Speicher?&lt;/p&gt;
&lt;p&gt;Gruß Rainer&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Datei lesen erhöht die Zykluszeit extrem</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/dee8c17003/?limit=25#5829" rel="alternate"/><published>2020-02-28T17:35:13.647000Z</published><updated>2020-02-28T17:35:13.647000Z</updated><author><name>nar21</name><uri>https://forge.codesys.com/u/nar21/</uri></author><id>https://forge.codesys.comd9b3c8051740b5330910ccee8bb231b26f259fcf</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo,&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Ohne die Leseroutine zeigt mit die Zykluszeitanzeige 17µs an. Mit Dateilesefunktion über 1100ms. Die Datei wird von der Festplatte gelesen.&lt;/p&gt;
&lt;p&gt;Das gleiche Projekt auf einem Industriedisplay mit CoDeSys läuft mit aktive Dateilesefunktion bei 80ms. Gelesen wird dort von einer mäßigen SD Karte.&lt;/p&gt;
&lt;p&gt;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?&lt;/p&gt;
&lt;p&gt;Anbei ein Quellcodeauszug zu dem was ich als lesefunktion entworfen habe.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="nv"&gt;j&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="nv"&gt;TO&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="k"&gt;DO&lt;/span&gt;                                                 
   &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nv"&gt;read&lt;/span&gt; &lt;span class="nv"&gt;item&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
   &lt;span class="nv"&gt;dwReturn&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SysFileRead&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;File&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;hFile&lt;/span&gt;, &lt;span class="nv"&gt;Buffer&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;ADR&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;buffer&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;, &lt;span class="nv"&gt;Size&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;    (*read one byte*)&lt;/span&gt;
   &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nv"&gt;check&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;EOF&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
   &lt;span class="nv"&gt;eofReached&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;SysFileEOF&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;File&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;hFile&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;AND&lt;/span&gt; &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;dwReturn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;            &lt;/span&gt;
   &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="k"&gt;exit&lt;/span&gt; &lt;span class="nv"&gt;handling&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nv"&gt;read&lt;/span&gt; &lt;span class="nv"&gt;line&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="ss"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;OR&lt;/span&gt; &lt;span class="ss"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;dwReturn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;OR&lt;/span&gt; &lt;span class="nv"&gt;eofReached&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;                     
      &lt;span class="k"&gt;EXIT&lt;/span&gt;&lt;span class="c1"&gt;;                                                      &lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
   &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nv"&gt;get&lt;/span&gt; &lt;span class="nv"&gt;line&lt;/span&gt; &lt;span class="nv"&gt;string&lt;/span&gt; &lt;span class="k"&gt;until&lt;/span&gt; &lt;span class="nv"&gt;line&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="nv"&gt;found&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
   &lt;span class="k"&gt;IF&lt;/span&gt; &lt;span class="nv"&gt;buffer&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;$R&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;                                 
      &lt;span class="nv"&gt;outString&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;CONCAT&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;STR1&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;outString&lt;/span&gt;, &lt;span class="nv"&gt;STR2&lt;/span&gt;:&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;buffer&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="c1"&gt;;               &lt;/span&gt;
   &lt;span class="nv"&gt;END_IF&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;END_FOR&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</summary></entry></feed>