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

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

Thema: IEC Timer

  1. #1
    Registriert seit
    22.06.2010
    Beiträge
    16
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    Ich schlage mich seid einigen Tagen mit IEC Timern rum. Irgend wie bin ich in einer Sackgasse
    Im Forum finde ich gute Ansätze, aber sehe keine Lösung für mein Problem. (Ok ich bin noch nicht lange als SCL Programmer tätig).

    Ich möchte Alarme zeitverzögert anzeigen lassen. Da es sich um Rund 300 Stk. handelt, wollte ich mit Multiinstanzen arbeiten.Ich denke 300 db's nur für Alarme ist dann doch etwas viel

    Das hab ich :

    Code:
     FUNCTION_BLOCK Tim_FB
     
     VAR_INPUT
     on           : BOOL;      //Timer Starten
     runtime      : DINT;  // Laufzeit des Timers
     END_VAR
     
     VAR_OUTPUT
     timerOut        : BOOL;   //Timerausgang bool
     END_VAR
      
     VAR
       IecTimer  : TON; 
    END_VAR
    BEGIN 
    
      IecTimer (IN := on ,PT := (DINT_TO_TIME(runtime)) ); 
               timerOut := IecTimer.Q;
    END_FUNCTION_BLOCK
    
     DATA_BLOCK Tim_DB Tim_FB   //Multiinstanz DB bezogen auf FB999
    BEGIN
    END_DATA_BLOCK
    Das Ziel ist es dann im Programmablauf anstatt mit den S5Time, den IEC aufzurufen, Werte übergeben (Zeit, start) und ausführen lassen.

    Wie muss ich jetzt vorgehen. Soll ich jetz irgendwie 300 instanzen machen in einem neuen FB, oder im bestehenden? oder irgendwie immer diesen öffnen.
    Es kann ja vorkommen das mehrere Events gleichzeitig anstehen. Dann mus ja der Timer pararell mehrfach ablaufen.

    Ich danke für jegliche Hilfe
    Zitieren Zitieren IEC Timer  

  2. #2
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Möchtest du nur eine Einschaltverzögerung basteln?

    Was spricht gegen den Einsatz des SFB4 TON? Der ist nach IEC 61131.

    EDIT: Ich hab jetzt gesehen, dass du den in deinem Baustein ja sowieso aufrufen möchtest. Dann macht das ganze ja noch weniger Sinn. Ruf den SFB doch gleich als Multiinstanz auf.
    Geändert von Aventinus (22.11.2011 um 11:59 Uhr) Grund: EDIT
    mfG Aventinus

  3. #3
    coglione ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.06.2010
    Beiträge
    16
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,
    Ja, ich möchte nur eine Einschaltverzögerung. bis jetz wird dies mit den S5Time gemacht.
    Nun möchte ich auf die TON (SFB4) "umsatteln".
    Oben im Code habe ich nun Eingangs und Ausgangvariabeln deklariert, und diese dann auf eine Instanz von TON "Verknüpft".
    Bis dahin gehts, aber wie mache ich jetzt, dass dieses Teil überall und jederzeit, und auch pararell mehrmals aufgerufen und abgearbeitet wird.

  4. #4
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Standard

    Warum willst Du 300 Alarme einzeln verzögert anzeigen lassen?
    Macht es vielleicht Sinn Alarme zu gruppieren und mit einer Hirachie zu versehen?
    Z. B. Wenn NOT-AUS, dann brauch ich keine Störung vom Frequenzumrichter, da diese Sekundär ist!
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

  5. #5
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Zitat Zitat von coglione Beitrag anzeigen
    Hallo,
    Ja, ich möchte nur eine Einschaltverzögerung. bis jetz wird dies mit den S5Time gemacht.
    Nun möchte ich auf die TON (SFB4) "umsatteln".
    Oben im Code habe ich nun Eingangs und Ausgangvariabeln deklariert, und diese dann auf eine Instanz von TON "Verknüpft".
    Bis dahin gehts, aber wie mache ich jetzt, dass dieses Teil überall und jederzeit, und auch pararell mehrmals aufgerufen und abgearbeitet wird.
    Überall und jederzeit geht nicht. Hast du dir schon mal das Thema Multiinstanzen angeschaut. Da wirst du feststellen das das ein (S)FB-Aufruf aus einem FB heraus ist. Und die Instanz des aufgerufenen FB´s liegt in der des aufrufendne FB´s. Den SCL-Zauber den du da veranstaltest kannst du dir sparen. Multiinstanzen haben nix mit SCL zu tun, das geht genau so in AWL.
    mfG Aventinus

  6. #6
    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

    Hallo,
    vielleicht solltest du uns mal das "Warum" erklären.
    Das dein aktueller Ansatz sehr Resourcen-fressend ist hast du ja wohl schon selbst erkannt. Vielleicht würde dich aber ein anderer Ansatz weiter bringen ...

    Gruß
    Larry

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

    Standard

    Du könntest die Daten einer TON-Instanz in ein Array ablegen, und die Daten denn vor dem Aufruf in die TON-Instanz kopieren, und nach dem Bearbeiten wieder in ein Array zurückkopieren.
    Bei SCL muss man diesen Umweg gehen, weil keine Arrays mit FB aufgerufen werden können (bei Codesys geht das z.B.)

    Darum braucht man erstmal einen Typ mit den Instanzdaten einer TON-Instanz (evtl. werden später nicht alle benötigt, wie z.B. PT):
    Code:
    TYPE TON_INSTANZ_t
    //
    // Typbeschreibung einer TON-Instanz
    //
        STRUCT
            IN : BOOL;  //IN
            PT : TIME;  //IN
            Q : BOOL;   //OUT
            ET : TIME;  //OUT
            STATE : BYTE;//STAT
            STIME : TIME;//STAT
            ATIME : TIME;//STAT
        END_STRUCT
    END_TYPE
    Wenn du dann beispielsweise 128 digitale Meldungen verzögern willst, würde das so gehen:
    Code:
    FUNCTION_BLOCK ARRAY_VERZ
    
    VAR_INPUT
        IN_ARR : ARRAY[0..127] OF BOOL; // Störungseingänge
        T : TIME := T#1s;               // Verzögerungszeit
    END_VAR
    
    VAR_OUTPUT
        OUT_ARR : ARRAY[0..127] OF BOOL; // Verzögerte Störungsausgänge
    END_VAR
    
    VAR_TEMP
        I : INT;
    END_VAR
    
    VAR
        TON_ARRAY : ARRAY[0..127] OF TON_INSTANZ_t;
        TON_T : TON;
    END_VAR
    
    BEGIN        
        FOR I := 0 TO 127 DO
            // Array Daten in TON Instanzdaten kopieren
            TON_T.IN    := IN_ARR[I];
            TON_T.PT    := T;
            TON_T.Q     := TON_ARRAY[I].Q;
            TON_T.ET    := TON_ARRAY[I].ET;
            TON_T.STATE := TON_ARRAY[I].STATE;
            TON_T.STIME := TON_ARRAY[I].STIME;
            TON_T.ATIME := TON_ARRAY[I].ATIME;
            // Timer aufrufen
            TON_T();
            // Daten in Array zurückkopieren
            TON_ARRAY[I].IN    := TON_T.IN;
            TON_ARRAY[I].Q     := TON_T.Q;
            TON_ARRAY[I].ET    := TON_T.ET;
            TON_ARRAY[I].STATE := TON_T.STATE;
            TON_ARRAY[I].STIME := TON_T.STIME;
            TON_ARRAY[I].ATIME := TON_T.ATIME;
            OUT_ARR[I] := TON_T.Q;
        END_FOR;
    END_FUNCTION_BLOCK

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

    chomp (29.01.2014),coglione (23.11.2011),colorador (23.01.2016)

  9. #8
    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

    um ein bißchen speicher zu sparen: http://www.sps-forum.de/showthread.p...282#post122282
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #9
    coglione ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.06.2010
    Beiträge
    16
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen,
    Vielen Dank für die Vielen Ansätze. Ich werde heute mal mit der Idee von Thomas "basteln"
    Vielleicht zur Frage warum. von Larry.
    Es handelt sich nicht nur um Alarme. Mein Baustein soll generell für alle Timer - Dinge genutz werden. Ich möchte einen einfachen, schnellen Timerbaustein, dem ich die Laufzeit und das Startbool übergebe, er zählt und gibt den Ausgnag zurück. ganz simpel eigendlich Da es sich um ein grösseres bestehendes Projekt handelt, weiss ich nicht wieviele Zähler gleichzeitig laufen können. Ich weiss lediglich das die bestehende S5Time Funktion rund 300 mal aufgerufen wird.
    Ich möchte auch jetzt herausfinden, ob die TON - Lösung schneller ist als die S5Time, bezüglich Zykluszeit.
    Das ganze ist rein experimentell und dient rein dem Lerneffekt. Ich bin ein bisschen eingerostet und hatte damals nur ein wenig FUP und AWL gelernt. Nun gilt der Neueinstieg in SCL
    Geändert von coglione (23.11.2011 um 08:31 Uhr)

  11. #10
    Registriert seit
    17.05.2010
    Ort
    Paderborn
    Beiträge
    824
    Danke
    84
    Erhielt 125 Danke für 94 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Je nach Genauigkeit, kannst Du das doch dann auch mit 'nem Taktmerker und einem eigene Zähler machen, ganz ohne IEC-Timer! Vielleicht ist der SFC64 (TIME_TCK) für Dich interessant!
    Grüße
    Michael

    1001101110110100... Das ist meine Welt

Ähnliche Themen

  1. Timer in S7
    Von dedl im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 10.10.2011, 12:34
  2. Timer in FB
    Von Robot-Sun im Forum Programmierstrategien
    Antworten: 10
    Letzter Beitrag: 09.09.2007, 12:48
  3. Suche Ersatz für IFM TIMER LG ( Logik Timer)
    Von GrafLaugenkotz im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 16.01.2007, 17:02
  4. S7 Timer
    Von Patrick_B. im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 03.01.2006, 07:10
  5. IEC Timer
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 07.04.2005, 08:17

Stichworte

Lesezeichen

Berechtigungen

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