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

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

Thema: S7 SCL: Zugriff auf Zykluszeit, Merker, Zustand von Eingängen oder Ausgängen

  1. #1
    Registriert seit
    05.03.2013
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich möchte einen zyklusgenauen Datenlogger in SCL programmieren. Ich kann bereits auf Variablen in DBs zugreifen und diese speichern. Nun würde ich gerne den Zustand der EIngänge/Ausgänge, Merker des S7 oder die letzt Zykluszeit abspeichern. Wie greife ich in SCL auf diese Sachen zu? Zykluszeit z.B. geht ja sonst mit #OB1_PREV_CYCLE, wie aber in SCL?

    VIelen Dank!
    Zitieren Zitieren S7 SCL: Zugriff auf Zykluszeit, Merker, Zustand von Eingängen oder Ausgängen  

  2. #2
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    In OB1, #OB1_PREV_CYCLE in ein passender Variabel abspeichern.
    Dann kannst du es beliebig verwenden, auch in dein SCL program.

    Eingänge, Ausgänge, und Merker werden in SCL genauso addressiert wie in AWL, FUP oder KOP, absolut oder Symbolisch.
    In SCL ist es bestens wenn du Symbolische Adressen mit Apostrophen markierst. Z.B.: "Druck_Schalter_33".
    Jesper M. Pedersen

  3. #3
    trexer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.03.2013
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für deine Antwort! Leider hab ich es noch nicht so ganz verstanden. Glaube aber wie ich auf Eingänge/Ausgänge zugreife ist mir jetzt klar geworden.

    Ok also ohne das anbinden von #OB1_PREV_CYCLE in OB1 und dort zunächst abspeichern geht es nicht?
    Kann man in einem FB der in SCL programmiert ist auf ein Merkerwort oder Merkerbyte zugreifen das in einem anderen OB verwendet wird? Ist so ein Merkerbyte also global oder nur in dem Baustein in dem es angelegt wird benutzbar?

    Danke!

  4. #4
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Merker sind global.

    Der bessere Weg ist aber sicher, eine Eingangsvariable vom Typ INT in Deinem SCL-Baustein zu deklarieren, an die Du beim Aufruf des SCL-Bausteins den Inhalt von #OB1_PREV_CYCLE übergibst.

    Beispiel Auszug SCL-Function:
    Code:
    FUNCTION TEST : ...
    
    VAR_INPUT
        // Eingangsparameter
        OB1_PREV_CYCLE : INT; 
    END_VAR
    
    
    ...
    
    END_FUNCTION


    und Aufruf im OB1:
    Code:
          CALL  "Test"
            OB1_PREV_CYCLE:=#OB1_PREV_CYCLE
    ...
    Geändert von hucki (05.03.2013 um 20:41 Uhr) Grund: Beispiel eingefügt

  5. #5
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    Merkerbytes sind global. du kannst also von überall her drauf zugreifen.

    Aber du könntest ja auch den ob1 direkt in SCL programmieren.
    z.B.

    Code:
    ORGANIZATION_BLOCK CYCL_EXC
    TITLE = 'Main'
    VERSION : '0.1'
    
    
    VAR_TEMP
      OB1_EV_CLASS : BYTE ;    //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
      OB1_SCAN_1 : BYTE ;    //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
      OB1_PRIORITY : BYTE ;    //Priority of OB Execution
      OB1_OB_NUMBR : BYTE ;    //1 (Organization block 1, OB1)
      OB1_RESERVED_1 : BYTE ;    //Reserved for system
      OB1_RESERVED_2 : BYTE ;    //Reserved for system
      OB1_PREV_CYCLE : INT ;    //Cycle time of previous OB1 scan (milliseconds)
      OB1_MIN_CYCLE : INT ;    //Minimum cycle time of OB1 (milliseconds)
      OB1_MAX_CYCLE : INT ;    //Maximum cycle time of OB1 (milliseconds)
      OB1_DATE_TIME : DATE_AND_TIME ;    //Date and time OB1 started
    END_VAR
    
    BEGIN
    
    DB1.CYCLE := OB1_PREV_CYCLE;
    
    // oder so
    
    TESTFB.TESTIDB(CYCLE := OB1_PREV_CYCLE); // Wenn du einen FB aufrufen willst dessen Eingangsparameter den Cycle inhalt kriegen soll.
    
    END_ORGANIZATION_BLOCK
    Geändert von vollmi (05.03.2013 um 20:58 Uhr)

  6. #6
    trexer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.03.2013
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Tipps!

    Das einzige was ich jetzt noch gut gebrauchen könnte wäre ein Beispiel für einen FB/FC in SCL wie ich auf einen globalen Merker zugreifen kann. Danke!

  7. #7
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.242 Danke für 973 Beiträge

    Standard

    Zitat Zitat von trexer Beitrag anzeigen
    Danke für die Tipps!

    Das einzige was ich jetzt noch gut gebrauchen könnte wäre ein Beispiel für einen FB/FC in SCL wie ich auf einen globalen Merker zugreifen kann. Danke!
    Hast du eigentlich jemals in die Online-Hilfe von SCL geschaut?
    Da steht genau das drin.

    Code:
    Bit := M10.0;
    Byte := MB10;
    Wort := MW10;
    ...
    Gruß
    Dieter

  8. #8
    trexer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.03.2013
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke. Ich meinte sowas hier:

    Code:
    VARIABLE:
    nummer : INT;
    
    
    wert0 := MW[nummer]
    Läuft jetzt.

  9. #9
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.242 Danke für 973 Beiträge

    Standard

    Wenn du größere Bereiche protokollieren willst, dann solltest du dir mal den SFC20 anschauen

    Gruß
    Dieter

  10. #10
    trexer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    05.03.2013
    Beiträge
    9
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke. Geht um 8 Variablen die zyklisch in einem DB im Real-Format gespeichert werden sollen.
    Zur Zeit benutzte ich für Merker:
    Real0 := DWORD_TO_REAL(MD[DB996.variable[0].byad]);

    Und für Real Typen aus Datenbanken z.B.
    Real0 := DWORD_TO_REAL(WORD_TO_BLOCK_DB(DINT_TO_WORD(DB996.variable[0].dbad)).DD[DB996.variable[0].byad]);


    Wäre der Block Move schneller und würde die SPS weniger belasten oder was sind die Vorteile?

Ähnliche Themen

  1. Indirekter zugriff auf DB's (SCL)
    Von zloyduh im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 03.05.2012, 09:45
  2. Antworten: 1
    Letzter Beitrag: 23.01.2012, 17:06
  3. Antworten: 8
    Letzter Beitrag: 09.06.2010, 22:23
  4. Indizierter Zugriff auf Datenbaustein im SCL
    Von tarzipan7 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 05.02.2008, 15:37
  5. SCL - Indirekter Zugriff auf DB/AR1,2
    Von Floh im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 07.06.2006, 10:32

Lesezeichen

Berechtigungen

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