Zeitmessung (FB4)

 

Beschreibung:

Der Baustein misst die Zeit zwischen der positiven Start- und Stopp Flanken der Eingänge. Die Zeitermittlung basiert auf der Differenzzeitermittlung der SPS Systemzeit. Das Zeitraster ist somit 1ms!. Die Genauigkeit der Zeitmessung übertrifft somit Messungen welche auf Timer-Basis programmiert sind.

 

 

Eingang:

Start                          (BOOL)    Mit der steigenden Flanke an diesem Eingang wird der Zeitzähler gestartet.

Stopp                        (BOOL)    Mit der steigenden Flanke an diesem Eingang wird der Zeitzähler gestoppt.

 

Ausgang:

Differenzzeit               (DINT)     Differenzeit in [ms] zwischen Start-Flanke und Stopp-Flanke.

Aktiv                          (BOOL)    Zeigt an, dass eine Zeitmessung aktiv ist.

 

 

Für all diejenigen Programmierer, die einen SCL-Editor besitzen und den Baustein ändern möchten nachfolgend der Quelltext. Dieser kann über die Windows Zwischenablage herauskopiert werden und in ihrem SCL-Editor eingefügt werden. Zudem ist die Bausteinquelle in der downloadbaren Bibliothek unter Quellen enthalten.

 

 

FUNCTION_BLOCK FB4

 

VAR_INPUT

    Start:BOOL;  // Start der Zeitmessung

    Stopp:BOOL;  // Ende der Zeitmessung

END_VAR

 

VAR_OUTPUT

    Differnezzeit:DINT;  // Zeit in ms zwischen Start und Stopp

    aktiv:BOOL;         // Messung ist aktiv

END_VAR  

 

VAR

    Berechnungszeitpunkt:BOOL; // temporäre Variablen

    FP_Start:BOOL;

    FP_Stopp:BOOL;

    Start_int:BOOL; // statische Variablen

    Stopp_int:BOOL;

    Start_int2:BOOL;

    Stopp_int2:BOOL;

    Start_altwert:BOOL; // Für Pos. Flanke von Start

    Stopp_altwert:BOOL; // Für Pos. Flanke von Stopp

    FreigabeStopp:BOOL; // Freigabe für Stopp-Vorgang

    StartZeit:TIME;     // Systemzeit bei Start

    StoppZeit:TIME;     // Systemzeit bei Stopp

    StartZint:DINT;     // Startzeitpunkt im DINT-Format

    StoppZint:DINT;     // Stoppzeitpunkt im DINT-Format

END_VAR

 

BEGIN

Start_int2:=Start_int;

Start_int:=Start;

Stopp_int2:=Stopp_int;

Stopp_int:=Stopp;

 

IF (Start OR Start_int OR Start_int2) & Start_altwert<>(Start OR Start_int OR Start_int2) THEN FP_Start:=true; END_IF;

Start_altwert := Start;     // Pos. Flanke von Start über ALT-NEU Vergleich

 

IF FP_Start THEN

   StartZeit:=TIME_TCK();   // Besitzt nur den Ausgangsparameter TIME

   FreigabeStopp:=true;     // Freigabe setzen für Endzeitpunkt einlesen

   aktiv:=true;             // Zur Gültigkeitskontrolle beim Aufruf

   StartZint:=TIME_TO_DINT(StartZeit);  // Wandlung von TIME nach DINT

   FP_Start:=false;

END_IF;

 

 

IF (Stopp OR Stopp_int OR Stopp_int2) & Stopp_altwert<>(Stopp OR Stopp_int OR Stopp_int2) THEN FP_Stopp:=true; END_IF;

Stopp_altwert := Stopp;     // Pos. Flanke über ALT-NEU Vergleich von Stopp

 

IF FP_Stopp & FreigabeStopp THEN

    StoppZeit:=TIME_TCK(); // TIME

    StoppZint:=TIME_TO_DINT(StoppZeit);

    Berechnungszeitpunkt:=true;

    FreigabeStopp:=false;

END_IF;

 

IF FP_Stopp THEN FP_Stopp:=false; END_IF;

   

IF Berechnungszeitpunkt THEN

    IF StartZeit<=StoppZeit THEN

        Differnezzeit:=StoppZint-StartZint;

    ELSE

        Differnezzeit:=2147483647-StartZint+StoppZint;  

    END_IF;

    aktiv:=false;

    Berechnungszeitpunkt:=false;

END_IF;

 

END_FUNCTION_BLOCK

 

 

 

 

 

Zum Bausteindownload

Zur FAQ-Download-Seite

Zur Startseite