TIA Time-Variable

Zuviel Werbung?
-> Hier kostenlos registrieren
Versteh ich dich richtig? Du hast als Input zwei Variablen, einmal eine Zahl für den Betrag der Zeit und einmal eine Zahl/String/Auswahl für die Einheit?

Wenn also als Input1 der Wert 5 und als Input2 der Wert 2 ansteht, läuft der Timer 5 Minuten. Wenn Input2 jedoch den Wert 1 hat, läuft der Timer 5 Sekunden?

Das könnte so aussehen (aubauend auf PN/DPs Vorschlag):
Code:
Input1 : Betrag(INT);
Input2 : Einheit(INT);
Input3 : StartTimer(BOOL);

const: Sekunden = 1; Minuten = 2; Stunden = 3;

case Einheit of:
Sekunden: MyTime := 1000*Betrag;
Minuten: MyTime := 1000*60*Betrag;
Stunden: MyTime := 1000*60*60*BEtrag;
Else: return Error;

TON(IN:=StartTimer; PT:=MyTime);

Im Endeffekt nutzt du aus, dass du einem Timer über den Input PT eine variable Zeitdauer in ms vorgeben kannst.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Versteh ich dich richtig? Du hast als Input zwei Variablen, einmal eine Zahl für den Betrag der Zeit und einmal eine Zahl/String/Auswahl für die Einheit?

Wenn also als Input1 der Wert 5 und als Input2 der Wert 2 ansteht, läuft der Timer 5 Minuten. Wenn Input2 jedoch den Wert 1 hat, läuft der Timer 5 Sekunden?
so soll es sein :D
 
IF Input2 = 1 THEN MyTime := Input1 * 1000; // 1 ---> Sekunden
ELSIF Input2 = 2 THEN MyTime := Input1 * 60 * 1000; // 2 ---> Minuten

oder CASE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In pph_zeitbasis muss ja stehen ob es Sekunden, Minuten oder Stunden sind (1, 2 oder 3)

Daraus kannst du dir ja Bedingungen basteln
ja, den Gedanken hatte ich auch... aber wie verschalte ich dann dementsprechend pPH_Wartezeit? da kommt ja dann nach der Vorgabe ein REAL rein...
Ich muss ja dann je nach erfüllter Bedingung trotzdem dem Timer sagen, was er ist..
 
Ich muss ja dann je nach erfüllter Bedingung trotzdem dem Timer sagen, was er ist..
Die (normalen) Timer wird das nicht die Bohne interessieren was der Sollwert sein soll.
Die normalen IEC-Timer (TON, TOF, ...) erwarten einen Zeitwert von einer Variable im Datenformat TIME. Das ist eine 32bit Ganzzahl (im Prinzip ein DINT) in Millisekunden (=> Zeitbasis).

Du müsstest bei Verwendung eines IEC-Timers in "S010 Init Timer" deine Zeitangabe in Bezug auf die Zeitbasis in Millisekunden umrechnen (also auf eine einheitliche Zeitbasis bringen), das Ergebnis in eine TIME-Variable packen & damit den Timer starten.
Was "pPH_Wartezeit" als REAL soll? Keine Ahnung....
Ich kenne kein Zeitelement, dass eine Gleitpunktzahl direkt verarbeiten kann.

Int oder Reals für Timer kenne ich nur aus irgendwelchen selbstgebauten Timern, betrifft aber meistens alten S5-Code oder "Speziallösungen".
Aber da müsstest du deine Eingabe auch auf eine einheitliche Zeitbasis bringen & damit den Timer füttern.

Oder sollst du den Timer-Baustein programmieren & "pPH_Wartezeit" und "pPH_Zeitbasis" sind Formalparameter für den geforderten Baustein?
Dann müsstest du trotzdem die Umrechnung der Soll-Wartezeit auf eine einheitliche Zeitbasis im Timer Baustein erledigen, damit die eigentliche Timer-Logik weiß welche zeitliche Größe der Zahlenwert in der Sollwert-Variable darstellt.
 
Das ist recht einfach alles in Time Format umrechnen (T#ms).Habe das gerade gemacht.
Real habe ich nach Dint gewandelt multipliziert und dann wieder nach Time.
Gibt halt sehr grosse Zahlen.
 
Zurück
Oben