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

Ergebnis 1 bis 5 von 5

Thema: Aufruf SFB aus SCL FB

  1. #1
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    776
    Erhielt 646 Danke für 492 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen

    Ich versuche grad aus SCL einen SFB aufzurufen leider klappt das mit dem übersetzen nicht so wie es sollte.

    Code:
    VAR
      Exec_com  : SFB65002;    
      Exec_Stat : WORD ;
      COM1      : STRUCT     
                   ID    : BYTE ;    
                   Linie : BYTE ;    
                   R_Nr  : BYTE ;    
                   LEN   : BYTE ;    
                   RD_WR : BYTE ;    
                   Busy  : BYTE ;    
                   Error : BYTE ;    
                   Ready : BYTE ;    
                   Reg_1 : INT ;    
                   Reg_2 : INT ;    
                   Reg_3 : INT ;    
                   Reg_4 : INT ;    
                   Reg_5 : INT ;    
                   Reg_6 : INT ;    
                  END_STRUCT ;    
    END_VAR
    
    BEGIN
            COM1.ID     := INT_TO_BYTE(ID);  (*ID des Modules von Schnittstelle laden und in Strukt transferieren*)
            COM1.Linie  := INT_TO_BYTE(CHA); (*Channel des Modules von Schnittstelle laden und in Strukt transferieren*)
            COM1.R_Nr   := 3;   (*Anfangsregister adressieren*)
            COM1.LEN    := 3;   (*Anzahl Register definieren*)
            COM1.Reg_2  := DINT_TO_INT(TIME_TO_DINT(TOUT)) / 1000; (*Timeout lesen in IEC Time Format, umrechnen in Int*)
            COM1.Reg_1  := AUT;  (*Ausgänge in Modulregister laden*)
            COM1.Reg_3  := BLINK;(*Ausgänge in Modulregister laden für Blinken*)
            Exec_com(OBJHandle                := OBJHandle, (*Transferieren zum Modul*)
                     Command                  := DW#16#1,
                     InputData                := COM1,
                     OutputData               := COM1,
                     Status                   := Exec_Stat);
    Beim Rot Markierten krieg ich einen Motz vom Compiler:
    Ungültige Zuweisung
    Der Exec_Com SFB hat vier in (word, dword, any, any) sowie einen out (word). Imho habe ich das auch korrekt deklariert.

    Habe ich da einen groben Fehler drin?

    mfG René
    Zitieren Zitieren Aufruf SFB aus SCL FB  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Versuchs mal so:
    Code:
        Exec_com(OBJHandle                := OBJHandle, (*Transferieren zum Modul*)
                     Command                  := DW#16#1,
                     InputData                := COM1,
                     OutputData               := COM1);
        Status := Exec_com.Exec_Stat;
    oder:
    Code:
        Exec_com(OBJHandle                := OBJHandle, (*Transferieren zum Modul*)
                     Command                  := DW#16#1,
                     InputData                := COM1,
                     OutputData               := COM1);
        Exec_Stat := Exec_com.Status;
    Je nachdem was bei dir zum SFB gehört, ich hab den nicht zur Hand.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    vollmi (21.04.2009)

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

    Standard

    Hallo,
    versuch mal deine Deklaration wie folgt zu ändern :
    Code:
            Exec_com(OBJHandle                := OBJHandle, (*Transferieren zum Modul*)
                     Command                  := DW#16#1,
                     InputData                := COM1,
                     OutputData               := COM1);
     
    Exec_Stat := Exec_com.Status ;
    Ich vermute mal, das Status der Rückgabewert des Bausteins ist ...

    Gruß
    LL

    Edit: Ralle war schneller

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

    vollmi (21.04.2009)

  6. #4
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    776
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Genau letztere war die Lösung. Danke euch. Jetzt kann ich wenigstens übersetzten werde morgen mal testen ob das dann so auch funktioniert.

    Wie ist denn das? Kann der SFB nicht auf die Schnittstelle schreiben (hier rot markiert)?

    Code:
        Exec_com(OBJHandle                := OBJHandle, (*Transferieren zum Modul*)
                     Command                  := DW#16#1,
                     InputData                := COM1,
                     OutputData               := COM1);
        Exec_Stat := Exec_com.Status;
    Wenn ich es so aufbaue? Müsste ich das COM1 Struct ebenfalls so einreihen?

    Code:
    COM1 := Exec_com.OutputData
    Wird damit auch die komplette Struktur abgefüllt wie wenn ich es in AWL so abfülle.

    Code:
        CALL  #Exec_com                   // Transferieren zum Modul
           OBJHandle :=#OBJHandle
           Command   :=DW#16#1
           InputData :=#COM1
           OutputData:=#COM1
           Status    :=#Exec_Stat
    Da wird ebenfalls übers InputData die Struktur an die DLL übergeben.
    Und nach bearbeitung die gesamte Struktur wieder ans OutputDate zurückgegeben.

    mfG René

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von vollmi Beitrag anzeigen
    Wie ist denn das? Kann der SFB nicht auf die Schnittstelle schreiben (hier rot markiert)?
    Hallo René,
    doch ...SCL kann schon auf die Schnittstelle schreiben. Das, was du da hast ist einfach ein Syntax-Problem. IN- und IN_OUT-Parameter werden dem SFB (oder auch anderen Bausteinen) direkt übergeben - OUT-Parameter müssen so gehandelt werden, wie in dem Beispiel.

    Wenn du da ganz sicher gehen willst, dann solltest du dir andere Bausteine immer mit "Einfügen - Bausteinaufruf" in dein Script holen - dann wird es dir als Vorschlag schon so (passend) angeboten ...

    Gruß
    LL

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

    vollmi (22.04.2009)

Ähnliche Themen

  1. FB Aufruf in S7 SCL
    Von Starter im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 24.10.2011, 14:16
  2. OB3 Aufruf
    Von Higgi im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.04.2010, 11:52
  3. FB-Aufruf
    Von S7 Frischling im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 10.10.2009, 11:52
  4. S7 OB1 - FB/DB Aufruf
    Von Marco Polo im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 21.04.2009, 14:07
  5. Aufruf DB im OB1
    Von tino2512 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 18.09.2007, 12:43

Lesezeichen

Berechtigungen

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