Totzeitglied

Begonnen von hugo, 01. Januar 2007, 12:11:45

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 22 Gäste betrachten dieses Thema.

hugo

zur regelungstechnik ist vielfach ein totzeitglied noetig, welches aber in software nur unzureichend implememtiert werden kann da es nur endliche samples eines eingangs innerhalb gegebener zeit machen kann.
da je nach anwendung unterschiedliche aufloesung (anzahl der samples) nötig sind haben wir uns entschlossen mehrere totzeitglieder (verzoegerungsglied) mit unterschiedlicher auflösung zu programmieren.
FT_TN8, FT_TN16 und FT_TN64

anbei der code fuer das FT_TN8

FUNCTION_BLOCK FT_TN8
VAR_INPUT
   in : REAL;
   T : TIME;
END_VAR
VAR_OUTPUT
   out : REAL;
END_VAR
VAR
   length : INT := 8;
   X : ARRAY[0..7] OF REAL;
   cnt : INT;
   last : TIME;
   tx: TIME;
   init: BOOL;
END_VAR

(*
version 1.0   1 Jan 2007
programmer    hugo
tested by      tobias

FT_TN8 is delay function, it will delay a signal by a specified time : T and will store 8 values of in before they are put thru to out.
if higher resolution is needed, pls use FT_TN16 or FT_TN64 instead.

*)

tx := TIME();
IF NOT init THEN
   x[cnt] := in;
   init := TRUE;
   last := tx;
ELSIF tx - last >= T / length THEN
   IF cnt = length - 1 THEN cnt := 0; ELSE cnt := cnt + 1; END_IF;
   Out := X[cnt];
   x[cnt] := in;
   last := tx;
END_IF;