Frage zu TON

Da du ja lernen möchtest
Time ist ein 32bit DWord und sollte auch so behandelt werden. z.B. DWORD_TO_TIME(...
Nicht wie im Test;)
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?
 
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.
 
Zurück
Oben