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

Results 1 to 5 of 5

Thread: Timer, selbst gebastelt. Bitte schreibt Eure Meinung, danke.

  1. #1
    Join Date
    22.04.2019
    Posts
    31
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo an alle!

    Mir passte der Umgang mit den Timern (als Taktgeber) im TIA nicht so recht und wahrscheinlich habe ich die, obwohl schon erfolgreich unter FUP eingesetzt, auch nicht wirklich verstanden. Gelesen zum Timer-Thema habe ich viel im I-Net und natürlich hier, aber wie gesagt, gefiel mir das alles nicht.
    Darum habe ich mir im MAIN-Baustein einfach per SCL welche mit eingebastelt. Sie funktionieren sehr gut und unabhängig voneinander, sind einstellbar, geben bei Ablauf ein periodisches Signal in eine Variable und machen also, was ich will.

    Aber!! Ist das, wie soll ich sagen, "richtig", bloß weil es praktisch funktioniert? Was sagt Ihr dazu als Fachleute?
    Viele Grüße von Björn

    Hier der Code in SCL dazu, wie gesagt, läuft der im MAIN einfach so mit (EDIT: KommentareGrün gefärbt):
    Code:
    "Alle_Maschinen".Systemzeitwert1_2 := "Alle_Maschinen".Systemzeitwert2_2 := "Alle_Maschinen".Systemzeitwert3_2 := TIME_TCK() ; // Zeiten 1_2, 2_2, 3_2 usw. werden ständig synchronisiert
    // Die "_1er Zeiten" (1_1, 2_1 usw.) bleiben "stehen" auf dem Synchr.-Wert aus (zu Anfang OB100) und danach wegen IF-Bedingung
    IF "Alle_Maschinen".Systemzeitwert1_2 - "Alle_Maschinen".Systemzeitwert1_1 >= "Alle_Maschinen".Taktzeit_Maschinen THEN // Taktzeit_Masch.wird in OB100 vorgegeben und später ggf. verändert
        "Alle_Maschinen".Systemzeitwert1_1 := TIME_TCK(); // jetzt, wenn Vorgabezeit abgelaufen ist, wird die "_1er Zeit" neu gesetzt
        "Alle_Maschinen".Zeitablauf1 := TRUE; // Variable, die als Takt-Signal in anderen Bausteinen verwendet werden kann
    END_IF;
    
    
    IF "Alle_Maschinen".Systemzeitwert2_2 - "Alle_Maschinen".Systemzeitwert2_1 >= "Alle_Maschinen".Taktzeit_Lieferer THEN
        "Alle_Maschinen".Systemzeitwert2_1 := TIME_TCK() ;
        "Alle_Maschinen".Zeitablauf2 := TRUE;
    END_IF;
    
    
    IF "Alle_Maschinen".Systemzeitwert3_2 - "Alle_Maschinen".Systemzeitwert3_1 >= "Alle_Maschinen".Taktzeit_Lief_Foe THEN
        "Alle_Maschinen".Systemzeitwert3_1 := TIME_TCK() ;
        "Alle_Maschinen".Zeitablauf3 := TRUE;
    END_IF;
    (* für den nächsten Zähler
    IF "Alle_Maschinen".Systemzeitwert4_2 - "Alle_Maschinen".Systemzeitwert4_1 >= "Alle_Maschinen".Taktzeit_XXXX THEN
        "Alle_Maschinen".Systemzeitwert4_1 := TIME_TCK() ;
        "Alle_Maschinen".Zeitablauf4 := TRUE;
    END_IF;
    *)
    Last edited by row-k; 15.05.2019 at 15:09.
    Mir fällt kein schlauer Spruch ein ...
    Reply With Quote Reply With Quote Timer, selbst gebastelt. Bitte schreibt Eure Meinung, danke.  

  2. #2
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    13,567
    Danke
    1,091
    Erhielt 4,006 Danke für 3,238 Beiträge

    Default

    Timer selber basteln ist grundsätzlich erst mal nicht falsch, allerdings sollte der Code fehlerfrei funktionieren und (Fach-)Kollegen sollten den Code verstehen können ... Wer einen Siemens-Lehrgang besucht oder die TIA-Dokumentation gründlich liest wird die Standard-Timer verstehen und anwenden können. (Gibt es zu Deinen innovativen Timern einen Lehrgang oder eine verständliche Beschreibung? )

    S7-1200 kennen die Anweisung TIME_TCK() nicht. Da sind Deine Timer so nicht anwendbar.
    Bei S7-300/400/1500 hat TIME_TCK() nach 24 Tagen einen Überlauf von ca. 2147483647 zu ca. 0 und liefert wieder Werte ab 0, dann ist (Systemzeitwertx_2 - Systemzeitwertx_1) negativ und Deine IF sind mindestens 24 Tage lang (oder für immer) nicht erfüllt und die Timer werden nicht TRUE.

    (Wenn TIME_TCK() mehrmals im Zyklus aufgerufen wird, dann kann/wird TIME_TCK() verschiedene Werte liefern und die Zeitdifferenz (ms) zum TIME_TCK() vom Anfang von MAIN kann größer oder kleiner als 0 sein.)

    Wie soll Dein MAIN und Dein OB100 aussehen, wenn Du 200 Timer brauchst? Du solltest den Timer-Code in FB mit simpler/übersichtlicher Schnittstelle kapseln.

    Wie werden Deine Timer gestartet? Wann gehen Deine Timer wieder auf FALSE (Zeitablaufx = FALSE)?
    Können Deine Timer durch Bool-Signale (wie z.B. VKE) einfach gesteuert werden (dann ist einfacher/übersichtlicher Einsatz in FUP/KOP möglich)?
    Warum schreibst Du "Takt"zeit? Sollen diese Timer periodische Signale wie ein Zeittakt liefern? Wo/wie re-starten Deine Timer?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    row-k (15.05.2019)

  4. #3
    Join Date
    22.04.2019
    Posts
    31
    Danke
    25
    Erhielt 1 Danke für 1 Beitrag

    Default

    Erst mal vielen Dank für Deine Mühe, Harald.
    Wer ... die TIA-Dokumentation gründlich liest wird die Standard-Timer verstehen und anwenden können.
    Hast ja Recht. Da muss ich wohl mehr und gründlicher lesen. Mach ich, versprochen.

    S7-1200 kennen die Anweisung TIME_TCK() nicht. Da sind Deine Timer so nicht anwendbar.
    Bei S7-300/400/1500 hat TIME_TCK() nach 24 Tagen einen Überlauf von ...
    Schade, daran hatte ich nicht gedacht. Ich brauche sie aber nur für kurze Zeitdauern und da geht's ...

    Wie soll Dein MAIN und Dein OB100 aussehen, wenn Du 200 Timer brauchst? Du solltest den Timer-Code in FB mit simpler/übersichtlicher Schnittstelle kapseln.
    Stimmt auch.

    Wie werden Deine Timer gestartet? Wann gehen Deine Timer wieder auf FALSE (Zeitablaufx = FALSE)?
    SIe starten von allein, weil nur die beiden Systemzeiten verglichen werden (siehe auch weiter unten und in den Kommentaren des Codes).
    Zeitablaufx ist nur eine Variable, die ich dann in anderen Funktionen auf FALSE setze, wenn ich sie benutzt habe.

    Können Deine Timer durch Bool-Signale (wie z.B. VKE) einfach gesteuert werden (dann ist einfacher/übersichtlicher Einsatz in FUP/KOP möglich)?
    Codezeile dazu; das geht. Je nach Anforderung kann ich sie auch mit anderen Variablen anderer Datentypen steuern.

    Warum schreibst Du "Takt"zeit? Sollen diese Timer periodische Signale wie ein Zeittakt liefern? Wo/wie re-starten Deine Timer?
    Ja, sie liefern unterschiedlich lange Signale, ganz wie gewünscht.
    Sie starten immer wieder von allein, denn eine der Zeiten (die _1er) bleiben "stehen", die _2er laufen weiter. Ist die Differenz der beiden entsprechend, tritt die IF-Bedingung ein und die _1er Zeit wird wieder synchronisiert (Differenz ist also wieder kleiner).

    ... innovativen Timern ...
    "Innovativ" sind sie nicht. Ich komme derzeit eben besser damit zurecht.

    Nochmals danke und Gruß.
    Björn, als TIA-Anfänger noch demütiger geworden
    Mir fällt kein schlauer Spruch ein ...

  5. #4
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    13,567
    Danke
    1,091
    Erhielt 4,006 Danke für 3,238 Beiträge

    Default

    Quote Originally Posted by row-k View Post
    Schade, daran hatte ich nicht gedacht. Ich brauche sie aber nur für kurze Zeitdauern und da geht's ...
    Es geht bei Dir am Schreibtisch solange Du Lust zum Testen hast

    Das Problem ist nicht, ob man lange oder kurze Zeiten messen will, sondern wie lange die SPS-CPU ohne Ausschalten läuft.
    Beispiel: Wenn die SPS nicht ausgeschaltet wird und am 25. (oder 50. oder 75. ...) Tag nach Einschalten wird 10 Sekunden vor dem TIME_TCK-Überlauf ein TIME_TCK-basierender Timer gestartet der 30 Sekunden laufen soll, dann wird der nie zur Endzeit (AktuelleZeit - StartZeitpunkt >= 30s) kommen, weil 20 Sekunden vor Ende der TIME_TCK wieder auf 0 springt.

    Aber sei nicht betrübt. Du bist in guter Gesellschaft. Das Problem haben auch schon Siemens-Programmierer nicht beachtet ...

    Für die S7-1200 (und S7-1500) hat man übrigens eine ähnliche Stolperfalle eingebaut. Da hat man die tolle RUNTIME()-Funktion neu eingeführt, die ebenfalls regelmäßig überläuft, doch anstatt klip und klar zu dokumentieren was man da zusammengefrickelt hat, wird einfach in der Dokumentation geschrieben, daß man die "bis zu einmal pro Minute" kommenden Überläufe und dadurch resultierenden negativen Zeitdifferenzen einfach ignorieren "kann" (soll) - was aber keine Lösung ist. Und weil es so schlampig realisiert und dokumentiert ist, verhalten sich S7-1200-PLCSIM und echte S7-1200 da auch noch unterschiedlich, was den Zeitpunkt des Überlaufs betrifft ...

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. Folgende 3 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    DeltaMikeAir (16.05.2019),RONIN (16.05.2019),row-k (15.05.2019)

  7. #5
    Join Date
    23.07.2009
    Location
    Österreich
    Posts
    2,459
    Danke
    490
    Erhielt 733 Danke für 554 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke PN/DP. Der Sache mit dem Runtime war ich mir noch gar nicht bewusst...
    Quote Originally Posted by Hilfe zu RUNTIME
    Die Anweisung "Laufzeitmessung" verwendet einen internen hochfrequenten Zähler um die Zeit zu berechnen. Wenn der Zähler überläuft, gibt die Anweisung Werte <= 0.0 zurück. Dies kann für S7-1200-CPUs mit Firmware Stand <V4.2 bis zu einmal pro Minute vorkommen. Diese Runtimewerte sind zu ignorieren.
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

Similar Threads

  1. Eure Meinung zum Einstieg in Codesys
    By Gerold in forum CODESYS und IEC61131
    Replies: 19
    Last Post: 13.05.2014, 09:09
  2. Störung im Rückführkreis - Eure Meinung
    By holgermaik in forum Maschinensicherheit - Normen und Richtlinien
    Replies: 11
    Last Post: 26.01.2012, 22:44
  3. Eure Meinung/Eindrücke
    By Golden Egg in forum Stammtisch
    Replies: 10
    Last Post: 10.04.2010, 10:00
  4. Replies: 10
    Last Post: 04.08.2006, 12:01
  5. Bitte um Eure Meinung zu meiner Vorgehensweise.
    By Tigerkroete in forum Elektronik
    Replies: 2
    Last Post: 16.05.2006, 09:12

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •