SA Timer Wert in Flexible anzeigen

overflow

Level-1
Beiträge
25
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Ich möchte ohne große Umwege den aktuellen Wert eines SA Timers (vom Dual oder Dez Ausgang) mit WinCC flexible 2008 darstellen.
geht dies auf dierektem Weg??? DW = Anzeige???

Gruß und Dank im Vorraus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du in der Step7-Hilfe mal "s5-Time" suchst, wird Dir angezeigt wie die Zeit dargestellt wird. Die musst Du dann noch umwandeln in ein lesbares Format.
 
Ich habe den aktuellen Wert in einem DB auf einem DW liegen.
So weit so gut.
Nur leider kann ich in WinCC flexible nicht das format s5 Time wählen. Denn dann würde es ja wahrscheinlich richtig angezeigt.

Ich glaube ich steh da so ziehmlich breit auf dem Schlauch:???::???:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein, das geht auch meines Wissens nicht. Deswegen: siehe oben ;)

@verpolt: Aber dann hat er doch die Zeitbasis nicht beachtet, oder?
Bsp: Der Timer ist auf 5s eingestellt. Dann läuft seine Anzeige von 500 bis 0 (bei einer Zeitbasis von 10ms).
 
Zuletzt bearbeitet:
genau so habe ich das gemacht!!!

Ein E/A Fenster und dann dezimal. Ich bekomme dann aber nicht 9m10s00ms angezeigt sonder z.B. 9433.

Was mache ich da falsch???

Ich könnte natüchlich auch alles auseiander pflücken und dann die Min/Sec/mS einzeln anzeigen mit einem : zwischen den Zahlen, aber das möchte ich eben nicht.
 
Zuletzt bearbeitet:
" Wenn Sie die Zeitdauer mit dem Datentyp S5TIME eingeben, werden Ihre Eingaben im BCD-Format gespeichert. Nachfolgendes Bild zeigt den Inhalt des Zeitoperanden bei einem Zeitwert von 127 und einer Zeitbasis von 1 s.

BIT 15.. ..8 7.. ..1
X X 1 0 , 0 0 0 1 , 0 0 1 0 , 0 1 1 1

Zeitbasis:1s 1 2 7



Wenn Sie mit S5TIME arbeiten, geben Sie einen Zeitwert im Bereich von 0 bis 999 ein und bezeichnen eine Zeitbasis (siehe nachfolgende Tabelle). Die Zeitbasis gibt das Intervall an, in dem eine Zeit den Zeitwert um je eine Einheit vermindert, bis er "0" erreicht.
Zeitbasis für S5TIME

Zeitbasis​
Binärcode für Zeitbasis​
10 ms​
00​
100 ms​
01​
1 s​
10​
10 s​
11​


Mit der folgenden Syntax können Sie einen vordefinierten Zeitwert laden:

  • L[SUP]1)[/SUP] W#16#wxyz

      • mit: w = Zeitbasis (d. h. Zeitintervall oder Auflösung)
      • xyz = Zeitwert im BCD-Format

  • L[SUP]1)[/SUP] S5T#aH_bbM_ccS_dddMS

      • mit: a = Stunden, bb = Minuten, cc = Sekunden und ddd = Millisekunden.
      • Die Zeitbasis wird automatisch gewählt und der Wert zur nächstniederen Zahl mit dieser Zeitbasis gerundet.
Sie können einen Zeitwert von max. 9 990 Sekunden bzw. 2H_46M_30S eingeben."


Der obige Text ist aus der Hilfe von Step7

Deine 9m10s sind 550s

550 BCD = 9552 Dezimal



OHNE Umweg geht es NICHT!


 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
also um die zeit im hmi darzustellen einfach eine variable vom typ: timer anlegen. als adresse dann die zeit.
im bild ein a-feld anlegen anzeige: dezimal, darstellung: 9999999. nachkommastelle um 3 verschieben. willst du keine kommastellen muss du den wert linear skalieren. die anzeige erfolgt in sekunden.

eine anzeige im format stunden:minuten:sekunden ist nicht möglich.
 
