From 4f1c7242550789698c23ae965f03bebabbb87af0 Mon Sep 17 00:00:00 2001 From: zolliker Date: Wed, 1 Dec 2004 12:09:22 +0000 Subject: [PATCH] superflous file (now in psi) --- eurodriv.c | 395 ----------------------------------------------------- 1 file changed, 395 deletions(-) delete mode 100644 eurodriv.c diff --git a/eurodriv.c b/eurodriv.c deleted file mode 100644 index 270dbb55..00000000 --- a/eurodriv.c +++ /dev/null @@ -1,395 +0,0 @@ -/*-------------------------------------------------------------------------- - E U R O D R I V - - This file contains the implementation for the Eurotherm temperature - controller as used at SANS. The Eurotherm is a grossly strange device - which has a very weird command protocoll. The implementation here uses - the EI-Bisynch Protocoll option. This has to be configured in the - Eurotherm on the manual interface!! Also watch out for the unusual RS232- - setting: 7 bits, even parity, 1 stop bit. - - Mark Koennecke, May 1999 - - Copyright: see copyright.h -----------------------------------------------------------------------------*/ -#include -#include -#include -#include -#include -#include "fortify.h" -#include "conman.h" -#include "servlog.h" -#include "fortify.h" - - typedef struct __EVDriver *pEVDriver; - -#include "evdriver.i" -#include "psi/hardsup/el734_def.h" -#include "psi/hardsup/el734fix.h" -#include "psi/hardsup/serialsinq.h" -#include "eurodriv.h" - -#define INVALIDANSWER -1005 -#define INVALIDNUMBER -1006 -#define ERRNAK -1007 -#define NOSEND -1008 -/*-----------------------------------------------------------------------*/ - typedef struct { - void *pData; - char *pHost; - int iPort; - int iChannel; - int iLastError; - } EuroDriv, *pEuroDriv; - -/*------------------------------------------------------------------------*/ - int EuroGetParameter(void **pData, char *pPar,int iLen, float *fVal) - { - char pCommand[20]; - char pReply[20]; - char *pStart = NULL, *pEnd = NULL; - int iRet,i; - - /* configure the serial port */ - SerialATerm(pData,"1\x3"); /* ETX */ - pCommand[0] = '\x4'; /* EOT */ - pCommand[1] = '0'; /* GID*/ - pCommand[2] = '0'; /* GID*/ - pCommand[3] = '1'; /* UID*/ - pCommand[4] = '1'; /* UID*/ - pCommand[5] = '1'; /* CHAN */ - for(i = 0; i < iLen; i++) - { - pCommand[6+i] = pPar[i]; - } - pCommand[6+iLen] = '\x5'; /* ENQ*/ - pCommand[7+iLen] = '\0'; - - /* send */ - iRet = SerialWriteRead(pData,pCommand,pReply,19); - if(iRet != 1) - { - return iRet; - } - - /* decode reply */ - pStart = strstr(pReply,pPar); - if(!pStart) - { - if(strstr(pReply,"?TMO")) - { - return EL734__BAD_TMO; - } - else - { - return INVALIDANSWER; - } - } - iRet = sscanf(pStart+strlen(pPar),"%f",fVal); - if(iRet != 1) - { - return INVALIDNUMBER; - } - return 1; - } -/*------------------------------------------------------------------------*/ - int EuroSetParameter(void **pData, char *pPar,int iLen, - char *pFormat, float fVal) - { - char pCommand[30]; - char pNum[10]; - char *pPtr, *pPtr2; - char pReply[20]; - char bcc; - int iRet,i; - - - /* configure the serial port */ - SerialATerm(pData,"1\x06\x15"); /* ACK,NAK */ - pCommand[0] = '\x04'; /* EOT */ - pCommand[1] = '0'; /* GID*/ - pCommand[2] = '0'; /* GID*/ - pCommand[3] = '1'; /* UID*/ - pCommand[4] = '1'; /* UID*/ - pCommand[5] = '\x02'; - pCommand[6] = '1'; /* CHAN */ - for(i = 0; i < iLen; i++) - { - pCommand[7+i] = pPar[i]; - } - pPtr = pCommand + 7 + iLen; - sprintf(pNum,pFormat,fVal); - strcpy(pPtr,pNum); - pPtr += strlen(pNum); - *pPtr = '\x03'; - pPtr++; - - /* build the checksum */ - bcc = pCommand[6]; - pPtr2 = &pCommand[7]; - while(pPtr2 != pPtr) - { - bcc = bcc ^ *pPtr2; - pPtr2++; - } - *pPtr = bcc; - pPtr++; - *pPtr = '\0'; - - /* send */ - iRet = SerialSend(pData,pCommand); - if(iRet != 1) - { - return iRet; - } - iRet = SerialReceiveWithTerm(pData,pReply,19,&bcc); -/* - printf("%s\n",pReply); -*/ - if(iRet != 1) - { - return iRet; - } - if(bcc == '\x15') - { - return ERRNAK; - } - if(strstr(pReply,"?TMO")) - { - return EL734__BAD_TMO; - } - - return 1; - } -/*---------------------------------------------------------------------------*/ - static int GetEuroPos(pEVDriver self, float *fPos) - { - pEuroDriv pMe = NULL; - int iRet; - - assert(self); - pMe = (pEuroDriv)self->pPrivate; - assert(pMe); - - iRet = EuroGetParameter(&(pMe->pData),"PV",2,fPos); - if(iRet != 1) - { - pMe->iLastError = iRet; - return 0; - } - return 1; - } -/*----------------------------------------------------------------------------*/ - static int EuroRun(pEVDriver self, float fVal) - { - pEuroDriv pMe = NULL; - int iRet; - - assert(self); - pMe = (pEuroDriv )self->pPrivate; - assert(pMe); - - iRet = EuroSetParameter(&(pMe->pData),"SL",2,"%4.1f",fVal); - if(iRet != 1) - { - pMe->iLastError = iRet; - return 0; - } - return 1; - } -/*--------------------------------------------------------------------------*/ - static int EuroError(pEVDriver self, int *iCode, char *error, int iErrLen) - { - pEuroDriv pMe = NULL; - - assert(self); - pMe = (pEuroDriv)self->pPrivate; - assert(pMe); - - *iCode = pMe->iLastError; - switch(pMe->iLastError) - { - case INVALIDANSWER: - strncpy(error,"Unexpected reply from Eurotherm",iErrLen); - break; - case INVALIDNUMBER: - strncpy(error,"No number in Eurotherm answer",iErrLen); - break; - case ERRNAK: - strncpy(error,"Eurothem did NOT acknowledge command",iErrLen); - break; - case NOSEND: - strncpy(error, - "Eurotherm has a bizarre protocoll, sending things is very STUPID",iErrLen); - break; - default: - SerialError(pMe->iLastError,error,iErrLen); - break; - } - - return 1; - } -/*--------------------------------------------------------------------------*/ - static int EuroSend(pEVDriver self, char *pCommand, char *pReply, int iLen) - { - pEuroDriv pMe = NULL; - - assert(self); - pMe = (pEuroDriv)self->pPrivate; - assert(pMe); - - pMe->iLastError = NOSEND; - strncpy(pReply,"ERROR: Eurotherm does not support send functionality", - iLen); - return 0; - } -/*--------------------------------------------------------------------------*/ - static int EuroInit(pEVDriver self) - { - pEuroDriv pMe = NULL; - int iRet; - - assert(self); - pMe = (pEuroDriv )self->pPrivate; - assert(pMe); - - pMe->pData = NULL; - iRet = SerialOpen(&pMe->pData, pMe->pHost, pMe->iPort, pMe->iChannel); - if(iRet != 1) - { - pMe->iLastError = iRet; - return 0; - } - SerialSendTerm(&pMe->pData,""); - return 1; - } -/*--------------------------------------------------------------------------*/ - static int EuroClose(pEVDriver self) - { - pEuroDriv pMe = NULL; - int iRet; - - assert(self); - pMe = (pEuroDriv )self->pPrivate; - assert(pMe); - - SerialClose(&pMe->pData); - return 1; - } -/*---------------------------------------------------------------------------*/ - static int EuroFix(pEVDriver self, int iError) - { - pEuroDriv pMe = NULL; - int iRet; - - assert(self); - pMe = (pEuroDriv )self->pPrivate; - assert(pMe); - - switch(iError) - { - /* network errors */ - case EL734__BAD_FLUSH: - case EL734__BAD_RECV: - case EL734__BAD_RECV_NET: - case EL734__BAD_RECV_UNKN: - case EL734__BAD_RECVLEN: - case EL734__BAD_RECV1: - case EL734__BAD_RECV1_PIPE: - case EL734__BAD_RNG: - case EL734__BAD_SEND: - case EL734__BAD_SEND_PIPE: - case EL734__BAD_SEND_NET: - case EL734__BAD_SEND_UNKN: - case EL734__BAD_SENDLEN: - EuroClose(self); - iRet = EuroInit(self); - if(iRet) - { - return DEVREDO; - } - else - { - return DEVFAULT; - } - break; - /* handable protocoll errors */ - case EL734__BAD_TMO: - return DEVREDO; - break; - case ERRNAK: - case NOSEND: - case INVALIDANSWER: - case INVALIDNUMBER: - return DEVFAULT; - default: - return DEVFAULT; - break; - } - return DEVFAULT; - } - -/*--------------------------------------------------------------------------*/ - static int EuroHalt(pEVDriver *self) - { - assert(self); - - return 1; - } -/*------------------------------------------------------------------------*/ - void KillEuro(void *pData) - { - pEuroDriv pMe = NULL; - - pMe = (pEuroDriv)pData; - assert(pMe); - - if(pMe->pHost) - { - free(pMe->pHost); - } - free(pMe); - } -/*------------------------------------------------------------------------*/ - pEVDriver CreateEURODriv(int argc, char *argv[]) - { - pEVDriver pNew = NULL; - pEuroDriv pSim = NULL; - - /* check for arguments */ - if(argc < 3) - { - return NULL; - } - - pNew = CreateEVDriver(argc,argv); - pSim = (pEuroDriv)malloc(sizeof(EuroDriv)); - memset(pSim,0,sizeof(EuroDriv)); - if(!pNew || !pSim) - { - return NULL; - } - pNew->pPrivate = pSim; - pNew->KillPrivate = KillEuro; - - /* initalise pDILLUDriver */ - pSim->iLastError = 0; - pSim->pHost = strdup(argv[0]); - pSim->iPort = atoi(argv[1]); - pSim->iChannel = atoi(argv[2]); - - /* initialise function pointers */ - pNew->SetValue = EuroRun; - pNew->GetValue = GetEuroPos; - pNew->Send = EuroSend; - pNew->GetError = EuroError; - pNew->TryFixIt = EuroFix; - pNew->Init = EuroInit; - pNew->Close = EuroClose; - - return pNew; - } - - -