diff --git a/motorApp/ImsSrc/drvIM483PL.c b/motorApp/ImsSrc/drvIM483PL.c index 7510b2e3..8ff481e8 100644 --- a/motorApp/ImsSrc/drvIM483PL.c +++ b/motorApp/ImsSrc/drvIM483PL.c @@ -3,9 +3,9 @@ FILENAME... drvIM483PL.c USAGE... Motor record driver level support for Intelligent Motion Systems, Inc. IM483(I/IE). -Version: $Revision: 1.5 $ +Version: $Revision: 1.6 $ Modified By: $Author: sluiter $ -Last Modified: $Date: 2002-04-15 20:20:23 $ +Last Modified: $Date: 2002-07-05 19:22:33 $ */ /* @@ -260,7 +260,7 @@ STATIC int set_status(int card, int signal) int status; int rtn_state; double motorData; - BOOLEAN plusdir; + BOOLEAN plusdir, ls_active = OFF; cntrl = (struct IM483controller *) motor_state[card]->DevicePrivate; motor_info = &(motor_state[card]->motor_info[signal]); @@ -341,10 +341,24 @@ STATIC int set_status(int card, int signal) recv_mess(card, buff, 1); status = atoi(&buff[5]); - if ((plusdir == ON && (status & 1)) || (plusdir == OFF && (status & 2))) - motor_info->status |= RA_OVERTRAVEL; + /* Set limit switch error indicators. */ + if (status & 1) + { + motor_info->status |= RA_PLUS_LS; + if (plusdir == ON) + ls_active = ON; + } else - motor_info->status &= ~RA_OVERTRAVEL; + motor_info->status &= ~RA_PLUS_LS; + + if (status & 2) + { + motor_info->status |= RA_MINUS_LS; + if (plusdir == OFF) + ls_active = ON; + } + else + motor_info->status &= ~RA_MINUS_LS; send_mess(card, "? ] 1", IM483PL_axis[signal]); recv_mess(card, buff, 1); @@ -383,12 +397,12 @@ STATIC int set_status(int card, int signal) if (!(motor_info->status & RA_DIRECTION)) motor_info->velocity *= -1; - rtn_state = (!motor_info->no_motion_count || - (motor_info->status & (RA_OVERTRAVEL | RA_DONE | RA_PROBLEM))) ? 1 : 0; + rtn_state = (!motor_info->no_motion_count || ls_active == ON || + (motor_info->status & (RA_DONE | RA_PROBLEM))) ? 1 : 0; /* Test for post-move string. */ - if ((motor_info->status & RA_DONE || motor_info->status & RA_OVERTRAVEL) && - nodeptr != 0 && nodeptr->postmsgptr != 0) + if ((motor_info->status & RA_DONE || ls_active == ON) && nodeptr != 0 && + nodeptr->postmsgptr != 0) { strcpy(buff, nodeptr->postmsgptr); send_mess(card, buff, IM483PL_axis[signal]); diff --git a/motorApp/ImsSrc/drvIM483SM.c b/motorApp/ImsSrc/drvIM483SM.c index 8bb7330c..5d6508a8 100644 --- a/motorApp/ImsSrc/drvIM483SM.c +++ b/motorApp/ImsSrc/drvIM483SM.c @@ -3,9 +3,9 @@ FILENAME... drvIM483SM.c USAGE... Motor record driver level support for Intelligent Motion Systems, Inc. IM483(I/IE). -Version: $Revision: 1.5 $ +Version: $Revision: 1.6 $ Modified By: $Author: sluiter $ -Last Modified: $Date: 2002-04-19 18:14:28 $ +Last Modified: $Date: 2002-07-05 19:22:35 $ */ /* @@ -261,7 +261,7 @@ STATIC int set_status(int card, int signal) int status; int rtn_state; double motorData; - BOOLEAN plusdir; + BOOLEAN plusdir, ls_active = OFF; cntrl = (struct IM483controller *) motor_state[card]->DevicePrivate; motor_info = &(motor_state[card]->motor_info[signal]); @@ -342,10 +342,24 @@ STATIC int set_status(int card, int signal) recv_mess(card, buff, 1); status = atoi(&buff[5]); - if ((plusdir == ON && (status & 1)) || (plusdir == OFF && (status & 2))) - motor_info->status |= RA_OVERTRAVEL; + /* Set limit switch error indicators. */ + if (status & 1) + { + motor_info->status |= RA_PLUS_LS; + if (plusdir == ON) + ls_active = ON; + } else - motor_info->status &= ~RA_OVERTRAVEL; + motor_info->status &= ~RA_PLUS_LS; + + if (status & 2) + { + motor_info->status |= RA_MINUS_LS; + if (plusdir == OFF) + ls_active = ON; + } + else + motor_info->status &= ~RA_MINUS_LS; send_mess(card, "] 1", NULL); recv_mess(card, buff, 1); @@ -384,12 +398,12 @@ STATIC int set_status(int card, int signal) if (!(motor_info->status & RA_DIRECTION)) motor_info->velocity *= -1; - rtn_state = (!motor_info->no_motion_count || - (motor_info->status & (RA_OVERTRAVEL | RA_DONE | RA_PROBLEM))) ? 1 : 0; + rtn_state = (!motor_info->no_motion_count || ls_active == ON || + (motor_info->status & (RA_DONE | RA_PROBLEM))) ? 1 : 0; /* Test for post-move string. */ - if ((motor_info->status & RA_DONE || motor_info->status & RA_OVERTRAVEL) && - nodeptr != 0 && nodeptr->postmsgptr != 0) + if ((motor_info->status & RA_DONE || ls_active == ON) && nodeptr != 0 && + nodeptr->postmsgptr != 0) { strcpy(buff, nodeptr->postmsgptr); send_mess(card, buff, NULL); diff --git a/motorApp/NewportSrc/drvMM3000.c b/motorApp/NewportSrc/drvMM3000.c index 6789cea5..d3ef6e0f 100644 --- a/motorApp/NewportSrc/drvMM3000.c +++ b/motorApp/NewportSrc/drvMM3000.c @@ -2,9 +2,9 @@ FILENAME... drvMM3000.c USAGE... Motor record driver level support for Newport MM3000. -Version: $Revision: 1.7 $ +Version: $Revision: 1.8 $ Modified By: $Author: sluiter $ -Last Modified: $Date: 2001-12-14 20:50:31 $ +Last Modified: $Date: 2002-07-05 19:27:22 $ */ /* @@ -251,6 +251,7 @@ STATIC int set_status(int card, int signal) MOTOR_STATUS mstat; int rtn_state, charcnt; double motorData; + BOOLEAN plusdir, ls_active = OFF; cntrl = (struct MMcontroller *) motor_state[card]->DevicePrivate; motor_info = &(motor_state[card]->motor_info[signal]); @@ -289,6 +290,8 @@ STATIC int set_status(int card, int signal) else motor_info->status |= RA_DIRECTION; + plusdir = (motor_info->status & RA_DIRECTION) ? ON : OFF; + if (mstat.Bits.inmotion == OFF) { motor_info->status |= RA_DONE; @@ -307,31 +310,26 @@ STATIC int set_status(int card, int signal) else motor_info->status &= ~RA_DONE; - /* Set Travel limit status bit. */ - if (mstat.Bits.inmotion == OFF) - { - if (mstat.Bits.plustTL == OFF && mstat.Bits.minusTL == OFF) - motor_info->status &= ~RA_OVERTRAVEL; - else - { - motor_info->status |= RA_OVERTRAVEL; - /* Until status is modified to distinguish +/- limits; - * Set RA_DIRECTION to match travel limit switch. */ - if (mstat.Bits.plustTL != OFF) - motor_info->status |= RA_DIRECTION; - else - motor_info->status &= ~RA_DIRECTION; - } - } + /* Set Travel limit switch status bits. */ + if (mstat.Bits.plustTL == OFF) + motor_info->status &= ~RA_PLUS_LS; else { - if ((mstat.Bits.plustTL != OFF && mstat.Bits.direction != OFF) || - (mstat.Bits.minusTL != OFF && mstat.Bits.direction == OFF)) - motor_info->status |= RA_OVERTRAVEL; - else - motor_info->status &= ~RA_OVERTRAVEL; + motor_info->status |= RA_PLUS_LS; + if (plusdir == ON) + ls_active = ON; } + if (mstat.Bits.minusTL == OFF) + motor_info->status &= ~RA_MINUS_LS; + else + { + motor_info->status |= RA_MINUS_LS; + if (plusdir == OFF) + ls_active = ON; + } + + if (mstat.Bits.homels == OFF) motor_info->status &= ~RA_HOME; else @@ -399,12 +397,12 @@ STATIC int set_status(int card, int signal) if (!(motor_info->status & RA_DIRECTION)) motor_info->velocity *= -1; - rtn_state = (!motor_info->no_motion_count || - (motor_info->status & (RA_OVERTRAVEL | RA_DONE | RA_PROBLEM))) ? 1 : 0; + rtn_state = (!motor_info->no_motion_count || ls_active == ON || + (motor_info->status & (RA_DONE | RA_PROBLEM))) ? 1 : 0; /* Test for post-move string. */ - if ((motor_info->status & RA_DONE || motor_info->status & RA_OVERTRAVEL) && - nodeptr != 0 && nodeptr->postmsgptr != 0) + if ((motor_info->status & RA_DONE || ls_active == ON) && nodeptr != 0 && + nodeptr->postmsgptr != 0) { strcpy(outbuff, nodeptr->postmsgptr); send_mess(card, outbuff, NULL); diff --git a/motorApp/NewportSrc/drvMM4000.c b/motorApp/NewportSrc/drvMM4000.c index 37603ebc..94c3ce94 100644 --- a/motorApp/NewportSrc/drvMM4000.c +++ b/motorApp/NewportSrc/drvMM4000.c @@ -2,9 +2,9 @@ FILENAME... drvMM4000.c USAGE... Motor record driver level support for Newport MM4000. -Version: $Revision: 1.8 $ +Version: $Revision: 1.9 $ Modified By: $Author: sluiter $ -Last Modified: $Date: 2001-12-14 20:50:33 $ +Last Modified: $Date: 2002-07-05 19:27:23 $ */ /* @@ -312,6 +312,7 @@ STATIC int set_status(int card, int signal) MOTOR_STATUS mstat; int rtn_state; double motorData; + BOOLEAN plusdir, ls_active = OFF; cntrl = (struct MMcontroller *) motor_state[card]->DevicePrivate; motor_info = &(motor_state[card]->motor_info[signal]); @@ -345,6 +346,8 @@ STATIC int set_status(int card, int signal) else motor_info->status |= RA_DIRECTION; + plusdir = (motor_info->status & RA_DIRECTION) ? ON : OFF; + if (mstat.Bits.inmotion == OFF) { motor_info->status |= RA_DONE; @@ -363,10 +366,23 @@ STATIC int set_status(int card, int signal) else motor_info->status &= ~RA_DONE; - if (mstat.Bits.plustTL == OFF && mstat.Bits.minusTL == OFF) - motor_info->status &= ~RA_OVERTRAVEL; + if (mstat.Bits.plustTL == OFF) + motor_info->status &= ~RA_PLUS_LS; else - motor_info->status |= RA_OVERTRAVEL; + { + motor_info->status |= RA_PLUS_LS; + if (plusdir == ON) + ls_active = ON; + } + + if (mstat.Bits.minusTL == OFF) + motor_info->status &= ~RA_MINUS_LS; + else + { + motor_info->status |= RA_MINUS_LS; + if (plusdir == OFF) + ls_active = ON; + } if (mstat.Bits.homels == OFF) motor_info->status &= ~RA_HOME; @@ -420,12 +436,12 @@ STATIC int set_status(int card, int signal) if (!(motor_info->status & RA_DIRECTION)) motor_info->velocity *= -1; - rtn_state = (!motor_info->no_motion_count || - (motor_info->status & (RA_OVERTRAVEL | RA_DONE | RA_PROBLEM))) ? 1 : 0; + rtn_state = (!motor_info->no_motion_count || ls_active == ON || + (motor_info->status & (RA_DONE | RA_PROBLEM))) ? 1 : 0; /* Test for post-move string. */ - if ((motor_info->status & RA_DONE || motor_info->status & RA_OVERTRAVEL) && - nodeptr != 0 && nodeptr->postmsgptr != 0) + if ((motor_info->status & RA_DONE || ls_active == ON) && nodeptr != 0 && + nodeptr->postmsgptr != 0) { strcpy(buff, nodeptr->postmsgptr); send_mess(card, buff, NULL); diff --git a/motorApp/NewportSrc/drvPM500.c b/motorApp/NewportSrc/drvPM500.c index b48462ce..73fdb7a4 100644 --- a/motorApp/NewportSrc/drvPM500.c +++ b/motorApp/NewportSrc/drvPM500.c @@ -238,6 +238,7 @@ STATIC int set_status(int card, int signal) response[BUFF_SIZE]; int status, rtn_state = 0; double motorData; + BOOLEAN ls_active; cntrl = (struct MMcontroller *) motor_state[card]->DevicePrivate; motor_info = &(motor_state[card]->motor_info[signal]); @@ -296,16 +297,25 @@ STATIC int set_status(int card, int signal) else motor_info->status &= ~RA_PROBLEM; - motor_info->status &= ~RA_OVERTRAVEL; - motor_info->status |= RA_DIRECTION; + if (dir_char == '+') + motor_info->status |= RA_DIRECTION; + else + motor_info->status &= ~RA_DIRECTION; + if (status_char == 'L') { - motor_info->status |= RA_OVERTRAVEL; + ls_active = ON; if (dir_char == '+') - motor_info->status |= RA_DIRECTION; + motor_info->status |= RA_PLUS_LS; else - motor_info->status &= ~RA_DIRECTION; - } + motor_info->status |= RA_MINUS_LS; + } + else + { + ls_active = OFF; + motor_info->status &= ~RA_PLUS_LS; + motor_info->status &= ~RA_MINUS_LS; + } motor_info->status &= ~RA_HOME; @@ -345,12 +355,12 @@ STATIC int set_status(int card, int signal) if (!(motor_info->status & RA_DIRECTION)) motor_info->velocity *= -1; - rtn_state = (!motor_info->no_motion_count || - (motor_info->status & (RA_OVERTRAVEL | RA_DONE | RA_PROBLEM))) ? 1 : 0; + rtn_state = (!motor_info->no_motion_count || ls_active == ON || + (motor_info->status & (RA_DONE | RA_PROBLEM))) ? 1 : 0; /* Test for post-move string. */ - if ((motor_info->status & RA_DONE || motor_info->status & RA_OVERTRAVEL) && - nodeptr != 0 && nodeptr->postmsgptr != 0) + if ((motor_info->status & RA_DONE || ls_active == ON) && nodeptr != 0 && + nodeptr->postmsgptr != 0) { strcpy(buff, nodeptr->postmsgptr); strcat(buff, "\r");