# Unterscheidung Variablen Deklaration



## chstad (20 Januar 2007)

Hallo,

wie unterscheiden sich VAR_EXTERNAL von VAR_EXTERNAL_PG oder VAR_EXTERNAL_FB?

Ebenso VAR_GLOBAL von VAR_GLOBAL_PG oder VAR_GLOBAL_FB?


----------



## zotos (20 Januar 2007)

Von welcher Steuerung reden wir?

_PG / _FB kenne ich von CoDeSys nicht.


----------



## chstad (20 Januar 2007)

Von Multiprog von K&W


----------



## zotos (20 Januar 2007)

Das Programm hat doch sicher eine Hilfe oder?


----------



## chstad (20 Januar 2007)

Diese ist leider nich besonders gut. Daher die Frage an das FORUM.


----------



## Fx64 (20 Januar 2007)

Hallo chstad,

mit VAR_EXTERNAL z.B. verweist Du in einem FB meines Wissens auf globale Variablen. Bei TwinCAT oder CoDeSys sind globals überall bekannt.

Viele Grüsse


----------



## zotos (20 Januar 2007)

Fx64 schrieb:


> Hallo chstad,
> 
> mit VAR_EXTERNAL z.B. verweist Du in einem FB meines Wissens auf globale Variablen. Bei TwinCAT oder CoDeSys sind globals überall bekannt.
> 
> Viele Grüsse



Er benutzt aber Multiprog von K&W


----------



## MSB (21 Januar 2007)

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.




Mfg
Manuel


----------



## chstad (21 Januar 2007)

MSB schrieb:


> 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
> 
> ...


 

So geht es mir eben auch. Ich kann keinen Unterschied erkennen.


----------



## trinitaucher (21 Januar 2007)

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


----------



## winny-sps (21 Januar 2007)

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


----------



## zotos (21 Januar 2007)

MSB schrieb:


> 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
> 
> ...



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.


----------



## zotos (21 Januar 2007)

trinitaucher schrieb:


> 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.


----------



## MSB (21 Januar 2007)

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


----------



## zotos (21 Januar 2007)

MSB schrieb:


> 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,
> ...



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?


----------



## trinitaucher (21 Januar 2007)

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


----------



## zotos (21 Januar 2007)

trinitaucher schrieb:


> ...
> 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.


----------



## chstad (21 Januar 2007)

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.


----------



## zotos (21 Januar 2007)

*IEC Glaskugel*

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

Viel erfolg!


----------



## Fx64 (21 Januar 2007)

zotos schrieb:


> Er benutzt aber Multiprog von K&W



...das weiss ich ja, war auch nur der Vergleich zum TwinCAT. Bei KW wird es eben so eingebunden.


----------

