Step 7 Millisekunden ind Stunden/Minuten umrechnen

dizzi33

Level-1
Beiträge
31
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

zum Umrechnen meint die Siemens homepage, daß man den Time-in-Ms Baustein FC41 nehmen soll, dort gibt es den aber nur für Tia Step 7 v12,
weiß wer ob es für Step 7 v5.5 auch schon was fertiges gibt?

lg

Dieter
 
Zuletzt bearbeitet:
Ja ... da gibt es tatsächlich schon etwas Fertiges : nennt sich Division.
Die TIME ist eine andere Darstellung eines DINT - du mußt also nur passend dividieren (1 Stunde hat 3600 Sekunden - 1 Sekunde hat 1000 Millisekunden)

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist zu einfach.......ein Baustein in den ich millisek übergebe, und der mir dann einerseits ganze Stunden und restliche Minuten ausspuckt z.b. 12.060.000 ms rein , als 3 Std und 21 min raus,
oder es gibt einen anderen Trick ms ans Panel zu übergeben, und dort in Std und Min sauber anzuzeigen ( mit nachkomma geht es einfach, aber meine Leute wissen dann nicht wieviel 3,7 Std sind,

lg
 
Das ist zu einfach.......
Ja, schon eigentlich... ;)
Ich schließe mich den Worten meines Vorredners an und werfe noch die Worte Ganzzahldivision und Divisionsrest dazu....

es gibt einen anderen Trick ms ans Panel zu übergeben
Es gibt zwar die Lineare Skalierung, mit der kann man zum Beispiel deine ms-Wert und Stunden oder Minuten anzeigen, aber nur als...
x ms = so viele Stunden
x ms = so viele Minuten
Die Lineare Skalierung ist praktisch wenn du, z.B. ein Eingabefeld in der Einheit Minuten hast, und dann direkt auf den Datentyp TIME und eine IEC-Timer gehst.
Oder bei jeglicher anderer Art von Skalierung... Watt auf der SPS, kiloWatt auf der Visu... etc.

Hängt jetzt davon ab welche Visu du hast aber in WinCC (kann TIA eigentlich schon vernünftig mit TOD umgehen?) gibt es meines Wissens nichts mit dem man das gewünschte einfach erreichen kann...
 
Zuletzt bearbeitet:
Ich will jetzt mal nicht mit dem Befehl MOD kommen ;) ... aber ein ganz kleines bißchen sollte es mit dem Rechnen schon gehen ...
Das Ziel deiner Bemügungen könnte dann ja schon ein Baustein sein, der dir das Ergebnis wie von dir gewünscht ausspukt ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für Step7 Classic gibt es auch was fertiges zum Zerlegen in Stunden und Minuten. Da scheint wohl tatsächlich Bedarf zu bestehen ... ;)

Wie kann ein vorhandener Sekundenwert in die benötigten Tage, Stunden, Minuten und Sekunden berechnet werden?

Allerdings benötigt der Baustein Sekunden am Eingang. Du müsstest es also zunächst erstmal schaffen, die Millisekunden in Sekunden umzurechnen. Oder Du änderst den Baustein so, daß er gleich mit TIME (Millisekunden) am Eingang klarkommt. Wenn Du Dir den Baustein genauer ansiehst, dann wird Dir aber vielleicht klar, warum wahre Profis die simple Umrechnung lieber gleich selber programmieren, statt sich solche umständlichen Fremdbausteine ins Projekt zu holen.

Übrigens bringt mich die Forumssuche nach "millisekunden stunden" zu fertigen Formeln für die Umrechnung.

Harald
 
