Autor Thema: Analogwert verzögern  (Gelesen 3696 mal)

Offline AMP

  • Newbie
  • *
  • Beiträge: 2
  • tsmc_AMP
Analogwert verzögern
« am: Oktober 25, 2007, 15:07:32 Nachmittag »
Easy-Freunde

Bin neu hier...

Ich absolviere die Lehre als Automatiker, und arbeite an einem Lehrlingsprojekt. Der Auftrag ist, mit Hilfe der Polymechaniker einen Kickertisch selber zu bauen, und mit verschiendenen eletronischen Specials den Tischfussball spannender zu machen, um an Messen aufzufallen  ;D
Der Wunsch ist aufgekommen, eine Ballkraftmessung einzubauen:
Der Ball prallt an ein, im Tor montiertes Blech, das auf Schienen läufft und mit Federn gedämpft wird. Je nach Stärke drückt es unterschiedlich gegen die Feder...
Das Blech gibt seine Bewegung weiter an ein Poti, das dann einen Wert auf den Analogeingang auf mein EASY CONTROL EC4P-222 gibt.
Das Signal geht weiter auf eine Balkenanzeige mit Analogeingang. (von QA01 aus)
Damit man aber genau ablesen kann, wie Stark der Schuss war muss ich den Peakwert des Analogen Eingangs länger anzeigen, und ihn dann nach ungefähr 3 sekunden rücksetzen.

Habt ihr eine Idee wie diese Aufgabe zu lösen ist?

Danke im Voraus für die Hilfe



Offline DieterB

  • Full Member
  • ***
  • Beiträge: 119
Re: Analogwert verzögern
« Antwort #1 am: Oktober 25, 2007, 18:21:05 Nachmittag »
Hallo AMP,

hier ist ein kleines Beispielprogramm. Ich hoffe es arbeitet wie gewünscht.
Die Ermittlung des Spitzenwerts erledigt der Funktionsbaustein "Peak".

PS: Mangels einer EasyControl konnte ich den Baustein leider nicht mit einer echten
Hardware testen.

Gruß Dieter

Offline AMP

  • Newbie
  • *
  • Beiträge: 2
  • tsmc_AMP
Re: Analogwert verzögern
« Antwort #2 am: Oktober 29, 2007, 11:13:14 Vormittag »
Hey Dieter

Funktioniert wunderbar!! Herzlichen Dank!
Hab es mir komplizierter vorgestellt, ein Programm zu schrieben, das Peak werte speichert!
Im Funktionsblock ist nur das Rücksetzen des Peakwertes geschrieben...
Wo hast du aber in diesem Funktionsblock das Programm, dass für das Speichern des Peakwertes zuständig ist? Kanst du mir das erklähren?

Herzlichen Dank, für die Hilfe!

Gruss AMP


Offline DieterB

  • Full Member
  • ***
  • Beiträge: 119
Re: Analogwert verzögern
« Antwort #3 am: Oktober 30, 2007, 18:59:06 Nachmittag »
Hallo AMP,

das ist eigentlich ganz einfach.

Hier ist nochmal der kommentierte Funktionsbaustein:

FUNCTION_BLOCK Peak
VAR_INPUT
   uiInputValue       :UINT;   (* Eingangswert: Aktueller Wert des Analog-Eingangs *)
   tDelay         :TIME;      (* Verzögerungszeit *)
END_VAR
VAR_OUTPUT
   uiPeak         :UINT;       (* Peak-Wert *)
END_VAR
VAR
   fbTimer         :TON;        (* Verzögerungstimer *)
END_VAR

fbTimer(IN:= NOT FbTimer.Q , PT:= tDelay );

IF  fbTimer.Q = TRUE THEN   (* Bei Ablauf des Timers wird der Spitzenwert gelöscht *)
   uiPeak := 0;
END_IF

IF uiInputValue > uiPeak THEN   (* Neuen Spitzenwert ermitteln *)
   uiPeak := uiInputValue;
END_IF
END_FUNCTION_BLOCK


Der Einschaltverzögerte Timer ("fbTimer") setzt nach der am FB-Eingang "tDelay" angegebenen Zeit seinen Ausgang "Q".
Durch die Anweisung "IN:= NOT FbTimer.Q" wird er sofort wieder gestartet,  sodass jetzt in periodischen Abständen der Ausgang Q immer wieder für einen Zyklus gesetzt wird.     

Das wird in dem folgenden IF-Block ausgenutzt, um den Spitzenwert "uiPeak" nach Ablauf der Delayzeit immer  wieder zu löschen.

Die Ermittlung des Spitzenwerts geschieht im folgenden IF-Block:
Immer dann wenn der Wert am Bausteineingang "uiInputValue" (der aktuelle Wert des Analogeingangs) größer ist als der Wert von "uiPeak" (der aktuelle Spitzenwert), ist die Bedingung der If-Abfrage erfüllt und die Anweisung innerhalb des Blocks werden ausgeführt. 

Hier wird dann der Wert von "uiInputValue" als neuer Spitzenwert in "uiPeak" übernommen.
Ist die IF-Bedingung nicht erfüllt geschieht nichts und der aktuelle Spitzenwert bleibt unverändert erhalten.


Ich hoffe ich hab das einigermassen verständlich erklärt.

Viele Grüße
Dieter