Hier mal ein Beispiel (geht wahrscheinlich auch eleganter und unkomplizierter).

Vorher von AWL in FUP umwandeln, dann wirds verständlicher


Code:
 U     E    124.0
      L     S5T#9M20S
      SA    T     10
      NOP   0
      L     T     10
      T     MW   300
      LC    T     10
      T     MW   100
      NOP   0

MW100 ist die Restzeit im BCD-Format. Die Bits M100.4 und M100.5 legen die Zeitbasis fest
MW300 ist die Restzeit im Dezimalformat (z.B.: 550 bei 9m10s)

Code:
  U     M    100.5
      U     M    100.4
      =     L     24.0
      U     L     24.0
      BLD   102
      =     M      0.1
      UN    L     24.0
      U     M    100.5
      UN    M    100.4
      =     L     24.1
      U     L     24.1
      BLD   102
      =     M      0.2
      UN    L     24.1
      UN    M    100.5
      U     M    100.4
      =     L     24.2
      U     L     24.2
      BLD   102
      =     M      0.3
      U     L     24.2
      UN    M    100.5
      UN    M    100.4
      =     M      0.4

Im oberen Netzerk wird die Zeitbasis festgestellt


Code:
  L     MW   300
      T     MD   400
      NOP   0

Zum Umrechnen der Restzeit wandle ich sie hier in REAL um


Code:
 U(    
      U(    
      U(    
      U     M      0.4
      SPBNB _001
      L     MD   400
      L     1.000000e+002
      /R    
      T     MD   500
      UN    OV
      SAVE  
      CLR   
_001: U     BIE
      )     
      NOT   
      U     M      0.3
      SPBNB _002
      L     MD   400
      L     1.000000e+001
      /R    
      T     MD   500
      UN    OV
      SAVE  
      CLR   
_002: U     BIE
      )     
      NOT   
      U     M      0.2
      SPBNB _003
      L     MD   400
      L     1.000000e+000
      /R    
      T     MD   500
      UN    OV
      SAVE  
      CLR   
_003: U     BIE
      )     
      U     M      0.1
      SPBNB _004
      L     MD   400
      L     1.000000e-001
      /R    
      T     MD   500
_004: NOP   0

Im obigen Netzwerk wird die Restzeit vom DEZ-WERT in Sekunden umgerechnet
(Bsp.: 1h9m20s --> Zeitbasis 10s --> RestzeitDEZ 416
Also muss ich die Restzeit mit 10 multiplizieren um die tatsächliche Zeit in Sek zu erhalten)


Code:
 L     MD   500
      T     MD   600
      NOP   0

Zum Schluss habe ich das Ergebnis von REAL in DWORD gewandelt weil ich es sonst nicht auf der Anzeige darstellen konnte (Weiß nicht ob das wirklich nötig ist)
 
Ich reiß nun mal nen Thema von 2012 ausser Vesenkung, aber gut... habe bis dato keine vernünftige Lösung gefunden, also frag ich nun:

Ich hab nen Timer, dessen Wert ich im Flexible angeben kann - sagen wir als Beispiel 15 im E/A-Feld für 15 Minuten... das ganze wird dann in der SPS in Millisekunden gewandelt, danach zu ner S5Time und auf ne ausschaltverzögerung gelegt...
Alles auch wunderbar und klappt...
Nun hab ich ja die Möglichkeit, in ner VAT-Tabelle mir anzusehen, wie die Zeit runtergezählt wird... das ganze wird dann in Min:Sec angezeigt, da ich aktualisierung jede Sekunde habe...

Diesen 'Countdown' würde ich gerne ins Flexible bringen und anzeigen lassen, wenn der Timer aktiv ist... das mit dem Aus- und Einblenden is auch nciht das Ding, das mach ich über nen Merker und Ausblenden wenn Merker = 0...
Aaaaaaber...
ich kriege ums verrecken die dusselige Zeit nicht so ins Flexible, wie ich sie gerne dort hätte...

hier mal kurz mein bisheriges Script:
Code:
FUNCTION "Timer" : VOID
TITLE =
VERSION : 0.1


