Hallo Leute ich bin im Moment ein S7 Programmierer. Meine Frage ist folgende: In der S7 habe ich zB. verschiedene Ansteuerungen von Magnetventielen. Diese habe ich in einem FB geschrieben und verriegelungen und freigaben in einzelnen Netzwerken mit bitverknüpfungen in Fub verarbeitet. Wie würde man es denn am elegantesten in codesys lösen? auch in Fub, oder gibt es ne elegnte lösung in ST? Schrittketten zB. könnte man ja ganz gut mit ner Case-Anweisung erstellen, oder?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Notaus OK, pneumatik OK, keine Achse im verfahrbereich .... können ja schon mnchmal so um die 20 bis 30 verknüpfungen in ner kniffligen anlage zusammenkommen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ja das ist ja ok, aber auf den FB zurückzukommen ...
ob ich die freigabebedingung im FB mache, oder global, das ist doch vollkommen eglal. aufschreiben muss ich sie ja eh, also warum nicht direkt im FB? und wie kann ich dann eigentlich innerhalb eines FB's auf erstellte variablen im hauptprogramm zugreifen? also wenn ich zB. im hauptprogramm einer variable achse1 erstelle und diese vom typ regler ist, wie kann ich in einem beliebigen fb, welchen ich im hauptprogramm aufrufe auf die variable achse zugreifen?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
"ob ich die freigabebedingung im FB mache, oder global, das ist doch vollkommen eglal. aufschreiben muss ich sie ja eh, also warum nicht direkt im FB?"
Weil ein FB instanziert wird, und die Bedingung für die Instanzen evtl. abweichend sein könnte.
So was wie Objektorientierung...
Zu 2.
Kuckst du in der CoDeSys Hilfe unter
"Zugriff auf Variablen von Arrays, Strukturen und Bausteinen"
Also z.B.
Deklaration
Achse1: Regler_FB;
Zugriff:
Achse1.iLokaleVariable;
Gruß
Erik
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Also ich minte das mit der Freigabe in nem FC also ner Funkton. Ich erkläre dir mal wie ich es im moment bei siemens mache.
Also ich habe verschiedenen Achsen.
Ich rufe im Hauptprogramm einen FC auf.
in diesem FC mache ich die freigabe und ansteuerung des Reglers. und rufe dann den instanzierten Regler FB auf.
jetzt könnte ich es doch so machen:
ich schreibe mir für jede Achse ne angepasste funktion und schreibe dort die Freigaben und setze zB. die Variable Regler1.freigabe und nach dieser Funktion rufe ich dann den FB Reger1 auf, oder?
ich habe jetzt schon versucht mit Regler1.freigabe auf die variable zugreifen zu können, dies geht aber irgendwie nur im Hauptprogramm wo ich den Instanz FB Regler1 erstellt habe.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo Leute ich bin im Moment ein S7 Programmierer. Meine Frage ist folgende: In der S7 habe ich zB. verschiedene Ansteuerungen von Magnetventielen. Diese habe ich in einem FB geschrieben und verriegelungen und freigaben in einzelnen Netzwerken mit bitverknüpfungen in Fub verarbeitet. Wie würde man es denn am elegantesten in codesys lösen? auch in Fub, oder gibt es ne elegnte lösung in ST? Schrittketten zB. könnte man ja ganz gut mit ner Case-Anweisung erstellen, oder?
Mahlzeit
Also Schrittketten mit der CASE Anweisung zu machen ist wohl schon so gedacht...
In ST kannst du selbstversändlich alles machen, was auch in FUP ging.
Ob du FUP oder ST nimmst ist letztlich deine Entscheidung.
Ich bevorzuge ST und alle meine Kollegen ebenfalls.
Kannst ja auch beliebig mischen und deinen FB aus der S7 übernehmen.
Gruß
Erik
Ah alles klar, danke, aber wie machst du den zB. freigaben mit vielen bitverknüpfungen? Alles mit if und else?
Was sind denn bei dir Freigaben mit Bitverknüpungen ?
Hast du ein Beispiel ?
Also z.B. solche abfragen wie:
Notaus OK, pneumatik OK, keine Achse im verfahrbereich .... können ja schon mnchmal so um die 20 bis 30 verknüpfungen in ner kniffligen anlage zusammenkommen.
Und die fragst du alle in jedem FB ab ?
Ich mach das Global.
Das Problem ist doch, dass auch die Reaktion auf die einzelnen Bedingungen evtl. verschieden sein muss, oder ?
Ansonsten kannst du ja auch nur EIN bit an den FB übergeben der signalisiert "Alles in Ordnung".
Ich hab da z.B. in der Ventilfunktion eine Freigabe für Arbeitsstellung und eine für Grundstellung.
Da wird dann z.B. übergeben:
I_Ventil[1].bFrgGst := bNotAus AND bDruckluft AND NOT bIrgeneinEingang[1];
I_Ventil[1].bFrgAst := bNotAus AND bDruckluft AND NOT bIrgeneinAndererEingang[2];
Gruß
Erik
Related
Talk.ru: 1
Talk.ru: 2
ja das ist ja ok, aber auf den FB zurückzukommen ...
ob ich die freigabebedingung im FB mache, oder global, das ist doch vollkommen eglal. aufschreiben muss ich sie ja eh, also warum nicht direkt im FB? und wie kann ich dann eigentlich innerhalb eines FB's auf erstellte variablen im hauptprogramm zugreifen? also wenn ich zB. im hauptprogramm einer variable achse1 erstelle und diese vom typ regler ist, wie kann ich in einem beliebigen fb, welchen ich im hauptprogramm aufrufe auf die variable achse zugreifen?
Zu 1.
"ob ich die freigabebedingung im FB mache, oder global, das ist doch vollkommen eglal. aufschreiben muss ich sie ja eh, also warum nicht direkt im FB?"
Weil ein FB instanziert wird, und die Bedingung für die Instanzen evtl. abweichend sein könnte.
So was wie Objektorientierung...
Zu 2.
Kuckst du in der CoDeSys Hilfe unter
"Zugriff auf Variablen von Arrays, Strukturen und Bausteinen"
Also z.B.
Deklaration
Achse1: Regler_FB;
Zugriff:
Achse1.iLokaleVariable;
Gruß
Erik
Also ich minte das mit der Freigabe in nem FC also ner Funkton. Ich erkläre dir mal wie ich es im moment bei siemens mache.
Also ich habe verschiedenen Achsen.
Ich rufe im Hauptprogramm einen FC auf.
in diesem FC mache ich die freigabe und ansteuerung des Reglers. und rufe dann den instanzierten Regler FB auf.
jetzt könnte ich es doch so machen:
ich schreibe mir für jede Achse ne angepasste funktion und schreibe dort die Freigaben und setze zB. die Variable Regler1.freigabe und nach dieser Funktion rufe ich dann den FB Reger1 auf, oder?
ich habe jetzt schon versucht mit Regler1.freigabe auf die variable zugreifen zu können, dies geht aber irgendwie nur im Hauptprogramm wo ich den Instanz FB Regler1 erstellt habe.
Mahlzeit
Wenn du eine lokale Instanz eines FBs in einem PRG anlegst, kannst du von ausserhalb des PRG mit PRG.Instanz.Variablenname darauf zugreifen.
Also z.B. PLC_PRG.Achse1.bFreigabe
"setze zB. die Variable Regler1.freigabe und nach dieser Funktion rufe ich dann den FB Reger1 auf, oder?" -> Genau.
Wir können auch mal telefonieren. Geht evtl. schneller.
Ich mach jetzt übrigens Feierabend.
Montag wieder.
Gruß
Erik