Projekt Strukturierung unter Beckhoff Codesys

matzy87

Level-1
Beiträge
8
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, bin seit geraumer Zeit im hier im Forum registriert und ziemlich begeistert von den Informationen die man hier findet.
Habe bisher Steuerungen von Allen Bradley programmiert, hab nun ein Projekt mit einer Beckhoff CX.
Beim Einstieg hat mir besonders dieser Beitrag geholfen, vielen Dank an dieser Stelle an die Ersteller:
http://www.sps-forum.de/showthread.php/49643-FAQ-alles-rund-um-TwinCAT?p=377069#post377069

E
inige Fragen zur Projektstrukturierung machen mir allerdings noch zu schaffen (bzw. wie ich es am besten angehen soll).
Ich hab mir für die verschiedenen Anlagenteile jeweils FBs (z.B. Profibus Master/Slave, Roboter, Ventile, ...) erstellt, die ich dann
in den jeweiligen Programmen aufrufe.
Als Einstiegspunkt hab ich mir ein Programm "Main" definiert, das vom zyklischen Task aufgerufen wird. Von diesem Programm aus
werden die verschiedenen Unterprogramme aufgerufen, z.B. "Init" (einmalig), Profibuskommunikation, Betriebsartwahl, Schrittkette und Visualisierung.

Nun meine Frage dazu: Wie realisiert ihr den Datenaustausch zwischen den einzelnen Variablen in den Programmen? Ich hab gesehen, dass man über
<Programmname>.<Variable> auf lokale Programmvariablen lesend zugreifen kann, schreibend aber ein Fehler generiert wird.
Hab das ganze dann über globale Variablen realisiert. Gibt es irgendwelche anderen Möglichkeiten, die vl. "schöner" sind?

Vielen Dank für euren Input!
 
Zum Datenaustausch kann man in jeder POU INPUT- und OUTPUT-Variablen deklarieren.
Beispiel:
Code:
FUNCTION_NLOCK fbBeispiel
VAR INPUT
   Eingang:BOOL;
END_VAR
VAR_OUTPUT
   Ausgang:BOOL;
END_VAR
Für die Übergabe beim Aufruf gibt es zwei Möglichkeiten:
Code:
Instanz_von_fbBeispiel(Eingang:=Eine_Variable_aus_MAIN, (* oder auch ein Wert *)
                                 Ausgang=>Eine_andere_Variable_aus_MAIN);
(* oder *)
Instanz_von_fbBeispiel.Eingang:=Eine_Variable_aus_Main;
Instanz_von_fbBeispiel();   (* Aufruf *)
Eine_andere_Variable_aus_Main:=Instanz_von_fbBeispiel.Ausgang;
Die INPUT-/OUTPUT-Variablen sind statisch, behalten ihre Werte also auch nach dem Aufruf. Man muss also auch nicht bei jedem Aufruf alle INPUT-Variablen übergeben und auch nicht alle OUTPUT-Variablen auslesen.
Ausserdem gibt es noch VAR_IN_OUT. Dabei werden nur die Adressen der Variablen übergeben. Bei grossen Datenstrukturen ist das empfehlenswert, um den Kopieraufwand zu reduzieren.
 
Zurück
Oben