optical/NxFuncs/motions/motion.h

177 lines
4.0 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#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