Var_in_out scheint vielen Anwendern etwas unheimliches zu sein.
Viele fragen warum wir mehr und mehr I/O verwenden.
Hier ein paar erläuterungen warum und weshalb I/O variablen an einigen stellen sehr wohl sinnmachen.
1. eine I/O variable ist ein pointer auf eine ausserhalb des Bausteins definierte Variable.
das im grafischen Designer der Anschluß auf der Input seite liegt sollte niemanden stören denn eine I/O ist nun mal gleichermassen ein Eingang wie auch ein Ausgang.
2. die nutzung einer I/O variable kann deutliche performance vorteile bringen wenn es sich um große datenblöcke handelt, wie z.b arrays oder strings.
denn es wird beim aufruf lediglich ein 32 bit pointer übergeben und nicht wie sonst die gesamte datenstruktur.
würde man ein 1K byte großes array als input übergeben wird bei jedem aufruf das gesamte array von 1KB im speicher übertragen.
zusätzlich zu dem enormen zeitaufwand wird auch die datenstruktur doppelt angelegt, was schnell viel speicherplatz vergeuden kann.
fazit I/O variablen können stark zur performance steigerung und speicherplatz einsparung beitragen.
3. ein input eines fb kann nur von aussen beschrieben werden, und ein output von aussen nur gelesen werden.
eine i/O variable kann sowohl von innerhalb des bausteins wie auch von ausserhalb gelesen und geschrieben werden.
dadurch ist eine bidirektionale kommunikation möglich, die sonst nur sehr umständlich und ineffizient realisiert werden kann.
ein dimmer mit I/O bedeutet das auf dasselble dimm signal (die extern definierte variable) auch ein weiterer baustein zum beispiel szeneninformationen schreiben kann.
bei einer rampe koennte so von ausserhalb des bausteins ohne großen aufwand ein reset odder preset erzeugt werden.
man schreibt den neuen wert ganz simpel in die varaiable
ohne i/O musste man eine speziellen input pin auf den gewünschten wert setzen, den set input auf true setzen, den baustein aufrufen und dann wieder den set input auf false setzen.
der aufwand ist um ein vielfaches höher und die performance sehr schlecht.
4. remenent und persisitent sind möglichkeiten variablen bei spannungsausfall, reset und reload der software zu erhalten, dies ist zwar prinzipiell auch für bausteine möglich, dann wird aber immer der gesamte bautein remanent gehalten obwohl meist nur eine eizige variable nötig ist.
im falle von I/O kann der anwender selbst bei der deklaration der externen variable enscheiden was er remanent und was nicht remenant haben will.
da der remanente speicher meist nur relativ begrenzt ist wird hierdurch der speicherplatz effizienter genutzt.
ein weiterer grund nur das nötige remenent zu halen und nicht ganze bausteine ist die tatsache das der remanente speicher (meist flash) im vergleich zum normalen speicher sehr langsam ist und deshalb ganze bausteine im remanenten speicher stark die performance beeinflussen können.
also:
keine angst vor i/O variablen, sie sind an vielen stellen sinnvoll und erlauben höhere funktionalität.
in oscat werden wir überall dort wo deutliche vorteile sind I/O variablen einsetzen.
die angst etlicher anwender ist völlig unbegründet und wird sich nach dem ersten einsatz und verständniss auch sicherlich in gefallen wandeln.
fazit: i/O variablen erlauben höhere funktionalität bei geringem aufwand.