Benutzung von innere FB-Var außen

ssyn

Level-2
Beiträge
224
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe in einem alten Projekt gesehen, dass man in einem FB einer innere Variable außen benutzt.


z.B.
Code:
FUNCTION_BLOCK test
VAR_INPUT
  in1, in2 : bool;
END_VAR
VAR_OUTPUT
out1, out2 : bool;
END_VAR

VAR
 temp1 : BOOL;
END_VAR


und irgendwo in PRG steht Verknüpfung test.temp1
Ich habe irgendwo und irgendwann gelesen, dass es nicht gute Beispiel für Code ist. doch kann es funktionieren.
Aber könnte es bei bestimmte Bedienungen das Problem bringen und lohnt es doch ändern?
 
Bei Siemens können lokale Variablen von außen sowohl gelesen als auch geschrieben werden.
Wie Du schon selbst festgestellt hast ist das, zumindest was das Schreiben angeht, ein NoGo.
Im Codesys Universum kann auf lokale Variablen zum Beispiel nur lesend zugegriffen werden.
Probleme kann es geben, wenn auch schreibend auf diese Variablen zugegriffen wird und in einer neueren Version der Entwicklungsumgebung dies nicht mehr zulässig ist.
Am Besten man vermeidet so etwas grundsätzlich.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine FB-interne Variable gehört auch nur intern im FB benutzt.
Das kann man zwar bei z.B. STAT-Variablen machen - es ist aber aus meiner Sicht kein guter Programmier-Stil.
Aber mach was du meinst - ich muss mich ja hinterher nicht mit deinem Programm herumärgern ...
 
Nur weil es technisch möglich ist, bedeutet es nicht dass es ein gutes practice/sinnhaft ist.

Ich hab auch schon mal übergangweise Signale aus der Instanz abgefragt im Projekt, weil diese wichtig für den Prozess waren, aber die Bibliothek vom Kunden das Signal noch nicht auf der Schnittstelle hatte.

Schreiben würde ich aber niemals mit der Instanz von außen machen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Oft soll ein Baustein Variablen mit einem HMI austauschen, da ist es vielen Programmierern zu aufwendig, die HMI-Variablen auch noch als Kopie über die Bausteinschnittstelle zu führen. Das macht z.B. auch Siemens öfters so und hält sich damit nicht an das, was sie in Style Guides empfehlen. Wenn man sowas unbedingt auch machen will, dann sollte man aber deutlich die Variablen in extra Strukturen "From_HMI", "To_HMI" oder ähnlich oder noch besser in PLC-Datentypen/UDT zusammenfassen.

Durch Zugriffe von außen auf FB-Instanzdaten verliert man allerdings die Möglichkeit, in der Deklaration geänderte FB und seine Instanzen stoßfrei im RUN zu laden. Auch wenn z.B. TIA durch diverse Maßnahmen suggeriert, dass es die entstehenden Probleme im Griff hätte - im Zweifelsfall verlangt auch TIA in solchen Fällen ein STOP der CPU. Und bei HMI-Zugriffen auf FB-Instanzdaten müssen eigentlich auch alle HMI gestoppt werden, bis die angepasste Runtime in die HMI geladen wurde.

Für mich ist ein Zugriff von außen auf FB-Instanzdaten ein NoGo.
 
Naja, in der Codesys- / Beckhoff-Welt findet man sowas sogar häufig.
Und im Gegensatz zu Siemens ist dort auch dieser Zugriff nicht verpönt.
Manche nennen sowas sogar schon Objektorientierte Programmierung :)
 
Hat das bei Codesys überhaupt einen funktionalen Unterschied?
Oder anders gefragt: Werden in Codesys Parameter-Zugriffe anders gehandelt als Zugriffe auf Static?
Ja, denn da greift man nicht direkt auf die Variable zu, sondern auf den Parameter. Neben der 1:1 Weitergabe von Werten kann man auch Umrechnungen durchführen lassen, z.B. von einer Position im Real-Format in eine in 1/100mm als Integer.
 
Zurück
Oben