TwinCAT - Zuordnung Inputs/Outputs zur Peripherie (wo Variablen deklarieren?)

twincatter

Level-1
Beiträge
137
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen Programmierer,

ich hätte mal wieder eine Anfängerfrage.

Die Variable z.B. DigIn0 AT%I*:BOOL; kann mit einem realen Eingang der Peripherie verbunden werden. --> ok

Wo würdet Ihr diese Variable deklarieren?
Ich habe bisher alle Variablen die mit der realen Peripherie verknüpft werden global deklariert.
Somit konmte ich diese Variablen 'auf einen Blick' sehen.

Ich habe jetzt in einigen Beispielen (auch aus Büchern) gesehen daß diese Variablen als lokale Variablen in den Funktionsblöcken angelegt werden sollen.

Zitat:
"In einem FB sollen Inputs und Outputs zur Peripherie direkt als lokale Variablen angelegt werden".

Wo deklariert Ihr diese Variablen? Warum?

Grüße, Michael
 
Deklarieren tust du deine Variable im Deklarationsteil deines FBs.
Warum?
Stell dir vor du programmierst eine Pumpensteuerung.
Jetzt kommt dein Chef und sagt wir brauchen eine Steuerung mit 100 Pumpensteuerungen.

Fall 1 GLOBALE VARIABLEN:
um die 100 Pumpen zu realisieren musst du deine Pumpenvariablen(sagen wir es sind 5 in und 5 out)jetzt 100 mal haben, also 10 mal 100= 1000 Varriablen.
Wenn du das geschafft hast musst du deine 100 PumpenFBs mit diesen Var verknüpfen. Also Copy and Paste und 100 mal 10 Variablennamen ändern.

Fall 2 LOKALE VARIABLEN:
um die 100 Pumpen zu realisieren bildest du dir z.B. ein Array von 1 bis 100 vom Typ PumpenFB und du bist fertig. Die IOs werden automatisch generiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo soma,

auch für diesen Beitrag erst einmal danke.
Mir ging es lediglich um die Variablen, die mit I/Os der Peripherie verknüpft werden sollen.
Natürlich arbeitet jeder FB intern mit VAR_INPUT-, VAR_OUTPUT- und lokalen-Variablen.
Es können dann beliebig viele Instanzen eines FBs erstellt werden (das ist ja gerade der Vorteil)

Ich hätte mir aber vorstellen können (und so habe ich es auch in vielen Beispielen gelesen) eine globale Variable "PumpeStart AT%I*:BOOL;" an den Eingang "PumpeStart" (VAR_INPUT-Variable) einer Instanz des Pumpen-FBs anzuhängen. Wird z.B. der Verknüpfte reale Eingang von 'PumpeStart' High, würde die Pumpe über den FB gestartet werden.

In einem anderen Buch (von Matthias Seitz) wird empfohlen zur Ansteuerung jeder FB-Instanz ein eigenes Programm zu schreiben. In diesen Programmen sollen dann die Variablen die mit der Prozessperipherie verknüpft werden sollen deklariert.

Es gibt also nochmals zusammengefasst mindestens 3 Möglichkeiten:
1. Global deklarieren
2. Im jeweiligen Ansteuerprogramm des FBs deklarieren
3. direkt im FB deklarieren

Vielleicht hat noch jemand Geduld darauf einzugehen?

Grüße, Michael
 
Das ist eine Glaubensfrage, bei der jeder seine eigenen Vorlieben hat.
Ich mache keinen Unterschied zwischen I/O's und internen Variablen und deklariere alles so lokal wie möglich. Wenn ein HW-Ein-/Ausgang nur im Pumpen-FB verwendet wird, gehört er für mich auch dorthin, allein schon wegen der von soma genannten Vorteile bei mehrfacher Instanziierung.
Man muss allerdings bedenken, dass die per I*/Q* deklarierten IO-Variablen nicht direkt vom TwinCat-Laufzeitsystem in die FB's gemappt werden. Der IO-Manager tauscht sein Prozessabbild mit dem der PLC aus, anschliessend kopiert die PLC die Eingänge aus ihrem Prozessabbild in die FB-Variablen und die Ausgänge umgekehrt. Bei einem schwächlichen Buscontroller kann man deshalb schon mal in die Versuchung geraten, IO's global zu deklarieren, um entscheidende Mikrosekunden zu gewinnen.
 
Zurück
Oben