Geht %I* und %Q* bei WAGO Codesys nicht mehr?

Beiträge
5.816
Reaktionspunkte
1.219
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
um auf eine Frage hier im Forum zu antworten habe ich ein paar Tests gemacht und bin da über etwas gestolpert.
Ich arbeite normalerweise mit Beckhoff TwinCAT 3 und da ist es so, dass wenn man eine Variable mit einem I/O verknüpfen möchte, diese mit dem Zusatz "AT %I*" zur Verknüpfung mit einem Eingang und mit "AT %Q*" zur Verknüpfung mit einem Ausgang deklariert werden muss.
In e!Cockpit funktionierte das genau so. Bei (WAGO) Codesys 3.5.19.2 ist dem aber wohl nicht mehr so. Deklariere ich zum Beispiel eine Variable in einem Programm mit der Adresse "%Q*", mappe diese dann auf einen I/O und übersetze dann das Programm heult Codesys rum, dass nicht auf eine bestehende Variable mit einer Adresse gemappt werden kann.
Wird das "%Q*" und "%I*" gar nicht mehr benötigt?
 
Ich verstehe die AT-Zuweisung als enthalten um alte CS2.3 Projekte einfacher portieren zu können, aber für neue Projekte sehe ich keinen Sinn mehr in der Verwendung. Nichts destotrotz passiert im Hintergrund durch das IO-Mapping ja genau das. Warum man aber bei der Deklaration auf Hardware mappt und dann zusätzlich noch im IO-Mapping-Bereich, erschließt sich mir nicht. Ein schneller Test mit 3.5.19.2 zeigt aber, dass mit und ohne doppeltes Mapping der Compiler keine Fehler ausgibt. Kannst Du etwas genauer beschreiben oder zeigen, was Du machst?

1715798111131.png
 
Da habe ich offenkundig nicht aufmerksam gelesen. %I* und %Q* ist natürlich ein anderes Thema.
 
Bei der Nutzung von Codesys mit WAGO sieht die Deklaration im Programm so aus:
Code:
PROGRAM Sieb_1
VAR
    M1_Sieb1RL AT %Q*: BOOL;
    M1_Sieb1LL AT %Q*: BOOL;
END_VAR
Und dann muss noch eine GVL hinzugefügt werden, in der dann alle Instanzpfade über einen Menüpunkt hinzugefügt werden können und bei denen dann die tatsächliche Hardwareadresse angegeben werden muss. Eine Verknüpfung mit einer Variablen muss/darf dann aber bei den I/Os nicht mehr erfolgen.
Das sieht dann so aus:
Code:
{attribute 'qualified_only'}
VAR_CONFIG
    // Instanzpfad der Variablen an der unvollständigen Adresse erzeugt
    Sieb_1.M1_SIEB1RL AT %QX0.0: BOOL;
    // Instanzpfad der Variablen an der unvollständigen Adresse erzeugt
    Sieb_1.M1_SIEB1LL AT %QX0.1: BOOL;
END_VAR
Hier fehlt mir jetzt aber ein wenig das Verständnis, was dieses Konstrukt bringen soll. Man muss an zwei Stellen die Variable angegeben und dann noch die passenden Adressen raussuchen um sie einzutragen. Da wäre es doch einfacher, man macht in der Hardware direkt die Verknüpfung.

Jetzt bin ich völlig verwirrt und verstehe gar nichts mehr. Was mich daran besonders ärgert ist, sollte das stimmen, dass ich falsche Informationen verbreitet habe.
Ich habe leider (noch) keine WAGO Steuerung und konnte das bisher nur in soweit testen, dass ich ein e!COCKPIT Programm übersetzt habe und dies auf Übersetzungsfehler prüfte.
Ich bin immer davon ausgegangen, dass es beim e!COCKPIT so läuft, wie bei Beckhoff TwinCAT. Man deklariert eine Variable mit "AT %Q*" oder "AT %I*" und kann diese erst dann in der I/O-Übersicht mappen. Weil das folgende beim Übersetzen keinen Fehler verursacht hat.
1715838740787.png
1715838791535.png
Das scheint aber ganz anders zu laufen.
Wenn man eine Variable in der I/O Übersicht mappen möchte muss diese nicht mit dem Schlüsselwort AT deklariert werden und kann einfach so gemappt werden. Das Schlüsselwort benötigt man nur, wenn man die Adresse des I/Os direkt bei der Deklaration angibt oder den Platzhalter "*" nutzt und eine GVL mit dem Schlüsselwort VAR_CONFIG statt VAR_GLOBAL erzeugt, in der dann alle Variablen mit komplettem Instanzpfad angegeben sind. In der VAR_CONFIG müssen dann die tatsächlichen I/O Adressen angegeben werden. In diesem Fall muss/darf kein Mapping in der I/O Übersicht erfolgen.

Liege ich hier soweit richtig?
 
Zuletzt bearbeitet:
Zurück
Oben