REAL in S5time

Hallo,
du must bei deiner Wandlung berücksichtigen, dass der Wert S5Time BCD-Codiert ist und das vorderste Byte der Faktor für den Rest ist (Wie früher bei S5)
"xyyy"
yyy := BCD von 000 bis 999
x := (0) * 10 ms
x := (1) * 100 ms
x := (2) * 1 s
x := (3) * 10 s

Das wars ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wandelt Minuten.....

Code:
FUNCTION "Real->S5T" : VOID
TITLE =
VERSION : 0.1

VAR_INPUT
  Zeit_min : REAL ; 
END_VAR
VAR_OUTPUT
  Zeit_W : WORD ;   
END_VAR
VAR_TEMP
  T_sek : REAL ;    
  OFlow : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =
      L     #Zeit_min; 
      L     6.000000e+001; 
      *R    ; 
      T     #T_sek; 
      L     #T_sek; 
      L     9.990000e+000; 
      <R    ; 
      SPB   P0; 
      TAK   ; 
      L     9.990000e+001; 
      <R    ; 
      SPB   P1; 
      TAK   ; 
      L     9.990000e+002; 
      <R    ; 
      SPB   P2; 
      TAK   ; 
      L     9.999000e+003; 
      >R    ; 
      =     #OFlow; 
      SPA   P3; 
 
 
NETWORK
TITLE =
P0:   NOP   0; 
      L     #T_sek; 
      L     1.000000e+002; 
      *R    ; 
      RND   ; 
      ITB   ; 
      L     2#0; 
      OW    ; 
      T     #Zeit_W; 
      BEA   ; 
P1:   NOP   0; 
      L     #T_sek; 
      L     1.000000e+001; 
      *R    ; 
      RND   ; 
      ITB   ; 
      L     2#1000000000000; 
      OW    ; 
      T     #Zeit_W; 
      BEA   ; 
P2:   NOP   0; 
      L     #T_sek; 
      RND   ; 
      ITB   ; 
      L     2#10000000000000; 
      OW    ; 
      T     #Zeit_W; 
      BEA   ; 
P3:   NOP   0; 
      L     #T_sek; 
      L     1.000000e+001; 
      /R    ; 
      RND   ; 
      ITB   ; 
      L     2#11000000000000; 
      OW    ; 
      T     #Zeit_W; 
      UN    #OFlow; 
      BEB   ; 
      L     W#16#3999; 
      T     #Zeit_W; 
      BEA   ; 

END_FUNCTION
 
S5 Time umwandeln

Hi,
siehe auch IEC FCs, FC33, FC40, wandeln S5Time nach TIME und umgek.
Da TIME ein Long Integer ist, wo die Zeit einfach in ms steht, sind weitere Berechnungen einfach.

Vladi
 
Real nach S5TIME

Hallo tomatensaft,
ich gehe mal davon aus, dass du eine "beliebige" Realzahl nach S5TIME wandeln willst. Die FC soll dann selbst die optimale Zeitdarstellung entscheiden. Hierfür der folgende Code:
Code:
FUNCTION FC 5 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
  Zeitwert : REAL ; 
END_VAR
VAR_OUTPUT
  S5_TIME : WORD ;  
END_VAR
BEGIN
NETWORK
TITLE =Umwandlung Realzahl in Format S5TIME
      L     #Zeitwert; 
      L     9.990000e+000; // wandelbar in 1/100s ?
      <=R   ; 
      SPB   P0; // <-- ja
      TAK   ; 
      L     9.990000e+001; // wandelbar in 1/10s ?
      <=R   ; 
      SPB   P1; // <-- ja
      TAK   ; 
      L     9.990000e+002; // wandelbar in Sekunden ?
      <=R   ; 
      SPB   P2; // <-- ja
      TAK   ; 
      L     9.990000e+003; // wandelbar in 10s ?
      <=R   ; 
      SPB   P3; // <-- ja
      SPA   P4; // weil Bereichsüberschreitung
 
P0:   L     #Zeitwert; // Zeitwert wandeln in 1/100s-Wert
      L     1.000000e+002; 
      *R    ; 
      RND   ; 
      ITB   ; 
      T     #S5_TIME; 
      BEA   ; 
P1:   L     #Zeitwert; // Zeitwert wandeln in 1/10s-Wert
      L     1.000000e+001; 
      *R    ; 
      RND   ; 
      ITB   ; 
      OW    W#16#1000; 
      T     #S5_TIME; 
      BEA   ; 
P2:   L     #Zeitwert; // Zeitwert wandeln in Sekunden-Wert
      RND   ; 
      ITB   ; 
      OW    W#16#2000; 
      T     #S5_TIME; 
      BEA   ; 
P3:   L     #Zeitwert; // Zeitwert wandeln in 10s-Wert
      L     1.000000e-001; 
      *R    ; 
      RND   ; 
      ITB   ; 
      OW    W#16#3000; 
      T     #S5_TIME; 
      BEA   ; 
P4:   NOP   0; // Zeitbereich ist überschritten, deshalb:
      L     W#16#3999; // Zeit begrenzen auf 9990 s
      T     #S5_TIME; // oder andere Fehlerausgabe
END_FUNCTION
Es ist noch zu entscheiden was passieren soll, wenn der Zeit-Wertebereich nicht eingehalten wird. S5Time geht von 0,01s bis 9990s. Alle anderen Werte würden den "Zeitbereich" verletzen. Das könnte man innerhalb der FC behandeln oder den EN-Eingang der FC entsprechend beschalten, dass gar nicht erst "falsche" Werte in die FC gelangen!
Mfg eNDe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das funktioniert leider nicht, da der FC40 ein DINT am IN-Eingang nicht akzeptiert.

Code:
      L     #myReal
      RND   
      L     1000
      *D    
      T     #myTime
      CALL  "TIM_S5TI"
       IN     :=#myTime
       RET_VAL:=#myS5dreck

PS: Kann man sich nicht langsam mal von dem S5time Gelummps lösen?
 
PS: Kann man sich nicht langsam mal von dem S5time Gelummps lösen?

Zugegebener Maßen hantiert sich dieser S5-Timer so schön einfach. Bestens geeignet als der "schnelle Timer zwischendurch".
Kein Datenbaustein, keine Multiinstanzen, sondern einfach einfügen und fertig.
Deshalb nutzen den auch noch so viele.:ROFLMAO:
Der einzige Weg wäre, dass Siemens den killt...
 
Code:
      L     #myReal
      RND   
      L     1000
      *D    
      T     #myTime
      CALL  "TIM_S5TI"
       IN     :=#myTime
       RET_VAL:=#myS5dreck
PS: Kann man sich nicht langsam mal von dem S5time Gelummps lösen?
Und wie sieht das ganze in FUP aus? Unsere Monteure wollen reine FUP-Programmierung.

PS: Kann man sich nicht langsam mal von dem S5time Gelummps lösen?
Liegt vielleicht daran das die "Zeiten" (Zeitbausteine) in der normalen S7 Bibliothek nur S5Time als Eingang akzeptieren. Ansonsten muß man ja die SFBs benutzen.

Ich glaube viele Programmierer vergessen bei Anwendung ihrer Tricks (Multiinstanzen, SFBs etc.) das im normalen Betrieb ein "0815" Elektriker mit Standard-SPS-Kenntnissen im Störungsfall den Fehler schnell finden muß.
Daher versuche ich möglichst alles in FUP und Logisch einfach darzustellen - auch wenn der Code dadurch meisst etwas länger wird. ;)
Hab keinen Bock Nachts angerufen zu werden nur weil jemand durch die AWL nicht durchsteigt...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und wie sieht das ganze in FUP aus?
...


siehe Anhang!
Ob man zu erst Rundet oder zu erst Multipliziert muss der Experte (also Du :ROFLMAO:) selbst entscheiden.

....
Unsere Monteure wollen reine FUP-Programmierung.

Liegt vielleicht daran das die "Zeiten" (Zeitbausteine) in der normalen S7 Bibliothek nur S5Time als Eingang akzeptieren. Ansonsten muß man ja die SFBs benutzen.

Ich glaube viele Programmierer vergessen bei Anwendung ihrer Tricks (Multiinstanzen, SFBs etc.) das im normalen Betrieb ein "0815" Elektriker mit Standard-SPS-Kenntnissen im Störungsfall den Fehler schnell finden muß.
Daher versuche ich möglichst alles in FUP und Logisch einfach darzustellen - auch wenn der Code dadurch meisst etwas länger wird. ;)
Hab keinen Bock Nachts angerufen zu werden nur weil jemand durch die AWL nicht durchsteigt...

Ich glaube das viele möchte gern S7 Anwender einfach das lernen nach dem Grundkurs beendet haben.

Weiterbildungsresistenz!
 

Anhänge

  • aushilfskai.pdf
    3,3 KB · Aufrufe: 159
Merci !

Ich glaube das viele möchte gern S7 Anwender einfach das lernen nach dem Grundkurs beendet haben.

Weiterbildungsresistenz!
Das Problem ist doch das die Elektrotechnik immer schneller fortschreitet (SPS, Frequenzumrichter/Servosysteme, Bus-Systeme, HMI etc.) und man selbst als Maschinenentwickler der alles können muß, kaum hinterher kommt. Was sollen da die Elektriker machen (bei unserem Fachkräftemangel) ?
Die Maschinenbauer und Kaufleute haben schon leichter, genormte Schrauben, Stahlsorten und Prozentrechnung gabs schon vor 20 Jahren :ROFLMAO:
 
Zurück
Oben