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

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

Thema: SCL: Timer mit variabler Zeit

  1. #1
    Registriert seit
    28.09.2007
    Ort
    Mexicali
    Beiträge
    39
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Soooo, da ich diesen Beitrag offensichtlich NICHT ins FAQ schreiben kann (Teufel, wer weiß warum?!), kommt er nun hier hin. Es folgt ein kurzer Programmcode für einen Timer in einer Funktion FC0, den wir mit einer variablen Zeit (Zeitvariable) im Steuerablauf einstellen können. Als Vorwissen sei dieser Beitrag (http://www.sps-forum.de/showthread.php?t=2942) empfohlen.

    Code:
    FUNCTION FC0 : VOID
    
    VAR_TEMP
        TimeIn   : S5TIME;
        TimeInS AT TimeIn : WORD;
    END_VAR
    
    // 1.während der Timer läuft, können wir ihn durch Zurücksetzen des "Start_Timer" anhalten
    // 2.ist der Timer abgelaufen, kommt das "Timer_Fertig" Signal, dieses und den Timer können wir durch Rücksetzen des "Start_Timer" rücksetzen 
    // "currTime" ist S5TIME und dient nur als Speicher für den Rückgabewert der Funktion
    // mit der zweiten Zeile in Variablendeklaration stelle ich eine andere Sicht auf meine Variable "TimeIn" ein
    // dies ist notwendig, damit die Zuweiung von WORD nach S5TIME klappt (da BCD WORD-breit ist)
    // -> ist so was, wie ein anderer Datentyp für eine Variable (siehe S7-SCL Handbuch Kapitel 8.4)
    // ach ja, wenn Zeitvariable DINT ist, dann noch DINT_TO_INT benutzen ;)
        
    TimeInS := INT_TO_BCD("Zeitvariable") AND W#16#FFF OR W#16#2000;
    "currTime" := S_ODT        (T_NO    :=  T0,
                                          S        :=  "Start_Timer",
                                          TV      :=  TimeIn,
                                          Q        :=  "Timer_Fertig"
                                          ); 
        
    END_FUNCTION
    Viel Spass damit...

    Lars, der AWL-Geplagte
    Geändert von lindnerlars (14.08.2008 um 10:59 Uhr)
    Zitieren Zitieren SCL: Timer mit variabler Zeit  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.791
    Danke
    398
    Erhielt 2.415 Danke für 2.011 Beiträge

    Standard

    Hallo Lars,
    der vorgestellte Baustein hat m.E. mindestens einen gravierenden Nachteil : er arbeitet immer mit dem gleichen Timer (T0). Du müßtest hier also die Timer-Nr. noch mit übergeben. Allerdings ... da der Baustein keine "echte" Umrechnung des Formates StTime in Sekunden (oder umgekehrt) macht ... welchen Vorteil bietet er mir ? Meinst du nich, dass der SFB4 (z.B.) haargenau das Gleiche leistet (und der íst schon da) ?

    Ein ähnliches Problem, wie du es hattest, hatte ich auch schon mal. ich habe mir dann irgendwann einen FC gebastelt, der eine Zeitvorgabe (in Sek) in S5Time umwandelt. Das wird in der Form sicher auch für viele andere User im Forum gelten. Vielleicht wäre das auch für dich der Weg ...?

    Gruß
    LL

  3. #3
    Registriert seit
    28.09.2007
    Ort
    Mexicali
    Beiträge
    39
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo "Larry",

    mmhmm, den SFB4 sehe ich heut zum ersten Mal...hab bis jetzt noch nie mit System- und Standardfunktionen gearbeitet, da dies bis jetzt noch nicht nötig war, aber vielleicht wärs gar nicht so schlecht, sich damit mal zu befassen, um das Rad nicht immer neu erfinden zu müssen... Allerdings frage ich mich da jetzt, warum es da überhaupt S_ODT in SCL gibt, wenn wir eh den SFB4 nehmen können???

    Der "gleiche Timer bei jedem Start-Signal" find ich net so wild, wenn du nur wenige Timer verwenden willst und für jedes Start-Signal einen eigenen Timer benutzt. Und wie meinstn das mit "keiner echten Umrechnung" in S5Time, ich dächte schon, dass ich von einem INT-Wert (wo die Zeit in s stehen soll) in S5TIME umrechne!?

    Naja wie dem auch sei, so funktionierts bis jetzt, vielleicht änder ich das später noch mal....

    Gruß Lars

  4. #4
    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 lindnerlars Beitrag anzeigen
    Der "gleiche Timer bei jedem Start-Signal" find ich net so wild, wenn du nur wenige Timer verwenden willst und für jedes Start-Signal einen eigenen Timer benutzt.
    ich find das wild, denn irgendwie hab ich den anspruch funktionen zu schreiben, die ich später bei bedarf aus einer bibliothek greifen kann ohne sie noch mal anpassen zu müssen, einfach rein, parametriert, ab gehter ... und das funktioniert bei deiner funktion eben nicht und wenn du es bei dieser einfachen anwendungen als nicht so tragisch betrachtest, dann bei einer etwas ausufernden auch nicht und irgendwann kommen die bausteine, in denen du anfängst globale und lokale variablen zu vermischen und dann wirds ganz großer mist ...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.791
    Danke
    398
    Erhielt 2.415 Danke für 2.011 Beiträge

    Standard

    ... und um noch zu 4L mit ins Boot zu springen :

    Was machst du, wenn du eine Zeit-Verzögerung von 1000 Sek. Haben willst ? Das geht nämlich auch noch ...
    Und wenn der Baustein mehrfach eingesetzt wird, schreibst du ihn dann mehrfach ?

    Gruß
    LL

  6. #6
    Registriert seit
    28.09.2007
    Ort
    Mexicali
    Beiträge
    39
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ...na dann gehts eben in dieser Form nur bis max. 999s!
    Und es geht ja bei der Funktion nicht darum, dass die mehrfach aufgerufen werden soll (bei mir eh nur einmal), sondern nur darum, dass ein Timer mit variabler Zeit umgesetzt wurde...nicht mehr und nicht weniger!

    Wenn das noch so weiter geht dann kommt mein Code dorthin:


    Gruß Lars

  7. #7
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.752
    Danke
    323
    Erhielt 1.526 Danke für 1.286 Beiträge

    Standard

    Wenn es eh nur darum geht, die Funktion 1x aufzurufen,
    dann finde ich SCL höflich "Oversized".
    Da ist AWL für sowas um viele Welten effektiver, und in dem Fall sogar von Haus aus übersichtlicher.

    Zur Umrechnung auf S5TIME bin ich ein Fan von der Standard-Library,
    FC33 bzw. FC40 aus den IEC-Functions.

    Mfg
    Manuel
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  8. #8
    Registriert seit
    28.09.2007
    Ort
    Mexicali
    Beiträge
    39
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    He Leute,

    Ok, ich hab das jetzt mal versucht mit dem SFB4 zu machen und wollte den Tipp mit Multiinstanz-DB mit umsetzen, damit ich nicht für jede FB einen eigenen DB erstellen muss, was meinen gesamten Code unnötig aufblähen würde. Meine Lösung ist folgende:

    Code:
    FUNCTION_BLOCK FB1
    
    VAR
    
    Timer1 : SFB4;
    
    END_VAR
    
    BEGIN
    
    Timer1(IN := E0.0,PT := T#3S); 
    A0.0 := DB1.Q;
    
    END_FUNCTION_BLOCK
    
    
    ORGANIZATION_BLOCK OB1
    
    VAR_TEMP
      // reserviert
      info : ARRAY[0..19] OF BYTE;
      // temporäre Variablen
    
    END_VAR
    
    FB1.DB1(); 
          
    END_ORGANIZATION_BLOCK
    Die Frage ist jetzt die:
    Wie kann ich nun auf die Daten dieses Multiinstanz-DB in der FB (wo ich die Unter-FB aufrufe) abfragen? Ich muss ja wissen, wann der Timer abgelaufen ist
    Bei dieser Zeile:

    Code:
    A0.0 := DB1.Q;
    meckert der Compiler, dass keine Rekursion in SCL erlaubt ist! Wo liegt der Fehler?

    Und noch eine Frage: Wenn ich nun zwei SFB4 gleichzeitig mit dem gleichen Instanz-DB aufrufe, kommt es dann nicht zu Quereleien? Sprich das "Timer-Fertig" Signal von beiden stört sich dann gegenseitig?

    viele Grüße vom Diplomanten Lars
    Zitieren Zitieren SCL: SFB4 mit Multiinstanz-DB  

  9. #9
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Ich habe ja gerade kein Sepp7 zur Hand. Aber sollte das nicht eher:

    Code:
    A0.0 := Timer1.Q;
    lauten?

    PS: Absolute Adressierungen sind Müll.
    If you open your Mind too much, your Brain will fall out.

  10. #10
    Registriert seit
    28.09.2007
    Ort
    Mexicali
    Beiträge
    39
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    He cool, vielen Dank, jetzt gehts *freu*...war mir so nicht klar vorher, dass ich derart auf den Multiinstanz-DB zugreifen muss/kann

    Meine Lösung ist jetzt Folgende:

    Code:
    FUNCTION_BLOCK FB1
    
    VAR
    
    Timer1 : SFB4;
    Timer2 : SFB4;
    
    END_VAR
    
    Timer1(IN := E0.0,PT := T#3S); 
    A0.0 := Timer1.Q;
    
    Timer2(IN := E0.1,PT := T#3S); 
    A0.1 := Timer2.Q;
    
    END_FUNCTION_BLOCK
    Und damit kann ich nun zwei Timer im FB starten, die auch unabhängig voneinander laufen und nicht jeder einen eigenen DB verlangen...

    viele Grüße Lars

    PS: Absolute Adressierung, ich weiß, das Programm war nur zu Testzwecken
    Zitieren Zitieren SCL: SFB4 mit Multiinstanz-DB  

Ähnliche Themen

  1. Zeit von Timer kleiner als Zykluszeit
    Von klauserl im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 15.10.2009, 19:42
  2. Timer Zeit durch Variable ersetzen
    Von Otti20vt im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 04.09.2008, 10:14
  3. Variabler Timer
    Von wuerfelzinker im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 17.11.2007, 23:35
  4. S7: Gibts einen Timer der zb. eine 42h zeit hat?
    Von funkdoc im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 12.07.2006, 08:58
  5. Variabele Zeit in einen Timer laden
    Von Willibald im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 15.07.2004, 13:33

Stichworte

Lesezeichen

Berechtigungen

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