bis jetzt habe ich versucht alles möglichst einfach zu halten und tunlichst vermieden zuviel selbst zu programmieren(insbesonders SCL ist ein spanisches Dorf), aber der siemens baustein wär der komplizierteste teil meiner kompletten Mischanlage ( und das alles , nur um die MInuten zu erhalten).
also: die Stunden krieg ich supereinfach mit stupider skalierung im Panel, für die MInuten bräuchte ich dann nur einen simplen umrechner, der bei z.b. 1,7 Std
( die ich ja durch einfache Division der Millisekunden durch 36000000 erhalte) , den Wert der Nachkommstelle ermittelt. Nach kommastelle * 60, und schon habe ich meine minuten

Der Tip von DN/DP wär glaube ich der richtige, aber da steig ich programmtechnisch aus

aber ich tippsle ja hier rum um was dazuzulernen

lg
 
Klar ist der Baustein den PN/DP vorgeschlagen hat ein wenig komplizierter da er auch die Zeit als String-Zeichenkette ausgibt. Dafür muss man halt die Stunden/Minuten/Sekunden etc. in die einzelnen Ziffern zerlegen in Zeichen wandeln und wieder zusammensetzen...

Aber mal so ne Frage nebenbei?
Mit Stift und Papier kannst du schon aus... z.b.: 120612341ms -> 33h 30min 12s 341ms machen, oder?
Dann müsstest du das doch auf der SPS (Addieren/Dividieren/Multiplizieren) auch schaffen, nicht wahr? :rolleyes:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hoffentlich mischst du keine brisanten Dinge zusammen. :ROFLMAO:
Ehrlich, sieh dir den Befehl MOD an und die Division, mehr braucht es nicht.

Code:
      L     MD  1000                    //Hier steht die Zeit in Millisekunden
      L     1000                        //dann hast du es in Sekunden, denn der Ausgangspunkt sind Millisekunden
      /D    
      T     #Zwischenspeicher           //Zwischenspeichern für später
      L     60                          //da bleiben die Sekunden über
      MOD   
      T     MD  1004                    //Sekunden
      L     #Zwischenspeicher
      L     60
      /D    
      T     #Zwischenspeicher
      L     60
      MOD                               //da bleiben die Minuten
      T     MD  1008                    //Minuten
      L     #Zwischenspeicher
      L     60
      /D    
      L     60
      MOD                               //da bleiben die Stunden
      T     MD  1012                    //Stunden

Das kann man mit In/OUT/Temp in einen kleinen Baustein packen.
 
Zuletzt bearbeitet:
Ja ... da gibt es tatsächlich schon etwas Fertiges : nennt sich Division.
Das ist zu einfach...
:confused:
Wie jetzt? Ist einfach doof oder wie soll man die Aussage verstehen?




Ich will jetzt mal nicht mit dem Befehl MOD kommen
Ehrlich, sieh dir den Befehl MOD an und die Division, mehr braucht es nicht.
...
Das kann man mit In/OUT/Temp in einen kleinen Baustein packen.
Und das bekommt man auch in FUP/KOP hin (auch wenn man dann natürlich noch ggf. zusätzlich eine Typumwandlung per MOVE durchführen muss, wenn man nicht in DINT ausgeben will):

 
Zuletzt bearbeitet:
Hoffentlich mischst du keine brisanten Dinge zusammen.
*ACK*

Ne Jungs, Modulo is für fortgeschrittene.
Fangen wir erst mal mit Grundschulmathe an...
Subtraktion, Multiplikation, Division
Code:
//---------------------------------------------------------------- Stunden
      L     L#120612341                 //Eingangswert
      L     L#3600000
      /D    
      T     #Stunden                    //Stunden

      L     #Stunden                    //Divisionsrest bilden
      L     L#3600000
      *D    
      T     #Hilfwert

      L     L#120612341                 //Divisionsrest bilden
      L     #Hilfwert
      -D    
      T     #DivRest                    //Rest (alles was nicht Stunden sind)

