Step 7 Einschaltverzögerung einen Wert vorgeben

REAL

Level-1
Beiträge
14
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle,

der Maurer hat mal wieder ein Problem und dich hoffe ihr könnt mir wie schon bei den Antrieben wieder helfen.


Ich würde gerne einer Eischaltverzögerung einen variablen Wert am Eingang TW vorgeben. Am liebsten wäre es mir wenn ich den Zeitwert als REAL Wert vorgeben könnte.
Leider habe ich jetzt vom programmieren nicht all zu viel Ahnung zumindest bis jetzt. Ich habe schon in einem DB eine Variable des Typ REAL angelegt und an den Eingang TW der Einschaltverzögerung verschalten wollen leider
ohne Erfolg:sad:. Hat mir vielleicht jemand einen Tipp wie ich das realisieren muss. Ich habe im Augenblick noch kein Panel und muss die Werte von Hand in den DB eintragen, dies nur als Info. Super wäre wenn ich eine Einschaltverzögerung von bis zu 10 Stunden eintragen könnte.


Grüße


Flo
 
Zuerst schaust du dir das hier an: Wie kann ich Zeitwerte für Timer variabel eingeben?

Da ist auch ein Baustein dabe, der erwartet die Zeit als INT und eine Zeiteinheit, z.Bsp. für 100ms.

Wenn du die Zeit als Int in 100ms Zeiteinheiten angeben willst, wäre das für 4 Sekunden also 40, denn 40 Mal 100ms-Einheiten ergibt 4 Sekunden.
Nun kannst du Real 3.5 Sekuden vorgeben. Um das an den baustein zu bekommen mußt du die Realzahl mit 10 multiplizieren und anschließend in eine Int wandeln.
Also.

L #MyReal
L 10.0
*R
TRUNC //(Wandlen in Ganzzahl durch Abschneiden der Zahlen hinter dem Komma)
T MyINT //Hier steht nun eine 35

Diese 35 dann wandeln wie im FAQ-Beitrag beschrieben.

ABER

Ein Hardwaretimer ist so für 10h nicht geeignet.

Auflösung Bereich
0,01 Sekunde 10MS bis 9S_990MS
0,1 Sekunde 100MS bis 1M_39S_900MS
1 Sekunde 1S bis 16M_39S
10 Sekunden 10S bis 2H_46M_30S

Du Solltest dir also mal in der IEC-Library die Timer TON und TOFF ansehen (SFB4+5).

Diese erwarten am Eingang PT eine Zeit in ms.

Also gibst du vor:

L MyReal //10.0 für 10 stunden
L 60.0
*R //Umrechnung in Minuten
L 60.0
*R //Umrechnung in Sekunden
L 1000.0
*R //Umrechnung in ms
Trunc //in DINT wandeln
T MyTime //Variable vom Format #Time

Du kannst natürlich auch gleich mit 3600000.0 multiplizieren.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ralle,

wo finde ich den in der IEC-Library die Timer TON und TOFF?
Wenn ich die dann vielleicht mal finde (evtl. brauch ich ja eine Brille), dann muss ich nur noch die kleine Umrechnung machen und das war es dann schon?
 
ich habe jetzt den SFB4 in meinen FC eingefügt und den IDB dazu angelegt. Die Umrechnung mache ich jetzt direkt mit einem MUL_R Baustein, indem ich den REAL Wert mit 3600000.0 multipliziere.
Das Ergebnis lege ich in einer Variable des Typ Time in einem DB ab. Jetzt habe ich das abgelegt Ergebnis an den Eingang PT des SFB4 Timer verschaltet. So weit scheint auch alles zu passen, wenn ich eine Stunde eingebe, sehe ich an dem PT Eingang 3600000, also die Stunde umgerechnet in ms. Was ist jetzt aber wenn ich 30 Minuten eingeben will, muss ich das dann so als REAL Wert schreiben 0.30? Wäre dann die Schreibweise für 1 Stunde 15 Minuten so 1.15?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein ...
30 Minuten sind 0,5 Stunden und 1Std. 15 Minuten sind 1,25 Stunden ...
Wenn du das aber so eingeben möchtest, wie von dir angedeutet, dann läßt sich das natürlich auch wieder passend umrechnen ...

Gruß
Larry
 
30 min ist in REAL 0.5 Stunde und 1st 15 min ist 1.25 stunde in real. Besser ist ein DB an zulegen mit Timer werte, man kan die werte is panel dan umrechen nach sec oder minten oder stunden.
 
die Eingabe sollte so sein, das man Stunden und Minuten eingeben kann. Kann das mir jemand bitte erklären, wie ich das als Hobby SPS Programmierer realisieren kann?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In Timer format konte Sie das direkt in DB eingeben z.b. Sie wollen 1 stunde und 23 minute eingeben dan ist die eintrag in DB T#1h23m und 1.234sec ist T#1s234ms , aber wen Sie später ein panel braucht musten sie ein variable haben mit die stunden und eine mit die minuten und diese 2 dan umrechne nach ms und die 2 addieren fur die Timer wert.
 
