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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: SCL auf Strukturelemente eines zur Laufzeit bekannten DBs zugreifen

  1. #11
    MFreiberger ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.11.2008
    Beiträge
    101
    Danke
    9
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin vierlagig,

    jetzt bin ich mir nicht sicher, was Du meinst.
    Der Zugriff auf die Arrayelemente funktioniert ja...

    Code:
    FUNCTION FC100 : INT
    
    
    VAR_INPUT
        Ii_XFach : INT;
        Ii_YFach : INT;
        Idb_Regal : BLOCK_DB;
    END_VAR
    
    
    VAR_OUTPUT
        Odi_XPosition : DINT;
        Odi_YPosition : DINT;
    END_VAR
    
    
    VAR_IN_OUT
        IOdi_XOffset : DINT;
        IOdi_YOffset : DINT;
        IOw_Bits : WORD;
        IO_UDT : UDT100;
    END_VAR
    
    
    
    
        // Anweisungsteil
        Odi_XPosition := Idb_Regal.Fach[Ii_XFach,Ii_YFach].X.Position; //funktioniert nicht
        Odi_YPosition := Idb_Regal.Fach[Ii_XFach,Ii_YFach].Y.Position; //funktioniert nicht
       
        Odi_YPosition :=DB101.Fach[Ii_XFach,Ii_YFach].Y.Position; //funktioniert
        ;
        FC100 := 100;
    END_FUNCTION
    wenn ich den DB fest reinschreibe, bekomme ich meine Fachpositionen, wie gewünscht.
    Nur mit dem variablen Zugriff das funktioniert nicht.


    Gruß

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

  2. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    was ich hier meinte war folgendes :
    Du hast deinen DB (Regal). Hierin hast du dein Array of UDT 100 angelegt.
    Nun machst du an deinen Baustein einen IN_OUT-Parameter vom Typ UDT100.
    Diesem übergibst du dann den gewünschten Fach-Inhalt - also z.B.
    Code:
    call FC123
       Daten := "Regal".Fach[3,12]
    ... nun kannst du in dem FC123 den Parameter Daten wie gewünscht behandeln ...

    Gruß
    Larry

  3. #13
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo,
    was ich hier meinte war folgendes :
    Du hast deinen DB (Regal). Hierin hast du dein Array of UDT 100 angelegt.
    Nun machst du an deinen Baustein einen IN_OUT-Parameter vom Typ UDT100.
    Diesem übergibst du dann den gewünschten Fach-Inhalt - also z.B.
    Code:
    call FC123
       Daten := "Regal".Fach[3,12]
    ... nun kannst du in dem FC123 den Parameter Daten wie gewünscht behandeln ...

    Gruß
    Larry
    und die 3,12 kann, wie in Beitrag #8 erwähnt variabel gestaltet werden - x,y vom Typ INT
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #14
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    ... ich glaube, dass das nur funktioniert, wenn du dem Baustein gleich das ganze ARRAY of UDT übergibst und die jeweiligen Indexe als IN-Parameter ... (vielleicht mal testen ...)

  5. #15
    MFreiberger ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.11.2008
    Beiträge
    101
    Danke
    9
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Moin Zusammen,

    ich habe jetzt Folgendes ausprobiert:

    Code:
          CALL  FC   100
           Ii_XFach     :=MW200
           Ii_YFach     :=MW202
           RET_VAL      :=MW204
           Odi_XPosition:=MD206
           Odi_YPosition:=MD210
           IOdi_XOffset :=MD214
           IOdi_YOffset :=MD218
           IOw_Bits     :=MW222
           IO_Daten     :="Regal_1".Fach
    Code:
    FUNCTION FC100 : INT
    
    
    VAR_INPUT
        Ii_XFach : INT;
        Ii_YFach : INT;
    END_VAR
    
    
    VAR_OUTPUT
        Odi_XPosition : DINT;
        Odi_YPosition : DINT;
    END_VAR
    
    
    VAR_IN_OUT
        IOdi_XOffset : DINT;
        IOdi_YOffset : DINT;
        IOw_Bits : WORD;
        IO_Daten : ARRAY [1..100,1..20] OF udt100;
        
    END_VAR
    
    
    
    
        // Anweisungsteil
      
        Odi_YPosition :=IO_Daten[Ii_XFach,Ii_YFach].Y.Position; //funktioniert
        ;
        FC100 := 100;
    END_FUNCTION
    Das sieht, zumindest funktionell, nicht schlecht aus. Leider kann ich bei der Array-Deklaration von "IO_Daten" nur Konstanten angeben...
    Aber immerhin.
    @vierlagig: das Übergeben mit variablen ("Regal_1".Fach[X,Y]) Indexen funktionier, wie Larry Laffer schon vermutet hat, leider nicht.

    Soweit ich das verstehe, bleibt mir entweder der immerwährende Eingriff in die FC (Indexe ändern) oder die Adressberechnung, wo ich wieder bei AWL wäre

    Vielen Dank für die Unterstützung

    Gruß

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

  6. #16
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von MFreiberger Beitrag anzeigen
    wo ich wieder bei AWL wäre
    dem ist nichts hinzuzufügen
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #17
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    ... hast du denn meinen Vorschlag auch mal in Erwägung gezogen ?

    Oder ... andere Variante : du läßt deine Regal-Daten von einem FB als Bestandteile von dessen Instanz verwalten. Dann hast du in dem FB auch wieder vollen Zugriff auf die Einzeldaten - auch indexiert in SCL.

    Gruß
    Larry

  8. #18
    MFreiberger ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.11.2008
    Beiträge
    101
    Danke
    9
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Moin Larry Laffer,

    ... hast du denn meinen Vorschlag auch mal in Erwägung gezogen ?
    ich dachte, das, was ich in #15 versucht habe, hättest Du gemeint.

    Oder ... andere Variante : du läßt deine Regal-Daten von einem FB als Bestandteile von dessen Instanz verwalten. Dann hast du in dem FB auch wieder vollen Zugriff auf die Einzeldaten - auch indexiert in SCL.
    aber wenn ich dann aus anderen Bausteinen auf diese Daten zugreifen will, muss ich auf den IDB dieses FBs zugreifen. Ich bin der Meinung, auf die IDB-Daten darf nur der jeweilige FB zugreifen.
    Mann könnte allerdings auch den gleichen IDB für mehrere FBs verwenden (Hat SIEMENS ja auch in dem Beispiel bei TCON, et. gemacht). Dann müssen diese FBs immer mit der gleichen Struktur umgehen können ... Muss halt diszipliniert aufgebaut werden.

    Gruß

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

  9. #19
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von MFreiberger Beitrag anzeigen
    Ich bin der Meinung, auf die IDB-Daten darf nur der jeweilige FB zugreifen.
    wer sollte das reglementieren?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #20
    MFreiberger ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.11.2008
    Beiträge
    101
    Danke
    9
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Moin vierlagig,

    wer sollte das reglementieren?
    Niemand. Ist nur meine Sicht der Dinge.

    Gruß

    MFreiberger
    _____________________________________________
    "Von nichts kommt was" von B. Trüger

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 22.04.2014, 17:16
  2. Antworten: 6
    Letzter Beitrag: 30.01.2013, 00:19
  3. SCL: Auf Bits eines Word zugreifen.
    Von Aksels im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 28.10.2011, 17:10
  4. Antworten: 0
    Letzter Beitrag: 08.02.2006, 13:37
  5. Zugreifen auf 4 Bit eines Eingangsworts
    Von Anonymous im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 16.01.2006, 10:28

Lesezeichen

Berechtigungen

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