Sonstiges Erklärung DELAY Baustein

C

chipchap

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo alle zusammen.

Ich ersuche gerade zu verstehen wie ein DELAY-Baustein funktioniert.

-Wenn RUN := FALSE --> dann wird der Eingangswert unverändert ausgegeben ( habe ich verstanden )
-Wenn RUN := TRUE -- > dann wird der Eingangswert um einen festgelegten N-Wert verspätet ausgegeben ( habe ich auch verstanden )

Nun gibt es hier eine Beschreibung: - der Regler arbeitet intern mit einem Ringspeicher X der 128 Plätze hat. ( habe ich verstanden )

- als Vorbereitung auf den RUN-Modus wird der Zeiger IXIN für das Ablegen des Eingangssignals XIN
im Ringspeicher X auf N und der Zeiger IXOUT für die Ausgabe des Signals aus dem Speicher X in die Ausgangsvariable
XOUT auf 0 gesetzt.
Außerdem werden die ersten N+1 Plätze des Ringspeichers mit dem aktuellen Eingang XIN belegt.
Dadurch wird nach dem Umschalten in den RUN-Modus zunächst N+1 mal der aktuelle Eingang XIN am Ausgang
ausgegeben. ( den Teil habe ich nicht verstanden )

Im Anhang seht ihr einen Tabelle einer Aufgabe. RUN und XIN war gegeben und N hat eine Vorgabe von 3.
Wie man den IXIN und den XOUT bei RUN := FALSE herausfindet ( habe ich verstanden )

Kann mir jemand erklären wie das funktioniert? Hört sich einfach an, komme aber nicht auf die restlichen Ergebnisse. ( habe ich nicht verstanden )


MfG
 

Anhänge

  • DELAY Tabelle0001.jpg
    DELAY Tabelle0001.jpg
    233,1 KB · Aufrufe: 45
.
Mal schnell überflogen und mal so beschrieben:


RUN=0
Je nach Wert des Index-Wertes IXIN wird der XIN-Wert auf die Positionen
von X[0] bis zu X[IXIN] aufgefüllt/gespeichert.
Der Index scheint bei RUN=0 nicht weiterzulaufen.
Bei Änderung des XIN werden die vorherigen Werte bis zu dieser Position
wieder überschrieben.
Der Index IXOUT zeigt dabei stets auf die Pos. X[0], der Wert dieser Position
wird auch mit XOUT ausgegeben.

Also: was in deinen Baustein reingeht, kommt auch wieder raus.
--> Das sind die Zeilen 1 + 2 bei deiner Tabelle.


RUN=1
Nun werden die Pos. nur noch einzeln in Abhängigkeit des Index IXIN
beschrieben.
In Zeile 3 wird XIN auf Pos. 4 geschrieben, weil IXIN den Wert 4 hat.
Der Wert von IXIN wird nun aber stets weiter hochgezählt.
Alle folgenden XIN-Werte werden ebenso dorthin geschrieben, wie es
der Wert von IXIN vorgibt.



Ausgabe XOUT
Die Ausgabe XOUT erfolgt ebenfalls indiziert, und zwar abhängig vom
Index IXOUT.
Je nach Wert des IXOUT wird die entsprechende Pos. ausgegeben.
Bei RUN=1 wird der Index IXOUT von "0" beginnend hochgezählt,
in XOUT wird der Wert ausgegeben, auf den der Index zeigt.


Beispiel
In deiner Tabelle fängt der RUN-Modus in Zeile 3 an, IXOUT zeigt
auf Position 1.

In Zeile 5 ist IXOUT = 3, deswegen wird mit XOUT der Wert X[3]
ausgegeben.

Ab Zeile 6 erfolgt die Änderung des XOUT, weil nun der Index IXOUT
auf die Position X[4]=3 zeigt.


Fazit
Der Baustein gibt die gespeicherten Werte X[n] in Abhängigkeit
von der Differenz der Beiden Indizes IXIN und IXOUT aus.
Je nach Änderung des IXOUT gibst du den Eingangswert XIN verzögert
(mit einstellbarer Verzögerung/Totzeit) an XOUT wieder aus.

In welcher Abhängigkeit deine Indizes verändert werden, ist aber nicht
zu ersehen.
 
.

Hier eine programmierte Lösung zu deinem Baustein:

Code:
FUNCTION_BLOCK DELAY    (* N-sample delay *)
  VAR_INPUT
    RUN : BOOL ;     (* 1 = run, 0 = reset *)
    XIN : REAL ;
    N   : INT        (* 0 <= N < 128 or manufacturer- *)
  END_VAR            (*      specified maximum value  *)
  VAR_OUTPUT XOUT : REAL; END_VAR   (* Delayed output *)
  VAR X : ARRAY [0..127]     (* N-Element queue *)
               OF REAL;      (* with FIFO discipline *)
      I, IXIN, IXOUT : INT := 0;
  END_VAR
  IF RUN THEN IXIN := MOD(IXIN + 1, 128) ; X[IXIN] := XIN ;
              IXOUT := MOD(IXOUT + 1, 128) ; XOUT := X[IXOUT];
  ELSE XOUT := XIN ; IXIN := N ; IXOUT := 0;
       FOR I := 0 TO N DO X[I] := XIN; END_FOR;
  END_IF ;
END_FUNCTION_BLOCK
(SOURCE = l[URL="http://www.baum.com.au/~jiri/mat/mat-main/logic/iec/AnnexF/delay_st.txt"]ook here)[/URL]

:
 
So, ich habe mich jetzt nochmal intensiv mit dem DELAY Baustein befasst. Den habe ich jetzt endgültig verstanden.
Nun setze ich mich an den AVERAGE Baustein ;)
 
Zurück
Oben