From 8e369ecc8ebeb6de9a9775e0c472fbd4eaba3b63 Mon Sep 17 00:00:00 2001 From: jsullivan-anl Date: Wed, 23 May 2007 14:56:06 +0000 Subject: [PATCH] Modified for robustness - added EHCO OFF command on communication retries. --- motorApp/ThorLabsSrc/drvMDT695.cc | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/motorApp/ThorLabsSrc/drvMDT695.cc b/motorApp/ThorLabsSrc/drvMDT695.cc index 5e674433..57f607ce 100644 --- a/motorApp/ThorLabsSrc/drvMDT695.cc +++ b/motorApp/ThorLabsSrc/drvMDT695.cc @@ -4,9 +4,9 @@ USAGE... Motor record driver level support for ThorLabs Piezo Control Module (Model: MDT695) Compatable with MDT694, MDT693 -Version: $Revision: 1.1 $ +Version: $Revision: 1.2 $ Modified By: $Author: sullivan $ -Last Modified: $Date: 2006-09-27 20:32:37 $ +Last Modified: $Date: 2007-05-23 14:56:06 $ */ @@ -55,6 +55,8 @@ Last Modified: $Date: 2006-09-27 20:32:37 $ #define CMD_ID "I" #define CMD_DEV "D" +#define RESP_DEV "d" /* Response if ECHO is ON */ +#define CMD_ECHO "E" #define CMD_POS "#R?" #define MDT695_NUM_CARDS 16 @@ -239,9 +241,11 @@ static int set_status(int card, int signal) double datad; /* Convert position and check for error */ + Debug(5, "set_status(): RecvStr = %s\n", &startptr[2]); datad = strtod(&startptr[2], &endptr); if (&startptr[2] != endptr) { + Debug(5, "set_status(): motorData = %.2f\n", datad); motorData = NINT(datad / cntrl->drive_resolution); recvRetry = false; } @@ -252,6 +256,11 @@ static int set_status(int card, int signal) cntrl->status = NORMAL; else { + /* Try turning Echo OFF before next retry */ + recvCnt = recv_mess(card, startptr, 0); /* Flush recv buffer */ + send_mess(card, CMD_ECHO, NULL); + recvCnt = recv_mess(card, startptr, 0); + if (cntrl->status == NORMAL) { epicsThreadSleep(MOTION_DELAY); @@ -564,6 +573,13 @@ static int motor_init() /* Check for valid response -- if not retry */ if ((recvCnt > 0) && strstr(buff, "MDT")) cardFound = true; + else + { + /* Try turning Echo OFF */ + recvCnt = recv_mess(card_index, buff, 0); /* Flush recv buffer */ + send_mess(card_index, CMD_ECHO, NULL); + recvCnt = recv_mess(card_index, buff, 0); + } } while(!cardFound && ++retryCnt < 3); }