VAR_TEMP
  AbschaltzeitSec : INT ;    
  AbschaltzeitS5 : S5TIME ;    
  Fehler : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =Teimerzeit aus HMI


      L     "SPS<->HMI".Timerzeit; 
      L     L#60; 
      *D    ; 
      T     #AbschaltzeitSec; 

NETWORK
TITLE =Zeit in S5T

      CALL "INT_TO_S5T" (
           Input_Time_in_sec        := #AbschaltzeitSec,
           Out_S5_Time              := #AbschaltzeitS5,
           Out_Fault                := #Fehler);

NETWORK
TITLE =Timer


      A     "SPS<->HMI".TimerAN; 
      L     #AbschaltzeitS5; 
      SF    "TimerAnzeige"; 
      AN    "M_Timer_An"; 
      R     "TimerAnzeige"; 

NETWORK
TITLE =TimerAn_Merker

      A     "TimerAnzeige"; 
      =     "M_Timer_An"; 


END_FUNCTION

Das TimerAn-Signal vom HMi is ein SetzeBit beim drücken -- loslassen setzt es bit zurück...
Die HMI.Timerzeit wird wie gesagt als Int in MIN angegeben - daher x60 um auf sekunden zu kommen für die S5T...


Und das is mein TimerUmwandelCode:
Code:
FUNCTION FC 5 : VOID
TITLE =
VERSION : 0.1

BEGIN
NETWORK
TITLE =TimerRestzeit in MW

      LC    "TimerAnzeige"; 
      T     "TimerMW"; 


NETWORK
TITLE =Umwandlung WORD (T50_BDC) zu S5Time (BDC_S5Time)


      L     "TimerMW"; 
      T     "TimerMW_BDC"; 

NETWORK
TITLE =Umwandlung S5Time zu TIME


      CALL "S5TI_TIME" (
           IN                       := "TimerMW_BDC",
           RET_VAL                  := "RestzeitTIME");
      BE    ; 

NETWORK
TITLE =Time zu INT

      L     "RestzeitTIME"; 
      T     "RestzeitDINT"; 


NETWORK
TITLE =Ms zu Min

      L     "RestzeitDINT"; 
      L     L#60000; 
      /D    ; 
      T     "SPS<->HMI".TimerRestzeit; 




END_FUNCTION

Blöderweise setzt mir bei dem Script nun immer die SPS aus, weil iwas nciht verarbeitbart ist :(
BTW: Wieviele Merker hat die S7-300 6ES7-314-1AG14-0AB0 ... mein letztes MW ist MW272 - mag das daran liegen?!?... wobei das Programm auch schon nen Merker M444.4 hatte, bevor ich da meinen Timer zugescriptet habe?!?!?!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Blöderweise setzt mir bei dem Script nun immer die SPS aus, weil iwas nciht verarbeitbart ist :(
Zielsystem > (Diagnose/Einstellung >) Baugruppenzustand > Diagnosepuffer

BTW: Wieviele Merker hat die S7-300 6ES7-314-1AG14-0AB0 ... mein letztes MW ist MW272 - mag das daran liegen?!?
Zielsystem > (Diagnose/Einstellung >) Baugruppenzustand > Leistungsdaten

Harald
 
Diagnosepuffer sagt mir nur 'FC5' ... soweit war ich auch schon, aber was in FC5 is mir rätselhaft :(

aber glaube, liegt tatsächlich an den Merkern - hab nur 255 wohl :\


edit://
Soweit sogut.. nun hängts an FC5 NW4:
Code:
NW 4:
L "RestzeitTIME"  //MD54
T "Restzeit DINT //MD 58

in NW3 wird MD54 beschrieben - zeigt er mir im BEobachtungsmodus auch an, wie sich die Zeit ändert - und im NW4 zeigt er mir dann weder bei MD54 noch bei MD 58 was an... Warum zeigt er bei MD 54 in NW3 was an und in NW 4 nichtmehr?!?!?


edit2:/ Ok, erledigt... das BE (BausteinEnde) musste aus NW 3 löl... manchmal siehste den Wald vor laufer Bäumen nciht...
 
Zuletzt bearbeitet:
Zurück
Oben