Wie kann ich Zeitwerte für Timer variabel eingeben?

plc_tippser

Level-1
Beiträge
2.500
Reaktionspunkte
308
Zuviel Werbung?
-> Hier kostenlos registrieren
Beitrag von Ralle:

s5t setzt sich aus 4 Werten zusammen

Das ganze steht in einen Wort

Bin : xxxx 3333 2222 1111

xxxx = Faktor 0 = 10 ms 1 = 100 ms 2 = 1s 3 = 10s

3333 3 Stelle vom BCD Code ( 0 - 9 )
2222 2 Stelle vom BCD Code ( 0 - 9 )
1111 1 Stelle vom BCD Code ( 0 - 9 )

das heist wenn du

Bin 0010 0000 0011 0111

x = 2
3 = 0
2 = 3
1 = 7

würde das bedeuten Zahlen wert 37 * Faktor von 1 sek = 37 sekunden

Bsp. 1:
L EW 0
L KH 0FFF <- vierte Tetrade ausblenden
UW
L KH 2000 <- Ziffer 2 speichern (2 = Sekunden)
OW
T MW10

Bsp. 2:
L 120
ITB
L W#16#2000
OW
T MW10

0000hex wären 10ms
1000hex wären 100ms
2000hex wären 1s
3000hex wären 10s

Hier noch ein Baustein von unserem User OHGN:
Code:
FUNCTION FC 201 : VOID
TITLE =INT_to_S5 Time
//Einheit = 1->ms
//Einheit = 2->sek
//Einheit = 3->min
AUTHOR : Ne
FAMILY : WinCC
NAME : Int_S5T
VERSION : 0.1
 
VAR_INPUT
  Einheit : BYTE ; //1=ms 2=s 3=min
END_VAR
VAR_OUTPUT
  S5_Time : S5TIME ; 
END_VAR
VAR_IN_OUT
  IN : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =In- Wert muß im positiven Bereich liegen
//ist dies nicht der Fall, wandle in Pos. Zahl
      L     #IN; 
      L     0; 
      <I    ; 
      SPBN  noer; 
      TAK   ; 
      NEGI  ; 
      T     #IN; 
      BEA   ; 
NETWORK
TITLE =Umrechnung wählen 
//Soll der Integerwert Millisekunden, Sekunden oder Minuten entsprechen?
noer: L     #Einheit; 
      L     B#16#1; 
      ==I   ; 
      SPB   ms; //springe zur Wandlung in ms
      TAK   ; 
      L     B#16#2; 
      ==I   ; 
      SPB   sek; //springe zur Wandlung in Sekunden
      TAK   ; 
      L     B#16#3; 
      ==I   ; 
      SPB   min; //springe zur Wandlung in Minuten
      SPA   sek; //bei allen anderen Eingaben in Sekunden wandeln
 
NETWORK
TITLE =IN- Wert in Millisekunden
ms:   L     #IN; 
      L     9990; 
      >I    ; 
      SPB   ms1; 
      TAK   ; 
      L     10; 
      /I    ; 
      ITB   ; 
      T     #S5_Time; //Zeitbasis 10 ms
      BEA   ; 
ms1:  L     #IN; 
      L     100; 
      /I    ; 
      ITB   ; 
      OW    W#16#1000; //Zeitbasis 100ms
      T     #S5_Time; 
      BEA   ; 
NETWORK
TITLE =In- Wert in Sekunden
sek:  L     #IN; 
      L     999; 
      >I    ; 
      SPB   sek1; 
      TAK   ; 
      ITB   ; 
      OW    W#16#2000; 
      T     #S5_Time; //Zeitbasis 1s
      BEA   ; 
sek1: L     #IN; 
      L     9990; 
      >I    ; 
      SPB   err1; 
      TAK   ; 
      L     10; 
      /I    ; 
      ITB   ; 
      OW    W#16#3000; 
      T     #S5_Time; //Zeitbasis 10s
      BEA   ; 
 
NETWORK
TITLE =In- Wert in Minuten
min:  L     #IN; 
      L     166; 
      >I    ; 
      SPB   err2; 
      TAK   ; 
      L     6; 
      *I    ; 
      ITB   ; 
      OW    W#16#3000; 
      T     #S5_Time; //Zeitbasis 10s
      BEA   ; 
NETWORK
TITLE =Eingabewerte zu groß
err1: L     9990; //größtmöglicher Eingabewert
      T     #IN; //für S5_Time in sek
      BEA   ; 
err2: L     166; //größtmöglicher Eingabewert
      T     #IN; //für S5_Time in min
 
END_FUNCTION
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben