Step 7 Umwandeln von Zeiten - Step 7 - WinCC

Btk

Level-1
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag zusammen,

ich möchte die Zeiten die von einem Panel (TP177A) kommen so umwandeln, dass diese nicht in ms sondern in sek. oder min. umgewandelnt werden.


Wenn ich mich recht erinnere, ist der Wert aus dem TP ein Int, dieser muss in REAL gewandelt werden, damit ich diesen Wert bearbeiten kann (Berechnung) anschließend wird dieser wieder in Int umgewandelt und kann weiter verwendet werden. (z.B. Timer). Ist das so richtig ? :)

Gibt es eine Übersicht wie diese Werte umgewandelt werden ?
AWL oder FUB

DANKE ! :)
 
Zieten in mintuten auf das TP
S5TIME Max zeit = 9990 sec bei 166 minuten gibt das 9960 Sec und > 166 min 9990sec.
Code:
     L     #PT_S5_Zeitwert1            //INT
      L     6
      *I    
      L     999                         // Max zeitwert
      >I    
      SPB   max                         // wenn    #PT_S5_Zeitwert1 * 6 > 999 , 999 omsetzen nach BCD
      TAK                               // Tauche akku 1 und 2
max:  ITB                               // Int To Bcd
      L     W#16#3000                   // S5Time * 10 sec
      OW    
      T     #S5_Zeitwert

Wenn Sie die Zeit in Sec auf TP darfstelt:
Code:
          L     #PT_S5_Zeitwert1            //INT
      L     999                         // Max zeitwert  fur sec
      >I    
      SPB   Z3                          // wenn    #PT_S5_Zeitwert1 * 6 > 999 , 999 omsetzen nach BCD
      TAK                               // Tauche akku 1 und 2
      ITB   
      L     W#16#2000                   // S5Time * 1 sec
      OW    
      SPA   Zeit
Z3:   L     #PT_S5_Zeitwert1
      L     9990
      >I    
      SPB   ok
      TAK   
ok:   L     10
      /I    
      T     #H_DW                       // DWord   HW=rest/LW = Quotient
      SRD   16                          // Bleib Rest
      L     5                           // Wenn rest <5 sprung , anders Quotient + 1 
      <I    
      SPB   dw
      L     #H_DW
      +     1
      T     #H_DW
dw:   L     #H_DW
      ITB                               // Int To Bcd
      L     W#16#3000                   // S5Time * 10 sec
      OW    
Zeit: T     #S5_Zeitwert
Wenn Zeitwert <999 wert zeitwert ungesetz in ein S5Time *1s , wenn Zeitwert >999 sec wurde Zeitwert in ein S5Time * 10 sec umgesetz.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@JoopB
Respekt, da hast Du ja richtig tief in der Trickkiste gegraben.
Ich zweifle nicht daran, dass ein Code funktioniert, aber umständlicher und komplizierter geht es glaub ich nicht.


Mein Vorschlag an den TE
Mit dem CPU Taktmerkerbyte sekundenweise ein Datenwort hochzählen, wenn nötig auch 1/10 Sekunden.
Wenn 60 Sekunden voll --> Minuten (Datenwort) um 1 erhöhen, Sekunden auf Null.
Da kannst Du Stundenlang Zeit erfassen.
Noch ein paar Vergleicher zur Auswertung --> fertig.
Zum Neustart alles wieder auf Null setzen.
 
Wenn ich mich recht erinnere, ist der Wert aus dem TP ein Int, dieser muss in REAL gewandelt werden, damit ich diesen Wert bearbeiten kann (Berechnung) anschließend wird dieser wieder in Int umgewandelt und kann weiter verwendet werden. (z.B. Timer). Ist das so richtig ? :)
Da bist Du, glaube ich, ein bisschen falsch informiert.
Bei S5 Zeiten ist die Zeitbasis BCD codiert, bei IEC Timern ist die Zeitbasis Millisekunden als DINT
 
So, jetzt mal gaaaaanz langsam
ich möchte die Zeiten die von einem Panel (TP177A) kommen so umwandeln, dass diese nicht in ms sondern in sek. oder min. umgewandelt werden.

Wenn ich mich recht erinnere, ist der Wert aus dem TP ein Int
OK, in welchem Datenformat bekommst du nun deinen Zeit-wert vom Panel. Als Integer in Millisekunden? Dann wäre nach 32s Schluss.
Ganz verstehe ich nicht was du meinst, ich nehme es aber mal so an.

Wenn ich mich recht erinnere, ist der Wert aus dem TP ein Int, dieser muss in REAL gewandelt werden, damit ich diesen Wert bearbeiten kann (Berechnung) anschließend wird dieser wieder in Int umgewandelt und kann weiter verwendet werden. (z.B. Timer).