Man könnte evtl. das Date_and_Time - Format nutzen.
Im DB eine Variable vom Typ Date_and_Time anlegen.
Im Panel ein EA-Feld mit dieser Variablen, Anzeige nur Uhrzeit!

Die Variable im DB kann man mit einem Baustein aus der IEC-Library in Datum und Uhrzeit zerlegen. Diese Uhrzeit dann an den Timer.
 
Dem SFB4 Timer kann ich jetzt den gewünschte Zeitwert in Stunden und Minuten vorgeben das passt auch alles soweit. Leider gibt dieser Timer aber nicht die Zeit aus wie lange er noch läuft sondern wie lange er schon läuft. Diese Ausgabe habe ich jetzt bereits wieder in Stunden und Minuten umgerechnet das passt auch noch alles. Jetzt würde ich aber gerne die Zeit ausgeben wie lange der Timer noch läuft und daran scheine ich zu scheitern. Ich wollt jetzt ganz schlau einfach die aktuellen Zeitwerte von den eingegebenen Abziehen und fertig, leider kommt da aber nicht das gewünschte heraus. Weil meine Umrechnung gibt mir ja erst nach 60 Minuten eine Stunde aus und somit kann meine Berechnung schon nicht mehr stimmen den wenn ich vier Stunden vorgebe, dann habe ich ja schon nach einer Minute keine vier Stunden mehr. Bei meiner Berechnung habe ich das aber bis 60 Minuten abgelaufenen sind. Ich hätte es gerne so, dass wenn ich vier Stunden eingeben, mir die Restlaufzeit dann zuerst als vier Stunden, null Minuten ausgegeben wird und nach einer Minute dann als drei Stunden, 59 Minuten und dann immer so weiter bis null Stunden, null Minuten.

Hat jemand eine Idee oder Tipp für mich wie ich das machen/ programmieren muss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
An dieser Stelle wäre dein bisheriger Coe schon ganz interessant.
Aber davon mal unabhängig :
Die SFB4 bekommt als Vorgabe einen Millisekunden-Wert und als Ergebnis bekommst du auch einen Millisekunden-Wert.
Die beiden subtrahierst du voneinander und rechnest dann die Differenz in Stunden und Minuten um.

Aber zu der anderen Sache noch :
Wie realisierst du denn jetzt deine Zeit-Vorgaben-Eingabe ?
Wie gibst du z.B. 1 Std. 45 Minuten ein ?

Gruß
Larry
 
Kann ich nicht nachvollziehen.
Wenn du mit dem Timeformat arbeitest geht das hanz einfach. Du kannst so die Zeiten direkt am Panel eingeben und anzeigen. (wie schon geschienen, fürs Panel in Daten_Time zerlegen und zum anzeigen in eine solche Variable hineinschreiben. Am Panel an der Anzeige kann man ausählen, dass man nur die Zeit anzeigen möchte.


TimeTest.jpg

Wenn du mit getrennten Variablen für Minuten und Stunden arbeitest, dann rechne doch alles in Minuten (oder Sekunden) um, zeihe es voneinander ab und dann trennst du es wieder.
Zum Trennen siehe Operator MOD, der läßt sich da gut verwenden.!
 
Dem SFB4 Timer kann ich jetzt den gewünschte Zeitwert in Stunden und Minuten vorgeben das passt auch alles soweit. Leider gibt dieser Timer aber nicht die Zeit aus wie lange er noch läuft sondern wie lange er schon läuft. Diese Ausgabe habe ich jetzt bereits wieder in Stunden und Minuten umgerechnet das passt auch noch alles. Jetzt würde ich aber gerne die Zeit ausgeben wie lange der Timer noch läuft und daran scheine ich zu scheitern. Ich wollt jetzt ganz schlau einfach die aktuellen Zeitwerte von den eingegebenen Abziehen und fertig, leider kommt da aber nicht das gewünschte heraus. Weil meine Umrechnung gibt mir ja erst nach 60 Minuten eine Stunde aus und somit kann meine Berechnung schon nicht mehr stimmen den wenn ich vier Stunden vorgebe, dann habe ich ja schon nach einer Minute keine vier Stunden mehr. Bei meiner Berechnung habe ich das aber bis 60 Minuten abgelaufenen sind. Ich hätte es gerne so, dass wenn ich vier Stunden eingeben, mir die Restlaufzeit dann zuerst als vier Stunden, null Minuten ausgegeben wird und nach einer Minute dann als drei Stunden, 59 Minuten und dann immer so weiter bis null Stunden, null Minuten.

Hier ein printscreen wie du das konte berechenen:
TimerRestTimeST_Min.JPG
 

Anhänge

  • Timer_DB15.JPG
    Timer_DB15.JPG
    41,5 KB · Aufrufe: 6
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank euch allen für eure Hilfe und Unterstützung.
Ich habe jetzt alles so programmiert dank eurer Hilfe das alles so funktioniert wie ich mir das vorgestellt hatte.
Auch ein Maurer kann mit Unterstützung von so freundlichen Menschen wie euch und Einsatz von sich selbst etwas erreichen beim programmieren.

Vielen Dank nochmals an Alle wo mich unterstützt haben!
 
Zurück
Oben