Timer funktioniert nicht mehr?

amos

Level-1
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Experten,
der folgende Code hat auf meiner Wago 750-811 jahrelang einwandfrei funktioniert.
Seit ich gestern ein Webvisu Trend Objekt implementiert habe, bleibt der I/O Ausgang Out0 dauerhaft auf "off".
Hat jemand eine Idee woran das liegen könnte?

Code:
 Output_0 AT %QX0.0: BOOL;
IF Output_0
   THEN  Timer_temp_fuehler.PT:=t#30s; (*on*)
   ELSE  Timer_temp_fuehler.PT:=t#30s; (*off*)
   analog0_int:=WORD_TO_INT(analog0);
   analog1_int:=WORD_TO_INT(analog1);
   analog2_int:=WORD_TO_INT(analog2);
   analog3_int:=WORD_TO_INT(analog3);
END_IF;
Timer_temp_fuehler(IN:=NOT Timer_temp_fuehler.Q);
Output_0 := Output_0 XOR Timer_temp_fuehler.Q;
rtrigg_out0(CLK:= Output_0);
xDoit := rtrigg_out0.Q;
 
Zuletzt bearbeitet:
Problem ist nun gelöst! (Siehe ganz unten)

oder anders gefragt, wie kann man so ein Verhalten mit Codesys eingrenzen?
oder gibt es eine Debug Möglichkeit?

Hallo Experten,
der folgende Code hat auf meiner Wago 750-811 jahrelang einwandfrei funktioniert.
Seit ich gestern ein Webvisu Trend Objekt implementiert habe, bleibt der I/O Ausgang Out0 dauerhaft auf "off".
Hat jemand eine Idee woran das liegen könnte?

Code:
 Output_0 AT %QX0.0: BOOL;
IF Output_0
   THEN  Timer_temp_fuehler.PT:=t#30s; (*on*)
   ELSE  Timer_temp_fuehler.PT:=t#30s; (*off*)
   analog0_int:=WORD_TO_INT(analog0);
   analog1_int:=WORD_TO_INT(analog1);
   analog2_int:=WORD_TO_INT(analog2);
   analog3_int:=WORD_TO_INT(analog3);
END_IF;
Timer_temp_fuehler(IN:=NOT Timer_temp_fuehler.Q);
Output_0 := Output_0 XOR Timer_temp_fuehler.Q;
rtrigg_out0(CLK:= Output_0);
xDoit := rtrigg_out0.Q;
 
Zuletzt bearbeitet:
Nein es liegt offensichtlich an der Trend Library, denn wenn ich das Projekt nur mit syslibcallback und Standard.lib teste funktioniert alles wieder.
Was ich nicht verstehe ist, warum das Programm fehlerfrei übersetzt wird?
2018-10-09.png
 
Zuletzt bearbeitet:
Hallo Experten,
... bleibt der I/O Ausgang Out0 dauerhaft auf "off". ...
Code:
[FONT=courier new] Output_0 AT %QX0.0: BOOL;
IF Output_0
   THEN  Timer_temp_fuehler.PT:=t#30s; (*on*)
   ELSE  Timer_temp_fuehler.PT:=t#30s; (*off*)
   analog0_int:=WORD_TO_INT(analog0);
   analog1_int:=WORD_TO_INT(analog1);
   analog2_int:=WORD_TO_INT(analog2);
   analog3_int:=WORD_TO_INT(analog3);
END_IF;
Timer_temp_fuehler(IN:=NOT Timer_temp_fuehler.Q);
Output_0 := Output_0 XOR Timer_temp_fuehler.Q;
rtrigg_out0(CLK:= Output_0);
xDoit := rtrigg_out0.Q;
[/FONT]
Was in dem gezeigten Code entspricht denn dem "I/O Ausgang Out0"? Output_0?
Bleibt Output_0 auf True, wenn man ihn auf True setzt?