//---------------------------------------------------------------- Minuten
      L     #DivRest                    //Rest (alles was nicht Stunden sind)
      L     L#60000
      /D    
      T     #Minuten                    //Minuten  

      L     #Minuten                    //Divisionsrest bilden
      L     L#60000
      *D    
      T     #Hilfwert                   //Divisionsrest bilden

      L     #DivRest                    //Rest (alles was nicht Stunden/Minuten sind)
      L     #Hilfwert
      -D    
      T     #DivRest


//---------------------------------------------------------------- Sekunden
      L     #DivRest                    //Rest (alles was nicht Stunden/Minuten sind)
      L     L#1000
      /D    
      T     #Sekunden                   //Sekunden

      L     #Sekunden                   //Divisionsrest bilden
      L     L#1000
      *D    
      T     #Hilfwert

      L     #DivRest                    //Divisionsrest bilden
      L     #Hilfwert
      -D    
      T     #DivRest                    //Rest (alles was nicht Stunden/Minuten/Sekunden sind)

//---------------------------------------------------------------- Millisekunden
      L     #DivRest                    //Rest (alles was nicht Stunden/Minuten/Sekunden sind)
      T     #Millisekunden              //Milisekunden
 
Zuviel Werbung?
-> Hier kostenlos registrieren
also Leute, außer dem Ralle versteh mich glaub ich keiner, Millisekunden in sekunden , Minuten , stunden , Tage umrechnen schaff ich gerade noch, mit und ohne Papier, Taschenrechner, SPS etc, nur bei den
Lichtjahren happert es noch, und bei meinem ursprünglichen Problem: wie mache ich aus z.b. 1,7 h ein z.b. Merkerdoppelwort wo 1 ( also 1 Std) und ein anderes MD wo 42 ( also die Minuten) oder anders
ausgedrück die Zahl hinter dem Komma drin steht.

das mit dem mod vom Ralle kapier ich noch nicht, da MOD lt. AWL Doku den Rest einer Divison hergibt, und nicht eine Differenz, und noch viel blöder
wenn icht

L
 
also Leute, außer dem Ralle versteh mich glaub ich keiner, Millisekunden in sekunden , Minuten , stunden , Tage umrechnen schaff ich gerade noch, mit und ohne Papier, Taschenrechner, SPS etc, nur bei den
Lichtjahren happert es noch, und bei meinem ursprünglichen Problem: wie mache ich aus z.b. 1,7 h ein z.b. Merkerdoppelwort wo 1 ( also 1 Std) und ein anderes MD wo 42 ( also die Minuten) oder anders
ausgedrück die Zahl hinter dem Komma drin steht.

das mit dem mod vom Ralle kapier ich noch nicht, da MOD lt. AWL Doku den Rest einer Divison hergibt, und nicht eine Differenz, und noch viel blöder
wenn ich wie von Ralle vorgeschlagen folgendes mache:

L 10000
L 60
T MD 100
mod
T MD 110

dann steht im MD 110 nur 0 (null), obwohl da irgendwas drin stehn sollte

 
und bei meinem ursprünglichen Problem: wie mache ich aus z.b. 1,7 h ein z.b. Merkerdoppelwort wo 1 ( also 1 Std) und ein anderes MD wo 42 ( also die Minuten) oder anders
ausgedrück die Zahl hinter dem Komma drin steht.
smiley_emoticons_doh.gif Aus deiner windigen Beschreibung kann wohl nur Ralle was rauslesen...
Code:
      L     1.700000e+000               //Real 1.7
      TRUNC                             //Ganzzahl 1
      DTR                               //Real 1.0
      T     #Stunden

      L     1.700000e+000
      L     #Stunden
      -R    
      L     6.000000e+001
      *R    
      T     #Minuten                              //Real 42.0
Das ist wahrscheinlich das was du suchst.

