177 lines
4.0 KiB
C
177 lines
4.0 KiB
C
|
|
|
|||
|
|
#ifndef __MOTION_H__
|
|||
|
|
#define __MOTION_H__
|
|||
|
|
|
|||
|
|
#include "config.h"
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
// <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
#ifndef MAX_AXIS_NUM
|
|||
|
|
#define MAX_AXIS_NUM 4
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//----------------------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ٶȽṹ
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u32 startPPS; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
u32 stopPPS; // ֹͣ<CDA3>ٶ<EFBFBD>
|
|||
|
|
u32 runPPS; // <20>˶<EFBFBD><CBB6>ٶ<EFBFBD>
|
|||
|
|
u32 slowPPS; // <20><><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
u32 addPPSS; // <20><><EFBFBD>ټ<EFBFBD><D9BC>ٶ<EFBFBD>
|
|||
|
|
u32 brkPPSS; // ɲ<><C9B2><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
u32 slowPPSS; // <20><><EFBFBD>ټ<EFBFBD><D9BC>ٶ<EFBFBD>
|
|||
|
|
}MotionSpeedCtrl;
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
void (*RefreshPosition)(u32, s32*); // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>»ص<C2BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 refPosPara; // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>²<EFBFBD><C2B2><EFBFBD>
|
|||
|
|
|
|||
|
|
int (*GetSlowDown)(u32,u32); // <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⽵<EFBFBD><E2BDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD>ٶȽ<D9B6><C8BD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD>ٶȻָ<C8BB>
|
|||
|
|
int (*GetNormalStop)(u32,u32); // һ<><D2BB>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD>ٵ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ټ<EFBFBD><D9BC>ٶȣ<D9B6>
|
|||
|
|
int (*GetQuickStop)(u32,u32); // <20><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD>ٵ<EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD>ٶȣ<D9B6>
|
|||
|
|
int (*GetEmergencyStop)(u32,u32); // <20><><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⼱ͣ<E2BCB1><CDA3><EFBFBD><EFBFBD>; <20><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壨<EFBFBD><E5A3A8><EFBFBD>轵<EFBFBD>٣<EFBFBD>
|
|||
|
|
u32 condPara1, condPara2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
}MotionCallbackCtrl;
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>첽<EFBFBD>켣<EFBFBD>˶<EFBFBD>
|
|||
|
|
|
|||
|
|
#define SPM_PARA_NUM 100 // <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>SeparateMotionCtrl.paraList
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
int motoIdx; // <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int runtype; // <20>˶<EFBFBD>ģʽ<C4A3><CABD>0, λ<><CEBB>ģʽ<C4A3><CABD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD>Ȼ<EFBFBD><C8BB>ֹͣ<CDA3><D6B9>; 1, <20>ٶ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>ģʽ<C4A3><CABD>ֱ<EFBFBD><D6B1>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>
|
|||
|
|
int blockRun; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>־
|
|||
|
|
s32 movement; // λ<><CEBB><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
MotionSpeedCtrl spdPara; // <20>ٶ<EFBFBD>
|
|||
|
|
|
|||
|
|
// <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MotionCallbackCtrl callback;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
int errInfo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
int exerslt; // ִ<>н<EFBFBD><D0BD><EFBFBD>
|
|||
|
|
int runningflag; // <20><><EFBFBD>б<EFBFBD>־
|
|||
|
|
int startflag; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
|
int stopflag; // ֹͣ<CDA3><D6B9>־<EFBFBD><D6BE><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD>ã<EFBFBD>
|
|||
|
|
|
|||
|
|
// <20>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
union
|
|||
|
|
{
|
|||
|
|
u32 buff[SPM_PARA_NUM];
|
|||
|
|
|
|||
|
|
struct
|
|||
|
|
{
|
|||
|
|
int initedflag;
|
|||
|
|
int outdir;
|
|||
|
|
int oldcondsel;
|
|||
|
|
|
|||
|
|
s32 posbeforerun; // <20>˶<EFBFBD>ǰ<EFBFBD><C7B0>λ<EFBFBD><CEBB>
|
|||
|
|
|
|||
|
|
float startpps, runpps, slowpps, stoppps; // <20>ٶ<EFBFBD>
|
|||
|
|
float addppss, brkppss, slowppss; // <20><><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
|
|||
|
|
u32 totalnum, runmidx;
|
|||
|
|
u32 mvmtseg[3]; // <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
u32 decpoint; // <20><><EFBFBD>ٷֽ<D9B7><D6BD><EFBFBD>
|
|||
|
|
u32 tablen12, tablen3;
|
|||
|
|
u32 slowmvmt;
|
|||
|
|
|
|||
|
|
int slowsta, inslow; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>ٱ<EFBFBD>־
|
|||
|
|
int brksta, inbrk; // ɲ<><C9B2>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD>־
|
|||
|
|
int nstpsta, innstp; // ͣ<><CDA3>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>־
|
|||
|
|
}paraList;
|
|||
|
|
}ctrlPara;
|
|||
|
|
|
|||
|
|
}SeparateMotionCtrl;
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define PULSE_DIR_POSI 1
|
|||
|
|
#define PULSE_DIR_NEGA -1
|
|||
|
|
|
|||
|
|
#define SEPRUN_TPYE_MVMT 0 // λ<>ÿ<EFBFBD><C3BF><EFBFBD>
|
|||
|
|
#define SEPRUN_TPYE_SPEED 1 // <20>ٶȿ<D9B6><C8BF><EFBFBD>
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ֱ<EFBFBD>߲岹<DFB2>˶<EFBFBD>
|
|||
|
|
|
|||
|
|
// ֱ<>߲岹<DFB2>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ƽṹ
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
s32 movement[MAX_AXIS_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>λp
|
|||
|
|
|
|||
|
|
MotionSpeedCtrl spdPara; // <20>ٶȿ<D9B6><C8BF>Ʋ<EFBFBD><C6B2><EFBFBD>
|
|||
|
|
|
|||
|
|
// <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
MotionCallbackCtrl callback;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
int errInfo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
|
|||
|
|
}InterMotionCtrl;
|
|||
|
|
|
|||
|
|
//--------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>˶<EFBFBD>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 mvmtStatus; // <20><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>0<EFBFBD><30><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>1<EFBFBD><31><EFBFBD><EFBFBD>Ч
|
|||
|
|
s32 movement; // λ<>Ʋ<EFBFBD><C6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
|
|||
|
|
s32 thisIdx;
|
|||
|
|
float thisBegPPS; // <20><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>,Ҳ<><D2B2><EFBFBD>϶ν<CFB6><CEBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float thisEndPPS; // <20><><EFBFBD>ν<EFBFBD><CEBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float thisRunPPS; // <20><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>
|
|||
|
|
float thisAddPPSS; // <20><><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>м<EFBFBD><D0BC>ٶ<EFBFBD>
|
|||
|
|
|
|||
|
|
//----<2D><><EFBFBD><EFBFBD>״̬
|
|||
|
|
int bufsta; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
|
int runsta;
|
|||
|
|
s32 exeingIdx;
|
|||
|
|
float exeingMaxPPS;
|
|||
|
|
|
|||
|
|
s32 lastmvmt; // <20>϶ε<CFB6>λ<EFBFBD><CEBB>
|
|||
|
|
float lastRunPPS;
|
|||
|
|
float lastEndPPS; // <20>ϴν<CFB4><CEBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ٶȣ<D9B6>Ҳ<EFBFBD><D2B2><EFBFBD>DZ<EFBFBD><C7B1>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>жΣ<D0B6><CEA3><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>ٶȣ<D9B6>ÿ<EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ã<EFBFBD>
|
|||
|
|
float lastAddPPSS; //
|
|||
|
|
|
|||
|
|
int rslt;
|
|||
|
|
int err;
|
|||
|
|
|
|||
|
|
}MotionSwapData;
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
int motoIdx; // <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void (*RefreshPosition)(u32, s32*); // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>»ص<C2BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 refPosPara; // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>²<EFBFBD><C2B2><EFBFBD>
|
|||
|
|
|
|||
|
|
void (*RefreshData)(u32, u32); // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>»ص<C2BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u32 refDatPara; // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>º<EFBFBD><C2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
MotionSwapData swapData; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ƺ<EFBFBD><C6BA>ٶ<EFBFBD>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
int errInfo; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
int exerslt;
|
|||
|
|
int stopflag;
|
|||
|
|
int runningflag;
|
|||
|
|
|
|||
|
|
// <20>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
}ContinuousMotionCtrl;
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|