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

Ergebnis 1 bis 8 von 8

Thema: Indirekte Adressierung in SCL

  1. #1
    Registriert seit
    28.06.2007
    Beiträge
    63
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,

    mit TIA11 und einer S7-1200 möchte ich in einem in SCL erstellten FC dynamisch Eingänge über eine Schleife in einen Array schreiben.
    Das soll vom Prinzip her so aussehen:

    Code:
    FOR #k := 0 TO 13 BY 1 DO
     // "DB".DI[] und "DB".AI[] sind jeweils als Array in einem DB definiert.
    
     "DB".DI[#k] := %E[k];
     "DB".AI[#k] := %EW[k];
    
    END_FOR;

    Gibt es hierzu Ideen wie das in SCL umgesetzt werden kann?
    Zitieren Zitieren Indirekte Adressierung in SCL  

  2. #2
    Registriert seit
    19.12.2008
    Beiträge
    336
    Danke
    19
    Erhielt 28 Danke für 28 Beiträge

    Standard

    Es wäre vielleicht hilfreich wenn du die Variablentypen jeweils benennen könntest.
    Code:
    FOR #k := 0 TO 13 BY 1 DO
     // "DB".DI[] und "DB".AI[] sind jeweils als Array in einem DB definiert.
    
     "DB".DI[#k] := %E[k];  // welchen Typ hat DI, was soll E sein ? direkt der binäre Eingang ? Dann E[k,BitNummer].
     "DB".AI[#k] := %EW[k];  // welchen Typ hat AI ? WORD ?
    
    END_FOR;
    Hattest du dazu auch schon mal einen Blick in die Step7-Hilfe geworfen ?

  3. #3
    Atlas ist offline Benutzer
    Themenstarter
    Registriert seit
    28.06.2007
    Beiträge
    63
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich bin mir nicht sicher ob ich Deine Frage richtig verstehe, denn du hast diese doch schon selbst beantwortet...

    Ich kenne keine anderen Datentypen als WORD (AI) und BOOL (DI) für direkte Eingänge.

    Im übrigen ist das gezeigte Codebeispiel nur eine Prinzipdarstellung (da ich die benötigte Syntax nicht kenne). Selbstverständlich müsste die Adressierung eines Einganges mit %E0.0, %E0.1, ... erfolgen. Aber das funktioniert nur bei einer statischen Anweisung. Meine Frage ist nach wie vor wie ich anstelle der statischen Anweisung das Ganze in einer Schleife realisieren kann.


    "E[k,BitNummer]" wird wohl nicht funktionieren...

  4. #4
    Atlas ist offline Benutzer
    Themenstarter
    Registriert seit
    28.06.2007
    Beiträge
    63
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich denke nun selbst eine Lösung gefunden zu haben:


    Code:
    #i := 0;
    #k := 0;
    
    FOR #i := 0 TO 15 BY 1 DO
    
      IF (#i MOD 8 = 0) AND (#i > 0) THEN
        #k := #k+1;
      END_IF;
    
      "DB".DI[#i] := PEEK_BOOL(area:=16#81, dbNumber:=0, byteOffset:=#k, bitOffset:=#i);
    
    END_FOR;

    Für die Analogwerte heisst das Zauberwort "PEEK_WORD()".

  5. #5
    Registriert seit
    05.09.2011
    Beiträge
    176
    Danke
    43
    Erhielt 28 Danke für 20 Beiträge

    Standard

    Hm also ich kenne weder TIA11, noch diesen PEEK_BOOL-Befehl aber was Lupo geschrieben hat, stimmt schon!

    Normalerweise werden in SCL Eingänge folgendermaßen angesprochen:

    Bitweise : E[Byte,Bit] z.B. E 9.5 = E[9,5]
    Byteweise: EB[Byte] z.B. EB 18 = EB[18]
    Wordweise: EW[Word] z.B. EW 60 = EW[60]
    DWordweise: ED[Dword] z.B. ED4 = ED[4]

    Die Zahlen in den eckigen Klammern können durch Indexvariablen vom Typ INT oder DINT ersetzt werden.
    Um also bei deinem Beispiel zu bleiben .... du müsstest dir für die Bits ebenfalls noch eine kleine Schleife bilden. Dann funktioniert das auf jeden Fall. Liegen die einzulesenden Eingänge denn direkt hintereinander???

    mfg

  6. #6
    Atlas ist offline Benutzer
    Themenstarter
    Registriert seit
    28.06.2007
    Beiträge
    63
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wir scheinen in gewisser Weise alle Recht zu haben..

    Dein Vorschlag mit "E[9,5]" funktioniert in SCL bei Step7 5.5, aber nicht im SCL TIA11.
    In TIA11 muss mit dem genannten PEEK_BOOL-Befehl gearbeitet werden.

  7. #7
    Registriert seit
    22.11.2012
    Beiträge
    111
    Danke
    15
    Erhielt 19 Danke für 18 Beiträge

    Standard

    Hallo,

    ich möchte in Step 7 v5.5 SCL Eingänge mit einer Schleife auf einen DB zuweisen.
    Dabei möchte ich die Eingänge symbolisch und mit einem Index über eine Schleife ansprechen.
    Leider fehlt mir dazu der Syntax.

    Code:
    FOR i := 1 TO 6 BY 1 DO
    
    "DB_Ladegeraete".Ladegeraet[i].Eingang.DI_1 :=  "ET200pro_01_LG_01_DI_1";  // i=1: E11.0     i=2: E11.4     i=3: E12.0    .....
    "DB_Ladegeraete".Ladegeraet[i].Eingang.DI_2 :=  "ET200pro_01_LG_01_DI_2";  // i=1: E11.1     i=2: E11.5     i=3: E12.1    .....
    "DB_Ladegeraete".Ladegeraet[i].Eingang.DI_3 :=  "ET200pro_01_LG_01_DI_3";  // i=1: E11.2     i=2: E11.6     i=3: E12.2    .....
    
    END_FOR;
    Hapern tut es an der Symbolischen bezeichnung der Eingänge, an welcher Stelle wird der Index "i" eingebaut damit hier jeweils "LG_0[i]" daraus wird.
    Es handelt sich um Bits.

    Habt ihr da eine Idee?

    Danke & MFG
    michstein
    Geändert von mystone (16.06.2015 um 08:53 Uhr)

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Symbolnamen zur Laufzeit zusammenbasteln geht nicht.
    Du müßtest die Eingänge als Array deklarieren oder indiziert auf die Absolutadressen zugreifen:
    Code:
    "DB_Ladegeraete".Ladegeraet[i].Eingang.DI_1 :=  EX[i, 0] ;
    Harald
    Geändert von PN/DP (22.04.2014 um 15:33 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. SCL indirekte Adressierung von Strukturen
    Von Anonymous im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 10.02.2016, 19:10
  2. indirekte Adressierung
    Von Christian84 im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 21.02.2009, 09:09
  3. Indirekte Adressierung von STRING SCL
    Von sm@rt im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 06.02.2009, 15:12
  4. Indirekte Adressierung von Bit's in SCL
    Von tarzipan7 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 23.01.2009, 12:37
  5. indirekte Adressierung in SCL
    Von BiBi im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 18.05.2007, 23:42

Lesezeichen

Berechtigungen

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