Die Pflanze und das Licht

Wir haben ja bereits einen Teil unserer Dokumentation an die Schule übergeben. Dabei ist aufgefallen, dass nicht alle Funktionen, die wir in TIA verwendet haben wirklich dem Anspruch der Bibliotheksfähigkeit entsprechen. Und damit habe ich mich heute mal ein wenig auseinandergesetzt.

Als wir die ersten Tests mit unserem Gewächshaus gestartet haben, war es hauptsächlich erstmal die Aufgabe, eine brauchbare Funktion zu haben, mit der die Lampe eingeschaltet wird, sobald das normale Tageslicht nicht ausreichend ist. Allerdings blieb dabei am Ende außer Acht, dass diese Funktion nicht bibliotheksfähig ist, da hier der Baustein „TONR“ verwendet wurde. Dieser benötigt jedoch einen Instanzdatenbaustein, damit die Daten dort zwischengespeichert werden.

Allerdings ist eine Funktion, die intern direkt mit Daten aus bspw. einem Datenbaustein oder den Ein- oder Ausgängen verknüpft ist, nicht bibliotheksfähig. Das ist die logische Schlussfolgerung, da nicht überall ein und der selbe Eingang mit einem Datenpunkt verbunden ist und damit in der Funktion entsprechend ankommt. Eine bibliotheksfähige Funktion muss offen sein und darf nur mit übergebenen Parametern arbeiten – so, wie man es auch aus Funktionen in anderen Programmiersprachen wie C++ oder Python kennt.

Folglich war es an der Zeit, diese Funktion für die Steuerung der Lampe nun nochmal insoweit umzubauen, dass sie nur von außen mit Parametern versorgt wird und intern alles frei verwendet wird, unabhängig der effektiven Belegung der I/O-Module der CPU. Das Ergebnis ist nun das folgende:

Die Funktion selbst ist jetzt ein wenig geschrumpft, während einige Bedingungen in den OB1 gewandert sind. Das ist zwar auch keine optimale Lösung, allerdings ist das eine Lösung, die sich aktuell sinnvoll mit FUP darstellen lässt. Vermutliche hätte es mit der Programmiersprache ST (Strukturiertem Text) oder auch SCL (Structured Code Language) durchaus wie angedacht funktioniert, allerdings wollte ich hier nicht unbedingt die Programmiersprachen vermischen, um es nachfolgenden Gruppen, die dieses Projekt in den kommenden Jahren vielleicht nochmal aufbereiten wollen, einfacher zu halten.

Grundsätzlich findet jetzt innerhalb der Funktion nur noch die Auswertung statt, wann das Licht eingeschaltet wird und wann es wieder ausgeschaltet wird. Die Akkumulation der Zeit, in der das Licht über einem gewissen Wert lag, sowie das Rücksetzen des Zählers finden entsprechend außerhalb der Funktion und damit innerhalb des OB1 (also dem „Main“ der SPS).