ONTIME Fehler im Quellcode

Begonnen von ekki, 11. April 2018, 13:56:14

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

ekki

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

Minayato

It's great information for those who are looking for these things.

mattsches

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

brro87

#3
Hallo miteinander

Zitat von: mattsches in 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
Auch diese Lösung von mattsches hat noch einen Überlegungsfehler,.. so würde nämlich bei einem Neustart, da Init = False, sich OnTime zurücksetzen.

Es gibt bereits eine Version 2.5 dieses Bausteines, von hm "Vater" dieses Bausteines, z.B, zu finden auf dem GitHub des EBC der RWTH Aachen University
https://github.com/RWTH-EBC/AixOCAT/blob/develop/OSCAT/OSCAT/OSCAT/oscat_basic/POUs/Engineering/measurements/ONTIME.TcPOU

In der Version 332 ist diese Version auch in die Bibliothek eingeflossen,..
http://www.oscat.de/component/jdownloads/send/2-oscat-basic/2-oscat-revision-history.html?Itemid=0


mattsches

Das hast Du völlig Recht. Ich hatte übersehen, dass ekki offenbar eine veraltete Version im Einsatz hatte. Die genannte Version 2.5 des Bausteins korrigiert den Fehler tatsächlich, datiert zurück auf 2011 (!) und ist seit mindestens Anfang 2012 auch im offiziellen OSCAT-Downloadbereich im Rahmen der OSCAT_BASIC 3.33 zu haben: http://www.oscat.de/component/jdownloads/category/2-oscat-basic.html?Itemid=0

Der Github-Fork wurde vor zehn Monaten angelegt. Allerdings herrscht dort nach allem, was ich sehen kann, ziemlich tote Hose. Ich habe jedenfalls keinen Baustein gefunden, der geändert wurde. Vielleicht liegt das an der fehlenden Toolchain. Denn wie kommt man von den vielen Quellen im Repo z. B. zu einer übersetzten CODESYS-Bibliothek? In der Firma würden wir das über einen Buildserver machen. Doch OSCAT wird soweit ich das verstehe in der Freizeit von einzelnen Motivierten betrieben. Bzw. nur noch einem verbliebenen - Peewit. Damit das Ganze auf GitHub funktioniert, müsste die RWTH Aachen in meinen Augen automatisiert das Bauen der Bibliotheken aus den Quellen übernehmen und das Ergebnis dann z. B. wieder auf GitHub pushen. Das wäre schon eine coole Sache. Ob die dortige Begeisterung so weit reicht, daran habe ich in Anbetracht der Zeitstempel meine Zweifel. Tobias hat sich in einem Beitrag ähnlich geäußert, im Juni letzten Jahres (http://www.oscat.de/community/index.php/topic,4425.msg16579.html#msg16579). Darauf gab es allerdings keine Reaktion. Aber das ist jetzt ziemlich off topic, sorry...

brro, danke für den Hinweis. Ekki, du solltest mal deine Bibliotheken aktualisieren...