Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Wie kann ich in einem Array of FB erfahren, welche Array-Nummer aktiv ist?

  1. #11
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Bei ST kann ich den Startindex im Array aber auch bei != 0 beginnen lassen, dann hat die Zahl die ich berechne keine direkte Bedeutung mehr.
    Dann ändere ich eben SIZEOF(PLC_PRG.fbt[0] in SIZEOF(PLC_PRG.fbt[1].

  2. #12
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Mein Vorschlag bezog sich eher auf vereinfachte FB-Aufrufe durch Schleifen. ZB so:

    Code:
    FOR i := 0 TO 10 DO
      myFb[i](iParameter := i);
    END_FOR
    11 FB-Aufrufe mit 3 Zeilen Code

    Und im FB steht zB:
    Code:
    CASE iParameter OF
    0,1,2: lrSpeed := 100;
    3,4,5:  lrSpeed := 150;
    6,7,8,9,10:  lrSpeed := 200;
    END_CASE
    Vorteil:
    FB wird einmal programmiert mit den vorab festen Parametern. Man muss die Parameter dann nicht nochmal im FB-Aufruf übergeben, was den Code übersichtlich macht. Denn die FBs mit zugehörigen Parametern sind schön vom Rest gekapselt

  3. #13
    Registriert seit
    25.07.2007
    Beiträge
    79
    Danke
    2
    Erhielt 12 Danke für 12 Beiträge

    Standard

    Zitat Zitat von trinitaucher Beitrag anzeigen

    Und im FB steht zB:
    Code:
    CASE iParameter OF
    0,1,2: lrSpeed := 100;
    3,4,5:  lrSpeed := 150;
    6,7,8,9,10:  lrSpeed := 200;
    END_CASE
    Nachteil:
    Die (projektübergreifende) Verwendbarkeit des FBs ist schon sehr eingeschränkt. Für projektspezifische Sachen allerdings durchaus eine mögliche Option.

    Ich bevorzuge i.d.R. die Übergabe eines Pointers auf eine Paramterstruktur außerhalb des FBs.

  4. #14
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard

    Zitat Zitat von Chräshe Beitrag anzeigen
    Gibt es hier eine Möglichkeit, im FB auszuwerten, welche Array-Nummer gerade aufgerufen ist?

    Hintergrund ist, die Eingangs-Variable „AntriebNr“ wegzulassen und die Nummer von „Antrieb[i]“ direkt zu verwenden. Somit wird eine Falscheingabe verhindert und es müssen nicht so viele Parameter übergeben werden.

    Bin für jeden Tipp dankbar. Im Moment dreh ich mich nur im Kreis…
    Ich habe den Thread nur überflogen, und vielleicht wiederhole ich hier nur einen Tipp: wenn du den Index nicht zweimal benutzen willst, dann kannst du dir auch eine Hilfsfunktion schreiben, die dann den eigentlichen Aufruf macht. Entweder greifst du in der Funktion auf den Array als globale Variable zu, oder du übergibst den Array als VAR_IN_OUT (wichtig! nicht VAR_INPUT).
    In so einer Funktion (kann auch ein FB sein) kannst du auch die Parametrierung kapseln, das finde ich viel besser als im Funktionsblock selber.

  5. #15
    Avatar von Chräshe
    Chräshe ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.05.2008
    Beiträge
    648
    Danke
    117
    Erhielt 136 Danke für 105 Beiträge

    Daumen hoch

    Hallo noch mal,

    danke für die unterschiedlichen Anregungen.
    Ich hatte gehofft, dass es vielleicht gewisse Steuerflags oder Worte
    innerhalb von Funktionen und Funktionsbausteinen gibt, ähnlich den
    AS-Flags wie „SFCCurrentStep“ …

    Folgende Variante scheint mir am übersichtlichsten und einfachsten:

    (* Aufrufe der Antriebseinheiten *)
    Idx := 1
    Antrieb[
    Idx](
    _ AntriebNr:= Idx,
    _ sName:= 'Steigband Süd ',
    _

    Gruß
    Chräshe

  6. #16
    Registriert seit
    13.01.2007
    Beiträge
    304
    Danke
    35
    Erhielt 29 Danke für 25 Beiträge

    Frage

    Hi,

    passt zwar nicht zur ursprünglichen Fragestellung, aber etwas interessiert mich noch. Warum weist Du den FB-Eingängen und FB-Ausgängen eigentlich nocheinmal Variablen zu? Diese könnten doch auch direkt über den TSM verknüpft werden, wenn die Variablen entsprechend deklariert werden. Wir haben z.B. Bausteine mit zig E/A's ohne einer einziger Variablenzuweisung. Dann erspart man sich viel Schreibarbeit, zudem kann man die Variablenverknüpfung im TSM auch automatisieren. (z.B. über E/A-Zuordnungsliste) Das ist für mich eines der genialsten Dinge von Beckhoff.

    Dann wird auch der Aufruf Deines FB's quasi zum Einzeiler.

    Schönen Abend

    Markus.
    Zitieren Zitieren Frage  

  7. #17
    Avatar von Chräshe
    Chräshe ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.05.2008
    Beiträge
    648
    Danke
    117
    Erhielt 136 Danke für 105 Beiträge

    Standard

    Hallo Markus,

    interessanter Vorschlag. Bei Servo-Achsen hatte ich das sogar bereits gemacht, dass ich im Baustein unter VAR die <Variable> AT %I*... deklariert habe.
    Ansonsten ist es aber so, dass ich die Ein- und Ausgänge eines Projektes aus dem E-CAD in die globalen Variablen importiere. Dann habe ich identische und sehr eindeutige Variablenbezeichnungen, inklusive ausführlichem Kommentar. Ich finde es so übersichtlicher, weil ich mehr Informationen habe.

    Gruß
    Chräshe

  8. #18
    Registriert seit
    30.07.2014
    Beiträge
    289
    Danke
    66
    Erhielt 34 Danke für 20 Beiträge

    Standard

    Zitat Zitat von MarkusP Beitrag anzeigen
    Hi,

    passt zwar nicht zur ursprünglichen Fragestellung, aber etwas interessiert mich noch. Warum weist Du den FB-Eingängen und FB-Ausgängen eigentlich nocheinmal Variablen zu? Diese könnten doch auch direkt über den TSM verknüpft werden, wenn die Variablen entsprechend deklariert werden. Wir haben z.B. Bausteine mit zig E/A's ohne einer einziger Variablenzuweisung. Dann erspart man sich viel Schreibarbeit, zudem kann man die Variablenverknüpfung im TSM auch automatisieren. (z.B. über E/A-Zuordnungsliste) Das ist für mich eines der genialsten Dinge von Beckhoff.

    Dann wird auch der Aufruf Deines FB's quasi zum Einzeiler.

    Schönen Abend

    Markus.
    Hallo Markus,
    wenn auch offtopic, so möchte ich doch kein neues Thema erstellen. Kannst du das von dir beschriebene nochmal erläutern oder ein Beispiel geben, ich habe noch nicht ganz verstanden, was du meinst, wenngleich es sich nach einer vorteilhaften Funktion anhört.

    Danke vorab!
    Freundliche Grüße aus München, der Stadt mit Herz


    There are 2#10 kinds of people, those who do the work & those who take the credit.

  9. #19
    Registriert seit
    25.02.2010
    Beiträge
    618
    Danke
    35
    Erhielt 121 Danke für 110 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Twincat unterscheidet sich da ein wenig von normalen Codesys Steuerungen.
    Bei Codesys weist du z.B. einen Eingang mit %IW direkt der Hardware zu.

    Bei Twincat geht das anders. Hier hast du den Twincat System Manager. Also eigentlich 2 voneinander unabhängige Programme.
    1. PLC Editor ( Hier wird das Programm ganz normal wie in Codesys programmiert)
    2. den TSM

    z.B. Im PLC Editor programmierst du deinen Ausgang. Jetzt nimmst du den TSM und liest alle Variablen aus dem PLC Editor ein. Auch deinen Ausgang. Da im TSM auch die Hardwarekonfig hinterlegt ist machst du jetzt eine Verknüpfung von deinem Ausgang zu einem Hardwareausgang.

    Wenn du was konkretes wissen möchtest einfach nochmal melden.

    Holger

  10. Folgender Benutzer sagt Danke zu holgermaik für den nützlichen Beitrag:

    Münchnerjunge (21.12.2016)

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 30.09.2011, 13:35
  2. Startwert von einem Array in DB
    Von Flo im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 05.03.2010, 14:09
  3. Warum kann S7 nur 6-dimensionales Feld (Array)?
    Von bischkul im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 26.10.2009, 21:14
  4. UDT Array Input an einem FC
    Von TagebauCoder im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 04.10.2009, 02:29
  5. Probleme mit einem Array
    Von Hitschkock im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 30.03.2009, 11:42

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •