CODESYS und AT %I* im Funktionsblock?

drfunfrock

Level-1
Beiträge
934
Reaktionspunkte
72
Zuviel Werbung?
-> Hier kostenlos registrieren
Beckhoff hat dieses nette Feature und CoDeSys hat es nicht?


Code:
FUNCTION_BLOCK PUBLIC FB_Drv IMPLEMENTS I_XXX
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR RETAIN
END_VAR
VAR
    wDataIn AT %I* : ARRAY[0..10] OF WORD;
    wDataOut AT %Q* : ARRAY[0..4] OF WORD;

Ich bekomme jedenfalls Fehlermeldungen. Gibt es irgendwie einen Workaround?
 
Geht es den wenn du die Eingänge nicht als Array deklariert? Ich hatte vor kurzem schon mal gelesen, dass es bei Codesys nicht geht Arrays als Eingänge zu deklarieren. Bei TC3 habe ich das allerdings meine ich auch schonmal gemacht. Da TC3 meiner Meinung mit einer älteren Version von Codesys läuft, könnte ich mir nur vorstellen, dass dies in neueren Versionen von Codesys geändert wurde.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Frage ist doch wozu?
Beckhoff (und übrigens anderer Derivate auch) nutzen dies um Variablen außerhalb der PLC Programmierung auf die Hardware zu mappen. (z.B. Systemmanager bei Twincat, IO Manager bei Pilz ....)
Da ein reines Codesys diese Eigenschaft nicht hat, ist eine Deklaration auch nicht zulässig.
Holger
 
Hallo Drfunrock,

das geht auch bei CODESYS:

Ich habe im PLC_Prg den Baustein angelegt und aufgerufen.
1.png
Dann lege eine neue globale Variablen Liste an.
(Rechte Maustaste auf Application -> Objekt hinzufügen -> Globale Variablenliste)
Wähle die Globale Variablen Liste aus.

In der Menüleiste gibt es einen Reiter erstellen.
2.png

Mit "Alle Instanzpfade hinzufügen" wird eine VAR_CONFIG erstellt.

Nun musst du nur noch den Start IW und QW Wert einstellen. In meinem Beispiel IW0 und QW0.
3.png

Fertig.

Gruß
ccore
 
Ich sehe den Sinn allerdings nicht. Genauso könnte man die Variablen auch per In und Out an der Schnittstelle übergeben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vorteil hat das bei Bausteinen die recht häufig verwendet werden.
Nennst du zum Beispiel bei einer Pumpe den Eingang xE und den Ausgang xA und definierst dies als Var Config kannst du die globale Variablen Liste automatisch erstellen und bist fertig.
Dein Instanzpfad ist eindeutig und du musst keine weiteren Variablen einpflegen.

PLC_PRG.Pumpe1.xE AT %IX0.0; // Störmeldung
PLC_PRG.Pumpe1.xA AT %QX0.0; // Freigabe

PLC_PRG.Pumpe2.xE AT %IX0.1; // Störmeldung
PLC_PRG.Pumpe2.xA AT %QX0.1; // Freigabe

edit: Weiterer Vorteil du vergisst keine I/O's da ein nicht vorhandener Instanzpfad in Var Config zum Fehler führt.
 
Zurück
Oben