A bit of refactoring and a bug fix
r2253 | dcl | 2007-11-09 09:49:19 +1100 (Fri, 09 Nov 2007) | 2 lines
This commit is contained in:
@@ -197,7 +197,7 @@ int DMC2280MotionControl = 1; /* defaults to enabled */
|
||||
#define AIR_POLL_TIMER 1000
|
||||
#define MOTOR_POLL_FAST 200
|
||||
#define MOTOR_POLL_SLOW 5000
|
||||
#define ON_SETTLE_TIMER 1000
|
||||
#define ON_SETTLE_TIMER 200
|
||||
#define MAX_CREEP_STEPS 100
|
||||
#define MAX_RESTARTS 0
|
||||
|
||||
@@ -1113,8 +1113,10 @@ static int checkMotion(void *pData) {
|
||||
/* calculate observed and expected steps per count ratios */
|
||||
if (self->currCounts == self->lastCounts) /* prevent divide by zero */
|
||||
ratio_obs = (self->currSteps - self->lastSteps);
|
||||
else
|
||||
ratio_obs = (self->currSteps - self->lastSteps) / (self->currCounts - self->lastCounts);
|
||||
else {
|
||||
ratio_obs = (float) (self->currSteps - self->lastSteps);
|
||||
ratio_obs /= (float) (self->currCounts - self->lastCounts);
|
||||
}
|
||||
ratio_exp = (float) self->stepsPerX / (float) self->cntsPerX;
|
||||
ratio_cmp = ratio_obs / ratio_exp;
|
||||
/* wrong signs, less than half, or more than double is trouble */
|
||||
@@ -1603,15 +1605,14 @@ static void DMCState_Idle(pDMC2280Driv self, pEvtEvent event) {
|
||||
case eStateEvent:
|
||||
if (self->state_timer)
|
||||
NetWatchRemoveTimer(self->state_timer);
|
||||
if ((self->variables & VAR_RUN) && self->runError) {
|
||||
if (self->variables & VAR_RUN) {
|
||||
char cmd[CMDLEN];
|
||||
snprintf(cmd, CMDLEN, "RUN%c=0", self->axisLabel);
|
||||
DMC_SendCmd(self, cmd, state_msg_callback);
|
||||
DMC2280Send(self, cmd);
|
||||
}
|
||||
else
|
||||
NetWatchRegisterTimer(&self->state_timer,
|
||||
MOTOR_POLL_SLOW,
|
||||
state_tmr_callback, self);
|
||||
NetWatchRegisterTimer(&self->state_timer,
|
||||
MOTOR_POLL_SLOW,
|
||||
state_tmr_callback, self);
|
||||
self->subState = 0;
|
||||
return;
|
||||
case eTimerEvent:
|
||||
@@ -1621,12 +1622,6 @@ static void DMCState_Idle(pDMC2280Driv self, pEvtEvent event) {
|
||||
case eMessageEvent:
|
||||
do {
|
||||
pAsyncTxn pCmd = event->event.msg.cmd;
|
||||
if (self->subState == 0) { /* RUNx reset */
|
||||
NetWatchRegisterTimer(&self->state_timer,
|
||||
MOTOR_POLL_SLOW,
|
||||
state_tmr_callback, self);
|
||||
return;
|
||||
}
|
||||
if (self->subState == 1) { /* Status Response */
|
||||
int iRet;
|
||||
float fDelta;
|
||||
@@ -1683,7 +1678,6 @@ static void DMCState_Idle(pDMC2280Driv self, pEvtEvent event) {
|
||||
self->driver_status = HWFault;
|
||||
change_state(self, DMCState_MotorHalt);
|
||||
return;
|
||||
break;
|
||||
}
|
||||
unhandled_event(self, event);
|
||||
self->errorCode = STATEERROR;
|
||||
@@ -1752,7 +1746,7 @@ static void DMCState_MotorStart(pDMC2280Driv self, pEvtEvent event) {
|
||||
do {
|
||||
pAsyncTxn pCmd = event->event.msg.cmd;
|
||||
if (self->subState == 1) {
|
||||
if (self->has_airpads == 0) { /* SH */
|
||||
if (self->has_airpads == 0) { /* cmdOn */
|
||||
change_state(self, DMCState_MotorOn);
|
||||
return;
|
||||
}
|
||||
@@ -2111,15 +2105,6 @@ static void DMCState_Moving(pDMC2280Driv self, pEvtEvent event) {
|
||||
state_tmr_callback, self);
|
||||
return;
|
||||
}
|
||||
if (self->motOffDelay)
|
||||
NetWatchRegisterTimer(&self->state_timer,
|
||||
self->motOffDelay,
|
||||
state_tmr_callback, self);
|
||||
else
|
||||
NetWatchRegisterTimer(&self->state_timer,
|
||||
MOTOR_POLL_FAST,
|
||||
state_tmr_callback, self);
|
||||
self->driver_status = HWIdle;
|
||||
change_state(self, DMCState_OffTimer);
|
||||
return;
|
||||
}
|
||||
@@ -2196,6 +2181,15 @@ static void DMCState_MotorHalt(pDMC2280Driv self, pEvtEvent event) {
|
||||
static void DMCState_OffTimer(pDMC2280Driv self, pEvtEvent event) {
|
||||
switch (event->event_type) {
|
||||
case eStateEvent:
|
||||
self->driver_status = HWIdle;
|
||||
if (self->motOffDelay)
|
||||
NetWatchRegisterTimer(&self->state_timer,
|
||||
self->motOffDelay,
|
||||
state_tmr_callback, self);
|
||||
else
|
||||
NetWatchRegisterTimer(&self->state_timer,
|
||||
MOTOR_POLL_FAST,
|
||||
state_tmr_callback, self);
|
||||
return;
|
||||
case eTimerEvent:
|
||||
change_state(self, DMCState_MotorStop);
|
||||
|
||||
Reference in New Issue
Block a user