MOD kann bei deinem Beispiel (1.7 Gleitpunkt) nicht funktionieren da MOD für Ganzzahlen und nicht für Gleitpunktzahlen ist! Mit MOD würde es so funktionieren....
Code:
      L     1.700000e+000
      L     6.000000e+001               //in Sekunden  (102)
      *R                                //Runden durch abschneiden
      TRUNC                             //Ganzzahl
      T     #HilfswertDINT              //Sekunden als Ganzzahl (102)
      L     #HilfswertDINT
      L     L#60
      /D    
      T     #Stunden                    //Stunden als Ganzzahl
      L     #HilfswertDINT
      L     L#60
      MOD   
      T     #Minuten                    //Divisionsrest (42) entspricht Minuten als Ganzzahl

Alle Beispiele von vorhin funktionieren übrigens wenn man sie mit einem Eingangswert in ms als Ganzzahl (Datentyp: DINT, TIME) füttert.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Anhang anzeigen 26426 Aus deiner windigen Beschreibung kann wohl nur Ralle was rauslesen...
Die ist jetzt erst windig geworden.
Er wollte lt. seinem 2. Post schon Millisekunden vorgeben:
ein Baustein in den ich millisek übergebe, und der mir dann einerseits ganze Stunden und restliche Minuten ausspuckt z.b. 12.060.000 ms rein , als 3 Std und 21 min raus,




also Leute, außer dem Ralle versteh mich glaub ich keiner,
Millisekunden in sekunden , Minuten , stunden , Tage umrechnen schaff ich gerade noch, mit und ohne Papier, Taschenrechner, SPS etc
Offensichtlich nicht, sonst würdest Du verstehen, dass die 3 Posts ab Ralle seinem alle genau das machen. Und zwar Millisekunden in Sekunden, Minuten und Stunden zerlegen.
Wenn Du das sogar im Kopf kannst, zähl' Dir doch die einzelnen Schritte auf und mach es so in der SPS. Kopfrechnen stellt in der Regel immer den einfachsten Weg einer Rechnung dar.



nur bei den Lichtjahren happert es noch
Wird auch schwierig, LJ sind ein Weg! ;)



das mit dem mod vom Ralle kapier ich noch nicht, da MOD lt. AWL Doku den Rest einer Divison hergibt, und nicht eine Differenz,
Wozu die Differenz?
Wenn Du 62 Sekunden im Kopf in Minuten umrechnest, sind das 1 Minute und 2 Sekunden. Richtig?
Und wenn Du jetzt die 62 durch 60 teilst, erhältst Du 1 Rest 2. Und genau diese 2 gibt Dir MOD aus! Den Rest einer ganzzahligen Division.
Und wenn Du anschließend die normale Division 62/60 ausführst, wirst Du feststellen, dass die SPS den Wert automatisch rundet, da es ja eine Ganzzahl ist. Du erhälst also nicht 1,0333 sondern genau 1.
Somit hast Du Deine 1 Minute und 2 Sekunden.

PS: Hast du einen größeren Minutenwert als 59 machst Du das Gleiche wieder. Die Minuten in den Rest (= Minuten innerhalb einer Stunde) und den ganzen Teil (= Stunden) mit einer Division durch 60 zerlegen.
Und genau das machen die Programme.


wenn ich wie von Ralle vorgeschlagen folgendes mache:

L 10000
L 60
T MD 100
mod
T MD 110

dann steht im MD 110 nur 0 (null), obwohl da irgendwas drin stehn sollte
Läuft die CPU? Oder wird das MD110 noch irgendwo anders beschrieben. Da müsste eigentlich 40 in MD110 stehen
 
Zuletzt bearbeitet:
Hat auch ewig gedauert bis ichs kapiert habe...
Dizzi probiert unsere Beispiele mit Gleitpunktzahlen.
Dizzi hat also zusätzlich noch ein Zahlen-Formats-Problem.

Hier steht was er mit den 1,7 meint...

