CCS Modul   R_ARRAY_TRIG
 
   $Id: r_array_trig.C,v 1.20 2005/04/18 06:52:17 jsj3rt Exp $
   ---------------------------------------------------------------------
   Kurzbeschreibung: 	Triggererkennung in einem Feld
   ---------------------------------------------------------------------
   Projekt:		CCS
   Sourcefile:		r_array_trig.C
   Autor:			RtW/TEF72-Juilfs (20.10.2001)
   Zielsystem:		HP9000/V743 (HP-RT 2.0x), /Sxxx (HP-UX 9.0x)
   Sprache:		C++ 
   ---------------------------------------------------------------------
   Prototyp:
   MPI Schnittstelle
   void r_array_trig(
	   ,shm_stringpointer   *zeilen_wert 
	   ,long index1
	   ,long anzahl)
  ---------------------------------------------------------------------
   Aufruf: im Vectorinterpreter
   
	 (*funktionen[modulnummer])
	    (Ssp_expand_zeile
	     ,Ssp_expand_wert
	     ,p_verwaltung->begin_modulblock
	     ,p_verwaltung->anzahl_modulparameter);
   ---------------------------------------------------------------------
   Funktionsbeschreibung:
   
   Über dieses Modul kann ein Feld nach dem n-ten Trigger durchsucht werden ,
   der zugehörige Index wird zurückgegeben. Falls der gewünschte Triggerpunkt 
   nicht gefunden wurde wird der Index -1 zurückgegeben. 
   Der Suchbereich kann durch die Parameter ARRAY_START und ARRAY_END 
   eingeengt werden. Sind diese nicht angegeben, startet der Suchbereich 
   automatisch bei 1 und endet bei der Anzahl belegter Elemente des Feldes. 
   Ist der Wert von ARRAY_START groesser dem Wert ARRAY_END wird das Feld 
   vom Ende her durchsucht.
   Um Fehlerspitzen zu ignorieren kann ueber den Wert HYSTERESE eine
   Anzahl Messpunkte angegeben werden, das Modul ueberprueft nach einer 
   Flankenerkennung ob der Wert (aktueller Index + HYSTERESE) ebenfalls
   der Triggerbedingung entspricht, ist dies nicht der Fall wird der Trigger
   ignoriert.
   Soll der Index der n-ten Flanke ermittelt werden, muss in dem
   Parameter COUNTS n-1 eingetragen werden. Dieser gibt an wieviele
   legale Triggerbedingungen ignoriert werden sollen.
   Ueber den Parameter OPERATION kann die Art der Auswertung festgelegt
   werden, es ist darauf zu achten, dass bei "==" oder "!=" Vergleiche
   in Double Feldern schon bei sehr kleinen Wertdifferenzen (z.B. durch 
   Rundungen) es zu nicht erkennen einer Triggerbedingung fuehren kann.

   Beispiel:
	
	Array ist belegt mit der unten angegebenen Kurvenform
	ARRAY_START = leer    Modul belegt den Start mit Index 0
	ARRAY_END   = leer    Modul belegt das Ende mit der Anzahl der
						  Elemente im Feld
	ARRAY_TRIG  = 500
	HYSTERESE   = 5
	OPERATION   = >
	COUNTS      = 1
	
	Das Modul durchsucht ab Index 0 die erste Flanke bei der der
	Wert groesser 500 ist. Dies ist der Fall bei der positiven 
	Flanke von 2. Da die Anzahl Messpunkte zwischen dem Triggerpunkt
	und seinem komplementären Trigger (negative Flanke von 2) kleiner
	der vorgegebenen Hysterese (5) ist, wird dieser Impuls ignoriert.
	Die Impuls 3 wird als regulärer Trigger erkannt, wird aber ignoriert,
	da fuer die zu ignorierenden Trigger 1 angewaehlt wurde.
	Als Ergebnis wird der Index auf die positive Flanke von Impuls 4
	zurueckgeliefert.

  1000 ----+	      +-+                +------+      +------+
           |	      | |                |      |      |      |
           |	      | |                |      |      |      |
           |	      | |                |      |      |      |
  100	   +----------+ +----------------+      +------+      +-----
		  1            2                    3             4


   Beschreibung der Modulübergabeparameter:
1 PRUEFSCHRITT
   GAUDI Prüfschritt
   ------------------------------
2 POSITION
   PAV- Position
   ------------------------------
3 ARRAY
   Variablen Name		
   ------------------------------
4 ARRAY_START
   Index bei der die Auswertung beginnt 
   Index >= 1
   ------------------------------
5 ARRAY_END
   Index bei der die Auswertung endet
   Index >= 1
   ------------------------------
6 ARRAY_TRIG
   Trigger Wert
   ------------------------------
7 HYSTERESE
   Um Fehlerspitzen zu ignorieren kann ueber den Wert HYSTERESE eine
   Anzahl Messpunkte angegeben werden, das Modul ueberprueft nach einer 
   Flankenerkennung ob der Wert (aktueller Index + HYSTERESE) ebenfalls
   der Triggerbedingung entspricht, ist dies nicht der Fall wird der Trigger
   ignoriert.
   ------------------------------
8 OPERATION
   Eingabe des Vergleichsoperators
	 == gleich
	 != ungleich
	 >  grösser
	 >= grösser gleich
	 <  kleiner
	 <= kleiner gleich
   ------------------------------
9 COUNTS
   Anzahl der zu ignorierenden Trigger bei der Triggererkennung 
   ------------------------------
10 ERGEBNIS
   Index auf den gefundenen Trigger
   -1 falls der Trigger nicht gefunden wurde
   ------------------------------
11 FEHLERFLAG
   Fehlerflag