TIA HMI TIA 5.1 - ablaufende Zeit in E/A-Feld

W@stl

Level-2
Beiträge
65
Reaktionspunkte
7
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle!
ich wollte eine ablaufende Zeit in einem E/A-Feld anzeigen lassen.

ich habe (in FUP) die vorgegebene Zeit mit der bereits abgelaufenen Zeit eines Timers mit 'T-SUB' (convertiert) in ein Time_of_Day geladen.
somit habe ich eine ablaufende Zeit um diese in einem E/A Feld als Uhrzeit-Wert anzeigen zu lassen.

das funktioniert auch soweit. jetzt kommt das große aber...
wenn ich die Sprache nach englisch wechsle, wird die Uhrzeit als 12h-zeit angezeigt... mit den Rändern des E/A-Feldes konnte ich das AM/PM ausgeblenden.

mein Problem ist jetzt folgendes: wenn die Zeit kleiner einer Stunde ist, werden mir 12h und dahinter die ablaufende Zeit angezeigt. Bsp.: 1:21:35 wenn kleiner 1h: 12:21:35
seltsam ist, dass in der Simulation alles korrekt angezeigt wird.

gibt es vielleicht irgendeine Einstellung am HMI oder im TIA, die das 12h Format deaktiviert.
oder hat jemand eine andere idee, das so darzustellen?

vielen Dank schon mal für eure Infos.
mfg Wastl
 
Eine abgelaufene Zeit ist doch eine Zeitdifferenz (Typ TIME) und kein Zeitpunkt (Typ Time_of_day).
Oder möchtest du den Zeitpunkt darstellen an der der Timer abläuft?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus Thomas,
danke für die rasche Antwort!
eigentlich ist es eine Zeitdifferenz, ja.
aber ich möchte diese getrennt als h:min:sec anzeigen lassen und nicht als h,xx oder als minute über 60min. (ich hoffe du weißt was ich meine.) :D
und dafür hat sich das Uhrzeit anzeigeformat eig. ganz gut gemacht...
mfg wastl
 
Ich verstehe leider das Beispiel nicht so ganz. 01:21:35 ist doch nicht kleiner als 1h?
Wo tritt das Problem auf? Nur im HMI?
Kannst Du die Wandlung in das gewünschte AnzeigeFormat in der PLC durchführen und in einem String ablegen, der dann im HMI so angezeigt wie er ist und nicht mehr gewandelt wird?
Hast Du das Problem evtl. nur, wenn Du AM/PM an den Rändern des E/A-Feldes ausblendest?
 
Hallo Heinileini,

Ich verstehe leider das Beispiel nicht so ganz. 01:21:35 ist doch nicht kleiner als 1h?
richtig, ja. aber wenn ich zb. nur 21 min habe, dann wird mir 12:21:35 angezeigt, und nicht 00:21:35.

Wo tritt das Problem auf? Nur im HMI?
es wird nur am HMI und nur bei Umschaltung auf englisch falsch angezeigt. in TIA und im WinCC runtime wird alles so angezeigt wie gewollt.

Hast Du das Problem evtl. nur, wenn Du AM/PM an den Rändern des E/A-Feldes ausblendest?
nein das besteht immer, auch ohne Ränder.

mfg wastl
 
.. ich habe (in FUP) die vorgegebene Zeit mit der bereits abgelaufenen Zeit eines Timers mit 'T-SUB' (convertiert) in ein Time_of_Day geladen. ..
Ich glaube, hier liegt der Hund begraben. Versuche das mal ohne 'T-SUB' zu lösen. Betrachte die versch. Formate als ein DInt [ms] und rechne damit. Was 'T-SUB' genau macht, habe ich mir jetzt aber nicht angesehen.


.. bzw. gibt es auch noch 'T_DIFF' und 'T_CONV' ...


Alles Quatsch, sorry. Ist ja nur ein Anzeige-Problem.
 
Zuletzt bearbeitet:
Lass Deine Zeitdifferenz als DTL ausgeben oder wandle sie dahin um.
DTL ist ein Struct, in dem Du auf Stunde, Minute und Sekunde auch als Einzelvariablen zugreifen kannst.

Im HMI erstellst Du ein Textfeld.
Bei dessen Text wählst Du mit einem Rechtsklick "Parameterfeld einfügen" und in dem sich öffnenden PopUp als erstes die Stunden.
Dann einen Doppelpunkt gefolgt vom nächsten Parameterfeld mit den Minuten.
Abschließend Doppelpunkt und Parameterfeld Sekunden.
(Bei Bedarf wären auch die Nanosekunden noch verfügbar.)