Die beiden Zeilen ...
Timer_temp_fuehler(IN:=NOT Timer_temp_fuehler.Q);
Output_0 := Output_0 XOR Timer_temp_fuehler.Q;
... würde ich tauschen.
Zuerst mit Timer_temp_fuehler.Q das Bit Output_0 umknippsen und dann erst mit /Timer_temp_fuehler.Q den Timer neu starten.

Was bewirkt die Zeile
rtrigg_out0(CLK:= Output_0);
?
Bzw. wo versteckt sich der FlankenMerker zur Erkennung der pos. Flanke von Output_0?
Bleibt sein Zustand bis zum nächsten Zyklus erhalten?

Wird Timer_temp_fuehler jemals gestartet?

PS:
Was ich nicht verstehe ist, warum das Programm fehlerfrei übersetzt wird?
Sollte es nicht, wenn es fehlerfrei ist?
Was meinst Du mit "fehlerfrei"? Frei von SyntaxFehlern? Frei von logischen Fehlern? Frei von DoppelDefinitionen (Trend Library/eigenes Programm)?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein es liegt offensichtlich an der Trend Library, denn wenn ich das Projekt nur mit syslibcallback und Standard.lib teste funktioniert alles wieder.
Was ich nicht verstehe ist, warum das Programm fehlerfrei übersetzt wird?
Anhang anzeigen 42884

Gibt es in der Trend Lib vielleicht eine System-Variable die Output_0 heißt?

PS

Bin ich eigentlich der einzige der nicht gerne (eher nie) wirkliche physikalische Ausgänge %QXx.x im Programm abfragt für IF Bedingungen?

Dachte immer sowas macht man nicht, weiß aber gar nicht mehr genau wie ich drauf komme. :-?
 
Zuletzt bearbeitet:
Bin ich eigentlich der einzige der nicht gerne (eher nie) wirkliche physikalische Ausgänge %QXx.x im Programm abfragt für IF Bedingungen?
Nein, Du bist der andere, der das auch nicht gerne tut.

Dachte immer sowas macht man nicht, weiß aber gar nicht mehr genau wie ich drauf komme.
Das wurde von ProgrammiererGeneration zu ProgrammiererGeneration so überliefert.
 
Es geht um den physikalischen Baustein %QX0.0
Hier das Vollständige Programm das mit den zwei genannten Libraries übersetzt wurde und gut funktioniert.
(Der Baustein ändert alle 30s seinen Zustand)

Code:
PROGRAM PLC_PRG
VAR
      analog0 AT %IW0: WORD;
      analog1 AT %IW1: WORD;
       Output_0 AT %QX0.0: BOOL;
       Timer_temp_fuehler:TON;
       rtrigg_out0 : R_TRIG;
END_VAR
IF Output_0
   THEN  Timer_temp_fuehler.PT:=t#30s; (*on*)
   ELSE  Timer_temp_fuehler.PT:=t#30s; (*off*)
END_IF;
Timer_temp_fuehler(IN:=NOT Timer_temp_fuehler.Q);
Output_0 := Output_0 XOR Timer_temp_fuehler.Q;
rtrigg_out0(CLK:= Output_0);


Wenn ich nun das ganze mit Webvisu für den Baustein analog0 AT %IW0 übersetze, wechselt der Zustand von %QX0.0 leider nicht mehr, obwohl das Programm bei der Übersetzung keinen Fehler bringt.
Mir fällt nur auf, dass wesentlich mehr Codesys Bibliotheken notwendig sind. (Siehe Screenshot weiter oben.)



Was in dem gezeigten Code entspricht denn dem "I/O Ausgang Out0"? Output_0?
Bleibt Output_0 auf True, wenn man ihn auf True setzt?

Die beiden Zeilen ...
Timer_temp_fuehler(IN:=NOT Timer_temp_fuehler.Q);
Output_0 := Output_0 XOR Timer_temp_fuehler.Q;
... würde ich tauschen.
Zuerst mit Timer_temp_fuehler.Q das Bit Output_0 umknippsen und dann erst mit /Timer_temp_fuehler.Q den Timer neu starten.

