Autor Thema: Totzeitglied  (Gelesen 6208 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Totzeitglied
« am: 01. Januar 2007, 12:11:45 »
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;
« Letzte Änderung: 06. Februar 2007, 22:53:10 von hugo »