Einsteiger braucht eure Hilfe

Bensen83
2010-01-23
2010-01-23
  • Bensen83 - 2010-01-23

    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?

     
  • Erik Böhm - 2010-01-23

    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

     
  • Bensen83 - 2010-01-23

    Ah alles klar, danke, aber wie machst du den zB. freigaben mit vielen bitverknüpfungen? Alles mit if und else?

     
  • Erik Böhm - 2010-01-23

    Was sind denn bei dir Freigaben mit Bitverknüpungen ?

    Hast du ein Beispiel ?

     
  • Bensen83 - 2010-01-23

    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.

     
  • Erik Böhm - 2010-01-23

    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

  • Bensen83 - 2010-01-23

    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?

     
  • Erik Böhm - 2010-01-23

    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

     
  • Bensen83 - 2010-01-23

    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.

     
  • Erik Böhm - 2010-01-23

    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

     

Log in to post a comment.