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

Ergebnis 1 bis 9 von 9

Thema: SCL Impliziter Zugriff

  1. #1
    Registriert seit
    16.10.2012
    Beiträge
    743
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen.

    Kurze Frage: ich will in SCL implizit auf einen Datenbaustein zugreifen, d.h. DB[DBNr].Struktur_1.Struktur_2.Data sodaß der SCL Baustein die DBNr erst zur Laufzeit übermittelt bekommt und sich daraus die Zugriffsadresse errechnet.

    1. Ist das überhaupt möglich in SCL ??
    2. Wenn ja dann wie ??

    Danke im Voraus
    Zitieren Zitieren SCL Impliziter Zugriff  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Auf einen DB zugreifen, von dem nur die Nummer übergeben wird, ist zwar möglich aber nicht symbolisch sondern nur auf absolute Adressen. Weil man dem Compiler nicht sagen kann welche Struktur der zur Laufzeit übergebene DB haben wird. Will man symbolisch adressieren dann muß man einen STRUCT oder UDT übergeben oder zuerst den DB in eine lokale Struktur umkopieren.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    743
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Will man symbolisch adressieren dann muß man einen STRUCT oder UDT übergeben
    Wie würde das funktionieren mit dem UDT übergeben ?

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Du müßtest eine UDT definieren und die als IN-Parameter für deinen Baustein bestimmen.
    Den jeweils gewünschten Datenbereich (der dann natürlich auch vom Typ dieser UDT sein muß) übergibst du dann (am Besten symbolisch) deinem Baustein auf der Schnittstelle.

    Gruß
    Larry

  5. #5
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    743
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Verstehe ich gerade überhaupt gar nicht... Wie sieht der Code konkret aus ? UDT ist längst definiert, mein DB hat eine Struktur die diesem UDT entspricht. Jetzt will ich aus meinem FC oder FB darauf symbolisch zugreifen.

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    SCL, ungetestet:
    Code:
    TYPE TMyUDT
      STRUCT
        Var_1 : INT ;
        Var_2 : INT ;
        Text : STRING[14] ;
      END_STRUCT
    END_TYPE 
    
    DATA_BLOCK DB_Data
      STRUCT
        Var_1 : INT ;
        Data_1 : TMyUDT ;
        Data_2 : TMyUDT ;
        Var_x : INT ;
      END_STRUCT
      BEGIN
    
    END_DATA_BLOCK
    
    
    FUNCTION_BLOCK FBxxx
    
    VAR_IN_OUT
      IOData : TMyUDT ;
    END_VAR
    
      IF IOData.Var_1 = IOData.Var_2 THEN
        IOData.Text := "" ;
      END_IF ;
    
    END_FUNCTION_BLOCK
    
    //irgendwo der Aufruf des FBxxx mit Übergabe des UDT:
      Instance_of_FBxxx(IOData := "DB_Data".Data_1) ;
    Harald
    Geändert von PN/DP (11.04.2014 um 16:55 Uhr) Grund: Tippfehler grrrr
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Draco Malfoy (12.04.2014),vollmi (11.04.2014)

  8. #7
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    743
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard

    Also so richtig verstehen tue ich das immer noch nicht. Vielleicht sollte ich besser die Hände von SCL lassen...
    Also mein Problem ist: Muss ich das UDT innerhalb meines SCL-Bausteins definieren ? Es ist doch schon vorher irgendwo definiert. Ich habe jetzt beispielsweise einen FB, wo am Anfang die eingehende Variablendeklaration ist:

    VAR_INPUT
    ...
    END VAR

    gefolgt vom Anweisungsteil

    BEGIN
    ....
    END_FUNCTION_BLOCK

    Wie und was muss ich also in das Feld VAR_INPUT reinschreiben, um im Anweisungsteil auf den Datenbestand im DB mittels wie folgt aussehendem Zugriff: "Achsen_DB".Statuswort.Antriebsdiagnose zugreifen zu können, wenn mein DB13 aus mehreren UDTs besteht, und davon einer "Statuswort" heißt ?

    Danke im Voraus.
    Geändert von Draco Malfoy (12.04.2014 um 15:57 Uhr)

  9. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Der UDT kann schon außerhalb der SCL-Quelle vorhanden sein.

    Angenommen der UDT heißt UDT5 mit dem symbolischen Name "TAchsstatus". Der UDT hat einen Member "Antriebsdiagnose".
    Weiter hast Du einen DB13 mit dem symbolischen Name "Achsen_DB". In dem DB gibt es eine Variable "Statuswort" vom Typ UDT5 ("TAchsstatus").

    In der SCL-Quelle schreibst Du Deinen FB:
    Code:
    FUNCTION_BLOCK FBxxx
    
    VAR_INPUT
      Achsstatus : UDT5 ;  //oder:  Achsstatus : TAchsstatus ;
    END_VAR
    
      IF Achsstatus.Antriebsdiagnose ...
    
    END_FUNCTION_BLOCK
    
    
    //irgendwo:
    
    //direkter Zugriff auf eine UDT-Variable
      "Achsen_DB".Statuswort.Antriebsdiagnose := ... ;
    
    //Aufruf des FBxxx mit Übergabe des UDT:
      Instance_of_FBxxx(
        Achsstatus := "Achsen_DB".Statuswort
      ) ;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Draco Malfoy (13.04.2014)

  11. #9
    Avatar von Draco Malfoy
    Draco Malfoy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    16.10.2012
    Beiträge
    743
    Danke
    51
    Erhielt 36 Danke für 29 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Alles klar. Vielen Dank !!

Ähnliche Themen

  1. TIA Indexierter DB zugriff in SCL
    Von vollmi im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 20.02.2013, 11:13
  2. Indirekter zugriff auf DB's (SCL)
    Von zloyduh im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 03.05.2012, 09:45
  3. Antworten: 1
    Letzter Beitrag: 23.01.2012, 17:06
  4. Datenbaustein zugriff SCL
    Von Rama83 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 04.02.2011, 14:19
  5. Probleme DB Zugriff mit SCL
    Von chstad im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 19.01.2010, 15:15

Lesezeichen

Berechtigungen

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