Variablendeklaration in den Bausteinen

Simon_

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich hab ein Problem bei der Deklaration von Variablen. Und zwar deklariere ich meine Variablen, die nacher Aus- bzw. Eingänge in der Peripherie zugwiesen werden, bislang im Deklarationskopf der jeweiligen Bausteine. Dies möchte ich auch gerne so lassen, um eine klare Struktur zu haben. Jetzt habe ich das Problem, dass wenn ich die Bausteine global bekannt mache, dass nur in "Variablen_Konfiguration" geht. Dort muss ich aber leider die absoluten Adressen festlegen
( z.B. MAIN.fbEINS.Ausgang AT %IW3 : INT;)

Zu meiner Frage: Gibt es eine Möglichkeit diese Variablen in die automatische Adressverwaltung aufzunehmen?

Vielen Dank schon einmal im Vorraus

Gruß Simon
 
Hallo Simon,

EAs sind typische GLOBALE Variablen und so würde ich
sie auch unbedingt deklarieren. Also unter Ressourcen/Globale Variablen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Klausbre für die rasche Antwort, leider bin ich nicht ganz zufrieden damit.

Gibt es denn eine Möglichkeit Globale Variablen beim Instanziieren zu erstellen?

Meine Motivation ist, dass ich nicht extra irgendwo die Ausganswerte meiner Instanzen nochmals auf eine globale Variable übergeben will. Ich würde lieber einen Zeiger darauf übergeben und nicht die Werte nochmals in einem extra Baustein zuweisen.
Prinzipiell geht das ja auch, aber leider nur wenn ich die absolute Adresse angebe. Ich hätte gerne, dass er die Variablenadressen automatisch verwaltet, wir das bei den globalen mit * deklarierten passiert.

Wenn ich bei den VAR_CONFIG alle Instanzpfade einlesen lasse, dann findet er die betrefflichen Variablen, leider wird aber keine Adresse dazu erstellt.

Gruß
 
Ich bin nicht ganz sicher ob es das ist, was Du willst.

Aber vielleicht ein kleines Beispiel: ich habe unter Codesys einen
instanzierbaren Baustein geschrieben, der einen unserer Servoregler bedient
(Positionieren, Referenzieren, Tippen, ...). 99% des Jobs passiert über
CANopen mittels eines ebenfalls instanzierbaren Sende und Empfangsteil.

Nun kann ich bei n Antrieben einfach n Instanzen dieses Bausteins
aufrufen und bin herrlich variabel. Alle individuellen Dinge (z. Bsp. die
NodeId werden im Bootup einmalig für jede Instanz einzeln gesetzt).

Das einzige Problem ist, jeder Antrieb benötigt eine Hardwarefreigabe
(also einen Ausgang) und der hat natürlich eine fixe Adresse. Den
würde ich aber auch gerne von dem Baustein bedienen.

Gelöst habe ich es folgendermaßen:

im instanzierbaren Baustein:
(* zugehörige Ausgänge der Steuerung *)
DAxx_Freigabe_Servo AT%Q* : BOOL;

in den globalen Variablen:
VAR_CONFIG
....
(* zugehörige EAs *)
.Move_ServoAxis_AFB[1].DAxx_Freigabe_Servo AT %QX1.0.0.0: BOOL; (* DA1 *)
END_VAR

Dabei ist Move_ServoAxis_AFB[1] die erste Instanz meines
Bausteins.

Hilft Dir das???
 
Was denn nun ihr IEC1131-Fans :rolleyes:

Wollt ich euch totinstanzieren, wie das immer so angepriesen wird. (von wegen Wiederverwendbarkeit a.s.o.)

oder

wollte ich ihr alles schon Global deklarieren, aber dann ist es vorbei mit der sog. Wiederverwendbarkeit.


Es ist eben das Problem, wenn es die Funktion - Suche nach Verwendungsstelle - nicht gibt (ich rede nicht von diese komischen "Global Suchen" Funktion).


Ich habe das gleiche Problem, wie ihr und das macht das Arbeiten mit 3S in machen Teilen uneffektiv, weil man sich totsucht - vor allem in fremden Programmen.

Gruß

Frank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Klausbre, genau so wie von dir beschrieben hab ich das bis jetzt auch gemacht. Nur hatte ich heute einen Fehler bei der Adressvergabe, also QX1.0.0.0, gemacht und jetzt frag ich mich, ob dass nicht auch automatisch gemacht werden kann.

Gruß Simon
 
Das wird wohl nicht möglich sein, da Codesys im Grunde nicht
wissen kann, an welchem Ausgang was angeschlossen ist.

Um hier keine Fehler zu machen, hole ich mir solche Adressen
immer direkt aus der Steuerungskonfiguration.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verwende TwinCat, und weise die Hardware den Variablen im Systemmanager zu. Die Adressen die ich bis jetzt verteile sind willkürlich aus dem Zahlenraum entnommen. Das funktioniert soweit auch, aber ich bin nicht wirklich glücklich damit.
 
Nur hatte ich heute einen Fehler bei der Adressvergabe, also QX1.0.0.0, gemacht und jetzt frag ich mich, ob dass nicht auch automatisch gemacht werden kann.
Hi Simon,
bei längeren Variablendeklarationen behelfe ich mir schon mal mit excel. Ich liste die Variablen, Adressen und Datentypen in einer Tabelle auf und erzeuge mit der Verketten - Funktion die Variablendeklaration. So ist die Gefahr einfacher Fehler beim Aufzählen geringer und es ist später einfacher die Deklaration zu ändern. Wenn du später mal z.B. einen Block aus 100 Variablen im Speicher um ein paar Byte verschieben willst um etwas einzufügen, dann bist du für so einen Quasi-Programmgenerator dankbar.

Gruß, witkatz
 
Zuletzt bearbeitet:
So, jetzt hab ich die Lösung für das Problem vom Support von Beckhoff bekommen. Es war jetzt so einfach :) Und zwar findet die Deklaration im Funktionskopf wie gehabt mit %I* statt. Dann das Projekt übersetzen und speichern. (Beim Übersetzen werden die Deklarationen als Warnungen angezeigt.) Dann das Projekt im Systemmanager frisch einlesen. Wenn man jetzt das Projekt im PLC Control nochmals öffnet und übersetzt, sind die Warnungen verschwunden und die Deklarationen bei den automatischen Deklarationen automatisch geschrieben.

Vielen Dank an alle für die Hilfsbereitschaft.

Gruß Simon
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Simon,

die Warnungen sind verschwunden, weil TwinCAT die Variablenkonfiguration in der Variablenliste TwinCAT_Configuration im VAR_CONFIG Block angelegt hat. Diese Variablenliste ist schreibgeschützt, d.h. die automatisch vergebenen Adressen sind in dieser Liste fest.

Es spricht grundsätzlich nichts dagegen, die automatische Variablendeklaration so zu belassen. Du kannst die Adressen aber händisch anpassen, indem du eine eigene globale Variablenliste mit VAR_CONFIG anlegst und die Deklarationen selbst anpasst. Für den Anfang kannst du sie aus der Liste TwinCAT_Configuration rauskopieren, damit schon mal die Schreibweise der Deklaration klar ist. Unabhängig davon, ob die Adressvergabe händisch oder manuell erfolgt, sollte das Projekt nach Änderungen der Konfiguration auf überlappende Speicherbereiche überprüft werden.

Das Thema Variablenkonfiguration ist im Information System ausführlich dokumentiert:
http://infosys.beckhoff.com/content/1031/tcplccontrol/html/tcplcctrl_resglobvar.htm?id=10881

Gruß,
witkatz
 
Zurück
Oben