CCS Modul   R_PAS4_RPULSE
 
   $Id: r_pas4_rpulse.cpp,v 1.5 2005/09/21 12:28:57 pv73rt Exp $
   ---------------------------------------------------------------------
   Kurzbeschreibung: 	Auswertung des Leseimpuls bei PAS4/Zapper
   ---------------------------------------------------------------------
   Projekt:		CCS
   Sourcefile:		r_pas4_rpulse.C
   Autor:		Rtp/TEF32-Rapp (06.06.2005)
   Zielsystem:		Linux
   Sprache:		C++ 
   ---------------------------------------------------------------------
   Prototyp:
   MPI Schnittstelle
   void r_pas4_rpulse(
	   ,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:
   
   Auswertung des Leseimpulses des PAS4 Zappers ueber die gesampelten Daten
   von Spannung und Strom.
   Auswertung:
   1. Die Spannungdaten werden mit der Schrittweite 0.75 * PULSE_WIDTH nach 
      einem Leseimpuls durchsucht. 
      Um Fehler durch Ausreisser auszuschliessen, wurde eine erlaubte Anzahl 
      von Ausreissern definiert (zurzeit 1).
      Für die Pulserkennung wird ein Bereich von Messwerten ausgewertet 
      (erlaubte Ausreisser+2), ist in diesem Bereich die Anzahl erlaubter
      Ausreisser nicht ueberschritten worden, wird dieser Bereich als 
      innerhalb des Leseimpulses gewertet.
      Ein Messwert ist ein Ausreisser falls er ausserhalb den Bereichen
      MIN_IMP1 und MAX_IMP1 bzw. MIN_IMP2 und MAX_IMP2 liegt.
   2. Startflanke des Leseimpulses suchen.
   3. DELTA_T wird zur Startzeit des Leseimpulses hinzugefügt und über die 
      Messzeit MEASURE_T werden die Stromdaten gemittelt. Liegt der 
      gemittelte Stromwert in den Grenzen CUR_0_MIN - CUR_0_MAX wird 
      das Bit als 0 interpretiert, liegt er in den Grenzen  
      CUR_1_MIN - CUR_1_MAX dann wird das Bit als 1 interpretiert, liegt
      er ausserhalb beider Bereiche wird eine Fehlermeldung erzeugt.
   4. Vergleich der Bitmaske mit den ermittelten Bits.
   5. Wandlung der ermittelten Bits in ein Hexstring.

        ARRAY_1              -->       PULSE_WIDTH        <--
  10V (MIN_IMP2 bzw. MAX_IMP2)  +------------------------+ 
                                |                        | 
                 ----+          |                        | 
                     |          |                        | 
                     +----------+                        +----------------

       ARRAY_2
                                       +-------------+
                                       /             /             
       LEVEL ->                        /             /             
                                       /             /             
                 ----------------------+             +--------------------

                       DELTA_T ->           <-
                       MEASURE_T          ->       <-



   Beschreibung der Modulübergabeparameter:
1 PRUEFSCHRITT
   GAUDI Pruefschritt
   ------------------------------
2 POSITION
   PAV- Position
   ------------------------------
3 ARRAY_1
   Variablen Name in der die gesampelte Lesesapannung gespeichert ist
   ------------------------------
4 ARRAY_2
   Variablen Name in der der gesampelte Strom gespeichert ist
   ------------------------------
5 SAMPLE_RATE
   Abtastrate in us der gesampelten Daten.
   ------------------------------
6 MIN_IMP1
   Untere Grenze der ersten Lesespannung, wird zur Erkennung eines Leseimpulses
   verwendet.
   ------------------------------
7 MAX_IMP1
   Obere Grenze der ersten Lesespannung, wird zur Erkennung eines Leseimpulses
   verwendet.
   ------------------------------
8 MIN_IMP2
   Untere Grenze der zweiten Lesespannung, wird zur Erkennung eines Leseimpulses
   verwendet.
   ------------------------------
9 MAX_IMP2
   Obere Grenze der zweiten Lesespannung, wird zur Erkennung eines Leseimpulses
   verwendet.
   ------------------------------
10 PULSE_WIDTH
   Erwartete Pulsbreite des Leseimpulses, damit bei hohen Abtastraten nicht jeder
   Messwert überprueft werden muss, wird 0.75 * PULSE_WIDTH als Schrittweite fuer
   die Erkennung des Leseimpulses verwendet. 
   ------------------------------
11 BITMASK
   Bitmaske die mit der aus den Daten ermittelten Bits verglichen wird. Mögliche
   Werte sind 01X, wobei das Bit mit X nicht überprüft wird.
   ------------------------------
12 CUR_0_MIN
   Untere Grenze bis zu der der Stromwert als 0 erkannt wird.
   ------------------------------
13 CUR_0_MAX
   Obere Grenze bis zu der der Stromwert als 0 erkannt wird.
   ------------------------------
14 CUR_1_MIN
   Untere Grenze bis zu der der Stromwert als 1 erkannt wird.
   ------------------------------
15 CUR_1_MAX
   Obere Grenze bis zu der der Stromwert als 1 erkannt wird.
   ------------------------------
16 DELTA_T
   Zeit vom Start des Leseimpulses bis zur Auswertung des Stromimpulses
   ------------------------------
17 MEASURE_T
   Waehrend der Messzeit wird der Stromimpuls ausgewertet
   ------------------------------
18 HEX_STRING
   Rueckgabe des erkannten Bitmusters als Hexstring
   ------------------------------
19 ERGEBNIS
   100 = Ergebnis Ok
   0-n = bei Bit Sollwert = 1 und der Stromwert für dieses Bit 0 ist bzw. 
         nicht in den definierten Grenzen liegt, wird die Adresse des Bits 
         zurueckgegeben.
   -1  = Anzahl der gelesenen Bits unterscheidet sich von der vorgegebenen
   -2  = die Bits mehrerer Adressen sind nicht mit der Bitmaske identisch
   -3  = Soll Bit = 0 Strom nicht innerhalb der Grenzen fuer 0 Wert
   -4  = Strommittelwert nicht innerhalb der vorgegebenen Grenzen
   -5  = Die Spannung des Leseimpuls ist innerhalb der vorgegebenen 
         Messzeit ausserhalb der vorgegebenen Grenzen.
   -6  = Start des Leseimpulses nicht gefunden
   ------------------------------
20 FEHLERFLAG
   Fehlerflag