S5time aus dem DB aufrufen

BastiMG

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

ich möchte gerne eine Zeit mit dem OB77 verändern. Hab mir überlegt das ich diese Zeit einfach in einen DB schreibe, da ich dieses so oder so komplett ans OB übergeben muss. Jetzt kann ich aber an meinem Zeitglied nicht die S5Time aufrufen. Wie bekomm ich die Zeit an meinen Timer?
 
1. Wenn das OP S5Time-Werte schreiben kann:
Du legst in deinem DB eine Variable vom Typ S5Time und schreibst dort deinen Zeitwert hinein. Diese Variable schreibst du an den Timer.
2. Wenn das OP keine S5Time schreiben kann:
Du nimmst ein DWord, schreibst dort den Zeitwert in ms hinein und rechnest den TZeitwert vor dem Zeitglies in eine S5Time um (Siehe Forum-FAQ, da steht wie).
3. Wenn das OP keine S5Time schreiben kann:
Du nimmst ein DWord, schreibst dort den Zeitwert in ms hinein und nimmst aus der Standard-Library den TON-Baustein, der das direkt verarbeiten kann (Siehe Datentyp Time).
 
Im DB (DB_Timer) legst du eine Varible an:

DB_Time S5TIME S5T#400MS

an den Timer: "DB_Timer".DB_Time
oder absolut adressiert: DB400.DBW100
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn das OP da eine s5Time reinschreibt klappt das. Der Wert wird immer beim Start der Zeit übernommen, d.h. wenn du den Wert änderst , während die Zeit läuft, wird noch der alte Zeitwert abgearbeitet.
 
Ich nochmal!

Jetzt kann ich aus dem OP aber nur Werte im ms Bereich in die SPS schreiben.

Hab als Anfangswert schon 1h deklariert aber wenn ich dann übers OP den Wert änder springt die SPS bzw. der DB immer in den Millisekundenbereich. Wieso??
 
Mit der Eingabe von S5-Time von einer HMI ist das immer so eine Sache. Ich habe mir da mal einen Baustein geschrieben, der Integer nach S5 Time wandelt.
Über eine Input-Var. kannst Du auswählen ob der Integer-Wert Millisekunden, Sekunden oder Minuten entsprechen soll.
Schau es Dir einfach mal an, vielleicht hilft`s Dir ja.:)

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
 
Ich schreib eigentlich nur einen S5Time Wert mit dem OP in die SPS, wollte den jetzt nicht noch vorher groß umrechnen! :-(

Wo muss ich das ganze denn einfügen und vorallem was muss ich einfügen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sei nicht böse, daß ich nochmal nachfrage. Was genau legst du im OP77 an? Eine Dezimalvariable oder eine S5Time? Ich hab mal nachgesehen, eine S5Time finde ich beim OP77 irgendwie nicht, zumindest beim OP77A.
 
Morgen!
Ich freu mich doch über Antworten, von daher! :)

Ich schreib in dem OP77B einen Dezimal Wert, kann auch hier das Format S5Time nicht auswählen.
Es stehen noch zur Verfügung: Binär, Hex, Uhrzeit, Datum, Zeichenkette und Datum/Uhrzeit zur auswahl.
 
Ah, mann kann eine Variable Timer anlegen und da dann eine Dezimal. Schau mal nach, was da genau in der SPS rauskommt zum Schluß. Scheint mir nicht so optimal zu sein.

Wie wäre es denn mit einer Variablen vom Format Uhrzeit. Eigentlich sollte dann in der SPS eine Zeit in ms seit Mitternacht stehen, also das was für einen Ton aus der IEC-Library benötigt wird. das wäre der einfachste Weg, den ich zuerst mal testen würde. Eingegeben wird das dann als 00:03:33 für 3 Minuten 33 Sekunden. Das OP77 kann man leider nicht simulieren, sonst hätte ich das mal probiert.

Anderer Weg: 3 Input-Fenster für Stunden,Minuten Sekunden, daraus die Zeit in ms errechnen und dann an Ton legen.

Noch ein anderer Weg: Die Zeit in ms in eine S5-Time umrechnen, sieh dazu in der FAQ, da steht das genau drin.
http://www.sps-forum.de/showthread.php?t=2942
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, das ist super.

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 __________________


Nur wie kann ich jetzt Minuten eingeben=
 
Hi Basti,

den Baustein aus meinem letzten Post kannst Du eigentlich verwenden so wie er ist, denn er macht genau das was Du suchst.
 

Anhänge

  • int-to-s5time.jpg
    int-to-s5time.jpg
    39,6 KB · Aufrufe: 35
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, das ist super.

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 __________________


Nur wie kann ich jetzt Minuten eingeben=

Du mußt die OP-Eingabe umrechen.

Wenn du am OP eine 6 eingeben willst für 6 Minuten, dann rechnest du das in 10s-Einheiten um, also 6*60/10 (für 3000hex) oder in 1s-Einheiten also 6*60 (für 2000hex).

Auch der Baustein von OHGN würde gehen, du kannst dort dezimal angeben, ob Sekunden oder Minuten als Input hast, wenn ich das richtig überflogen habe.
 
Wo finde ich denn den Baustein?


Für die Andere Version wäre es dann so.


L DB1.DBW 10
L 60
*I
ITB
L W#16#2000
OW
T MW 10
 
Zuletzt bearbeitet:
ok, geht.

Wenn ich aber jetzt Wert 60 ins OP eingebe, geht meine CPU auf Stopp.

Vielleicht sollte ich noch erwähnen da sich simulieren, mit WinCC Runtime und PLC SIM.
 
Zurück
Oben