Dieses Textfeld unterliegt dann nicht den länderspezifischen Einstellungen der Uhrzeit.


PS:
Hier ein ähnliches Beispiel mit Uhrzeit ohne Sekunden:
attachment.php
 

Anhänge

  • Zeitfeld.jpg
    Zeitfeld.jpg
    22,4 KB · Aufrufe: 145
Zuletzt bearbeitet:
Ich würde den Ausgabetext in der SPS als String formatieren und den String am Panel anzeigen. Dann gehen auch Ausgaben wie "1:09:03" (Zahl immer zweistellig, ggf. mit Vornull) und spezielle Ausgaben wie "Beendet".
Zahlen immer zweistellig ggf. mit Vornull: Man kann die verwendeten Dezimalwerte (z.B. DTL-Bestandteile Minuten, Sekunden) in BCD wandeln, im Bild dann 3 Ausgabefelder für 3 Variablen nebeneinander anordnen und hexadezimal ausgeben.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann gehen auch Ausgaben wie "1:09:03" (Zahl immer zweistellig, ggf. mit Vornull) und spezielle Ausgaben wie "Beendet".
Zahlen immer zweistellig ggf. mit Vornull: Man kann die verwendeten Dezimalwerte (z.B. DTL-Bestandteile Minuten, Sekunden) in BCD wandeln, im Bild dann 3 Ausgabefelder für 3 Variablen nebeneinander anordnen und hexadezimal ausgeben.
Die Vornullen gehen bei der Textfeldvariante durch das gewählte Zahlenformat der Parameterfelder ebenfalls:

attachment.php
 

Anhänge

  • Zeitfeld 2.jpg
    Zeitfeld 2.jpg
    43,1 KB · Aufrufe: 132
Hallo an alle!
Danke erst mal für die vielen Antworten!

@Dagobert:
die Berechnung passt. T_DIFF Berechntet ein Day_of_time. für eine Berechnung mit einer time hab ich deswegen T-SUB hergenommen.

an die Ländereinstellung habe ich auch erst gedacht, leider hat das im Runtime nichts verändert...


@ hucki:
werde ich mal versuchen, leider habe ich nicht mehr viel Zeit, des wegen hab ich im Moment die quick and dirty Lösung hergenommen:
wenn ich mit dem Timer unter einer Stunde bin, dann blende ich ein Textfeld mit einer 00 über das Eingabefeld ein.
somit ist die 12 überdeckt. nicht schön, aber geht.
7

falls ich noch die Zeit habe, dann versuch ich mal dein Tipp! das schaut auf jeden fall professioneller aus... :ROFLMAO:
wenn ich nicht mehr dazu komme, dann weiß ich mehr fürs nächste mal! und das wird sicher kommen!

Danke an alle derweil!
43


mfg Wastl

edit: ich hab die 2. Seite übersehen... sorry PN/DP :lol:
aber 3 ausgabefelder wollte ich dem Umstand halber eben vermeiden. des halb das Uhrzeitvormat...
 
Zuletzt bearbeitet:
Ich würde den Ausgabetext in der SPS als String formatieren und den String am Panel anzeigen.
Für diese Variante hatte ich mich in der Vergangenheit auch mal entschieden und mir diesen FC zum Wandeln erstellt:
Code:
FUNCTION "fcTimeToString" : String
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : 'Hucki'
VERSION : 0.1

   VAR_INPUT 
      inTime : Time;
   END_VAR

   VAR_TEMP 
      Sec : DInt;
      Min : DInt;
      Hour : DInt;
   END_VAR


