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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: DB Aufruf in S7 SCL

  1. #1
    Registriert seit
    04.06.2012
    Ort
    Jena
    Beiträge
    41
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo alle zusammen,
    erst bitte ich um Entschuldigung für meine deutsche Sprache, da ich Ausländer bin.
    Ich programmiere gerade in S7 SCL eine Funktion mit Eingang TYP-BLOCK_DB.Dazu gibt's DB mit UDT-Structure: lParamA/TYP DINT und lParamB/TYP DINT. Wie kann ich die Werte aus DB(z.b. DB111) mit UDT-Structure für weitere Bearbeitung in SCL-Code aufrufen? Ich bin komplett Newbie in SCL. Danke im Voraus.
    Zitieren Zitieren DB Aufruf in S7 SCL  

  2. #2
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Das könnte so aussehen:

    Code:
    VAR_IN_OUT
        ioData : UDT1;
    END_VAR
    
    BEGIN
    
    ioData.ParamA := ioData.ParamB;
    Beim Aufruf des SCL-Bausteins deklarierst Du dann den DB mit der Struktur an der Schnittstelle.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  3. #3
    Registriert seit
    04.06.2012
    Ort
    Jena
    Beiträge
    41
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke. Aber ich brauche die Werte z.b DB111.Test[Index].lParamA und DB111.Test[Index].lParamB (Test ist ARRAY[0..45] von UDT1)über
    VAR_IN
    DB_Data : BLOCK_DB;
    END_VAR
    eingeben
    Geändert von SAB2002 (22.06.2013 um 00:30 Uhr)

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Dann machste es so:
    Code:
    VAR_IN_OUT
        ioData : ARRAY [0..45] OF UDT1;
    END_VAR
    
    BEGIN
    
    ioData[0].ParamA := ioData[45].ParamB;
    Den Typ BLOCK_DB sollte man nur benutzen wenn es wirklich garnicht mehr anders geht.
    Geändert von Thomas_v2.1 (22.06.2013 um 11:19 Uhr) Grund: "OF" fehlte

  5. #5
    Registriert seit
    04.06.2012
    Ort
    Jena
    Beiträge
    41
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja.Danke.
    Aber ich brauche DB als Eingang für meine FC haben

  6. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Mit BLOCK_DB kannst du deinen DB nur noch anonym über die Adressen ansprechen, denn der Übersetzer kann ja nicht wissen welchen DB mit welcher Struktur du ihm später übergibst.

    D.h. du kannst die Werte im DB nur noch fest mit:
    Code:
    DB_Data.DD0 := 123;   // 123 an Datendoppelwort 0 im DB schreiben
    oder mit variabler Adresse mit:
    Code:
    Index := 100;
    DB_Data.DD[Index] := 123;
    ansprechen.

    Du hast keine Typüberprüfung, und nachvollziehen was dort passiert kann auch keiner.
    Darum würde ich BLOCK_DB nur verwenden wenn es nicht anders geht. Aber hier geht es anders, und besser.

  7. #7
    Registriert seit
    04.06.2012
    Ort
    Jena
    Beiträge
    41
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard

    OK. Dann die Frage
    Wenn ich weiter in SCL-Code bearbeiten möchte z.b.Ergebniss:= DB111.Test[Index].lParamA*DB111.Test[Index].lParamB, wie sieht es aus?
    Ich brauche nicht an DB schreiben, sonder v. DB lesen

  8. #8
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Also dann mal komplett.

    Du hast einen UDT
    Code:
    TYPE UDT1
        STRUCT
            lParamA : DINT;
            lParamB : DINT;
        END_STRUCT
    END_TYPE
    Und einen Datenbaustein DB111 in dem ein Array of UDT liegt:
    Code:
    DATA_BLOCK DB111
        STRUCT
            Test: ARRAY[0..45] OF UDT1;
        END_STRUCT
    BEGIN
    END_DATA_BLOCK
    Dann willst du eine Funktion die mit Daten aus diesem UDT etwas (hoffentlich sinnvolleres) berechnet
    Code:
    FUNCTION FC100 : VOID
    
    VAR_INPUT
        ioData : ARRAY [0..45] OF UDT1;
    END_VAR
    
    VAR_TEMP
        Index : INT;
        Ergebnis : DINT;
    END_VAR
    
    BEGIN
        Index := 10;
        Ergebnis := ioData[Index].lParamA * ioData[Index].lParamB;
    END_FUNCTION
    Wenn du diesen FC aufrufst, musst du ihm als Parameter dein Array in dem DB übergeben
    Code:
    FUNCTION FC1 : VOID
    BEGIN
        FC100( ioData := DB111.Test );
    END_FUNCTION
    Wenn du dir jetzt überlegst, einen weiteren DB (z.B. 1000) mit dem gleichen Array anzulegen, musst du den Aufruf anpassen:
    Code:
    FC100( ioData := DB1000.Test );
    Ich würde allen FCs, UDTs und DBs ein Symbol geben, und dann anstelle mit den Nummern mit dem Symbol arbeiten.

  9. Folgende 3 Benutzer sagen Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    hans.mustermann (22.06.2013),hucki (22.06.2013),SAB2002 (22.06.2013)

  10. #9
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 916 Danke für 740 Beiträge

    Standard

    Das solltest Du am Besten in die FAQ stellen!

  11. #10
    Registriert seit
    04.06.2012
    Ort
    Jena
    Beiträge
    41
    Danke
    9
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke erstmals. Quelle wird ,klar, geschützt und DB kann im verschiedenen Projekt verschiedenen Nummern haben (auch UDT). Deswegen es muß parametriert als VAR_INPUT, und nicht in SCL-Code selbst anzupassen.Also Quelle muß universell für verschiedene DB mit UDT nutzbar sein.
    Geändert von SAB2002 (23.06.2013 um 15:37 Uhr)

Ähnliche Themen

  1. TIA DB Aufruf in SCL
    Von Martinsky im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 04.06.2013, 21:32
  2. FB Aufruf in S7 SCL
    Von Starter im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 24.10.2011, 14:16
  3. Aufruf in SCL SFC1
    Von Carsten77 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 23.05.2011, 11:38
  4. SCL: FB Aufruf unter SCL mit Variablen DB
    Von ThorstenK im Forum Programmierstrategien
    Antworten: 32
    Letzter Beitrag: 10.02.2011, 19:15
  5. DIX -Aufruf in SCL
    Von Wastel im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 20.10.2005, 11:09

Lesezeichen

Berechtigungen

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