

/*****************    C o m m u n i c a t i o n   t o   E P I C S    *************************/

int  EIB_SpaL(char *s, int val)
int  EIB_SpaD(char *s, double val)
int  EIB_GpaL(char *s, long *val)
int  EIB_GpaD(char *s, double *val)




void CheckError(EIB7_ERR error)

int  EIB_ValidEncoder(int enc_nr)
int  EIB_ValidAxis(int nr)
int  EIB_GetEncoderData(int enc_nr, DATA *data)


/************************  R e f e r e n c e    *****************************************/

 Nach dem Einschalten der EIB muss eine Referenzfahrt gemacht werden. Gab es lediglich eine 
 Verbindungsunterbrechung k"onnte die EIB die Referenz noch gespeichert haben.
 Nach dem Einschalten der EIB zeigt deren Register eine 0 f"ur die Referenzposition.


EIB_UpdateHOMED():

   Beim Starten des SoftIOCs soll gepr"uft werden ob eine Referenzfahrt notwendig ist. 

     Dazu merke ich mir den Wert der zuletzt gefundenen Referenz in einer Variablen (.LastRef)
     und schreibe ihn nach einer Referenzfahrt auch in eine Datei: EIB_WriteRef()

     - Beim Starten des SoftIOCs lese ich diesen Wert EIB_ReadRef(), vergleiche ihn mit der EIB
       und setzte die Variable HOMED entprechend.

   Nach einer Vebindungsaufnahme mit der EIB muss gepr"uft werden ob eine Referenzfahrt notwendig ist.

    Dazu lese ich das Register der EIB, vergleiche es mit LastRef und setze die Variable HOMED entsprechend.

     - Man koennte auch einfach schauen ob das Register der EIB 0 zeigt, aber in ganz seltenen F"allen
       k"onnte ja auch die Referenz dort sein. Daher der Vergleich mit LastRef.



void EIB_WriteRef(int axis,long value)
int  EIB_ReadRef(int enc_nr,long *value)
void EIB_UpdateHOMED(int enc_nr, DATA Data)


void EIB_SetRefCheck(int enc_axis, EIB7_MODE mode)   # Setze die EIB auf Referenzsuche
int  EIB_ReferenceStatus(int enc_nr)                 # Schauen ob die EIB auf Referenzsuche ist


int  EIB_Start_MonitorRefTask(void)                  # Startet die Task die den Referenzstatus abfr"agt 
void EIB_MonitorRef(void)  
  
int  EIB_Start_Reference(int enc_nr)                 # Setzt die EIB in den Referenzsuchmodus






/*****************    S t a r t  U p  t h e    S o f t w a r e    *************************/
int  EIB_Start()

Initilize variables         -> EIB_Init()
Read      Config files      -> cfgReadAll()
Establish connection to EIB -> EIB_Start_ConnectTask(void) 
                                     -> EIB_Connect(char *hostname)
                                     -> EIB_Init_Enc(enc_nr)
Monitor   Reference         -> EIB_Start_MonitorRefTask()

void EIB_Init()
int  EIB_Init_Enc(int enc_nr)      
int  EIB_Close(EIB7_HANDLE eibh)



/********************* C o n n e c t  t o  E I B  *****************************************/
 
int  EIB_Start_ConnectTask(void)


 Startet EIB_Connect_Task, die die Verbindung zur EIB aufbaut und entscheidet ob alle  
 incrementellen Achsen ihre Referenz noch haben.                                        

 Falls es im Laufe des Betriebes zu einer Fehlermeldung kommt, die auf eine 
 Unterbrechung der Verbindung schliesen l"asst  ruft CheckError() die Task auf um  
   1) die Verbindung wieder aufzubauen               -> EIB_Connect
   2) die Enkoder evtl wieder neu zu initialisieren  -> EIB_Init_Enc(enc_nr) 



int  EIB_Start_ConnectTask(void)
void EIB_ConnectTask(void)           -> EIB_Connect(char *hostname)
                                     -> EIB_Init_Enc(enc_nr) 

int  EIB_Connect(char *hostname)




/**************************  R e a d   E n c o d e r **************************************/

 read value of channel ch                                                            
 The position will be latched. The EIB must be in polling mode.                      

int EIB_Read(int enc_nr, double *value)


/*****************************  D i a g n o s e    *************************************/

void EIB_Show_Eib()
void EIB_Menu(void)











