S5TIME in INTEGER?

Felse

Level-1
Beiträge
221
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, habe folgendes Problem: Ich habe in meinem Wincc flex Projekt ein E/A Feld (INT), dieses Feld stellt eine Zeit dar, wenn ich nun in der SPS einen Timer Programmieren möchte, hat dessen Zeitwert den Typ S5TIME, wie kann ich nun also den Wert des E/A Feldes für meinen Timer nutzen (in SCL)?
Code:
BCD := S_ODTS(
          T_NO := "Zeit1",
          S    := TIMER_an,
          TV   := TV,
          R    := Reset,
          BI   := Dual,
          Q    := Status);
Das steht nun in meinem Code... Habs schonmal mit
Code:
TIME_TO_DINT (DINT_TO_INT(TV))
probiert, hat aber nicht geklappt. :confused:
Bin für jede Hilfe dankbar.
 
Du kannst direkt die S5Time projektieren. In Flexible wird er dann vom Datentyp Timer dargestellt. Die Anzeige erfolgt in ms.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, das weiß ich, aber mein Problem ist, dass ich diesen Wert als Integer vorher benötige um damit zu rechnen... Und wenn ich das Format jetzt ändere, hab ich quasi das gleiche Problem an anderer Stelle. Aber ich versuchs trotzdem mal.
 
Es gibt auch noch einen Baustein in der IEC Function Blocks Libary FC33 S5TI_TIM. Er wandelt das S5Time format in Time um. Dann müsste es eigentlich klappen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ralle
danke aber ich glaub das ist ein wenig zu kompliziert für mich...

Aber selbst mit der Lösung von Hotsch hab ich noch Probleme:
Code:
BCD := S_ODTS(
          T_NO := "Zeit1",
          S    := TIMER_an,
          TV   := TV,
          R    := Reset,
          BI   := Dual,
          Q    := Status);
          
          
          
          S5TI_TIM(IN := TV  // IN: S5TIME
                          ); // TIME
Hab den Baustein aufgerufen, aber wie trag ich denn jetzt meine TIME Variable da ein?
 
Leider nicht... Wenn ich das richtig verstanden habe, soll ich die Variable (meinen Zeitwert) da einfügen und das hab ich ja gemacht... TV
Code:
 T_NO := "Zeit1",
          S    := TIMER_an,
          TV   := [COLOR=red]TV[/COLOR],
          R    := Reset,
          BI   := Dual,
          Q    := Status);
          
          
          
          S5TI_TIM(IN := [COLOR=red]TV[/COLOR] );
Fehlermeldung: "Ungültiger oder fehlender Funktionstyp". Aber warum?
 
Stimmt, manchmal bin ich eben so:p aber jetzt gehts, den normalen Time-Typ kann man ja mit der o.g. Funktion umwandeln. DANKE
 
Als Beispiel für eine Einschaltverzögerung:
Code:
FB TestFB;
 
VAR
     TONVAR:TON;
     Zeit      :TIME:=t#1s;
end_var
 
BEGIN
     TONVAR(IN:=E0.1, PT:=Zeit);
     IF TONVAR.Q THEN
          ....

IN:=... wäre die Bedingung, wenn die Zeit startet. Über das .Q wird dann der Zustand des Timers abgefragt.
 
Zuletzt bearbeitet:
Aha, und weiter? Momentan denke ich, hab ich eben totalen Blödsinn gemacht...
Code:
BCD := S_ODTS(
          T_NO := "Zeit1",
          S    := TIMER_an,
          TV   := TV,
          R    := Reset,
          BI   := Dual,
          Q    := Status);
 
 
 
      TV_Eingabe:= S5TI_TIM(IN := TV ); // TIME
 
      Umwandeln:= TIME_TO_DINT (TV_Eingabe);
      PPI_PS_AUTO_RAMPE_ZIEL:= DINT_TO_REAL (Umwandeln);
So wie das jetzt ist, nimmt meine Variable (PPI_PS_AUTO_RAMPE_ZIEL) den Wert meines Timers an, ich will ja aber, das der Timer den Wert der Variable annimmt. Was muss ich da machen? Sicher den FC40 aus der gleichen Bibliothek, oder?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann hab ich dich am Anfang missverstanden. Das wäre dann Time in S5Time wandeln und nicht S5Time in Time. Dafür gibt es einen anderen Baustein:

FC 40 Tim_S5Ti

Code:
Umwandeln:=Real_TO_DINT(PPI_PS_AUTO_RAMPE_ZIEL);
TV_Eingabe:=DINT_TO_TIME(Umwandeln);
TV:=TIM_S5TI(IN:=TV_Eingabe);
 
Den hab ich ja jetzt verwendet, funzt aber nur mittelprächtig, da ich in der Simulation nur millisekunden statt der eingegebenen sekunden erhalte.
Geht bis zum letzten Schritt.
Code:
Umwandeln:= REAL_TO_DINT (PPI_PS_AUTO_RAMPE_ZIEL);
TV_Eingabe:= DINT_TO_TIME (Umwandeln);
[COLOR=red]TV:= TIM_S5TI(IN := TV_Eingabe);  [/COLOR][COLOR=blue]// ab hier stimmt der Wert nicht mehr[/COLOR]

Wenn ich z.B. ne 3 eingebe wird die bis zum letzten Schritt übergeben und bei der s5time stehen nur noch 3ms da.
 
Das sollte abhilfe schaffen:
Code:
Umwandeln:=Real_TO_DINT(PPI_PS_AUTO_RAMPE_ZIEL);
TV_Eingabe:=DINT_TO_TIME(Umwandeln)*1000;
TV:=TIM_S5TI(IN:=TV_Eingabe);
Die Zeitbasis ist ms. Du musst dann einfach den Wert mit dem entsprechenden Faktor umrechnen
 
Zurück
Oben