<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Nochmal Probleme mit Time() ...</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/3b7204a25c/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/3b7204a25c/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/3b7204a25c/</id><updated>2020-02-28T16:34:29.789000Z</updated><subtitle>Recent posts to Nochmal Probleme mit Time() ...</subtitle><entry><title>Nochmal Probleme mit Time() ...</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/3b7204a25c/?limit=25#5b37" rel="alternate"/><published>2020-02-28T16:34:29.789000Z</published><updated>2020-02-28T16:34:29.789000Z</updated><author><name>hugo</name><uri>https://forge.codesys.com/u/hugo/</uri></author><id>https://forge.codesys.comcf6e4fc149ab6f757f2d23beff1bcec882225d6a</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;ja es kommt zu einem überlauf.&lt;/p&gt;
&lt;p&gt;jedoch ist das ergebnis einer subtraktion wieder richtig.&lt;/p&gt;
&lt;p&gt;probiere es einfach aus:&lt;/p&gt;
&lt;p&gt;setzte eine dword variable var_1 auf 0. ziehe davon 10 ab.&lt;/p&gt;
&lt;p&gt;setzte ein zweite dword variable var_2 auf 10.&lt;/p&gt;
&lt;p&gt;errechne nun das ergebnis var2 - var 1 und du bekommt genau die 20 die der differenz zwischen var 1 und var 2 entsprechen.&lt;/p&gt;
&lt;p&gt;eine subtraktion funktioniert auch bei überlauf, andere dinge wie vergelich größer kleiner oder addition jedoch nicht. &lt;/p&gt;
&lt;p&gt;deshalb benutzen wir in oscat immer nur das ergebnis der subtraktion endwert - startwert. das geht immer, auch bei überlauf.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Nochmal Probleme mit Time() ...</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/3b7204a25c/?limit=25#0c4d" rel="alternate"/><published>2020-02-28T16:34:26.968000Z</published><updated>2020-02-28T16:34:26.968000Z</updated><author><name>Hendrik</name><uri>https://forge.codesys.com/u/hendrik/</uri></author><id>https://forge.codesys.com3e80222f08e748b0569f6bcee3fca3d6bfba95a8</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Nochmal zum Block Time() ...&lt;/p&gt;
&lt;p&gt;dieser hat laut Anleitung einen Maxwert von 49d17h2m47s295ms (4194967295 ms)&lt;/p&gt;
&lt;p&gt;was passiert dann nach 49 Tagen -&amp;gt; er wird auf 0 gesetzt &lt;/p&gt;
&lt;p&gt;als Beispiel der Block m_t aus Oscat 1.7 ..&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; check for rst input &lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;IF rst OR et &amp;gt;= tmax THEN&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;startup&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;FALSE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;pt&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;et&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;END_IF;&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; avoid timers to start when input is true at startup &lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;IF NOT startup THEN&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;startup&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;END_IF;&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; read system timer &lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;tx := TIME();&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; edge trigger rising and falling edge &lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;IF in XOR edge THEN&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;edge&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;in&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;rising&lt;/span&gt; &lt;span class="nv"&gt;edge&lt;/span&gt; &lt;span class="nv"&gt;starts&lt;/span&gt; &lt;span class="nv"&gt;measurement&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;in&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;

    &lt;span class="nv"&gt;init&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;TRUE&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;start&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;Tx&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;falling&lt;/span&gt; &lt;span class="nv"&gt;edge&lt;/span&gt; &lt;span class="nv"&gt;stops&lt;/span&gt; &lt;span class="nv"&gt;measurement&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;

&lt;span class="nv"&gt;ELSIF&lt;/span&gt; &lt;span class="nv"&gt;init&lt;/span&gt; &lt;span class="k"&gt;THEN&lt;/span&gt;

    &lt;span class="nv"&gt;stop&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;Tx&lt;/span&gt;&lt;span class="c1"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;pt&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;stop&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;start&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;/pre&gt;&lt;/div&gt;


&lt;p&gt;END_IF;&lt;/p&gt;
&lt;p&gt;IF init AND in THEN&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;et&lt;/span&gt; :&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;Tx&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nv"&gt;start&lt;/span&gt;&lt;span class="c1"&gt;; ELSE et := t#0ms;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;END_IF;&lt;/p&gt;
&lt;p&gt;was passiert nun, wenn die steigende Flanke bei Time():=49d17h2m47s295ms kommt -&amp;gt; dann wird diese in Start gespeichert&lt;/p&gt;
&lt;p&gt;Danach kommt die fallende Flanke nach dem Reset des Timers, also bei Time():=500ms.&lt;/p&gt;
&lt;p&gt;Dann erfolgt die Berechnung der Differenz aus: et := Tx - start -&amp;gt; dies wäre dann Tx:=500ms - 49d17h2m47s295ms &lt;/p&gt;
&lt;p&gt;-&amp;gt; dabei kommt es sicher zum Überlauf ...&lt;/p&gt;
&lt;p&gt;Viele Grüße&lt;/p&gt;
&lt;p&gt;Hendrik&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>