PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HS - zyklischer Differenzbaustein mit alter Wertausgabe



PepsiMox
10.05.06, 10:19
Hallo liebe HS'ler,

nachdem ich erfolglos versucht habe einen Baustein zu schreiben bzw. anzupassen, poste ich hier mal den Code und beschreibe, was der Baustein machen soll.

Der Baustein speichert sich einen Wert, nach einer vorgebbaren Zeit X wird ein neuer Wert an den Baustein gesendet. Damit soll die Differenz zwischen alten und neuen Wert gebildet und ausgegeben werden. Zu Kontrollzwecken soll auch der alte Wert mit angezeigt werden.

Habe den Baustein geladen und einiges simuliert, leider klappt es jedoch nicht immer fehlerfrei:
- Habe immer 20 addiert. Klappt in positive Richtung 1A, geht ich rückwärt 60, 40, 20 ist alles i.O. dann von 20 auf 0 kommt als Differenz -40.
- Starte ich aber bei 0 geht auf 20 und wieder zurück ist auch alles in Ordnung.
- Negativ kann er gar nicht.
- Ausgabe des Speichers (alter Wert) klappt auch nicht!

Vielen Dank für die hoffentlichen hilfreichen Hinweise

PepsiMox

----------------------------------------------------------------------

5001|2|2|1|6|1
# Eingänge EN[x]
5002|1|0|0 # Wert (Aktuell)
5002|2|1|0 # Zyklus Neuberechnung (sec.)
# Ausgänge
5004|1|0|0|1|0 # Differenz (nach jeder Berechnung gesendet!)
5004|2|0|0|1|0 # Wert (Alt) (nach jeder Berechnung gesendet!)
# Speichervariablen SN[x]
5003|1|0|0 # lastcounter
5003|2|0|0 # store counter 1
5003|3|0|0 # store counter 2
5003|4|0|0 # store time 1
5003|5|0|0 # store time 2
5003|6|0|0 # timediff
# timer anwerfen
5012|0|"(EI==1 and EN[2]) or OC[1]"|""|"EN[2]"|0|1|0|0
# wenn keine änderung, dann abbruch
5012|1|"EC[1] and EN[2]==0 and EN[1]==SN[1]"|""|""|0|0|0|0
5012|0|"EC[1] and EN[1]!=SN[1]"|"EN[1]"|""|0|0|1|0
# store 1 aus store 2 übernehmen
5012|0|"SC[1] and SN[1]"|"SN[3]"|""|0|0|2|0
5012|0|"SC[1] and SN[1]"|"SN[5]"|""|0|0|4|0
# store 2 füllen
5012|0|"SC[1] and SN[1]"|"EN[1]"|""|0|0|3|0
5012|0|"SC[1] and SN[1]"|"__import__('time').time()"|""|0|0|5|0
5012|0|"SN[2]"|"float(__import__('time').time())-float(SN[4])"|""|0|0|6|0
# alten Wert auf Ausgang schreiben
5012|0|"SN[2] and SN[6]"|"(EN[1]-SN[2])"|""|1|0|0|0
# Differenz bilden und auf Ausgang schreiben
5012|0|"SN[2] and SN[6]"|"(EN[1]-SN[2])"|""|1|0|0|0

Michel
10.05.06, 10:53
# alten Wert auf Ausgang schreiben
5012|0|"SN[2] and SN[6]"|"(EN[1]-SN[2])"|""|1|0|0|0
# Differenz bilden und auf Ausgang schreiben
5012|0|"SN[2] and SN[6]"|"(EN[1]-SN[2])"|""|1|0|0|0Jetzt mal so auf die Schnelle:
Ich sehe zwischen diesen beiden Zeilen keinen Unterschíed :confused: .

Wolltest du nicht auch was auf Ausgang 2 senden? ;)

PepsiMox
10.05.06, 11:31
Jetzt mal so auf die Schnelle:
Ich sehe zwischen diesen beiden Zeilen keinen Unterschíed :confused: .

