Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Was spricht aber dagegen, seinen vom Benutzer eingegebenen INT in TIME zu wandeln über INT_TO_TIME?
Natürlich kann ich auch INT_TO_DWORD und DWORD_TO_TIME machen, aber das sollte ja die Konvertierung INT_TO_TIME erledigen.
Ich verstehe gerade Deine Bedenken nicht. Oder meinst Du eine Code-Stelle, die ich nicht gesehen habe?
Ich habe keine bedenken. Noop will ja lernen. Warum nicht etwas gleich richtig lernen.
Was passiert wenn der Bediener nicht 30s sondern 300s oder 3000s eingeben möchte?
In vielen Fachbüchern werden Datenformate behandelt, allerdings wird die richtige Auswahl nicht behandelt.
Für alle Neueinsteiger möchte ich dies mal am Beispiel des Ton machen.
Das Zielformat der Zeit ist eine Time Variable (32bit DWord in Millisekunden), die Eingabe soll aber benutzerfreundlich in Sekunden erfolgen.
Um den vollen Zeitumfang zu nutzen ist eine Zahl mit 32bit notwendig --> DINT
Eine Eingabe von negativen Zahlen ist nicht möglich --> UDINT
Ein "sparen" von Speicherplatz ist bei modernen Steuerungen m.M.n heute nicht mehr nötig.
Die Verwendung von Konstanten als fest eingecodete Zahl halte ich persöhnlich für ungünstig. Besonders wenn sie mehrfach verwendet werden.
Code:
VAR
udiEingabe : UDINT; // Eingabe in Sekunden
dwZeitvorgabe : DWORD; // Zeitvorgabe in ms
udiEingabe_ms : UDINT; // Eingabe umgerechnet in Millisekunden
// Variablen für TON
fbTonTest : Ton;
xStart : BOOL; // Starttrigger Ton
tZeitvorgabe : TIME; // Zeitvorgabe Ton
xTon_Q : BOOL; // Ausgang Ton
tZeit_abgelaufen : TIME; // abgelaufene Zeit des Ton
END_VAR
VAR CONSTANT
udiUmrechnung_s_ms : UDINT := 1000;
END_VAR
Code:
// Eingabe in Millisekunden umrechnen
udiEingabe_ms := udiEingabe * udiUmrechnung_s_ms;
// Zuweisen auf das DWord
dwZeitvorgabe := UDINT_TO_DWORD(udiEingabe_ms);
// Vorgabe in Time wandeln
tZeitvorgabe := DWORD_TO_TIME(dwZeitvorgabe);
// Ton aufrufen
fbTonTest(IN := xStart, PT := tZeitvorgabe, Q => xTon_Q, ET => tZeit_abgelaufen);
Ein schachteln von Anweisungen ist hier sicherlich möglich, aber gerade Anfänger sollten alle Schritte einzeln formulieren.
PS. Ein Typecasten sollte niemals dem Compiler überlassen werden.