BEGIN

    REGION // Zeitaufteilung
        
        #Sec := #inTime / 1000;             // ganze Sekunden
        #Hour := #Sec / 3600;               // enthaltene volle Stunden
        #Sec := #Sec - #Hour * 3600;        // volle Stunden von den Sekunden abziehen
        #Min := #Sec / 60;                  // enthaltene volle Minuten
        #Sec := #Sec - #Min * 60;           // volle Minuten von den Sekunden abziehen
        
    END_REGION
    
    REGION // Stringübergabe
        
        #"FC TimeToString" := CONCAT(IN1 := RIGHT(IN := DINT_TO_STRING(#Hour / 10), L := 1),
                                     IN2 := RIGHT(IN := DINT_TO_STRING(#Hour),      L := 1),
                                     IN3 := ':',
                                     IN4 := RIGHT(IN := DINT_TO_STRING(#Min  / 10), L := 1),
                                     IN5 := RIGHT(IN := DINT_TO_STRING(#Min),       L := 1),
                                     IN6 := ':',
                                     IN7 := RIGHT(IN := DINT_TO_STRING(#Sec  / 10), L := 1),
                                     IN8 := RIGHT(IN := DINT_TO_STRING(#Sec),       L := 1) );
        
    END_REGION

END_FUNCTION



Lass Deine Zeitdifferenz als DTL ausgeben oder wandle sie dahin um.
DTL ist ein Struct, in dem Du auf Stunde, Minute und Sekunde auch als Einzelvariablen zugreifen kannst.

Im HMI erstellst Du ein Textfeld.
Bei dessen Text wählst Du mit einem Rechtsklick "Parameterfeld einfügen" und in dem sich öffnenden PopUp als erstes die Stunden.
Dann einen Doppelpunkt gefolgt vom nächsten Parameterfeld mit den Minuten.
Abschließend Doppelpunkt und Parameterfeld Sekunden.
...
Nun wollte ich diesen Vorschlag auch selber umsetzen, da er mir etwas einfacher als obiges Umwandeln erschien.
Aber da hält TIA mal wieder eine unangenehme Überraschung bereit: Man kann zwar von der PLC aus auf die Strukturelemente des DTL zugreifen, nicht aber vom HMI aus.

Das war mir noch nie aufgefallen.
:oops:


Also muss man letzendlich den DTL auch in irgendwas eigenes umwandeln, z.B.:
Code:
TYPE "udtCounter"
VERSION : 0.1

   STRUCT
      Hour : Int;
      Minute : Int;
      Second : Int;
   END_STRUCT;

END_TYPE



FUNCTION "fcTimeToCounter" : "udtCounter"
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : 'Hucki'
VERSION : 0.1

   VAR_INPUT 
      inTime : Time;
   END_VAR

   VAR_TEMP 
      "Counter" {InstructionName := 'DTL'; LibVersion := '1.0'} : DTL;
   END_VAR


BEGIN

    REGION // Zeit wandeln
        
        #Counter := TOD_TO_DTL(TIME_TO_TOD(#inTime));
        
    END_REGION
    
    REGION // Counter übergeben
        
        #"FC TimeToCounter".Hour   := #Counter.HOUR;
        #"FC TimeToCounter".Minute := #Counter.MINUTE;
        #"FC TimeToCounter".Second := #Counter.SECOND;
        
    END_REGION

END_FUNCTION
Somit ist IMHO die Stringvariante doch etwas weniger aufwendig, weil beide eine eigene Wandelfunktion benötigen und das IO-Feld für den String mir etwas einfacher zu erstellen erscheint als das Textfeld mit den 3 (oder sogar mehr) Parameterfeldern.
 
Hallo an alle!
sorry erst mal, dass ich keine Zeit gefunden habe, zu antworten!
Hatte mit dieser Anlage ziemlich viel um die Ohren...

ich habe jetzt die Lösung von Hucki umgesetzt:
Lass Deine Zeitdifferenz als DTL ausgeben oder wandle sie dahin um.
DTL ist ein Struct, in dem Du auf Stunde, Minute und Sekunde auch als Einzelvariablen zugreifen kannst.

Im HMI erstellst Du ein Textfeld.
Bei dessen Text wählst Du mit einem Rechtsklick "Parameterfeld einfügen" und in dem sich öffnenden PopUp als erstes die Stunden.
Dann einen Doppelpunkt gefolgt vom nächsten Parameterfeld mit den Minuten.
Abschließend Doppelpunkt und Parameterfeld Sekunden.
(Bei Bedarf wären auch die Nanosekunden noch verfügbar.)

Dieses Textfeld unterliegt dann nicht den länderspezifischen Einstellungen der Uhrzeit

hat wunderbar funktioniert, Danke nochmal!
die Anderen Lösungen fand ich aber auch nicht schlecht!
wieder was gelernt, würde ich sagen...! :idea:

die Änderungen der länderspezifischen Einstellungen der Uhrzeit hat scheinbar nichts mit den Uhrzeitfeldern zu tun; es hat sich zumindest nichts geändert...

Dann viel spass noch beim tippsln! :sb8:

:ROFLMAO: mfg W@stl![SUB][/SUB]
 
Zurück
Oben