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

Ergebnis 1 bis 9 von 9

Thema: Zeiger an SCL-Baustein mit Struct im IN_OUT übergeben

  1. #1
    Registriert seit
    08.07.2012
    Beiträge
    25
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mein SCL Baustein

    Code:
    FUNCTION FC998 : void
    
    VAR_IN_OUT
        Eingangsbereich:STRUCT
            Test1:INT;
            Test2:REAL;
            Test3:WORD;
        END_STRUCT;
    END_VAR
    
    
    VAR_TEMP
        // temporäre Variablen
    
    
    END_VAR
    
    
        // Anweisungsteil
        ;
      
    END_FUNCTION
    soll per awl so beschalten werden um mit den Daten im DB 41 zu arbeiten, mein Versuch:

    Code:
    CALL  FC   998      
    INOUT:=p#db41.dbx0.0
    wurde gleich mit Fehlermeldung:
    Deklarationsbereich der Aktualseite passt nicht zum formalen Deklarationsbereich VAR_IN_OUT des Formalparameters INOUT
    bestraft.

    Wie wäre denn die richtige Vorgehensweise für meine Anwendung?

    Gruß
    Zitieren Zitieren Zeiger an SCL-Baustein mit Struct im IN_OUT übergeben  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.840
    Danke
    400
    Erhielt 2.427 Danke für 2.023 Beiträge

    Standard

    Hallo,
    am Besten geht es symbolisch - also z.B. so :
    Code:
    [CALL  FC   998      
    INOUT:="MeinDB".meienStruktur
    oder in AWL so :
    Code:
    CALL  FC   998      
    INOUT:=p#db41.dbx0.0 Bytes 8
    Gruß
    Larry

  3. #3
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.661
    Danke
    789
    Erhielt 657 Danke für 500 Beiträge

    Standard

    Ich mach das so.

    Code:
    TYPE "ANY_POINTER"
    VERSION : 0.1
    
    
        STRUCT
            SyntaxID    : BYTE;
            Bereichstyp   : BYTE;
            Anzahl_Werte  : INT;
            DB_Nr    : INT;
            Startadresse   : DWORD;
        END_STRUCT;
    END_TYPE
    
    FUNCTION_BLOCK Obj_ABLUFTKLP
    VAR_INPUT
        LS_PAR : ANY;  // Hier wird das Erste Wort aus dem DB aufgelegt
          POINTING AT LS_PAR : ANY_POINTER;
    END_VAR
    
    VAR_TEMP
       Ret : INT; // dummy für returns
       KLP : LS_ABL_KLP; // temporäre Variablen hier ein udt kann aber auch struct sein.
    END_VAR
    
    (*Pointer auf UDT schreiben zum arbeiten*)
      pointing.Bereichstyp := 2;   // Typ des Bereichs soll Byte sein (INT = 2)
      pointing.Anzahl_Werte := 22; // Länge des Pointers weil wir einen Any ohne Länge angeben wollen und wir die länge von UDT oder Struct ja wissen.
      Ret :=  BLKMOV(SRCBLK := LS_PAR ,DSTBLK := KLP);   
    
    (*hier kommt das programm hin. z.B.*)
     KLP.OFFEN := TRUE;
    
    
    (*Hier wird der Pointer zurückgeschrieben*)
    Ret :=  BLKMOV(SRCBLK := KLP ,DSTBLK := LS_PAR);
    END_FUNCTION_BLOCK
    Geändert von vollmi (10.09.2014 um 14:17 Uhr)

  4. #4
    BNick ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.07.2012
    Beiträge
    25
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Larrys Lösung hab ich probiert, da bekomm ich einen Syntaxfehler. Liegt es daran das im DB die Struktur nicht angelegt ist? Es handelt sich dabei um einen automatisch generierten InstanzDB.

    Kopieren wie vollmi wäre meine Notlösung, so wollt ichs eigentlich nicht machen.

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.840
    Danke
    400
    Erhielt 2.427 Danke für 2.023 Beiträge

    Standard

    Ähhh .... naja ... also geben muss es deine Struktur zum Adressieren natürlich schon.
    Was heißt denn "automatisch generierter Instanz-DB" ? Der DB, der beim Aufrufen eines FB's angelegt wird ist genauso vorhanden und aufrufbar.
    Für symbolische Adressierung muss es die Symbole natürlich geben (vor Allem der DB muss symbolisch deklariert sein).

    Gruß
    Larry

  6. #6
    BNick ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.07.2012
    Beiträge
    25
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also der DB41 ist automatisch generiert, der dazugehörige FB ist der FB41 CONT_C, den kann ich ja nicht ändern um eine Struktur reinzubringen. Ich dachte mit
    Code:
    CALL  FC   998      
    INOUT:=p#db41.dbx0.0 Bytes 8
    kann ich einfach den Bereich angeben auf den ich zugreifen will, aber wie gesagt, mit der Eingaben bekomm ich Syntaxfehler.

    Step7 V5.5 + SP3

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.840
    Danke
    400
    Erhielt 2.427 Danke für 2.023 Beiträge

    Standard

    Sorry - gerade erst gesehen ... bei dem ANY-Pointer den Plural weglassen :
    Code:
    CALL  FC   998      
    INOUT:=p#db41.dbx0.0 Byte 8
    Gruß
    Larry

  8. #8
    BNick ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.07.2012
    Beiträge
    25
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So wars geplant, wenn ich jetzt aber

    Code:
    CALL  FC   998
    INOUT:=p#db41.dbx0.0 byte 8
    führt wieder zur Fehlermeldung:

    Deklarationsbereich der Aktualseit passt nicht zum formalen Deklarationsbereich VAR_IN_OUT des Formalparameters INOUT

  9. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.840
    Danke
    400
    Erhielt 2.427 Danke für 2.023 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich muss mich nochmals entschuldigen, da ich nicht alles komplett verinnerlicht hatte.
    Wenn dein FC einen IN oder INOUT-Parameter vom Typ UDTxyz hat dann muss die Datenquelle selbst von dem gleichen Typ sein - das ist in deinem Fall ja gar nicht der Fall.
    Du kannst hier also nur entweder den ganzen DB als Parametertyp und als Parameter übergeben oder die 3 Variablen, die dich in Wirklichkeit interessieren einzeln.
    Tut mir leid für die vorherige Verwirrung ...

    Gruß
    Larry

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 15.05.2014, 23:22
  2. Antworten: 14
    Letzter Beitrag: 14.02.2012, 15:29
  3. Antworten: 5
    Letzter Beitrag: 08.04.2011, 14:36
  4. SCL Struct in Struct
    Von Techniker_85 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 18.02.2011, 09:45
  5. Inhalt von MW in FB Struct übergeben
    Von ottopaul im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 14.07.2007, 21:22

Lesezeichen

Berechtigungen

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