CCS Modul   Q_AUFTRAG
 
   $Id: q_auftrag.C,v 1.16 2005/09/09 09:25:44 scl3an Exp $
   ---------------------------------------------------------------------
   Kurzbeschreibung: 	Auftrag an die PSS senden.
   ---------------------------------------------------------------------
   Projekt:		CCS
   Sourcefile:		q_auftrag.C
   Autor:		RtW/TEF72-Schneider (02.04.96)
   Zielsystem:		HP9000/V743 (HP-RT 2.0x), /Sxxx (HP-UX 9.0x)
   Sprache:		C++
   ---------------------------------------------------------------------
   Prototyp:
   MPI Schnittstelle
   void p_init(shm_stringpointer *zeilen_info
	   ,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:
   Dieses Modul dient zur Auftragsvergabe an die PSS. Hiermit koennen beliebige
   Strings an die PSS bzw. an das SG gesendet werden. Die Auswertung der 
   Antwort erfolgt nicht in diesem Modul. Die Antwort wird im shared Memory
   abgelegt und kann dort z.B. vom Modul p_zerlege_string geholt und 
   verarbeitet werden.
   
   Beschreibung der Moduluebergabeparameter:
1 PRUEFSCHRITT
   	GAUDI Pruefschritt
   ------------------------------
2 POSITION
   	PAV- Position
   ------------------------------
3 BEFEHL
	Steuerbefehl fuer die PSS 
    			Diese Befehle gelten auch fuer die SKM, falls dies 
			explizit vermerkt ist.
	BEDIENBLOCK:	Der Block mit dem die Kommunikation mir dem SG 
			aufrechterhalten werden soll, kann hier der PSS
			mitgeteilt werden. Dieser Befehl muss nach Initialisierung
			der Schnittstelle und vor dem Reizen des SG erfolgen.
			Unterstuetzt bei:
				KP2000
				BLOCK
	BUILD_CS:	Dieser Befehl bildet eine Checksumme ueber den im Parameter
			Daten angegebenen Datenbereich.
			Stringaufbau im Parameter DATUM:
				Anfangsadresse 	= 00..FF
				Endadresse 	= 00..FF
			Unterstuetzt bei:
				EEPROM
    	COMBLOCK:	Kommunikation mit dem SG. Es wird ein Block
			zum SG gesendet und auf die Antwort vom SG 
			gewartet. Die Antwort vom SG wird zum Host 
			weitergeleitet.
			Der zum SG zu sendende Block ist im Parameter
			DATUM einzutragen.
			Unterstuetzt bei:
				KP2000
				DDS
				JECS: PS-Befehl
				EASY
				K71
				BLOCK
    	COMBLOCK_MAD:	Wie COMBLOCK, jedoch wird nach Empfang der Botschaft
			das Senden des SG gestoppt.
			Unterstuetzt bei:
				JECS: MAD-Kommando
    	DLM_NACHLADEN:	Mit diesem Befehl wird das Downloadmodul aus dem 
	(nur SKM)	pcc-File zum SG geladen.
			Unterstuetzt bei: (nur SKM)
				Prokist
    	DREZAHLF_AN:	Mit diesem Befehl wird Frequenz fuer die Drehzahlfuehler der
			ABS-Geraete angeschaltet. Es werden 4 Frequenzen benoetigt.
			Eingabe in DATUM:
				2450\\3400\\2450\\4000\\	in HEX xxxx Hz
				z.B.: 2450H => 9296 Hz
			Unterstuetzt bei: (nur SKM)
				alle Protokolle
	DREZAHLF_AUS:	Die Drehzahlfuehler werden abgeschaltet.
			Unterstuetzt bei: (nur SKM)
				alle Protokolle
	EMPFANG_SG:	Die Schnittstelle wird auf Hoeren geschaltet. Es muss
			innerhalb der Timeoutzeit eine Botschaft vom SG
			empfangen werden, sonst erfolgt eine Fehlermeldung.
			ACHTUNG: 
			Ein Schalten der Kommunikationsleitung auf High, waehrend 
			die Schnittstelle auf Hoeren geschaltet ist, fuehrt zu 
			falschen (sinnlosen) empfangenen Botschaften und ist 
			daher nicht moeglich.
			Unterstuetzt bei:
				DDS
				EASY
				K71
	FLASH_PROG:	Mit diesem Befehl kann eine Flashprogrammierung durch-
			gefuehrt werden. In der Vatiablen DATUM sind die 
			notwendigen Informationen an die PSS einzutragen.
			(Siehe auch PSS-Doku.) Ist das zu programmierende File 
			der PSS nicht bekannt, so wird dies hier automatisch 
			geladen, und dann die Programmierung durchgefuehrt.
			Beispielstring in DATUM:
			AA||<filename>||MM||LL||OOOOOO||NNNNNN||
			
			MM 	= Modus:		
			00 =>	Die Laenge LL ist die relev. Datenlaenge fuer die
			        Bloecke zum SG
			01 => 	Die Laenge zum SG steht im File
			02 => 	Es wird mit Offset und Laenge zugegriffen
				Die Laenge LL ist die relev. Datenlaenge fuer die
				Bloecke zum SG
			03 => 	Es wird mit Offset und Laenge zugegriffen
				Die Laenge zum SG steht im File
			LL	=Laenge: Laenge des Blocks zum SG. (0..FF)
			Bei Modus 02 oder 03: OOOOOO und NNNNNN
			OOOOOO=Offset:	Offset mit dem auf das File zugegriffen
				        werden soll
			NNNNNN=Laenge: 	Zu programmierende Laenge in Byte
			
			Unterstuetzt bei:
				Alle Protokolle
	FLASH_ANTW_EIN:	Mit diesem Befehl kann die Antwort, die vom SG bei der
			Flashprogrammierung erwartet wird, eingestellt werden.
			Mit Setzen des Initparameters 0x80 = FLASH_SG_ANTW = 02
			wird die Antwort des SG dann mit dieser Botschaft auf 
			Uebereinstimmung verglichen (nur die Nutzdaten einschl.
			Blocktitel).
			Unterstuetzt bei: (SKM)
				Alle Protokolle 
	FLASH_PROG_PAR:	Wie FLASH_PROG, jedoch koennen hier im Zusammenhang mit
			PARA3 = L mehrere PSS'n nacheinander dazu veranlasst 
			werden, einen Flashdatensatz zum SG zu programmieren.
			Die Antwort OK wird zurueckgegeben bevor die Flash-
			programmierung erfolgt.
			Die Antwort fuer die Richtigkeit der Programmierung 
			kann spaeter mit einem erneuten Modulaufruf 
			geholt werden, indem PARA3 = G gesetzt wird.
			Bevor eine andere PSS angesprochen wird, muss zuerst die 
			Adresse mit dem Modul P_STEUER geaendert werden.
			Unterstuetzt bei:
				Alle Protokolle
	INIT_PRUEFUNG:	Hiermit wird initialisiert, ob 
	(nur SKM)	E = Endpruefung 
			Z = Zwischenpruefung oder
			P = Programmierung des SG
			gewuenscht wird. Das Zeichen E/Z/P muss unter Datum 
			eingetragen werden.
			Unterstuetzt bei: (nur SKM)
				Prokist 
	KOMM_ENDE:	Hiermit beendet die Schnittstelle die Kommunikation mit 
			dem SG. D.h., dass eine Bedienung der Schnittstelle nicht 
			mehr erfolgt. 
			Wird dieser Befehl vor Abschalten des SG nicht an die 
			Schnittstelle gegeben, so wird ein Timeout abgewartet, 
			und die Pruefung verzoegert sich entsprechend.
			Unterstuetzt bei:
				Alle Protokolle
	PRUEFMODUL:	Mit diesem Befehl wird die SKM veranlasst eine Pruef-
	(nur SKM)	sequenz aus dem pms-File abzuarbeiten.
			Das entsprechende Label muss im Parameter DATUM angegeben
			werden. (Z.B. LABEL_55)
			Dieses Label muss selbstverstaendlich im pms-File 
			wiederzufinden sein.
			Unterstuetzt bei: (nur SKM)
				Prokist
	READ_EEPROM:	Dieser Befehl liest aus einem EEPROM die Daten eines
			Adressbereiches von Anfangsadresse bis Endadresse aus.
			Aufbau des Datenstrings: 
				Anfangsadresse 	= 00..FF
				Endadresse 	= 00..FF
			Unterstuetzt bei:
				EEPROM
	REIZEN: 	Reizen des SG.
			Unterstuetzt bei:
				KP2000: (5-Baud Reizung)
				JECS
	REIZ_MA:	Reizen des SG mit Massetastung.
			Nach Massetastung meldet sich das SG. Die PSS empfaengt 
			die Meldung, und gibt an den Host ein OK zurueck.
			Unterstuetzt bei:
				KP2000
				DDS
				K71
	REIZ_MA_E3:	Reizen des SG mit Massetastung.
			Nach Massetastung meldet sich das SG. Die PSS/SKM empfaengt 
			die Meldung, und gibt sie an den Host weiter.
			Bei Fehler SG_ANTWORTET_NICHT wird als Status OK zurueck
			gegeben.
			Als Daten wird E3E3E3 an den Host zurueck gegeben.
			Unterstuetzt bei:
				KP2000
	REIZ_PO_KEY:	Reizen des SG durch Power On (einschalten UBATT).
			Nach Power On meldet sich das SG mit den Key Bytes. 
			Die Schnittstelle empfaengt die Meldung und den darauf folgenden
			Acknowledge Block und gibt dann dem Host ein OK zurueck.
			Unterstuetzt bei:
				K71
	RELAIS_CLOSE:   Die bei der Initialisierung eingeschalteten Relais koennen
			hier nach einem RELAIS_OPEN wieder geschlossen werden.
			Unterstuetzt bei:
				Alle Protokolle
	RELAIS_OPEN:    Die bei der Initialisierung eingeschalteten Relais koennen
			hier geoeffnet werden.
			Unterstuetzt bei:
				Alle Protokolle
	RESET:		Es wird ein Reset auf die Schnittstellenkarte ausgegeben.
				Alle Protokolle (SKM noch nicht)
	RESETTEST:	Reset-Test fuer das DDS-SG.
			Es wird eine Botschaft zum SG gesendet, und es darf 
			keine Antwort zurueckkommen. Dann ist dieser Test OK.
			Unterstuetzt bei:
				DDS
	RETURN:		Ruecksprung aus Protokoll ohne die Initialisierungs-
			parameter zu aendern.			
			Unterstuetzt bei:	(nur SKM)
				Alle Protokolle
	SEED_KEY:   	Seed and Key Verfahren fuer EDC 15 C. Es werden hierbei 2
			Kommunikationen mit dem SG aufgenommen, die im 
			DATUM eingetragen werden muessen.
			B1B1B1B1...||MM||B2B2BK0K1K2K3B2B2....||
			B1 = Botschaft 1 
			B2 = Botschaft 2
			K0 - Kn = Platzhalter fuer Key
			MM = Mode : 02 = EDC15 C (Access - Mode aus Botschaft B1)
			03 =  (Access - Mode aus INIT-Feld 0xE0)
			Unterstuetzt bei:
			Alle Protokolle
	SEND_SG:	Die eingegebene Botschaft wird an das SG gesendet. Es
			wird nicht auf eine Antwort gewartet. Die Schnittstelle
			liefert sofort ein OK zurueck.
			Unterstuetzt bei:
				K71
				BLOCK
	STOP_SG_SEND:	Hiermit wird das SG veranlasst, das dauernde Senden
			einzustellen.
			Unterstuetzt bei:
				JECS
	TIMEOUT_PSS:
			Hiermit kann der Timeout der PSS gesetzt werden.
			(Eintrag in ms, 1...640000ms)
	TIMEOUT_SKM:
			Hiermit kann der Timeout der PSS gesetzt werden.
			(Eintrag in ms, 1...640000ms)
	TRIG_SGEMPF_ON: Einschalten des Triggers bei Empfang vom SG.
			Achtung nur als Gate-Funktion zu verwenden.
			Triggerline unter DATUM eintragen:
			Unterstuetzt bei SKM:
				EASY			
	TRIG_SGEMPF_OF: Abschalten des Triggers bei Empfang vom SG.
			noch nicht implementiert !!
	WEGFAHRSPERRE:	Hiermit wird die Wegfahrsperre im SG geloest.
			Unterstuetzt bei:
				JECS
	WEGFAHR_LESE:	Hiermit wird das Wegfahrsperrenbyte vom SG gelesen.
			Unterstuetzt bei:
				JECS
	WRITE_EEPROM:	Dieser Befehl beschreibt ein EEPROM mit den im String DATUM
			stehenden Daten, ab der Anfangsadresse.
			Aufbau des Datenstrings: 
				Anfangsadresse 	= 00..FF
				Datum 1		= 00..FF (highbyte)
				Datum 1		= 00..FF (lowbyte)
				Datum n		= 00..FF (highbyte)
				Datum n		= 00..FF (lowbyte)
			Unterstuetzt bei:
				EEPROM
	WRITE_ENABLE:	Dieser Befehl schaltet das Eeprom in den Zustand, dass
			es beschrieben werden kann.
			Unterstuetzt bei:
				EEPROM
	WRITE_DISABLE:	Dieser Befehl schaltet das Eeprom in den Zustand, dass
			das Beschreiben verboten wird.
			Unterstuetzt bei:
				EEPROM
	BEFEHLxx:	Mit diesem Schluesselwort kann jeder beliebige Befehl an  
			die Schnittststelle gegeben werden.
			Syntax: 
			BEFEHLXX wobei XX fuer den Hex-Code des entsprechenden
			Befehls steht. Der Hex-Code zum jeweiligen Befehl 
			kann der Doku der Schnittstelle entnommen werden.
			Vor den Datenstring wird hier noch eine Stringlaenge
			fuer das Protokoll gehaengt.
	COMMANDxx:	Wie BEFEHLxx, jedoch wird keine Laenge vor den Daten-
			string gehaengt.
4 DATUM
	Hier ist der String zur PSS bzw. zum SG einzutragen.
    			Blocklaenge und Checksumme fuer die jeweiligen Protokolle
			ermittelt die Software hier oder auf der PSS selbst.
			Der Header von KP2000 muss beim INIT mitgeteilt werden.
5 PARA1
	Steuerparameter for future use
6 TEST_FLAG
Steuerparameter fuer 
			ONLY_GOOD : diesen Schritt nur ausfuehren wenn fehlerfrei
			ONLY_BAD  : diesen Schritt nur bei Fehlern ausfuehren
			sonst     : diesen Schritt unabhaengig vom Fehlerstatus tun
7 PARA3
	Steuerparameter 
    	C:		Die Strings in Datum werden so lange aneinander gehaengt
			bis hier ein L oder S eingetragen wird.
	L:		Der String in Datum wird zur PSS gesendet, und es wird 
			auf Antwort gewartet.
	S:		Der String in Datum wird zur PSS gesendet, dann wird das
			Programm ohne auf Antwort zu warten fortgesetzt.
	G:		Es wird eine Antwort von der PSS geholt.
			Dies kann erforderlich sein, wenn in einem frueheren 
			Modulaufruf ein Job abgeschickt wurde, dessen Antwort
			jetzt erst ausgewertet werden soll.
8 SELECT
	Steuerparameter for MASTER
			ONLY_MASTER : diese Funktion darf nur   bei MASTER erfolgen
			SKIP_MASTER : diese Funktion darf nicht bei MASTER erfolgen
			ONLY_SERIE  : diese Funktion darf nur   bei SERIE  erfolgen
			SKIP_SERIE  : diese Funktion darf nicht bei SERIE  erfolgen
9 ERGEBNIS
	Pointer auf den Antwortstring der PSS
    
   -------------------------------
      
   ...
   ---------------------------------------------------------------------