Globale Variablen in einem PRG

SY50

Level-1
Beiträge
271
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe in meinen Programmen für verschiedene Rubriken immer eigene GVLs erstellt. Bspw. Für die Achsen eine GVl_Motion.
jetzt meinte ein Kollege er würde das nicht so toll finden, wenn es so viele GVLs gibt. Er mach die Variablen lieber direkt in die PRGs.
ist es nicht aber so, dass ich Variablen in PRGs nur Global lesen kann, jedoch nicht Schreibens kann?
ich meine mich mal dran erinnern zu können, dass dann irgendwie ne Fehlermeldung kommt wie in etwa

Variable_xy ist kein Eingang von Prg_xy....



Wisst ihr da genau bescheid? ... Wenn es auch über die PRGs gehen würde, wäre es natürlich super.
 
Wenn du die Variablen nur Lokal deklarierst, kann man sie auch nur dort verwenden (wie der Name schon sagt).
Global...entsprechend GLOBAL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich glaube mal gelesen zu haben, dass (vor allem bei sicherheitskritischen Applikationen) so gut wie möglich auf globale Variablen verzichtet werden sollte um die einzelnen PRGs besser voneinander zu trennen und Fehler zu vermeiden.

Gesendet von meinem GT-I9105P mit Tapatalk-4 now Free
 
Wisst ihr da genau bescheid? ... Wenn es auch über die PRGs gehen würde, wäre es natürlich super.
Also im Prinzip ist das was ich hier schreibe jetzt natürlich teilweise Off-Topic, aber ich konnte mich wirklich nicht beherrschen!
Du hast das also mit einem Kollegen diskutiert, hast das scheinbar nicht so ganz begriffen, und versuchst dich jetzt hier jetzt an total aus dem Zusammenhang gerissenen Spekulationen zu orientieren, was du bzw. dein Kollege jetzt überhaupt gemeint haben hätte können.
Klär das doch einfach mit dem entsprechenden Kollegen, wenn er sowas "behauptet" wird er das ja wohl auch irgendwie erklären können.


Prinzipiell ist zu sagen, das ein PRG unter Codesys z.B. auch nur ein FB mit genau einer Instanz ist, mit allen Konsequenzen bezüglich Variablenzugriff.
Der wörtliche Wortlaut der Codesys-Hilfe:
"Ein Programm ist ein Baustein, der bei der Ausführung einen oder mehrere Werte liefert. Programme sind Global im gesamten Projekt bekannt."

Es ist also durchaus möglich von überall z.B. so zuzugreifen:
MyPRG.MyVar
wobei dann MyVar ein IN/OUT/INOUT/VAR des PRG MyPRG ist.
Ob das jetzt deshalb schöner ist oder wird, sei dahingestellt.

Mfg
Manuel
 
Zuletzt bearbeitet:
Prinzipiell ist zu sagen, das ein PRG unter Codesys z.B. auch nur ein FB mit genau einer Instanz ist, mit allen Konsequenzen bezüglich Variablenzugriff.
Der wörtliche Wortlaut der Codesys-Hilfe:
"Ein Programm ist ein Baustein, der bei der Ausführung einen oder mehrere Werte liefert. Programme sind Global im gesamten Projekt bekannt.

Es ist also durchaus möglich von überall z.B. so zuzugreifen:
MyPRG.MyVar
wobei dann MyVar ein IN/OUT/INOUT/VAR des PRG MyPRG ist.
Ob das jetzt deshalb schöner ist oder wird, sei dahingestellt.

Mfg
Manuel

Und genau das stimmt eben nicht. Denn auf FBs kann ich eben nicht mit FBInstanz.myvar zugreifen, wenn die Variable im Var.....End_Var Bereich deklariert wurde. .... Bei PRGs funktioniert das, so wie du es auch geschrieben hast, allerdings wenn die Variablen keine in, oder Input sind, dann nur lesend. Wenn ich aber eine Variable habe, welche ich im automatikablauf beschreiben will, dann muss ich das ja in mehreren PRGs machen (mehrere automatikprogramme). Also müsste ich global schreibend zugreifen können. Das geht doch nur über GVLs, oder etwa doch über PrG variablen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und wo deklarierst du deine FB-Instanz?
Doch sicherlich in einem PRG.

Also dann halt so:
MyPRG.MyInstanz.MyFBVar

Und das ist wie geschrieben absolut global möglich, also an jeder Stelle, in jeden Task, egal wo im Projekt.

Natürlich ist dabei sowohl lesender als auch schreibender Zugriff möglich, jedoch wenn z.B. IN oder IN-OUT Variablen beim Aufruf mit Operanden versorgt werden, natürlich quasi wirkungslos.
 
Zuletzt bearbeitet:
Also ich habe ein PRG, wenn ich in diesem eine Variable deklariere, dann kann ich von außerhalb nicht darauf zugreifen, da bekomme ich die Fehlermeldung "PRG.myvar ist kein Eingang von PRG"
Wenn das bei dir funktioniert, dann sage mir sofort wie :)
 
Zurück
Oben