Er nimmt seinen Millisekunden-wert (anscheinend Gleitpunkt) und dividiert ihn durch 3600 000.0 und bekommt z.B.: 1.Z Stunden (Gleitpunkt) raus.
Jetzt wollte er an die 0.7 hinterm Komma ran um diese dann mit 60.0 zu multiplizieren für die Minuten. Anscheinend reichen Stunden und Minuten.

Mit dieser Gleitpunktzahl werden unserer Beispiele nicht hinhauen (außer dieses)
Die Beispiele von vorhin funktionieren wenn man sie mit einem Eingangswert in ms als Ganzzahl (Datentyp: DINT, TIME) füttert.
 
Zuletzt bearbeitet:
Er nimmt seinen Millisekunden-wert (anscheinend Gleitpunkt) und dividiert ihn durch 3600 000.0 und bekommt z.B.: 1.Z Stunden (Gleitpunkt) raus.
Jetzt wollte er an die 0.7 hinterm Komma ran um diese dann mit 60.0 zu multiplizieren für die Minuten. Anscheinend reichen Stunden und Minuten.
Das erhält er durch die Skalierung am HMI. Logisch, wenn er da die ms mit 3.600.000 skaliert. Als Ausgangspunkt hat er aber trotzdem ms.
Und wir werden ihm ja nun wirklich nicht raten, das Pferd von hinten aufzuzäumen, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, mehr werden wir erst erfahren wenn Dizzi uns erleuchtet welches Einheit (ms?) und Datenformat (Real, Dint, Time, Gurke, Salami, etc.) sein Wert hat...
Dann können wir ihm sagen welcher geposteten Codepassagen die richtige ist.
 
also Leute, außer dem Ralle versteh mich glaub ich keiner, Millisekunden in sekunden , Minuten , stunden , Tage umrechnen schaff ich gerade noch, mit und ohne Papier, Taschenrechner, SPS etc, nur bei den
Lichtjahren happert es noch, und bei meinem ursprünglichen Problem: wie mache ich aus z.b. 1,7 h ein z.b. Merkerdoppelwort wo 1 ( also 1 Std) und ein anderes MD wo 42 ( also die Minuten) oder anders
ausgedrück die Zahl hinter dem Komma drin steht.

das mit dem mod vom Ralle kapier ich noch nicht, da MOD lt. AWL Doku den Rest einer Divison hergibt, und nicht eine Differenz, und noch viel blöder
wenn ich wie von Ralle vorgeschlagen folgendes mache:

L 10000
L 60
T MD 100
mod
T MD 110

dann steht im MD 110 nur 0 (null), obwohl da irgendwas drin stehn sollte


Keine Ahnung, was du noch so mit dem MD110 machst.
Wozu schreibst du die 60 denn eigentlich in MW100?

Mein Code ist getestet, der funktioniert mit ms auf jeden Fall.
 
Was hast Du eigentlich für ein Panel? Womit programmierst Du das?
Wie soll die Zeitanzeige am Panel aussehen?

Wenn es nicht stört, daß auch die Sekunden mit angezeigt werden, dann bräuchtest Du garnichts umrechnen, sondern einfach Deine ms-Time in eine TIME_OF_DAY-Variable kopieren und auf dem Panel als Uhrzeit anzeigen: "1:23:45"


Noch eine weitere Kanone-auf-Spatzen-aber-fertig-Möglichkeit:
In der Standard Bibliothek "IEC Function Blocks" gibt es den FC3 D_TOD_DT, dem übergibst Du ein beliebiges Datum und Deinen TIME, dann liefert der Dir als Ergebnis einen DATE_AND_TIME, darin fein säuberlich getrennt im 4. Byte die Stunden und im 5. Byte die Minuten - allerdings im BCD-Format. Die könntest Du im Panel Hexadezimal anzeigen oder noch von BCD zu INT wandeln. Hexadezimale Anzeige hätte den Vorteil, das man Minuten immer zweistellig ggf. mit 0 davor anzeigen könnte.

Harald
 
Zurück
Oben