Other Parts Discussed in Thread: MOTORWARE
I arrived at the lab 06c
but I do not understand how to change the values of the function
STVELPLAN_addCfgState
STVELPLAN_addCfgTran
where can I find a full explanation what it means _IQ (0.1)
how do I know how many rounds will make my engine
what does it mean
_IQ (0.25 *ST_SPEED_PU_PER_KRPM _)
if I put in 1000 will make 1000 rpm
What does that mean IQ before these values?
// Establish the Velocity, Acceleration, and Jerk Maximums
velMax = STVELMOVE_getVelocityMaximum(stObj->velMoveHandle);
accMax = STVELMOVE_getAccelerationMaximum(stObj->velMoveHandle);
jrkMax = STVELMOVE_getJerkMaximum(stObj->velMoveHandle);
// Configure SpinTAC Velocity Plan: Sample Time, VelMax, AccMax, DecMax, JrkMax, LoopENB
STVELPLAN_setCfg(stObj->velPlanHandle, _IQ(ST_SAMPLE_TIME), velMax, accMax, jrkMax, false);
// Configure halt state: VelEnd, AccMax, JrkMax, Timer
STVELPLAN_setCfgHaltState(stObj->velPlanHandle, 0, accMax, jrkMax, 1000L);
//Example: STVELPLAN_addCfgState(handle, VelSetpoint[pups], StateTimer[ticks]);
STVELPLAN_addCfgState(stObj->velPlanHandle, 0, 200L); // StateIdx0: Idle
STVELPLAN_addCfgState(stObj->velPlanHandle, 0, 200L); // StateIdx1: Fill
STVELPLAN_addCfgState(stObj->velPlanHandle, _IQ(0.25 * ST_SPEED_PU_PER_KRPM), 200L); // StateIdx2: AgiCW
STVELPLAN_addCfgState(stObj->velPlanHandle, _IQ(-0.25 * ST_SPEED_PU_PER_KRPM), 200L); // StateIdx3: AgiCCW
STVELPLAN_addCfgState(stObj->velPlanHandle, 0, 200L); // StateIdx4: Drain
STVELPLAN_addCfgState(stObj->velPlanHandle, _IQ(2 * ST_SPEED_PU_PER_KRPM), 2000L); // StateIdx5: Dry
//Example: STVELPLAN_addCfgVar(handle, VarType, InitialValue);
STVELPLAN_addCfgVar(stObj->velPlanHandle, ST_VAR_IN, 0); // VarIdx0: FillSensor {0: not filled; 1: filled}
STVELPLAN_addCfgVar(stObj->velPlanHandle, ST_VAR_IN, 0); // VarIdx1: DrainSensor {0: not drained; 1: drained}
STVELPLAN_addCfgVar(stObj->velPlanHandle, ST_VAR_INOUT, 0); // VarIdx2: CycleCounter
STVELPLAN_addCfgVar(stObj->velPlanHandle, ST_VAR_OUT, 0); // VarIdx3: FillValve {0: valve closed; 1: valve open}
STVELPLAN_addCfgVar(stObj->velPlanHandle, ST_VAR_OUT, 0); // VarIdx4: DrainValve {0: valve closed; 1: valve open}
//Example: STVELPLAN_addCfgCond(handle, VarIdx, Comparison, Value1, Value2)
STVELPLAN_addCfgCond(stObj->velPlanHandle, WASHER_FillSensor, ST_COMP_EQ, 1, 0); // CondIdx0: WaterFull Water is filled
STVELPLAN_addCfgCond(stObj->velPlanHandle, WASHER_CycleCounter, ST_COMP_GT, 0, 0); // CondIdx1: AgiNotDone SgitCycleCounter is greater than 0 (not done)
STVELPLAN_addCfgCond(stObj->velPlanHandle, WASHER_CycleCounter, ST_COMP_ELW, 0, 0); // CondIdx2: AgiDone SgitCycleCounter is equal or less than 0 (done)
STVELPLAN_addCfgCond(stObj->velPlanHandle, WASHER_DrainSensor, ST_COMP_EQ, 1, 0); // CondIdx3: WaterEmpty Water is drained
// Note: Set Value2 to 0 if Comparison is for only one value.
//Example: STVELPLAN_addCfgTran(handle, FromState, ToState, CondOption, CondIdx1, CondiIdx2, AccLim[pups2], JrkLim[pups3]);
STVELPLAN_addCfgTran(stObj->velPlanHandle, WASHER_IDLE, WASHER_FILL, ST_COND_NC, 0, 0, _IQ(0.1), _IQ20(1)); // From IdleState to FillState
STVELPLAN_addCfgTran(stObj->velPlanHandle, WASHER_FILL, WASHER_AGI_CCW, ST_COND_FC, WASHER_WaterFull, 0, _IQ(0.1), _IQ20(1)); // From FillState to AgiState1
STVELPLAN_addCfgTran(stObj->velPlanHandle, WASHER_AGI_CCW, WASHER_AGI_CW, ST_COND_NC, 0, 0, _IQ(1), _IQ20(1)); // From AgiState1 to AgiState2
STVELPLAN_addCfgTran(stObj->velPlanHandle, WASHER_AGI_CW, WASHER_AGI_CCW, ST_COND_FC, WASHER_AgiNotDone, 0, _IQ(1), _IQ20(1)); // From AgiState2 to AgiState1
STVELPLAN_addCfgTran(stObj->velPlanHandle, WASHER_AGI_CW, WASHER_DRAIN, ST_COND_FC, WASHER_AgiDone, 0, _IQ(0.1), _IQ20(1)); // From AgiState2 to DrainState
STVELPLAN_addCfgTran(stObj->velPlanHandle, WASHER_DRAIN, WASHER_DRY, ST_COND_FC, WASHER_WaterEmpty, 0, _IQ(0.2), _IQ20(1)); // From DrainState to DryState
STVELPLAN_addCfgTran(stObj->velPlanHandle, WASHER_DRY, WASHER_IDLE, ST_COND_NC, 0, 0, _IQ(0.1), _IQ20(1)); // From DryState to IdleState
// Note: set CondIdx1 to 0 if CondOption is ST_COND_NC; set CondIdx2 to 0 if CondOption is ST_COND_NC or ST_COND_FC
//Example: STVELPLAN_addCfgAct(handle, StateIdx, CondOption, CondIdx1, CondIdx2, VarIdx, Operation, Value, ActionTriger);
STVELPLAN_addCfgAct(stObj->velPlanHandle, WASHER_IDLE, ST_COND_NC, 0, 0, WASHER_CycleCounter, ST_ACT_EQ, 20, ST_ACT_EXIT); // In IdleState, preset AgiCycleCounter counter to 20
STVELPLAN_addCfgAct(stObj->velPlanHandle, WASHER_AGI_CCW, ST_COND_NC, 0, 0, WASHER_CycleCounter, ST_ACT_ADD, -1, ST_ACT_ENTR); // Decrease AgiCycleCounter by 1 everytime enters AgiState1
STVELPLAN_addCfgAct(stObj->velPlanHandle, WASHER_FILL, ST_COND_NC, 0, 0, WASHER_FillValve, ST_ACT_EQ, 1, ST_ACT_ENTR); // In FillState, set VarIdx3 to 1 to open FillValve
STVELPLAN_addCfgAct(stObj->velPlanHandle, WASHER_FILL, ST_COND_NC, 0, 0, WASHER_FillValve, ST_ACT_EQ, 0, ST_ACT_EXIT); // In FillState, set VarIdx3 to 0 to close FillValve when FillSensor = 1
STVELPLAN_addCfgAct(stObj->velPlanHandle, WASHER_DRAIN, ST_COND_NC, 0, 0, WASHER_DrainValve, ST_ACT_EQ, 1, ST_ACT_ENTR); // In DrainState, set VarIdx4 to 1 to open DrainValve
STVELPLAN_addCfgAct(stObj->velPlanHandle, WASHER_DRAIN, ST_COND_NC, 0, 0, WASHER_DrainValve, ST_ACT_EQ, 0, ST_ACT_EXIT); // In DrainState, set VarIdx4 to 0 to close DrainValve when DrainSensor = 1
