-> Hier kostenlos registrieren
VAR_INPUT/VAR_OUTPUT in der Main.pou und I/O-Linkliste
Ich bin noch relativ neu in SPS, nutze TwinCAT 3 XAE und komme eher aus der c/c++ Ecke. Ich soll mir den alten ST Code eines Kunden vorknöpfen und die Anlage um ein paar kleinere Features erweitern. Dabei bin ich schon ein paar mal über "seltsamen programmierstil" gestolpert. Kommentiert ist der Code natürlich kaum:/ Deshalb bin ich beim folgenden Tema jetzt nicht ganz sicher, ob der Kunde auf der Tastatur ausgerutscht ist oder ob ich noch etwas grundlegendes an SPS nicht verstanden habe:
In dem Projekt gibt es im wesentlichen eine MAIN.POU die in einem Zyklus von 100ms ausgeführt wird. Diese ruft dann Blöcke und Funktionen auf. Alle Hardware Ein-und Ausgänge sind schön säuberlich in einer Globalen Variablenliste deklariert.
Der Variablenteil der MAIN.POU sieht ungefähr so aus:
Die Sektionen sind auch alle drei prall gefüllt. Ich kann aber bei den meisten nur einen mittlbaren Zusammenhang mit einer Periferie sehen. Die Werte der übrigen werden einmal pro Zyklus übertragen auf eine globale IO-Variable.
Wie ich verstanden habe sind VAR_INPUT und VAR_OUTPUT doch nur für Funktionen und Blöcke gedacht um Parameter mit der aufrufenden Instanz zu kommunizieren. Wie parameter und Rückgabewerte in höheren Programmiersprachen Oder gibt es noch irgend einen Mechanismus, dass der aufrufende Thread Eingangsparameter des entprechenden Programms ändert? In das Thema Einstellungen in den Threads muss ich mich auch noch rein wühlen. Offensichtlich meckert der Kompiler ja nicht, wenn man ihm ein Programm mit input-Variablen vorsetzt aber einen richtigen Sinn ergibt das irgendwie nicht. Korregiert mich.
Macht es in dem Fall noch einen Unterschied, ob ich die Variablen als VAR oder als VAR_INPUT deklariere?
Wenn wir schon dabei sind: gibt es eine Möglichkeit in der TcXaeShell, sich alle Linkings zwischen IO-variablen/IO-Devices in einer Tabelle übersichtlich dar stellen zu lassen, ohne sich mühsam durch den I/O-Baum durch klicken zu müssen?
Besten Dank.
Ich bin noch relativ neu in SPS, nutze TwinCAT 3 XAE und komme eher aus der c/c++ Ecke. Ich soll mir den alten ST Code eines Kunden vorknöpfen und die Anlage um ein paar kleinere Features erweitern. Dabei bin ich schon ein paar mal über "seltsamen programmierstil" gestolpert. Kommentiert ist der Code natürlich kaum:/ Deshalb bin ich beim folgenden Tema jetzt nicht ganz sicher, ob der Kunde auf der Tastatur ausgerutscht ist oder ob ich noch etwas grundlegendes an SPS nicht verstanden habe:
In dem Projekt gibt es im wesentlichen eine MAIN.POU die in einem Zyklus von 100ms ausgeführt wird. Diese ruft dann Blöcke und Funktionen auf. Alle Hardware Ein-und Ausgänge sind schön säuberlich in einer Globalen Variablenliste deklariert.
Der Variablenteil der MAIN.POU sieht ungefähr so aus:
Code:
[I]VAR
[...]
END_VAR
[/I][I]VAR_INPUT[/I][I]
[...]
END_VAR
[/I]
[I]VAR_OUTPUT[/I][I]
[...]
END_VAR[/I]
Wie ich verstanden habe sind VAR_INPUT und VAR_OUTPUT doch nur für Funktionen und Blöcke gedacht um Parameter mit der aufrufenden Instanz zu kommunizieren. Wie parameter und Rückgabewerte in höheren Programmiersprachen Oder gibt es noch irgend einen Mechanismus, dass der aufrufende Thread Eingangsparameter des entprechenden Programms ändert? In das Thema Einstellungen in den Threads muss ich mich auch noch rein wühlen. Offensichtlich meckert der Kompiler ja nicht, wenn man ihm ein Programm mit input-Variablen vorsetzt aber einen richtigen Sinn ergibt das irgendwie nicht. Korregiert mich.
Macht es in dem Fall noch einen Unterschied, ob ich die Variablen als VAR oder als VAR_INPUT deklariere?
Wenn wir schon dabei sind: gibt es eine Möglichkeit in der TcXaeShell, sich alle Linkings zwischen IO-variablen/IO-Devices in einer Tabelle übersichtlich dar stellen zu lassen, ohne sich mühsam durch den I/O-Baum durch klicken zu müssen?
Besten Dank.
Zuletzt bearbeitet: