Zeit Messen?!

Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
FUNCTION_BLOCK "FB_Timer"
TITLE =
//This block counts the time during <B_my_Input> is true.
//The feedback is written in <T_my_Time>.
//<B_Reset> clears <T_my_Time>.
//
//2010-06-07 XXX
VERSION : 0.1
 
VAR_INPUT
  B_my_Input : BOOL ; 
  B_Reset : BOOL ; 
END_VAR
VAR_OUTPUT
  T_my_Time : TIME ; 
END_VAR
VAR
  B_FM : ARRAY  [1 .. 16 ] OF BOOL ; 
  T_my_Time_Stat : TIME ; 
END_VAR
VAR_TEMP
  T_Sys_Time_Temp : TIME ; 
END_VAR
BEGIN
NETWORK
TITLE =
      CALL "TIME_TCK" (//Read the System Time
           RET_VAL                  := #T_Sys_Time_Temp);
      U     #B_my_Input; //New Count (One Shot) ???
      FP    #B_FM[1]; 
      SPBN  _101; 
      L     #T_Sys_Time_Temp; //Init my_Time_Stat
      T     #T_my_Time_Stat; 
_101: NOP   0; 
      U     #B_my_Input; //Count Time ???
      SPBN  _102; 
      L     #T_Sys_Time_Temp; 
      L     #T_my_Time_Stat; 
      -D    ; 
      T     #T_my_Time; 
_102: NOP   0; 
      U     #B_Reset; //Reset my_Time ???
      SPBN  _103; 
      L     0; 
      T     #T_my_Time; 
_103: NOP   0; 
END_FUNCTION_BLOCK
Vielleicht hilft dir das weiter.


Ja danka, sowas hab ich gesucht
 
Code:
FUNCTION_BLOCK "FB_Timer"
TITLE =
//This block counts the time during <B_my_Input> is true.
//The feedback is written in <T_my_Time>.
//<B_Reset> clears <T_my_Time>.
//
[COLOR=Red]// never forget the Überlauf [COLOR=Blue];-)[/COLOR]
[/COLOR]//
//2010-06-07 XXX
..[/QUOTE]

Die Systemzeit ist ein "Zeitzähler", der von 0 bis max. 2147483647 ms zählt. Bei einem Überlauf der Systemzeit wird wieder ab 0 gezählt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Dagobert,

danke für den Hinweis.
Funktioniert der Baustein in der nun vorliegenden Version?

Code:
FUNCTION_BLOCK "FB_Timer"
TITLE =
//This block counts the time during <B_my_Input> is true.
//The feedback is written in <T_my_Time>.
//<B_Reset> clears <T_my_Time>.
//
//2010-06-07 XXX
VERSION : 0.1
 
VAR_INPUT
  B_my_Input : BOOL ; 
  B_Reset : BOOL ; 
END_VAR
VAR_OUTPUT
  T_my_Time : TIME ; 
  B_Fault_my_Time : BOOL ; //Value out of Range
END_VAR
VAR
  B_FM : ARRAY  [1 .. 16 ] OF BOOL ; 
  T_my_Time_Stat : TIME ; 
  T_my_Time_Stat_prev : TIME ; 
  B_Overflow : BOOL ; 
END_VAR
VAR_TEMP
  T_Sys_Time_Temp : TIME ; 
END_VAR
BEGIN
NETWORK
TITLE =
      CALL "TIME_TCK" (// Read the System Time
           RET_VAL                  := #T_Sys_Time_Temp);
      U     #B_my_Input; // New Count (One Shot) ???
      FP    #B_FM[1]; 
      SPBN  _110; 
      L     #T_Sys_Time_Temp; // Init my_Time_Stat
      T     #T_my_Time_Stat; 
      R     #B_Overflow; 
_110: NOP   0; 
      U     #B_my_Input; // Count Time ???
      SPBN  _140; 
      L     #T_my_Time_Stat_prev; 
      L     #T_Sys_Time_Temp; 
      >D    ; // Overflow ???
      S     #B_Overflow; 
      U     #B_Overflow; 
      SPB   _120; 
      L     #T_my_Time_Stat; // Here no Overflow
      -D    ; 
      T     #T_my_Time; 
      SPA   _130; 
_120: NOP   0; // Here Overflow
      L     L#2147483647; // max. Time of SFC64
      L     #T_my_Time_Stat; 
      -D    ; 
      L     #T_Sys_Time_Temp; 
      +D    ; 
      U     OV; // Overflow in Result ???
      S     #B_Fault_my_Time; 
      T     #T_my_Time; 
_130: NOP   0; 
      L     #T_Sys_Time_Temp; // Save Sys_Time for next scan
      T     #T_my_Time_Stat_prev; 
_140: NOP   0; 
      U     #B_Reset; // Reset my_Time ???
      SPBN  _150; 
      L     0; 
      T     #T_my_Time; 
      R     #B_Overflow; 
      R     #B_Fault_my_Time; 
_150: NOP   0; 
      U     #B_Fault_my_Time; // Fault Handling
      SPBN  _160; 
      L     0; 
      T     #T_my_Time; 
_160: NOP   0; 
END_FUNCTION_BLOCK

Gruß
 
Zurück
Oben