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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: SCL FB Parameter ANY Pointer

  1. #1
    Registriert seit
    13.09.2007
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich will an einen Baustein die Adresse des Ausgangs übergeben; damit ich den FB-Aufruf elegant in einer Zeile schreiben kann..ungefähr so:

    Code:
    FUNCTION_BLOCK fb_called
    VAR_INPUT
        pOUT:   ANY;
     END_VAR
    ....
    BEGIN
    ...
    pOUT := TRUE;
     
    
    Aufruf:
    fb_called(pOUT:=%M900.7);
    ich bekomme aber keinen Wert in M900.7! was mache ich falsch?
    oder gibt es einfachere Lösungen??
    Zitieren Zitieren SCL FB Parameter ANY Pointer  

  2. #2
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    geht genau so wie in AWL.

    Var_Output
    MyBool : Bool;
    end_var;

    MyBool := MyTrueOrFalse;

  3. #3
    _pi_ ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.09.2007
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Grubba Beitrag anzeigen
    geht genau so wie in AWL.

    Var_Output
    MyBool : Bool;
    end_var;

    MyBool := MyTrueOrFalse;
    ja, soweit ist das richtig...aber wie schreib ich dann den aufruf?
    ich bekomme das nur so hin:

    Code:
     
    fb_called();
    M900.7 := fb_called.MyBool;
    wie kann ich den Aktualoperanden (VAR_OUT) direkt im Aufuf angeben?

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Willst du den FB in AWL aufrufen oder in SCL mit einbinden ?

    in AWL:
    Code:
    call FB10,db10
    pOut: p#M900.0
    in SCL:
    Code:
    den FB im STAT-Bereich deklarieren ... dann brauchst du den I-DB nicht mehr
    fb_called (pOUT:=M900.7);

  5. #5
    _pi_ ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.09.2007
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich will alles in SCL schreiben, also auch den Aufruf;
    dann wäre ich ja fast bei meiner anfangslösung...aber es funktioniert nicht! ich bekomm keine Wertänderung im M900.7 !?

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Willst du den FB in AWL aufrufen oder in SCL mit einbinden ?

    in AWL:
    Code:
    call FB10,db10
    pOut: p#M900.0
    in SCL:
    Code:
    den FB im STAT-Bereich deklarieren ... dann brauchst du den I-DB nicht mehr
    fb_called (pOUT:=M900.7);

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Ich glaube, jetzt habe ich's ...

    Du musst in deinem SCL-Script natürlich zunächst den Pointer zerlegen, damit du damit eine Variable adressieren kannst ... Ich denke, das hast du nicht gemacht ...

    Da das etwas umständlich ist muss ich doch mal fragen was du vorhast ...

    Gruß
    LL

  7. #7
    _pi_ ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.09.2007
    Beiträge
    20
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Ich glaube, jetzt habe ich's ...

    Du musst in deinem SCL-Script natürlich zunächst den Pointer zerlegen, damit du damit eine Variable adressieren kannst ... Ich denke, das hast du nicht gemacht ...

    Da das etwas umständlich ist muss ich doch mal fragen was du vorhast ...

    Gruß
    LL
    "pointer zerlegen"....ups, jetzt wird's kompliziert!
    eigentlich will ich was ganz einfaches und im prinzip geht es mir nur um die "optik":

    wenn ich eine VAR_OUTPUT-Variable habe,kann ich anscheinend diese nicht direkt im Aufruf übergeben, ich muß zuerst die Instanz aufrufen mit allen INPUT Parametern und dann kann ich auf die einzelnen OUTPUT-Parameter zugreifen:

    Code:
    fb_called(IN1:=...,IN2:=...);
    M900.7 := fb_called.MyBool
    das gefällt mir nicht, vor allem dann, wenn ich mehrere Outvariablen und viele Instanzen vom FB habe.
    Also suche ich einen weg, alles im Aufruf anzugeben...ideal wäre:
    Code:
    fb_called(IN1:=...,IN2:=...,M900.6:=OUT1,M900.7:=OUT2,....);
    das lässt sich aber nicht übersetzen; Deswegen bin ich auf die Idee mit dem ANY-Pointer für die Outputs gekommen; was ich zwar übersetzen kann, aber nicht das tut, was ich will

    p.s. sorry für den delay...ich war out of office!

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    ich verstehe leider dein Problem nicht ganz richtig ...

    Grundsätzlich: wenn du einer Prozedur (in einer Hochsprache) oder einem FB / FC (in der Siemens-Welt) Informationen übergeben willst, dann musst es auch tun ... sonst gehts nicht ...

    Vielleicht solltest du einfach mal schildern, was du eigentlich genau machen möchtest und vielleicht finden wir dann einen "schicken" Weg. Ich glaube nicht, das du mit dem ANY-Pointer dahin kommst ...

    Gruß
    LL

  9. #9
    Registriert seit
    25.10.2007
    Beiträge
    14
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Willst Du die Ausgangsparameter von der Datenbreite variabel halten?
    Wenn ja, wird a bisl komplizierter (gerade in SCL), wenn nicht, deklariere die Outputs doch als BOOL, dann hast du direkten Zugriff.

    Code:
    FUNCTION_BLOCK fb_called
    VAR_INPUT
        pOUT:   BOOL;
     END_VAR
    ....
    BEGIN
    ...
    pOUT := TRUE;
     
    
    Aufruf:
    fb_called(pOUT:=M900.7);
    Zitieren Zitieren Out1 : Bool  

  10. #10
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mit Funktionen funktioniert das:

    Beispiel mit Vorlage von SCL:

    MYFUNCTION(PunktNr := // IN: INT
    ,Wert_Strom := // OUT: INT
    ,Wert_Draht := // OUT: INT
    ); // BOOL


    Mit Funktionsbausteinen kommst Du wohl nicht um die separaten Zuweisungen der Ausgänge a la:

    MyVar := MYFB.MyOut;

    nicht herum...

Ähnliche Themen

  1. ANY Pointer als In Parameter...
    Von haraldign im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 05.02.2016, 13:35
  2. S5 - FB - IN/OUT-Parameter
    Von Hawkster im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 26.10.2012, 18:53
  3. UDT als IN-Parameter am FB
    Von OB21 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.08.2010, 17:14
  4. Parameter vom Typ ANY
    Von blume_mercan im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 17.01.2008, 15:37
  5. CAN Parameter
    Von Anonymous im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 09.08.2005, 08:49

Lesezeichen

Berechtigungen

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