Zeit in OP3 darstellen

MEMO - Matthias

Level-1
Beiträge
44
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Mhhh, hab ne Weile im Forum gesucht und nichts dazu gefunden. Und das obwohl ich glaube das es bestimmt bei mehreren vorkommen sollte...

Ich habe in meinem Prog. einen Zeitbaustein TON, der im Ausgang die bereits verstrichene Zeit im Format TIME ausgibt. Dies musste ich tun da mir die S5T von MAX knapp unter 3 Stunden nicht reichte.
Die TIME- Zeit ist eine Sperrfrist für den Wiederanlauf die ich nun auf mein OP3 anzeigen möchte. Nur leider kann ich nicht direkt das Format einlesen in ProTool. Da gibt es in dieser Richtung nur S5T.

Kann wer helfen ? Würde mich sehr freuen.
 
Hallo Matthias.

Ich glaube am Ausgang des TON wird die Restzeit angezeigt. Aber das kann man ja rechnerisch umwandeln.
Ich habe mal bei einem Projejt die Zeit in ein Dint umgewandelt durch 1000 geteilt und hatte dann die Zeit in sec. und konnte sie dann problemlos darstellen. Das war allerdinges bei InTouch. Ob das bei einem OP auch geht weiss ich nicht. Ich denke aber das es einen Versuch wert wäre.

Grüsse aus dem Lipperland

Axel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

na werd mal probieren die Time in DINT zu wandeln und durch 1000 zu teilen.
Wie gehts dann weiter ?
Aus den Sekunden die Stunden und Minuten berechnen und einzeln als Werte übergeben ?

Mfg Matthias
 
Die Zeitangaben bei TON erfolgen in ms. Bei einem Faktor 1000 bekommst Du das in Sekunden.
Um das dann natürlich in Stunden/Minuten umzuwandeln sind weitere Berechnungen notwenig. Ich glaube da gibt es einen fertigen Baustein für. Musst Du mal entweder hier im Forum oder beim Simaticsupport nachfragen.

Grüsse
 
müsstes du doch über umrechen darstellen können.

das müsstes du ja über umrechnung darstellen lassen können!

wenn 100 1 sekunde entspricht dann enspricht ja 3600000 einer stunde!

dann kannst du ja eine umrechnung eingeben!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das ist schon klar... aber er möchte die Zeit ja in Stunden/Minuten/Sekunden dargestellt haben.... Bei meinen Anlagen brauche ich immer nur Sekunden... ist halt ein schnelles Maschinchen :)
 
müsste doch auch gehen...

wenn du eine variable nimmst und dir dort die stunden über umrechen eintragen läst.

die nächste variable berchnest du die gesammte minutenanzahl

und wieder der nächsten die sekundenanzahl.

nun erzezeugst du nochmals eine variable in die du nun stunden * 60 eintragen lässt die nen wir z.b. STUNDEN_IN_MINUTEN

nun noch eine erzeugen in die berechnen wir verstruchen minuten - stunden_in_minuten, und schon haben wir die minutenanzahl.

geht das??
probieren...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Haben Fertig !!!

Hall,

Dank eurer Hilfe habe ich den richtigen Ansatz gefunden und das Projekt abgeschlossen.
Habs so lösen können:

Ausgang am TON ist Zeit in ms (DINT)
Wert / 1000 teilen entspr. Gesamtzeit in Ganzen Sekunden ->
umwandel in REAL
Gesamtsekunden / 3600 teilen und nach unten abrunden (RND-) --> Ganze Stunden
Ergebnis mit 3600 multiplizieren und von Gesamtsekunden abziehen
Ergebnis / 60 teilen und nach unten abrunden (RND-) --> Gesamtminuten
Ergebnis mit 60 multiplizieren und von den nach Stundenabzug übrigen Sekunden abziehen --> Ganze Sekunden
Nun muss man die Zwischenergebnisse von Ganzen Stunden, Minuten und Sekunden jeweils in DINT wandeln.
Die dann entstehenden neuen Werte sind jeweils Direkt ins OP zu übernehmen.
Beachte: man sollte noch eine Abfrage einbauen die verhindert dass man über 99Std, 59Min, 59 Sek berechnen kann - wenn doch notwendig muss das Prog. noch um die Berechnung ganzer Tage ergänzt werden.
Wer Bedarf hat kann auch den Quelltext haben...

Vielen Dank, Matthias
 
Hallo,

mein Senf dazu:
-wozu die Wandlung nach Real, es gibt doch extra für die Division ganzer Zahlen die Befehle DIV und MOD deren Verwendung auch einige weitere Operationen einsparen würde (ganzzahlige Operation sind viel schneller, wegen nur schieb nach links bzw. rechts, das können die blöden Computer echt gut :lol: )
-für min und sek sollte in der Regel der Datentyp Byte ausreichen
-warum soll es nicht mehr als 99 Stunden geben dürfen? Wenn schon Tage mit berechnet werden sollen, dann macht das ja schon ab 24h Sinn, wenn nicht kann es auch 9999 Stunden geben.

Ich hab nämlich zufällig gerade eine ähnliche Aufgabe gehabt, und es gibt noch Steuerungen, da sind Speicherplatz und Zykluszeit echt Mangelware....


Frohes Schaffen, Peter
 
Offene Fragen

Hallo Peter,

bin nicht der absolte Spezi, denke aber schon ein bischen fit zu sein.
Also, die Umwandlung nach Real habe ich gemacht damit ich auch ungerade Werte berechnen kann (mit Kommstelle ) und diese dann gezielt abrunde. Bei einer Div von Ganzzahlen gibt es keinen Rest, es wird immer gerundet, und zwar nach oben oder unten. Somit können 59 Sek schnell zur ganzen Minute verkommen. Oder habe ich einen Denkfehler.
59 sek / 60 = 0,98333 entspr. rund 1 ODER ???
Anders bei REAL und RND-
59 sek / 60 = 0,98333 entspr. abgerundet 0, der Rest sind dann die übrigen Sekunden.
Schließlich möchte ich die Stunden, Minuten und Sekunden extra aufführen
Beispiel:

80 Stunden 48 Minuten 39 Sekunden

Der Hinweis mit 99 Stunden gilt nur bei mir da ich 2 Stellen für jede Anzeige habe, besser wäre wie du sagst das Prog. auf 24 h und dann mit Anzeige der Tage aufzubereiten, also

3 Tage 23 Stunden ........

Zu den Punkten "Byte würde reichen" etc. hast du sicher recht, Zykluszeit etc. zu optimieren ist aber nicht das Thema gewesen, es ging um einen Lösungsansatz.
Sicher bist du auch ein reiner AWL Schreiber weil sich das gehört für einen guten Programmierer, auch wenns manchmal schwerfällt an den u.U. leichteren FUP Boxen vorbeizuschauen.
PS: Macht aber nix, man kann Sie später in AWL wandeln und die NOP Operationen entfernen, dann merkts keiner mehr........


Gruß Matthias
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Bei einer Div von Ganzzahlen gibt es keinen Rest, es wird immer gerundet, und zwar nach oben oder unten. Somit können 59 Sek schnell zur ganzen Minute verkommen. Oder habe ich einen Denkfehler.
59 sek / 60 = 0,98333 entspr. rund 1 ODER ???
Anders bei REAL und RND-
59 sek / 60 = 0,98333 entspr. abgerundet 0, der Rest sind dann die übrigen Sekunden.

Deshalb auch tritt DIV oft zusammen mit seinem Kumpel MOD auf:

  • 59 DIV 60 = 0
    59 MOD 60 = 59
bzw:
  • (* Wandlung Sekunden in min:sek *)
    90 DIV 60 = 1 (* Minutenwert *)
    90 MOD 60 = 30 (* Sekundenwert *)

Viel Spaß Peter
 
Zurück
Oben