Was bewirkt die Zeile
rtrigg_out0(CLK:= Output_0);
?
Bzw. wo versteckt sich der FlankenMerker zur Erkennung der pos. Flanke von Output_0?
Bleibt sein Zustand bis zum nächsten Zyklus erhalten?

Wird Timer_temp_fuehler jemals gestartet?

PS:

Sollte es nicht, wenn es fehlerfrei ist?
Was meinst Du mit "fehlerfrei"? Frei von SyntaxFehlern? Frei von logischen Fehlern? Frei von DoppelDefinitionen (Trend Library/eigenes Programm)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hast Du schonmal versucht,
Die beiden Zeilen ...

Timer_temp_fuehler(IN:=NOT Timer_temp_fuehler.Q);
Output_0 := Output_0 XOR Timer_temp_fuehler.Q;

... zu tauschen?

Zum Testen, ob die Timerei überhaupt in Gang kommt, könntest Du statt
Timer_temp_fuehler(IN:=NOT Timer_temp_fuehler.Q);
einmal
BoolscheHilfsVariable := Timer_temp_fuehler.Q) Xor IrgendeinEingangMitTaster;
Timer_temp_fuehler(IN:=NOT BoolscheHilfsVariable);
programmieren und probieren, ob sich der Timer manuell per TastenDruck anwerfen lässt.

PS:
Ich verstehe nicht, was Du mit ...
Wenn ich nun das ganze mit Webvisu für den Baustein analog0 AT %IW0 übersetze, wechselt der Zustand von %QX0.0 leider nicht mehr, ...
… meinst ;o(

PPS:
Überschneiden sich etwa %IW0 und %IW1, %IW1 und %IW2, %IW2 und %IW3 ?
Sind die Ziffern ByteAdresssen, WortAdressen, … ?
Anders gefragt: müsste es nicht %IW0, %IW2, %IW4, %IW6 heissen?


 
Zuletzt bearbeitet:
fehlerhafte Bibliothek?

Jetzt komme ich der Sache näher, wenn ich das Programm direkt aus der Steuerung lade bekomme ich diese Fehlermeldung, obwohl es ja eigentlich zuvor fehlerfrei in die Steuerung übersetzt wurde.
Ich weiss aber nicht in welcher Bibliothek und welcher Version dieser fehlerhafte Baustein von der Firma Codesys definiert wurde:
2018-10-10.png
 
Vorweg: Ich komme aus der TwinCat- und Target-Visu-Ecke und habe keine Erfahrung mit Wago, der Web Visu und dem Trendobjekt.
Ich vermute, dass der in der Fehlermeldung genannte Baustein ein Codesys-Visu-FB ist, den Du niemals zu Gesicht bekommen wirst. Möglicherweise wird der FB vom Trendobjekt verwendet und Du hast einen Platzhalter des Trendobjektes nicht ausgefüllt oder etwas reingeschrieben, was der Compiler nicht übersetzen kann. Es könnte aber auch sein, dass das Trendobjekt von der Web Visu gar nicht unterstützt wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK, Vielen Dank, ich werde das jetzt mal testen. Ich konfiguriere nur eine einzige Trend Visu auf den Eingang analog0 um zu sehen, ob das fehlerfrei funktioniert.
 
Für alle die es interessiert, ich habe den Fehler nun gefunden.
Durch die Trend Visualisierung wurde automatisch ein Task angelegt, ohne dass ich es mitbekommen habe.:confused:
Wenn ich diesen Task lösche funktioniert der Timer wieder einwandfrei.
Kann mir jemand sagen, was ich machen muss, damit mein ursprüngliches Hauptprogramm ebenfalls diesen Trend Task benutzt, oder ist es sinnvoller, wenn ich für das Hauptprogamm einen eigenen Task anlege?
2018-10-11.png
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wahrscheinlich ist es besser das Hauptprogramm über einen höher priorisierten Task laufen zu lassen. Einfach neuen Task einfügen über rechte Maustaste. Dann bei diesem Task noch einmal rechte Maustaste und Programmaufruf einhängen. Dort dann PLC_PRG wählen.

Gruß
 
Zurück
Oben