Unterscheidung Variablen Deklaration

Hier ein Bild aus der Hilfe von Multiprog, für diese Sätze bin ich wahrscheinlich zu dumm, oder es ist einfach zu spät.

SPS-Forum3.jpg

Mfg
Manuel
 
Ich werde das nachher mal ergründen. Hab PCWorx hier.
Bis jetzt meine ich, dass die EXTRENAL immer automatisch gesetzt werden, wenn eine Verknüpfung mit Prozessdaten (I/Os) stattfindet. Und EXTERNAL_PG oder _FB is glaub ich so, dass die benutzt werden, um in einem FB oder PG auf I/Os zuzugreifen.

MfG
Chris
 
Hi,

bei Multiprog muss du im Programm / FB über das Button Variable einfügen gehen
dann wird für Globalen Variablen automatisch der Eintrag VAR_EXTERNAL im Deklarationsteil des FB gemacht.

zu dem Rest kann ich dir auch nicht mehr sagen als das was die bescheidene Hilfe von Multiprog bietet.

Nachtrag: Ich kann mir auch nicht Vorstellen wozu das gebraucht werden kann :confused:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier ein Bild aus der Hilfe von Multiprog, für diese Sätze bin ich wahrscheinlich zu dumm, oder es ist einfach zu spät.

Anhang anzeigen 1388

Mfg
Manuel

Das was da steht ist zwar umständlich aber inhaltlich zu verstehen.

Ich verstehe nun aber nicht warum man globale Variablen für Programme und Funktionsbausteine trennt. Was ist jetzt wenn ich eine globale Variable so wohl in einem FB wie in einem PRG abfragen möchte?

Das man die globalen Variablen die man in seiner POE verwenden will als extern deklarieren muss kennt man ja auch in C.
Bei CoDeSys gibt es dieses VAR_EXTERNAL ja auch ist für die Funktion allerdings unerheblich aber ganz nett beim Beobachten des Programmteils da es im Watch-Fenster auftaucht. Ich verwende VAR_EXTERNAL aber nicht bei Änderungen muss ich dann ja an meheren stellen was ändern und da zu bin ich zu faul. Und ich bin auch kein Fan davon Variablen nur ein paar POEs kenntlich zu machen das wird eher unübersichtlich. Also mir reichen POE lokale und globale Variablen aus.

In der IEC61131 sind meines Wissens nach auch nur VAR_GLOBAL und VAR_EXTERNAL beschrieben.
 
Ich werde das nachher mal ergründen. Hab PCWorx hier.
Bis jetzt meine ich, dass die EXTRENAL immer automatisch gesetzt werden, wenn eine Verknüpfung mit Prozessdaten (I/Os) stattfindet. Und EXTERNAL_PG oder _FB is glaub ich so, dass die benutzt werden, um in einem FB oder PG auf I/Os zuzugreifen.

MfG
Chris

Variablen zur lokalen I/O-Konfiguration müssen zwischen den Schlüsselwörtern VAR_CONFIG und END_VAR stehen.
 
In der Hilfe steht auch, das diese Variablen eine nich IEC-konforme Erweiterung darstellen.
(nicht in dem Ausschnitt den ich gepostet habe)

Gut ich verstehe auch ungefähr was da steht, ich verstehe aber absolut nicht wofür man das brauchen könnte,
zumal ich in den Globalen Variablen auch keine "VAR_GLOBAL_.." anlegen kann.

In einer Funktion kann ich zwar eine "VAR_EXTERNAL_PG" anlegen, beim kompilieren kommt dann aber
(logischerweise) die Meldung sinngemäß, es gibt keine "VAR_GLOBAL_PG" dazu.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In der Hilfe steht auch, das diese Variablen eine nich IEC-konforme Erweiterung darstellen.
(nicht in dem Ausschnitt den ich gepostet habe)

Gut ich verstehe auch ungefähr was da steht, ich verstehe aber absolut nicht wofür man das brauchen könnte,
zumal ich in den Globalen Variablen auch keine "VAR_GLOBAL_.." anlegen kann.

In einer Funktion kann ich zwar eine "VAR_EXTERNAL_PG" anlegen, beim kompilieren kommt dann aber
(logischerweise) die Meldung sinngemäß, es gibt keine "VAR_GLOBAL_PG" dazu.

Mfg
Manuel

Also meine Vermutung ich kann das ja mit CoDeSys nun nicht nachvollziehen wäre: Das man im Deklarationsteil eines PRG einen bereich eingibt VAR_GLOBAL_PG und in einem anderen PRG mit VAR_EXTERNAL_PG deklariert.
Kann das sein?
 
Also, ich hab mal was probiert:

Wie in der Hilfe schon steht, ist EXTERNAL immer die lokale Deklaration einer globalen Variable, welche in der globalen Liste mit VAR_GLOBAL deklariert wird.
Man kann eine globale Variable auch direkt ohne eine lokale EXTERNAL-Deklaration nutzen. Dann wird sie mit "NameDerGlobalenListe.VarName" angezeigt, taucht aber nicht in der lokalen Liste auf.
Eine VAR_EXTERNAL hat immer ein Pendant mit gleichem Namen in der globalen Liste.

VAR_EXTERNAL_PG und VAR_EXTERNAL_FB (sowie "GLOBAL") sind einschränkungen. Normalerweise werden alle Globalen Varibalen aus der Liste "Global_Variables" als Task-unabhängige Variablen abgelegt (VAR_GLOBAL). Jede Programminstanz hat noch eine eigene globale Liste (mit Namen der Programminstanz) mit VAR_GLOBAL_PG drin.
In der Programm-Instanz kannste dann auswählen, ob du die globale Variable der "wirklich" globalen Liste, oder die aus der Liste der Programminstanz wählen willst.
Ebenso verhält es sich bei Funktionsbausteininstanzen.

Die Unterschiede bestehen bei der Gültigkeit.
Liste "Global_Variables" : überall gültig
Liste "Instanz.GlobaleVariablen": nur für die Programminstanz gültig (in allen FBs usw.)
Liste "FB.GlobaleVariablen": In jeder Instanz dieses FBs gültig mit globaler Verwendung für diese FBs.

Über den Sinn dieser Unterscheidung kann man streiten, aber es gibt sie dort.
Pack alle Globalen Variablen in die Liste "Global_Variables" und gut is ;)

Hilft das ?

MfG
Chris
 
...
Pack alle Globalen Variablen in die Liste "Global_Variables" und gut is ;)
...


Bin ganz Deiner Meinung.
Ich denke auch das man das alles eher übersichtlich halten sollte. Wo es geht lokale Variablen und wo es Sinn macht I/Os, Zustände (wie Hand/Auto/Sonder/Tipp), etc. globale Variablen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für Eure Hilfe.

Einen Sinn kann ich darin eigentlich auch nicht entdecken. Ich arbeite mich im Moment gerade in die IEC Geschichte für einen neuen Arbeitgeber ein. Dabei bin ich auf die relativ bescheidene Beschreibung gestoßen - konnte aber keinen Sinn erkennen wozu ich dies benötigen würde.
 
IEC Glaskugel

@chstad: ich habe hier extra für Dich mal eine IEC Glaskugel gebastelt.

Viel erfolg!
 

Anhänge

  • IEC_glaskugel.gif
    IEC_glaskugel.gif
    98,5 KB · Aufrufe: 20
Zurück
Oben