Autor Thema: ONTIME Fehler im Quellcode  (Gelesen 264 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline ekki

  • Newbie
  • *
  • Beiträge: 1
    • Profil anzeigen
ONTIME Fehler im Quellcode
« am: 11. April 2018, 13:56:14 »
Hallo alle zusammen,
ich weiß nicht ob es hier der Richtige Ort ist das zu Posten aber in der oscat.lib Basic hat der Baustein "ONTIME" einen kleinen fehler in Zeile 5... wodurch das Reseten des Bausteins nicht funktioniert (in keinem Zustand)


I(* read system time *)
tx := T_PLC_MS();

(* make sure the first cycle works correctly *)
IF NOT init OR rst THEN                                       //<------- hier wurden die Klammern vergessen
init := TRUE;
last := tx;
ms := 0;
ELSIF RST THEN
SECONDS := 0;
CYCLES := 0;
ELSIF IN THEN
(* add the current milliseconds *)
ms := (tx - last) + ms;
IF ms >= 1000 THEN
seconds := seconds + 1;
ms := ms - 1000;
END_IF;
cycles := cycles + BOOL_TO_UINT(NOT edge);
END_IF;
ledge);
END_IF;
last := tx;
edge := in;


Zeile 5 müssten die Klammern hinzugefügt werden und so aussehen...
IF NOT (init OR rst) THEN



Mit besten Grüßen
Ekki

Offline Minayato

  • Newbie
  • *
  • Beiträge: 2
    • Profil anzeigen
Re: ONTIME Fehler im Quellcode
« Antwort #1 am: 22. Mai 2018, 06:59:23 »
It's great information for those who are looking for these things.

Offline mattsches

  • Full Member
  • ***
  • Beiträge: 196
    • Profil anzeigen
Re: ONTIME Fehler im Quellcode
« Antwort #2 am: 22. Mai 2018, 12:30:46 »
Hallo ekki,

da möchte ich spontan widersprechen. Die von dir vorgeschlagene Änderung bewirkt, dass nach Setzen von init überhaupt kein Reset mehr durchgeführt werden kann. Denn init wird auf TRUE gesetzt und somit ist der Ausdruck innerhalb der Klammer fortan immer wahr.

Im ursprünglichen Zustand wird bei positivem RST-Eingang auch bei init=TRUE last auf tx gesetzt und ms zurückgesetzt.

Störend ist dagegen diese Zeile:

ELSIF RST THEN
Dieser Zweig wird nie abgearbeitet, da bei RST=TRUE bereits der erste Zweig zuschlägt. Daher gehört nach meinem Dafürhalten diese Zeile ersatzlos gestrichen, wodurch die Variablen seconds und cycles ebenfalls bei init=FALSE und RST=TRUE zurückgesetzt würden.

Gruß,
mattsches