Code:
IF „Taktmerker_1Hz“ and Not „Flanke_Taktmerker_1Hz“ THEN
„ZW_1l_Real“ := „ZW_1l_Real“ + („IW_L/h_Real“ / 3600.0);
WHILE „ZW_1l_Real“ > 1.0 DO // WHILE statt IF, damit ggfs auch Überläufe >= 2.0 abgebaut werden
„ZW_1l_Real“ := „ZW_1l_Real“ - 1.0;
„ZW_Gesamt_in_l_DINT“ := „ZW_Gesamt_in_l_DINT“ + 1;
END_WHILE;
END_IF;
„Flanke_Taktmerker_1Hz“ := „Taktmerker_1Hz“;
Ich habe mir 3 Änderungen erlaubt:
1. Die Leerzeichen in den VariablenNamen durch Unterstriche ersetzt.
2. Die zweite IF-Selektion in die erste integriert.
3. Die zweite IF-Selektion in eine WHILE-Schleife geändert.
Zu 1.:
"Unterbrechungen" in Namen (also auch VariablenNamen) sind bei SCL zwar zulässig, aber in sooo vielen anderen ProgrammierSprachen nicht, dass man die dort übliche Variante mit den Unterstrichen ohne Verlust an Lesbarkeit anwenden kann bzw. sollte.
Zu 2.:
Weil die Abfrage, ob die bedingte Ausführung des Übertrags erforderlich ist, nicht in allen Zyklen ausgeführt werden muss, sondern nur in den (wenigen) Zyklen, in denen sich der Zählerstand ändert.
Zu 3.:
Wegen 2. würde eine Differenz von >= 2.0 nicht mehr "nach und nach" abgebaut werden.
D.h., sollte sich - warum auch immer - eine grössere Differenz "angesammelt" haben, würde dieser Fehler beibehalten werden.
Nicht geändert:
'L' in 'l' in '„IW_L/h_Real“'.
Von der üblichen Gross-/KleinSchreibung von MassEinheiten sollte möglichst nicht abgewichen werden.
Leider hat man in diversen SchriftArten das Problem, dass z.B. 'I' (Klein-L) und 'l' (Gross-i) und evtl. auch '1' oder 'O' (Gross-o) und '0' (Null) kaum oder gar nicht zu unterscheiden *) sind, so dass Ausnahmen manchmal doch gerechtfertigt sein können.
*) Bei der Festlegung, wie die verschiedenen Zeichen in einer SchriftArt dargestellt werden, sollte m.E. der Eindeutigkeit endlich mal eine höhere Priorität vor dem Aspekt der "Schönheit" eingeräumt werden!
Ist diese Forderung denn nur in der AutomatisierungsTechnik relevant? Ich finde, man könnte sich auch in anderen Bereichen gut damit abfinden, ohne dafür grosse Opfer bringen zu müssen.