Was möchtest du denn berechnen? Wenn du nur mit diesem Millisekunden-Vorgabewert auf einen Timer willst, dann kannst du dir die Arbeit ersparen.
1.) Du kopierst den INT-Wert auf eine TIME-Variable und arbeitest mit SFB4/5 TON/TOF.
2.) Wenn du S5-Timer bevorzugst, führst du Schritt 1 trotzdem aus und verwendest dann die FCs aus der Siemens-Standard-Biblieothek zum wandeln des TIME-Formats nach S5-Time. Damit kannst du dann auch direkt auf einen S5-Timer gehen

Nichts gegen dich JoopB, aber wenn ich Leute manuell Werte ins S5-Format konvertieren sehe bekomme ich Brechreiz. :sb5:
Da kann so viel daneben gehen, bzw. da ist in der Welt auch schon so viel daneben gegangen, also bitte nicht die jungen Leute daraufhin anstacheln. :cool:
Das geht mit den fertigen FCs, einfacher und sicherer.

-------------------------------------------------------------------------------------------------------------------------------------
Weiters stelle ich jetzt mal ne Vermutung in den Raum. Ist ne weitere Interpretation deiner Fragestellung.
Das TP177 wird, nehme ich mal an, von dir projektiert. Du hast in der SPS einen S5-Timer-Wert den du gerne am Panel verstellen möchtest.
Wenn du den Wert aber in einem E/A-Feld projektierst, ist er immer in Millisekunden. Deswegen möchtest du am Panel in Sekunden/Minuten eingeben und dann in der SPS umrechnen.

Wenn ich mit dieser Vermutung recht habe, dann kannst du dir die Arbeit sparen. Das Zauberwort heißt "lineare Skalierung" und ist unter WinCC-Flexible bei den Variablen-Eigenschaften zu finden. Dort kann man das Verhältnis wie ein Wert von SPS zu Panel angezeigt werden soll, einstellen. Also z.B. 1000:1 für Millisekunden auf Sekunden.


Sollten dies dich noch nicht zum Ziel führen, können wir noch gerne darüber reden wie du Zeiten/Daten hin und her konvertiert, bis du das gewünschte erreicht hast. :cool:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Und ich denke, er meint einfach, wenn er eine "1" am Panel eingibt, in der Steuerung eine Sekunde/Minute/... dabei rauskommen soll. Normalerweise ergibt eine "1" nämlich eine ms. Und da gibt es entweder im Winccflexible die lineare Skalierung oder in der Steuerung einfach den eingegebenen Wert mal 1000 und das Ergebnis in die Timevariable damit hättest du deinen eingegebenen Wert zumindest schon mal in Sekunden! Vielleicht sollte er sich aber mal genau äußern von welchen Timern er spricht..
 
Guten Morgen,

danke für die vielen Antworten!

Ich habe gestern noch einen "fertigen" Baustein gefunden.
Ich wollte nur eine andere Zeitbasis aus dem Panel TP177A auf einen Zeitbaustein haben.
Wenn dieser direkt mit S5Time adressiert wird (WinCC - Step7) , sind die Einstellungen nur in ms möglich.
nun habe ich einen Baustein gefunden (nicht Original Siemens ;-) ) der mir die Zeit automatisch in ms / s umrechnet.

Leider konnte dieser nur in Sekunden und nicht in Minuten umrechen, somit erreiche ich maximal 16minuten an meiner Einschaltverzögerung, dies werde ich die Tage aber auch noch geregelt bekommen ;-)

Danke und Gruß
Chris
 
Sie brauchen mit WinCC_Flex keine bouwsteen um die ziet um zu rechnen, Sie konte dass in WinCC machen mit Scale, In beilage ein beispiel mit ein S5Zeit in 3 darfstellungen (3x ein variabele in Flex, 1 x schaliert von 600000 in steuerung und 10 auf TP (= stunde) obengrenze= 166 untergrense = 0, 1x schaliert von 10000 auf 10 (= sec) obengrenze 9990 untergrenze 0 und 1x unscaliert mit 3 siefern hinter die komma obengrenze 9990000 unter grenze 0).
Bei die stunde konte sie max 166 stunde eingeben was bij die sec auf 9960 sec auskomt, gibt mann ei die sec oder direkt 9990 sec ein gibt dass auch 166 Stunde.
WinCC_S5time.JPGWinCCScale.JPGS5Time-Scalung.JPG

Gruss,

Joop
 

Anhänge

  • S5Time-Scalung.JPG
    S5Time-Scalung.JPG
    78,1 KB · Aufrufe: 34
Zuletzt bearbeitet:
Zurück
Oben