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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: FB in einem FB aufrufen

  1. #1
    Registriert seit
    18.07.2007
    Beiträge
    82
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich möchte einen FB2 in einem FB1 aufrufen. Das Problem dabei ist, das der FB2 den InstanzDB vom äußeren FB1 benutzen soll. Also habe ich eine temporäre Variable vom Typ FB2 im FB1 deklariert. Im FB1 wird dann der FB2 aufgerufen:
    Code:
    CALL #FB2
    ...
    Der FB2 hat einen AnyPointer als Eingang (E1). Dieser wird von einer temporären Variablen V1 vom Typ AnyPointer im FB1 versorgt. Im FB1 hat die temporäre Variable V1 die Werte:
    P#0.0 1002h
    P#2.0 000Fh
    P#4.0 0008h
    P#6.0 8400h
    P#8.0 0000h

    Im FB2 hat der Eingang E1 folgende Werte:
    P#0.0 0001h
    P#2.0 0100h
    P#4.0 1002h
    P#6.0 000Fh
    P#8.0 0008h

    Warum sind die Werte nicht gleich?
    Ich vermute, das ich einen Pointer auf einen Pointer habe.

    Gruss, Woto
    Zitieren Zitieren FB in einem FB aufrufen  

  2. #2
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    such mal nach multiinstanzen.da gibt es einiges zu finden hier im forum.
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Zitat Zitat von Woto Beitrag anzeigen
    ich möchte einen FB2 in einem FB1 aufrufen. Das Problem dabei ist, das der FB2 den InstanzDB vom äußeren FB1 benutzen soll. Also habe ich eine temporäre Variable vom Typ FB2 im FB1 deklariert.
    Hallo Woto,
    heißt das, dass du den FB2 im TEMP-Bereich des FB1 deklariert hast ? Doch wohl nicht ... der gehört in den STAT-Bereich hinein ...

    Bezüglich deines ANY-Pointers sieht es für mich nach einem Verdreher aus. Du hast ja im FB2 die richtigen Inhalte - nur doppelwortweise vertauscht. Vielleicht postest du mal den Code (die relevanten Stellen von beiden Bausteinen) - dann läßt sich vielleicht mehr dazu sagen ...

    Gruß
    LL

  4. #4
    Registriert seit
    18.07.2007
    Beiträge
    82
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    Im FB1 wird der folgende Code aufgerufen:
    Code:
          L     P##t_SENDDATA
          LAR1  
          L     W [AR1,P#0.0]
          T     "test".t10
          L     W [AR1,P#2.0]
          T     "test".t12
          L     W [AR1,P#4.0]
          T     "test".t14
          L     W [AR1,P#6.0]
          T     "test".t16
          L     W [AR1,P#8.0]
          T     "test".t18
     
          CALL  #s_ComTCP
           ID_185      :=#ID
           LADDR_185   :=#LADDR
           STrig_185   :=#STrig
           SData_185   :=#t_SENDDATA
           RData_185   :=#t_RCVDATA
           BlkRcv_185  :="m_eins"
           EndSign_185 :=
           NDR_185     :=#s_NDR
           ERR_185     :=#s_ERR
           S_Status_185:=#s_S_Status
           R_Status_185:=#s_R_Status
    s_ComTCP ist eine statische Variable vom Datentyp FB2. Der Eingang SData_185 ist ein ANYPOINTER. Der Parameter t_SENDDATA ist eine temporäre Variable vom Datentyp ANYPOINTER.

    Innerhalb des FB2 frage ich den Inhalt des Anypointer ab:
    Code:
          L     P##SData_185
          LAR1  
          L     W [AR1,P#0.0]
          T     "test".t20
          L     W [AR1,P#2.0]
          T     "test".t22
          L     W [AR1,P#4.0]
          T     "test".t24
          L     W [AR1,P#6.0]
          T     "test".t26
          L     W [AR1,P#8.0]
          T     "test".t28
    Der Inhalt der beiden ANYPOINTER t_SENDDATA und SDATA_185 sind unterschiedlich.
    Waraum ist das so? Wie kann ich auf den Inhalt des übergebenen Pointer zugreifen?
    Wenn ich den FB2 im FB1 mit einem eigenen InstanzDB aufrufe, funktioniert alles.
    Gruss, Woto

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo Woto,
    mit "L W [AR1,p#0.0]" greifst du auf den TEMP-Bereich zu. Wenn du an die Schnittstelle (z.B. IN-Bereich) willst, dann wäre "L DIW [AR1,p#0.0]" der richtigere Befehl ...

    Es hätte mich übrigens auch interessiert, wo der ANY-Pointer her kommt.

    Gruß
    LL

  6. #6
    Registriert seit
    18.07.2007
    Beiträge
    82
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry Laffer,

    der ANYPOINTER im FB1 wird folgendermaßen versorgt:
    Code:
          TAR1  #t_ADR1          // Adressregister retten
          TAR2  #t_ADR2
          LAR1  P##SData        // AnyPointer auf temporäre AnyZeiger kopieren
          LAR2  P##t_SENDDATA
          L     W [AR1,P#0.0]
          T     W [AR2,P#0.0]
          T     "test".t0
          L     W [AR1,P#2.0]
          T     W [AR2,P#2.0]
          T     #s_SendLength
          T     "test".t2
          L     W [AR1,P#4.0]
          T     W [AR2,P#4.0]
          T     "test".t4
          L     W [AR1,P#6.0]
          T     W [AR2,P#6.0]
          T     "test".t6
          L     W [AR1,P#8.0]
          T     W [AR2,P#8.0]
          T     "test".t8
          LAR1  #t_ADR1                     // Adressregister zurückschreiben
          LAR2  #t_ADR2
    SData ist ein IN vom Typ Anypointer.

    Leider hat dein Tip mit "L DIW[AR1,P#0.0]" zum gleichen Ergebnis geführt wie"L W[AR1,P#0.0]".

    Gruß, Woto

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    ... ist schon merkwürdig ... bei mir hat es funktioniert ...

    Wo kommt denn im FB1 der ANY-Pointer her ? Erzeugst du ihn dort (zu Fuß) oder ist das auch wieder ein IN-Parameter ? Was für eine Variable übergibst du an den FB2 (TEMP ?) ?

    In dem letzten Codeschnipsel arbeitest du übrigens auch wieder mit "L W ..."

    Gruß
    LL

  8. #8
    Registriert seit
    18.07.2007
    Beiträge
    82
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Halo Larry Laffer,

    der FB1 hat einen IN-Parameter vom Datentyp ANY. Diesen Anypointer kopiere ich auf eine temporäre Variable vom Typ ANY. Diese temporäre Variable übergebe ich dem FB2 über einen IN-Parameter vom Typ ANY. Im FB2 möchte ich dann letztendlich den am FB1 über den IN-Parameter angebundenen ANYPOINTER bearbeiten.

    Ich habe mal ein kleines Bild vorbereitet, um das Ganze zu veranschaulichen.
    Angehängte Dateien Angehängte Dateien

  9. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    so sieht das bei mir aus - und wie du siehst funktioniert es ...

  10. #10
    Registriert seit
    18.07.2007
    Beiträge
    82
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Larry Laffer,

    ich habe dein Beispiel mal nachgebaut und es funktioniert.

    Dann habe ich aber mal im FB2 vor dem Anypointer myPointer eine BOOL-Variable deklariert. Danach funktioniert es nicht mehr.

    z.B.:
    IN
    HALLO Bool 0.0
    myPointer Any 2.0

Ähnliche Themen

  1. FB im FB Aufrufen mit SCL
    Von paula23 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 08.02.2011, 12:33
  2. Mehrere FB's in einem Netwerk aufrufen
    Von fai004 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 13.01.2010, 17:25
  3. Ausgang von einem BK9100 aus einem BC9050 steuern
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 28.09.2008, 10:51
  4. FC mit einem STRING Parameter aufrufen
    Von xaverlg im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 04.04.2008, 12:20
  5. SCL Funktion aus einem AWL FC aufrufen
    Von plant1 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.08.2006, 17:22

Lesezeichen

Berechtigungen

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