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 Startseite