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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: FB IN-Parameter nicht beschalten

  1. #11
    Registriert seit
    06.10.2003
    Beiträge
    3.403
    Danke
    447
    Erhielt 502 Danke für 406 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das Problem hat man ja schließlich mit allen Parametern eines FB. Ich würde mal behaupten, solche Dinge liegen in der Verantwortung des Programmieres. Bei einem BLOCK_DB sollte man mit der SFC24 "TEST_DB" prüfen ob der DB vorhanden ist und die richtige Länge hat.
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  2. #12
    Registriert seit
    17.09.2014
    Ort
    BW
    Beiträge
    217
    Danke
    18
    Erhielt 28 Danke für 26 Beiträge

    Standard

    Vorausgesetzt man weiß die Länge müsste das die richtige Lösung sein

  3. #13
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ... es ändert aber nichts an der Sache, dass man nicht wirklich herausfinden kann, ob ein FB-IN-Parameter (ob nun vom Typ Block_DB oder etwas Anderem) aktuell wirklich beschaltet ist oder ob er es nur irgendwann einmal war.

    Eine Möglichkeit, die ich mir vorstellen könnte, wäre dies (habe aber noch nicht getestet ob das wirklich geht) :
    Beim FB-Aufruf erst beim 2.Zyklus den IN-Parameter akzeptieren.
    Beim 1. Aufruf den IN-Parameter (in diesem Fall über einen Pointer) auf '0' schreiben bzw. auch nach jedem neuen Einlesen.
    Auf diese Weise könnte eine wieder entfernte Beschaltung in der Instanz gelöscht werden.
    Wenn der TE es nicht probiert - ich werde es auf alle Fälle später am Tag mal testen, ob das funktionieren würde ...

    Gruß
    Larry

  4. #14
    Registriert seit
    17.09.2014
    Ort
    BW
    Beiträge
    217
    Danke
    18
    Erhielt 28 Danke für 26 Beiträge

    Standard

    Ich komme aber nochmal auf meine FC vorschaltung zurück...
    Wenn ein Eingang nicht mehr beschalten wird dann muss dies doch Durch einen Eingriff übers "PG" erfolgen oder seh ich da was falsch.
    Man kann doch Programmcode nicht durchs Programm ändern lassen oder?
    Wenn ich richtig liege kann doch dann ebenfalls ein FC gelöscht oder Übersprungen werden.

    Wobei dann wäre auch ein zusätzlicher Eingang am FB denkbar, mit dem man sagt BLOCK_DB aktiv/inaktiv.

    Oder man nimmt einen Platzhalter DB, und fragt dann ab ob der zu öffnende DB der Platzhalter ist.
    Dies wäre dann auch unter zu Hilfename von CREATE_DB dynamisch erstellbar.

  5. #15
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    So ... hier mal mein Vorschlag dazu :
    Code:
    FUNCTION_BLOCK FB 2
    TITLE = 
    VERSION : 0.1
    VAR_INPUT
      myDB1 : BLOCK_DB ; 
      myDB2 : BLOCK_DB ; 
    END_VAR
    VAR
      first_Call : BOOL  := TRUE; 
    END_VAR
    VAR_TEMP
      myDB1_beschaltet : BOOL ; 
      myDB2_beschaltet : BOOL ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE = 
          U     #first_Call; 
          SPB   Ende; 
    NETWORK
    TITLE = 
          LAR1  P##myDB1; 
          TAR2  ; 
          +AR1  ; 
          L     W [AR1,P#0.0]; 
          L     0; 
          <>I   ; 
          =     #myDB1_beschaltet; 
          LAR1  P##myDB2; 
          TAR2  ; 
          +AR1  ; 
          L     W [AR1,P#0.0]; 
          L     0; 
          <>I   ; 
          =     #myDB2_beschaltet; 
    NETWORK
    TITLE = 
     
    NETWORK
    TITLE = 
     
    NETWORK
    TITLE = 
    Ende: U     #first_Call; 
          R     #first_Call; 
          LAR1  P##myDB1; 
          TAR2  ; 
          +AR1  ; 
          L     0; 
          T     W [AR1,P#0.0]; 
          LAR1  P##myDB2; 
          TAR2  ; 
          +AR1  ; 
          L     0; 
          T     W [AR1,P#0.0]; 
    
    END_FUNCTION_BLOCK
    Gruß
    Larry

  6. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    reinip (03.06.2015)

  7. #16
    Registriert seit
    30.10.2009
    Ort
    10 km vom Herzen der Natur
    Beiträge
    1.626
    Danke
    120
    Erhielt 340 Danke für 255 Beiträge

    Standard

    Zitat Zitat von schaible.r Beitrag anzeigen
    Ich komme aber nochmal auf meine FC vorschaltung zurück...
    Wenn ein Eingang nicht mehr beschalten wird dann muss dies doch Durch einen Eingriff übers "PG" erfolgen oder seh ich da was falsch.
    Ich musste auch lange darüber nachdenken.
    Ich sehe das im Prinzip genauso, wie Du. Entweder, der Parameter ist beschaltet oder nicht, er ist nicht mal beschaltet und mal nicht, AUßER der FB wird mehrfach mit der gleichen Instanz aufgerufen. Dann kann der Parameter mal beschaltet sein und mal nicht.
    Gruß
    Michael

  8. #17
    Registriert seit
    17.09.2014
    Ort
    BW
    Beiträge
    217
    Danke
    18
    Erhielt 28 Danke für 26 Beiträge

    Standard

    Oh stimmt das war ja auch noch eine Variante. FB IN-Parameter nicht beschalten

    Dann ist wohl (ausser Pointer) nur noch ein Platzhalter_DB möglich.

  9. #18
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Wenn der FB eine "eierlegende Wollmilchsau" mit wechselnden Eingangsbeschaltungen werden soll, dann würde ich dem FB noch einen "MODE"-Eingang spendieren, wo über einen Funktionscode angegeben wird, welche Funktion er ausführen soll und er dadurch weiß welche Eingänge auszuwerten sind.


    "Eingang beschaltet" - zählt da nur, wenn direkt beim FB-Call eine Konstante oder Variable angeschaltet ist?
    Wie sollen folgende Konstrukte interpretiert werden? Die Eingänge sind "beschaltet" oder nicht? :
    Code:
    Instanz.Eingang1 := 1234;
    Instanz(Eingang1 := , Eingang2 := TRUE);
    
    IF Bedingung THEN
      Instanz.Eingang1 := #MyVar;
    END_IF;
    Instanz(Eingang1 := , Eingang2 := );
    (einem "Block_DB"-Eingang läßt sich natürlich nicht ganz so einfach etwas zuweisen, es geht aber Registerindirekt in AWL)

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #19
    Registriert seit
    17.09.2014
    Ort
    BW
    Beiträge
    217
    Danke
    18
    Erhielt 28 Danke für 26 Beiträge

    Standard

    He hatte ich so nen Eingang nicht auch mal ins Spiel gebracht?
    Ich glaub ja, aber irgendwie hats jeder übersehen/vergessen incl. uch selbst.

  11. #20
    reinip ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.11.2009
    Beiträge
    7
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    So ... hier mal mein Vorschlag dazu :
    Code:
    FUNCTION_BLOCK FB 2
    TITLE = 
    VERSION : 0.1
    VAR_INPUT
      myDB1 : BLOCK_DB ; 
      myDB2 : BLOCK_DB ; 
    END_VAR
    VAR
      first_Call : BOOL  := TRUE; 
    END_VAR
    VAR_TEMP
      myDB1_beschaltet : BOOL ; 
      myDB2_beschaltet : BOOL ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE = 
          U     #first_Call; 
          SPB   Ende; 
    NETWORK
    TITLE = 
          LAR1  P##myDB1; 
          TAR2  ; 
          +AR1  ; 
          L     W [AR1,P#0.0]; 
          L     0; 
          <>I   ; 
          =     #myDB1_beschaltet; 
          LAR1  P##myDB2; 
          TAR2  ; 
          +AR1  ; 
          L     W [AR1,P#0.0]; 
          L     0; 
          <>I   ; 
          =     #myDB2_beschaltet; 
    NETWORK
    TITLE = 
     
    NETWORK
    TITLE = 
     
    NETWORK
    TITLE = 
    Ende: U     #first_Call; 
          R     #first_Call; 
          LAR1  P##myDB1; 
          TAR2  ; 
          +AR1  ; 
          L     0; 
          T     W [AR1,P#0.0]; 
          LAR1  P##myDB2; 
          TAR2  ; 
          +AR1  ; 
          L     0; 
          T     W [AR1,P#0.0]; 
    
    END_FUNCTION_BLOCK
    Gruß
    Larry
    Danke für Dein Bsp. Larry. Eine Frage noch: für was benötige ich TAR2 u. +AR1?

    Wäre
    LAR1 P##myDB1;
    L 0;
    T W [AR1,P#0.0];
    nicht ausreichend?

Ähnliche Themen

  1. Parameter p9611 und p9811 werden im STARTER nicht erkannt
    Von elmusto im Forum Antriebstechnik
    Antworten: 21
    Letzter Beitrag: 06.06.2014, 16:34
  2. Inbetriebnahme Sinamics S110 - Parameter p0003 nicht sichtbar
    Von Stefan1312 im Forum Antriebstechnik
    Antworten: 16
    Letzter Beitrag: 20.03.2014, 10:37
  3. Lenze SMD-FU - nicht alle Parameter verfügbar
    Von Xplosion im Forum Antriebstechnik
    Antworten: 4
    Letzter Beitrag: 04.11.2010, 14:57
  4. Parameter übergabe nicht Korrekt
    Von Björn im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.03.2010, 10:35
  5. FB inout parameter wird nicht beschrieben!
    Von Jochen Kühner im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 06.04.2005, 09:42

Stichworte

Lesezeichen

Berechtigungen

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