Wolltest du nicht auch was auf Ausgang 2 senden? ;)

Danke.

Kannst du mich bitte wissen lassen, wie der richtige Code lauten müsste?

PepsiMox

Benutzer
10.05.06, 13:18
Hi zum Ausgang (alter Wert):



# alten Wert auf Ausgang schreiben
5012|0|"(eventuell noch Bedingung)"|"SN[1]"|""|2|0|0|0



Bin jetzt nicht ganz sicher welchen Wert du mit ALTER Wert meinst, wenn es Store1 ist, dann gibst halt SN[2] aus.

noch was:
Wegen dem Sprucng von 20 auf 0:
Du frägst mal ab mit "SC[1] and SN[1]". wenn du da am Eingang 0 anlegst, dann füllst du ne NULL in Store 2 und in der nächsten Zeile steht dann als Bedingung "SN[2]". Dort ist dann nach erneutem Durchlauf die Bedingung unwahr, und die Formelzeile wird nicht ausgeführt.
Korrigiert mich, wenn ich mich verdacht habe.


Gruß
Ralf

PepsiMox
11.05.06, 09:59
Hi zum Ausgang (alter Wert):



# alten Wert auf Ausgang schreiben
5012|0|"(eventuell noch Bedingung)"|"SN[1]"|""|2|0|0|0



Bin jetzt nicht ganz sicher welchen Wert du mit ALTER Wert meinst, wenn es Store1 ist, dann gibst halt SN[2] aus.

noch was:
Wegen dem Sprucng von 20 auf 0:
Du frägst mal ab mit "SC[1] and SN[1]". wenn du da am Eingang 0 anlegst, dann füllst du ne NULL in Store 2 und in der nächsten Zeile steht dann als Bedingung "SN[2]". Dort ist dann nach erneutem Durchlauf die Bedingung unwahr, und die Formelzeile wird nicht ausgeführt.
Korrigiert mich, wenn ich mich verdacht habe.


Gruß
Ralf

Hallo Ralf,

alter Wert ist der Wert der mit dem letzte Berechnung durchgeführt worden ist. Aktueller Wert - Alter Wert = Differenz.

In den Baustein funktioniert aber noch mehr nicht, die zeitliche Steuerung liegt auch noch im Argen.

PepsiMox

Benutzer
11.05.06, 10:11
Dann keist die Ausgabe so


# alten Wert auf Ausgang schreiben
5012|0|"(eventuell noch Bedingung)"|"SN[2]"|""|2|0|0|0



Zu der Zeit:


# timer anwerfen
5012|0|"(EI==1 and EN[2]) or OC[1]"|""|"EN[2]"|0|1|0|0


Du sagts:
Wenn INITIALISIERUNGSPHASE und der AKTUELLE WERT DES EINGANGS = 1 (größer 1?!?)ist, ODER TIMER ABLÄUFT, dann Lade den AKTUELLEN WERT von EINGANG 2 in den Zeitspeicher.

Ich könnt mich vorstellen, dass das EN[2] dumm tut, lass es mal zum test weg. Es reicht auch wenn du nur EI statt EI==1 schreibst.

Ich mach es so:


#Neuberechnen nach X Minuten
5012|1|"(EI or OC[1])"|""|"(EN[3]*60)"|0|1|0|0

Und bei mir funktioniert es.

Soweit mal
Gruß
Ralf

Gaston
11.05.06, 11:40
Hallo,

Mal was anderes, beim design von Modulen sollte man darauf achten so wenig wie möglich Speichervariabeln und Timer zu verwenden.

In diesem Fall, soweit ich den Baustein bis jetzt verstanden habe, könnte dieser ohne eine einzige Speichervariable auskommen. Allerdings sind mir noch einige Sachen schleierhaft:

Was genau willst Du dass der Baustein tut wenn die Zykluszeit 0 ist, also der Timer ausgeschaltet ist ? Denn zum einen testest Du dann am Anfang ob der Wert verschieden ist, ansonsten brichst Du ab, aber ganz am Schluss gibst Du nur Werte aus wenn der Timereingang (Eingang 2) nicht 0 ist :confused:

Und warum testest Du die Zeitdifferenz ? Diese kann abhängig vom system immer gegeben sein. time() kann bei jedem Aufruf einen anderen Wert haben oder aber nur jede Sekunde. Dies ist Systemabhängig (oder Versionsabhängig) und kann nicht vorausgesezt werden.

Gruss,
Gaston

PepsiMox
11.05.06, 14:01
Hallo den Leuten,

zur Erklärung warum der Baustein vielleicht umständlich oder kompliziert aussieht. Als vorlage hatte ich einfach den Baustein 19969_Momentenverbrauch_Strom.hsl von Thilo Kühn (www.eib4fun.de (http://www.eib4fun.de)) verwendet.

Wie man sieht, ist es noch nicht so weit her mit meinen Kenntnissen in dieser Programmiersprache.

Was will ich eigentlich:

Einen Baustein der zyklisch die Differenz zwischen einem altem Wert und einem neuen Wert berechnet und ausgibt.

Eingabe: Zykluszeit, Aktueller Wert
Ausgabe: Alter Wert, Differenz.

Ist die Zykluszeit 0 soll nichts passieren, ändern sich die Werte am Eingang soll auch nichts passieren. Wirklich nur alle x-Sekunden soll die Berechnung erfolgen.

Danke für die Unterstützung

PepsiMox

Im Winter wird mehr Zeit sein, sich mit der Programmierung eigener Logikbausteine zu beschäftigen, jetzt brauche ich das Teil aber dringend für diverse Aufgaben!

blue
11.05.06, 14:11
Was will ich eigentlich:

Einen Baustein der zyklisch die Differenz zwischen einem altem Wert und einem neuen Wert berechnet und ausgibt.

Eingabe: Zykluszeit, Aktueller Wert
Ausgabe: Alter Wert, Differenz.

Ist die Zykluszeit 0 soll nichts passieren, ändern sich die Werte am Eingang soll auch nichts passieren. Wirklich nur alle x-Sekunden soll die Berechnung erfolgen.


hallo,

ich blick es zwar auch nicht so richtig, was du genau machen willst,
aber zyklische abfragen könntest du mit dem telegrammgenerator
machen und dahinter einen vergleicher. am ausgang dann, "setze wert
auf wert von".

gruss

günther

PepsiMox
11.05.06, 14:17
hallo,

ich blick es zwar auch nicht so richtig, was du genau machen willst,
aber zyklische abfragen könntest du mit dem telegrammgenerator
machen und dahinter einen vergleicher. am ausgang dann, "setze wert
auf wert von".

gruss

günther

Hallo Blue,

mein Problem ist doch, dass ich den alten Wert irgendwo zwischenspeichern muss um die Differenz bilden zu können oder gibt es da in der Logik eine Möglichkeit zum Speichern von Variablen?

Was ich machen will:
Z.B. die Feuchtigkeit im Bad messen.
Ändert sich der Wert innerhalb von z.B. 10s zu stark, bedeutet dies, es nimmt entweder jemand ein Bad oder die Dusche ist an. Wenn dem so ist, dann soll automatisch die Lüftung eingeschaltet werden.
Ich kann nicht mit absoluten Werten arbeiten, da sich ja die L-Feuchtigkeit sowieso immer wieder ändert, allerdings niemals so extrem und schnell wie im Falle der Badnutzung!

PepsiMox

PepsiMox

Gaston
11.05.06, 14:21
Obwohl mir nicht einleuchtet warum eine differenz von 0 nie zustande kommen kann (aber ich kenne ja auch das einsatztgebiet des Moduls nicht :D ), habe ich das Modul mal vereinfacht. Allerdings auf die schnelle und ohne Test, hoofe ich hab mir keine Schnitzer erlaubt :cool:

P.S.: Mein Post sollt ekein Vorwurfsein, wollte nur mein Verständnis des Moduls verbessern

5000|"Meine Bausteine\Differenzbilder"|0|2|"Wert"|"Zykl.(sek.)"|2|"Differenz (t0)"|"Differenz (t-1)"
5001|2|2|1|1|1
# Eingänge EN[x]
5002|1|0|0 # Wert (Aktuell)
5002|2|1|0 # Zyklus Neuberechnung (sec.)
# Ausgänge
5004|1|0|0|1|0 # Differenz (nach jeder Berechnung gesendet!)
5004|2|0|0|1|0 # Wert (Alt) (nach jeder Berechnung gesendet!)

# Speichervariablen SN[x]
5003|1|0|0 # lastcounter

5012|0|"EI==1"|"EN[1]"|""|0|0|1|0 # Speichern des Initialwertes

# timer anwerfen
5012|0|"(EI==1 and EN[2]>0) or OC[1]"|""|"EN[2]"|0|1|0|0

# Wenn nicht Timer, oder Wert sich nicht geändert hat dann abbruch
5012|1|"(OC[1]==0) or (EN[1]==SN[1])"|""|""|0|0|0|0

# alten Wert auf Ausgang schreiben
5012|0|""|"AA[1]"|""|2|0|0|0

# Differenz bilden und auf Ausgang schreiben
5012|0|""|"(EN[1]-SN[1])"|""|1|0|0|0

# Neuen Wert als referenz übernehmen
5012|0|""|"EN[1]"|""|0|0|1|0

Michel
11.05.06, 14:23
Hallo Blue,

mein Problem ist doch, dass ich den alten Wert irgendwo zwischenspeichern muss um die Differenz bilden zu können oder gibt es da in der Logik eine Möglichkeit zum Speichern von Variablen?
Warum legst du für diesen Zweck nicht einfach ein internes KO an und verfährst wie von blue beschrieben? Am Ausgang dann den alten Wert in das KO schreiben und fertig.

Natürlich geht´s auch mit einem neuen Logikbaustein.;)

blue
11.05.06, 14:30
Hallo Blue,

Was ich machen will:
Z.B. die Feuchtigkeit im Bad messen.
Ändert sich der Wert innerhalb von z.B. 10s zu stark, bedeutet dies, es nimmt entweder jemand ein Bad oder die Dusche ist an. Wenn dem so ist, dann soll automatisch die Lüftung eingeschaltet werden.

PepsiMox

in diesem fall würde ich mit dem schwellwert baustein arbeiten.

sobald der überschritten wird...lüftung an.

beispiel. unterer schwellwert 50 % luftfeuchtigkeit, oberer schwellwert
60 % luftfeuchtigkeit. zwischen 50 und 60 passiert nichts, darüber wird
die lüftung eingeschaltet.

aber ich sehe gerade, gaston war fleissig.:D

gruss

günther

Gaston
11.05.06, 14:47
Ich kann nicht mit absoluten Werten arbeiten, da sich ja die L-Feuchtigkeit sowieso immer wieder ändert, allerdings niemals so extrem und schnell wie im Falle der Badnutzung!


Das ist so als würdest Du keinen Absolutwert (sprich Sollwert) bei der Heizungsregelung einstellen wollen weil sich die Temperatur ja immer mal ändert.

Also wieso nur bei Benutzung (also schneller änderung) Lüften ? Was Du doch eigentlich willst, ist Feuchtigkeit abziehene, also wäre der Schwellwertbaustein wie von Günther beschrieben doch die beste Lösung.

Was schaltest Du denn hinter den Differenzialausgang ? Einen Vergleicher mit Treppenhausschaltung ? Denn die Lüftung nur Anhand der Differenz betreiben geht nicht, da die Differenz bei Sätigung und/oder Lüftung ja abnehmen wird.

Und Auch bei Treppenhausschaltung bleibt eine Unsicherheit im System das dazu führen kann dass eine hohe Luftfeuchtigkeit unsichtbar für den Differenzbaustein ist, wenn sie sich nicht schnell ändert.

Gruss,
Gaston

Matthias Schmidt
11.05.06, 14:54
Hallo Pepsimox,

ich habe die gleiche Aufgabenstellung wie bei dir mit konv. Logik gelöst. Offensichtlich geht es darum, die Größe der Wertänderung innerhalb einer bestimmten Zeit zu erfassen. Ich nutze das, um zu erkennen, ob gebadet wird und vergleiche zyklisch die Temp meines Warmwasserspeichers. Läßt einer die Badewanne ein. sinkt die Temp kurzfristig stark.

Gaston
11.05.06, 15:06
Hallo Pepsimox,

ich habe die gleiche Aufgabenstellung wie bei dir mit konv. Logik gelöst. Offensichtlich geht es darum, die Größe der Wertänderung innerhalb einer bestimmten Zeit zu erfassen. Ich nutze das, um zu erkennen, ob gebadet wird und vergleiche zyklisch die Temp meines Warmwasserspeichers. Läßt einer die Badewanne ein. sinkt die Temp kurzfristig stark.

Hi Matthias,

Ich dacht eimmer Du hättest Für diesenm Zweck einen Temperatursensor an (unter) der Badewanne ? Das mit der Warmwasertemperatur hatte ich mir auch mal überlegt dann aber fallen gelassen da es auch andere Gründe dafür geben könnte.

Meine Badewanne ist mit einem Wassersensor ausgerüstet (vom Werk aus) prinzipiell könnte ich den verwenden, aber sowas müsste man auich nachrüsten könne, zumindest bei Acrylbadewannen (oder ähnliche Materialien), sowet man dran kommt.

Gruss,
Gaston

Matthias Schmidt
11.05.06, 15:10
Hallo Gaston,

den Sensor hatte ich mal dran, habe ihn dann aber dringend in meiner Wohnraumlüftungsanlage benötigt.

Weil LAB sich beschwert hat, dass die Handtücher nach dem Baden kalt waren, habe ich schnell diese Differenz-Geschichte probiert. Die funktioniert so gut, dass ich den Temperaturfühler für Badewanne seit zwei Jahren liegen habe....

PepsiMox
13.06.06, 11:30
Obwohl mir nicht einleuchtet warum eine differenz von 0 nie zustande kommen kann (aber ich kenne ja auch das einsatztgebiet des Moduls nicht :D ), habe ich das Modul mal vereinfacht. Allerdings auf die schnelle und ohne Test, hoofe ich hab mir keine Schnitzer erlaubt :cool:

P.S.: Mein Post sollt ekein Vorwurfsein, wollte nur mein Verständnis des Moduls verbessern

5000|"Meine Bausteine\Differenzbilder"|0|2|"Wert"|"Zykl.(sek.)"|2|"Differenz (t0)"|"Differenz (t-1)"
5001|2|2|1|1|1
# Eingänge EN[x]
5002|1|0|0 # Wert (Aktuell)
5002|2|1|0 # Zyklus Neuberechnung (sec.)
# Ausgänge
5004|1|0|0|1|0 # Differenz (nach jeder Berechnung gesendet!)
5004|2|0|0|1|0 # Wert (Alt) (nach jeder Berechnung gesendet!)

# Speichervariablen SN[x]
5003|1|0|0 # lastcounter

5012|0|"EI==1"|"EN[1]"|""|0|0|1|0 # Speichern des Initialwertes

# timer anwerfen
5012|0|"(EI==1 and EN[2]>0) or OC[1]"|""|"EN[2]"|0|1|0|0

# Wenn nicht Timer, oder Wert sich nicht geändert hat dann abbruch
5012|1|"(OC[1]==0) or (EN[1]==SN[1])"|""|""|0|0|0|0

# alten Wert auf Ausgang schreiben
5012|0|""|"AA[1]"|""|2|0|0|0

# Differenz bilden und auf Ausgang schreiben
5012|0|""|"(EN[1]-SN[1])"|""|1|0|0|0

# Neuen Wert als referenz übernehmen
5012|0|""|"EN[1]"|""|0|0|1|0

Hatte hier genannten Baustein in der Art ändern wollen, dass tatsächlich die Differenz von (Wert_t0 - Wert_t1) angezeigt, dann Wert_t in den Speicher übernommen wird.
Hat nicht geklappt.
Jetzt funktioniert trotz exater Kopie des Bausteins die zyklische Berechnung nicht mehr, kann es sein, dass ich durch das Anlegen von drei zusätzlichen Bausteinen mit leicht veränderten Inhalten einen Fehler im HS provoziere, der die zyklische Abarbeitung verhindert?

Kann sich jemand bitte den oben stehenden Code ansehen und mich wissen lassen, was ich ändern muss, damit das Teil endlich macht, was ich gern möchte?

Das ist:
Zeitpunkt t1: Diff= Wert_t1 - Wert_t0
Zeitpunkt t2: Diff= Wert_t2 - Wert_t1
Zeitpunkt t3: Diff= Wert_t3 - Wert_t2

Der Wert soll alle x-Sekunden zyklisch abgefragt werden, und auch nur dann soll die Berechnung erfolgen.

Ausgegeben werden soll die Differenz und der "alte" Wert.

Danke

Ein verzweifelter, weil seine Fähigkeiten in Frage stellender PepsiMox!

Matthias Schmidt
13.06.06, 11:51
5012|1|"(OC[1]==0) or (EN[1]==SN[1])"|""|""|0|0|0|0


M.E. verhindert diese Abbuchbedingung, dass der Rest des Bausteines ausgefürt wird, da OC[1] immer Null ist, außer beim Ablauf des Offsets.

PepsiMox
13.06.06, 13:07
5012|1|"(OC[1]==0) or (EN[1]==SN[1])"|""|""|0|0|0|0


M.E. verhindert diese Abbuchbedingung, dass der Rest des Bausteines ausgefürt wird, da OC[1] immer Null ist, außer beim Ablauf des Offsets.

OC[1] = Timer 1. Ändert sich doch aber immer nach Ablauf des Zyklus/Offset, richtig?

Damit sollte doch nach x-sec der Baustein immer berechnet werden? Macht er aber nicht mehr.

5012|1|"(OC[1]==0)"|""|""|0|0|0|0

Wäre das die Bedingung damit nur nach Ablauf des Zyklus / Offset gerechnet wird=
PepsiMox

In der Dok steht dazu:

Beendet die Berechnung des Bausteins, wenn das
Ergebnis der Bedingung ungleich null ergibt, nach der Berechnung der Formel. Weitere Informationen dazu im Kapitel 6.
1 = ja
0 = nein

Matthias Schmidt
13.06.06, 13:18
Durch die rote "1" wird der Baustein angewiesen, die Berechnung abzubrechen. Setz' die mal auf 0!

PepsiMox
13.06.06, 13:28
Durch die rote "1" wird der Baustein angewiesen, die Berechnung abzubrechen. Setz' die mal auf 0!

Darf ich interpretieren?

5012|1|"(OC[1]==0)"|""|""|0|0|0|0

OC[1]==0; Abfrage "Solange der Zeitspeicher läuft"
- wenn wahr, Ergebnis =1, dann Abbruch
- wenn nicht wahr, Ergebnis =0, dann sollte doch auch kein Abbruch erfolgen, da dass Ergebnis der Formal nicht 1 ergibt?

Wo liegt denn nun mein Denkfehler, verflucht.

PM

Gaston
13.06.06, 15:10
5012|1|"(OC[1]==0)"|""|""|0|0|0|0



Richtig, OC[1] wird einmal 1 wenn der Timer 1 abgelaufen ist.

Kannst Du mal deinen neuen Baustein hier komplett posten. Und was genau hast DU gemacht, den alten Baustein geändert oder einen neuen Baustein mit geänderter Funktionalität erstellt (sprich den alten kopiert und verändert) ? In diesem Fall musst Du auch sichestellen dass der Baustein eine neue Nummer im Dateinamen halt.

Gruss,
Gaston

PepsiMox
13.06.06, 15:50
Richtig, OC[1] wird einmal 1 wenn der Timer 1 abgelaufen ist.

Kannst Du mal deinen neuen Baustein hier komplett posten. Und was genau hast DU gemacht, den alten Baustein geändert oder einen neuen Baustein mit geänderter Funktionalität erstellt (sprich den alten kopiert und verändert) ? In diesem Fall musst Du auch sichestellen dass der Baustein eine neue Nummer im Dateinamen halt.

Gruss,
Gaston

Hallo Gaston,

ich hatte in der Version v1 nichts geändert. Vorgestern ging der BS noch, gestern nicht mehr.

Wie schon zurvor geschrieben, soll dies hier vom BS gemacht werden:

Zeitpunkt t1: Diff= Wert_t1 - Wert_t0
Zeitpunkt t2: Diff= Wert_t2 - Wert_t1
Zeitpunkt t3: Diff= Wert_t3 - Wert_t2

Der Wert soll alle x-Sekunden zyklisch abgefragt werden, und auch nur dann soll die Berechnung erfolgen.

Ausgabe von Differenz und altem Wert, in deiner Version wurde die aktuelle Differenz, die vorherige Differenz ausgegeben. Leider wurde dann auch die alte Differenz zur weiteren Berechnung verwendet, so dass egal wie, immer wieder neu Werte ausgegeben wurden, die nicht der Realität entsprachen.

Danke für die Unterstützung

PM

Im Anhang die drei Versionen

Gaston
14.06.06, 21:33
Hab mir mal V3 angesehen und konnte soweit (mit dem blossen Auge) keinen Fehler erkennen.

Bei folgender zeile einen kleinen Tip:

5012|0|"(EI==1 and EN[2]>0) or OC[1]"|""|"EN[2]"|0|1|0|0

Auch wenn die Zeile eigentlich richtig ist rate ich immer eine Abfrage auf wahr falsch wie hier bei OC[1] explizit zu machen da man hier proting bugs vermeidet. Eine abfrage auf "falsch" macht man demzufoldge mit "OC[1]==0" und eine abfrage auf falsch mit "OC[1]!=0" und nicht etwas "OC[1]==1". Dies sollte man sich prinzipiel bei jeder Programiersprache angwöhnen.

Was ich jetzt machen würde, wäder einen 4. Ausgang "Debug" anfügen (Initwert=0) und dann vor die oben genanmnte Zeile folgende einfügen:

5012|0|""|"AA[4]+1"|""|4|0|0|0

Den Ausgang mit einem 32 bit internem Debug KO verbinden, dann eine Debug Statusseite in Archive und Listen anlegen und dort diese KO einfügen.

Nun auf dem HS diese Seite aufrufen und schauen ob sich der Zähler im Rytmus des Zykluses erhöht oder nich.

Wenn...

Zähler bleibt 0, dann wurde der INIT nicht ausgeführt:confused:
Zähler bleibt 1, dann funktioniert der Zyklustimer nicht wie erwartet
Zähler läuft, dann müsste das Problem bei der Abbruch Bedingung weiter unten liegen, und Du solltest die Zählzeile mal hinder diese Zeile verlegen, und erneut testen.Warum ist diese sampling (also Zyklus) eigentlich nötig. D.h. warum darf der Wert nur alle x Sekunden inbetracht gezogen werden ? I-Regler ?

Gruss,
Gaston

PepsiMox
14.06.06, 22:04
Danke für die Tipps.

Werde ich morgen einbauen und testen.

Schönen Abend noch PepsiMox

Was mich nach wie vor wundert, ist die Tatsache, dass die zyklische Abfrage wie zuvor erwähnt schon mal, mit exat von dir geposteten Variante funktioniert hat und jetzt nicht mehr laufen mag.

Zyklus:
Ich möchte den Anstieg berechnen zur Lüftungssteuerung.
Extremer Unterschied in x-sek deutet dann darauf hin, dass sich z.B. die Luftfeuchtigkeit geändert hat.