<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Ringspeicher Programmieren</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/94a6922252/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/94a6922252/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/94a6922252/</id><updated>2020-02-28T07:41:06.809000Z</updated><subtitle>Recent posts to Ringspeicher Programmieren</subtitle><entry><title>Ringspeicher Programmieren</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/94a6922252/?limit=25#e33b" rel="alternate"/><published>2020-02-28T07:41:06.809000Z</published><updated>2020-02-28T07:41:06.809000Z</updated><author><name>tirius</name><uri>https://forge.codesys.com/u/tirius/</uri></author><id>https://forge.codesys.com8a27e82e9250f51c5888f68b30ed600804c15a81</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;danke sehr,&lt;br/&gt;
hab zwar mit arrays schon mal gearbeitet aber diese feinheiten wofür man gewisse sachen noch benutzen kann,&lt;br/&gt;
kommt man manchmal einfach nicht drauf &lt;/p&gt;
&lt;p&gt;werd das morgen mal ausprobieren&lt;/p&gt;
&lt;p&gt;mfg&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Ringspeicher Programmieren</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/94a6922252/?limit=25#d7b8" rel="alternate"/><published>2020-02-28T07:40:59.984000Z</published><updated>2020-02-28T07:40:59.984000Z</updated><author><name>Anonymous</name><uri>https://forge.codesys.com/u/*anonymous/</uri></author><id>https://forge.codesys.com9dbe92a8ea7e2f26359878c7feeeaa6739b042aa</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;em&gt;Originally created by:&lt;/em&gt; jl&lt;/p&gt;
&lt;p&gt;Hallo.&lt;/p&gt;
&lt;p&gt;Einer Variablen den Namen aus einem STRING zuzuweisen das funktioniert nicht.&lt;/p&gt;
&lt;p&gt;Aber warum verwendest Du eigendlich kein Array?&lt;/p&gt;
&lt;p&gt;So z.b.:&lt;/p&gt;
&lt;p&gt;PROGRAM PLC_PRG&lt;br/&gt;
VAR&lt;br/&gt;
    druck_in_p: REAL;&lt;br/&gt;
    DRUCK_LOGV: ARRAY &lt;span&gt;[1..10]&lt;/span&gt; OF BYTE;&lt;br/&gt;
    indexP: INT;&lt;br/&gt;
END_VAR&lt;/p&gt;
&lt;p&gt;IF druck_in_p &amp;gt;=100 THEN&lt;br/&gt;
    DRUCK_LOGV&lt;span&gt;[indexP]&lt;/span&gt; := MAX (REAL_TO_BYTE(druck_in_p), DRUCK_LOGV&lt;span&gt;[indexP]&lt;/span&gt;);&lt;br/&gt;
    IF indexP &amp;lt; 10 THEN&lt;br/&gt;
                    DRUCK_LOGV&lt;span&gt;[indexP +1]&lt;/span&gt; := 0;&lt;br/&gt;
             ELSE&lt;br/&gt;
           DRUCK_LOGV&lt;span&gt;[1]&lt;/span&gt; := 0;&lt;br/&gt;
    END_IF&lt;br/&gt;
END_IF&lt;/p&gt;
&lt;p&gt;Aufpassen musst dabei allerdings das die Variable "indexP" den Array-Bereich nicht unter/überschreitet.&lt;br/&gt;
Den Arraybereich kannst Du natürlich auch größer als 10 machenz.B. 100 oder 1000, was natürlich zu Lasten des Speichers geht, aber wenn Du ein Byte-Array nimmst, dann hat ein Array mit 1000 Werten auch nur die Größe von 1 Kilobyte, sollte kein Problem sein.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Ringspeicher Programmieren</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/94a6922252/?limit=25#1b88" rel="alternate"/><published>2020-02-28T07:40:57.444000Z</published><updated>2020-02-28T07:40:57.444000Z</updated><author><name>tirius</name><uri>https://forge.codesys.com/u/tirius/</uri></author><id>https://forge.codesys.com27411559cdbc780c2d6fe8a62fbb4c914ed2994e</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo,&lt;/p&gt;
&lt;p&gt;Das Programm funktioniert ungefähr so, wenn ein druck größer 100% anliegt, zählt der Counter (anderer baustein) hier nur zu sehen mit "LOG_DRUCK" im CASE befehl,&lt;br/&gt;
In z.b. 1min wird der höhste druck wert erfasst, danach springt der counter einen schritt weiter, wenn noch ein druck anliegt, wenn nicht wartet er in der ZEILE z.b. "2"&lt;br/&gt;
bis wieder ein überdruck von 100% gemessen wird, Springt danach in Zeile "3" das wiederholt der bis zur zeile 10 und fängt wieder bei 1 an...&lt;/p&gt;
&lt;p&gt;Mit Excel kann man sich auf diese weise sehr einfach, mehrere programmzeilen erzeugen, nur geht das leider auf zu lasten des speichers...&lt;/p&gt;
&lt;p&gt;Ich habe auch schon mit STRING'S herumeperimentiert, z.b. &lt;/p&gt;
&lt;p&gt;STRING1:='DRUCK_LOGV_';&lt;br/&gt;
STRING2:=WORD_TO_STRING(LOG_DRUCK);&lt;/p&gt;
&lt;p&gt;STRING3:=CONCAT(STRING1,STRING2);  (&lt;em&gt; Ergibt die Variabeln  aus der CASE Anweisung  &lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Ich habe vor eine dynamische IF anweisung zu erstellen die jeweils die die variabel verändert, indem dieser druck drin gespeichert wird.&lt;br/&gt;
Nur finde ich gerade keine möglichkeit auch nach langen googlen, den erstellten String in diese variable zu in die IF anweisung einzusetzen,&lt;/p&gt;
&lt;p&gt;Vlt hat ja jemand eine idee, brauch vlt sogar nur einen anstubser in die richtige richtung.&lt;/p&gt;
&lt;p&gt;Verwendete Hardware ist eine IFM CR0505.&lt;/p&gt;
&lt;p&gt;CASE LOG_DRUCK OF&lt;/p&gt;
&lt;p&gt;1   :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_1   :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_1    ); END_IF;  DRUCK_LOGV_2    :=0;&lt;br/&gt;
2   :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_2   :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_2    ); END_IF;  DRUCK_LOGV_3    :=0;&lt;br/&gt;
3   :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_3   :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_3    ); END_IF;  DRUCK_LOGV_4    :=0;&lt;br/&gt;
4   :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_4   :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_4    ); END_IF;  DRUCK_LOGV_5    :=0;&lt;br/&gt;
5   :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_5   :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_5    ); END_IF;  DRUCK_LOGV_6    :=0;&lt;br/&gt;
6   :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_6   :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_6    ); END_IF;  DRUCK_LOGV_7    :=0;&lt;br/&gt;
7   :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_7   :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_7    ); END_IF;  DRUCK_LOGV_8    :=0;&lt;br/&gt;
8   :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_8   :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_8    ); END_IF;  DRUCK_LOGV_9    :=0;&lt;br/&gt;
9   :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_9   :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_9    ); END_IF;  DRUCK_LOGV_10   :=0;&lt;br/&gt;
10  :    IF druck_in_p &amp;gt;=100    THEN DRUCK_LOGV_10  :=MAX   (REAL_TO_BYTE(druck_in_p),  DRUCK_LOGV_10   ); END_IF;  DRUCK_LOGV_1    :=0;&lt;/p&gt;
&lt;p&gt;END_CASE&lt;/p&gt;
&lt;p&gt;mfg&lt;/p&gt;
&lt;p&gt;Tirius&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>