Files
EF3-Interface/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h
T
2022-12-05 10:31:18 +08:00

752 lines
26 KiB
C++

// protocol for control SevenOcean's Machine
//
//////////////////////////////////////////////////////////////////////
#ifndef AFX_SO7_Proto_H__B422904C_2CEB_495B_B7BD_B45AB30286DD__INCLUDED_
#define AFX_SO7_Proto_H__B422904C_2CEB_495B_B7BD_B45AB30286DD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "..\Tools\UsbUtility\logger.h"
#include "CMD_H.h"
#include "./lusb0_usb.h"
#include "SO7_Proto_Def.h"
#define MAX_BUFF_SIZE 0x200
#define USB_ENDPOINT_TYPE_CONTROL 0
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 1
#define USB_ENDPOINT_TYPE_BULK 2
#define USB_ENDPOINT_TYPE_INTERRUPT 3
#define USB_DEVICE_DESCRIPTOR_TYPE 1
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 2
#define USB_SEQ_NUMBER 0
#define THREAD_RUNNING_STATE1 0
#define THREAD_RUNNING_STATE2 2
#define THREAD_PAUSED 1
#define THREAD_EXIT -1
// Device configuration and interface id.
#define SO7_USB_CONFIG 1
#define SO7_USB_INTF 0
#define EP_S07_01 0x01
#define EP_S07_02 0x02
#define EP_S07_03 0x03
#define EP_S07_81 0x81
#define EP_S07_82 0x82
#define EP_S07_84 0x84
#define EP_01_CMD_IDX 0 // index to usb buffers
#define EP_81_DATA_IDX 1 //
#define EP_02_CMD_IDX 2 //
#define EP_82_DATA_IDX 3 //
#define EP_03_CMD_IDX 4 //
#define EP_84_DATA_IDX 5 //
#define lEPSIZE 6
#define MAXRINGS 5 // for MicroVu Vertex 220
#define MAXSEGS 8
#define TWO_RINGS 2
#define EIGHT_SEGS 8
#define FIVE_RINGS 5
#define HBIT0 0X01
#define HBIT1 0X02
#define HBIT2 0X04
#define HBIT3 0X08
#define HBIT4 0X10
#define HBIT5 0X20
#define HBIT6 0X40
#define HBIT7 0X80
const long MAX_INTENSITY = 0x3FF;
#define MAXLIGHTVALUE 255
#define MINLIGHTVALUE 1
const double SCALE_UNITS = 1000.0;
enum EMACHINETYPE
{
MACHINE_SO7_CONTROLLER,
MACHINE_METRONICS_CONTROLLER,
MACHINE_TOTAL=255
};
enum EFirmwareVer
{
FirmwareVer_3_X=0,
FirmwareVer_6_X,
FirmwareVer_7_X,
FirmwareVer_7_9,//add control mode
FirmwareVer_7_A,//add segment dis
FirmwareVer_7_C,//different speed para
FirmwareVer_8_X,
FirmwareVer_9_X,
FirmwareVer_Total
};
enum ESO7_AXIS_TYPE
{
E_AXIS_Y=1,
E_AXIS_X=2,
E_AXIS_Z=3,
E_AXIS_V=4
};
//FirmwareVer_6_X
//enum ESO7_WRITE_FPGA_DATA_ADDR
//{
// E_WRITE_MOTOR_FLAG=9,
// E_WRITE_EQUIDISTANCE=10,
// E_WRITE_ACCURA_ERR=11,
// E_WRITE_TOTAL=16
//};
//FirmwareVer_7_X
enum ESO7_WRITE_FPGA_DATA_ADDR
{
E_WRITE_MOTOR_FLAG=9,
E_WRITE_TRIG_LSB=10,
E_WRITE_ACCURA_ERR=11,
E_WRITE_TRIG_MSB=12,
E_WRITE_TRIG_MSBII=13,
E_WRITE_TRIG_HOLDTIME=14,
E_WRITE_TOTAL=16
};
enum ESO7_CONTROLLER_IO_ADDR
{
ESO7_CONTROLLER_INPUT_PORT_ADDR=5,
ESO7_CONTROLLER_WOUTPUT_PORT_ADDR=6,
ESO7_CONTROLLER_OUTPUT_PORT_ADDR=7,
ESO7_CONTROLLER_LIMIT_SWITCH_ADDR=8
};
#pragma pack(push)
#pragma pack(1)
//****************************************************************************************************
// Set the _status to Idle after reply data has been received.
// How to recover? In order to send data, _status must be Idle. If the system is not available
// for 1 second, assume something wrong and treat it as "TimeOut".
// Another way to do this is to lock this structure is to use a mutex to ensure single-threaded
// access.
//****************************************************************************************************
//====================================================================================================
typedef struct s_so7_axis // axis parameters
{
char _Move_Speed_Gear;
char _MoveTo_Speed_Gear;
union
{
long _long_;
char _char_[4];
}_pos_fixed;
union
{
long _long_;
char _char_[4];
}_scale_pos;
union
{
long _long_;
char _char_[4];
}_ZSignal_pos;
double _d_cur_pos_;
long _scale_probe;
double _dSet_Zero_Pos;
long _lSet_Zero_Pos;
double _ReCorded_Pos;
} SO7AXIS;
struct s_so7_axis_config // axis configuration
{
double _motor_precision;//set precision
double _motor_wheelbase;//set wheelbase
char _speed_base[5];
char _speed_fresh[5];
char _speed_start[5];
char _speed_max[5];
double _speed_slow_dis[5];
double _MoveToSpeed[2];
double _MotionSpeedScale;
long _MotionSegmentDis[3];
long _scale_range;
double _neg_working_limit;
double _pos_working_limit;
double _scale_resolution;
bool _bhomed;
double _dMinSpeed;
double _dMaxSpeed;
double _dMinAccel;
double _dMaxAccel;
};
struct s_so7_R_axis_config // rotary configuration
{
INT m_RotaryAxisNO;
double m_RotaryCircleDis;
double m_RotaryCirclePulse;
};
struct s_so7_zm_axis_config // zm configuration
{
int _ComPort;
double _StartDegree;
double _EndDegree;
double _RelativeZeroDegree;
double _Deadband;
int _ReadingInterval;
double _PulseScale;
short _SpeedFast;
short _SpeedSlow;
CString _ProductID;
long _neg_working_limit;
long _pos_working_limit;
double _neg_deg_working_limit; // within the limits
double _pos_deg_working_limit;
union
{
short _short_;
char _char_[2];
}_speed;
};
struct s_so7_machine_interface_config
{
//=====MOTION=====================
double m_DestinationX;
double m_DestinationY;
double m_DestinationZ;
double m_PrecisionX;
double m_PrecisionY;
double m_PrecisionZ;
int m_RetryTimes;
int m_MotionRetryCnt;
double m_ShiftPositionX;
double m_ShiftPositionY;
double m_ShiftPositionZ;
BOOL m_EnCloseLoop;
char m_MotionType;
char GetInterruptMsgMethod;
INT m_WriteDataSleepTime;
INT m_AccuraErrPulseX;
INT m_AccuraErrPulseY;
INT m_AccuraErrPulseZ;
INT m_EQUIDIS_X;
INT m_EQUIDIS_Y;
INT m_EQUIDIS_Z;
INT m_FirmWareVersion;
INT m_CNC_Deadlock_Solution;
INT m_CNC_Deadlock_JudgeMaxCnts;
INT m_TouchProbeEnable;
INT m_FootSwitchEnable;
INT m_bJoyStickEnable;
INT m_bTrigIOEnable;
INT m_iTrigHoldTimeCnts;
INT m_iMotionStartCnts[5];
INT m_iMotionStopCnts[5];
INT m_DeviceSleepTime;
INT m_iHomeMode;
INT m_STIL_CCS_PRIMA_Enable;
INT m_ART_PCI8622_Enable;
INT m_bMoveToEnable;
INT m_bMoveToCount;
INT m_bDebugOutputEnable;
double m_AxisResolution[3];
//===PROBE SYSTEM=========
INT m_bOptexCD5Enable;
INT m_iOptexCD5ComPort;
INT m_iOptexCD5BaudRate;
INT m_iLJVSleepTime;
INT m_iLJGSleepTime;
//===ILLUMINATION=========
INT m_iSo7IllumType;
INT m_iSo7IllumComPort;
INT m_iSo7IllumBaudRate;
INT m_iSo7IllumResponseTime;
INT m_iSo7DoubleSurface;
//===VIDEOCARD======
int m_IsVideocardVacant;
INT m_CntThreadSleepVal;
INT m_SV4000E_DenoisePara[4];
//===NavitarAutoZoom======
int m_ZoomType; //scf
int Navitar_Precision;
int Navitar_SerialComPort;
double Navitar_ZoomStartPos;
double Navitar_ZoomEndPos;
double Navitar_ZoomOrgPos;
double Navitar_ZoomDeadband;
double Navitar_ZoomScale;
int Navitar_iReadingInterval;
short Navitar_MotorSpeedFast;
short Navitar_MotorSpeedSlow;
int Navitar_Motor_GoHomeV;
double Navitar_ZoomBackPos;
int Navitar_SleepTime;
int Navitar_Timeout;
int Navitar_ZoomPosSpeed;
int Navitar_ZoomPosSpeed_Accurate;
int Navitar_ZoomFinishPos;
int Navitar_ZoomFinishCnts;
int SerialComPort;
double ZoomStartPos;
double ZoomEndPos;
double ZoomOrgPos;
double ZoomDeadband;
double ZoomScale;
int iReadingInterval;
short MotorSpeedFast;
short MotorSpeedSlow;
//=========MSI======
int m_MachineType;
int m_VideoCardType;
BOOL m_EnJudgeMotionStatus;
BOOL m_DisableControllerMotionStatus;
//===TEMPERATURE=========
INT m_iSo7TempSensorEnable;
INT m_iSo7TempComPort;
INT m_iSo7TempBaudRate;
//===SYS=================
INT m_iFreeMemoryInterval;
INT m_iTestDll_Enable;
//===PORT=================
INT m_isOpenIO;
//===Setposition Pos=================
double m_PositionX;
double m_PositionY;
double m_PositionZ;
};
//======================
typedef struct s_so7_xyzzm
{
bool bFast;
long from;
long to;
long speed;
long acc;
long dec;
double dFromMM;
double dToMM;
} SO7AXISMOVE;
typedef struct s_so7_trigger_pulse
{
char TrigPulseActiveAxis;
char TrigPulseMethod;
union
{
long _long_;
char _char_[4];
}TrigTotalNo;
union
{
long _long_;
char _char_[4];
}TrigCurIndex;
union
{
long _long_;
char _char_[4];
}TrigReadIndex;
union
{
long _long_;
char _char_[4];
}TrigReadPara;
} SO7TRIGPULSE;
//--------------------------------------------------------------------
//
//--------------------------------------------------------------------
struct struct_so7_machine
{ // g_machine structure
struct s_machine_config
{
double _dXYZSpeed;
struct s_so7_axis_config x_axis;
struct s_so7_axis_config y_axis;
struct s_so7_axis_config z_axis;
struct s_so7_R_axis_config r_axis;
struct s_so7_zm_axis_config zm_axis;
} s_machine_config;
struct s_status
{
bool _homed;
bool _machine_running;
bool _bXMoving;
bool _bYMoving;
bool _bZMoving;
bool _bZMMoving;
char _bIsZMMotionFinished;
bool _bZMHoming;
bool _bXYZZMIdle;
bool _bRMoving;
} s_status;
union {
struct s_lights_value
{
char _top_light;
char _bottom_light;
char _ring_light;
char _coaxial_light;
char _spare_light1;
char segment[TWO_RINGS];
} s_lights_value;
};
char cFixtureFlag;
char Light_Size;
char Light_Switch;
char ADC_Number;
int ADC_Value;
char Sys_Reset_Flag;
char cVerNumber;
char InterruptFlag[2];
char FPGAData;
char MotionType;
char InPortStatus;
int _motor_pulse_num;
char FirmwareInfo[10];
int FirmwareVer;
char GetInterruptMsg[20][2];
BOOL IsOffline;
BOOL IsSupportReadInterrputMsg;
double dRotaryCirDisTestZSig;
char SEQ_NUMBER;
int MotionFinishedCnts;
BOOL MotionFinished;
char Arm_MotionStartCnts[5];
char Arm_MotionStopCnts[5];
char Arm_MotionSpeedGear;
struct s_so7_axis x;
struct s_so7_axis y;
struct s_so7_axis z;
struct s_so7_axis zm;
struct s_so7_trigger_pulse TrigPara;
char cIOStatus;
int bMotionType;
};
#define SEVENOCEAN_VID 0x4532
#define SEVENOCEAN_PID 0x5567
//****************************************************************************************************
// Binary SevenOcean command structure, out going
//
//****************************************************************************************************
#define pSO7_CMD_02 ((s_SO7_CMD_BUFF_02 *) ep_buff[EP_02_CMD_IDX]._buffer)
struct s_SO7_CMD_BUFF_02
{
UCHAR uCmdByte;
union
{
struct
{
BYTE uSubCmdByte;
char data[12];
}s_SO7_CMD_MOVE_TO_XYZ;
struct
{
BYTE uSubCmdByte;
char data[12];
}s_SO7_CMD_MOVETOXYZV;
struct
{
BYTE uSubCmdByte;
BYTE uStartCmdByte;
char _bottom_light;
char _top_light;
char _ring_light;
char _coaxial_light;
char _spare_light1;
char _outer_ring_light_switch;
char _inner_ring_light_switch;
BYTE uEndCmdByte;
}s_SO7_CMD_SET_LIGHT;
};
};
#pragma pack(pop)
//======================
struct struct_so7_ep_buff
{
int _ep;
BYTE _save_send_cmd;
BYTE _save_send_cmd0;
BYTE _save_send_cmd1;
BYTE _save_send_cmd2;
char *_buffer; // MAX_BUFF_SIZE
int _size;
void *_async_context;
BOOL _hProtoPending;
HANDLE _event;
};
//======================================================================================
class CEF1AUsbDevice;
class CSO7_Proto
{
public:
// EP 81/82 channel threads.
static int g_hEP8x_Thread_State;
static unsigned __stdcall g_EP8x_Thread(LPVOID pThis);
static HANDLE g_hEP8x_Thread_Id;
// EP 02channel threads.
static int g_hEP02_Thread_State;
static unsigned __stdcall g_EP02_Thread(LPVOID pThis);
static HANDLE g_hEP02_Thread_Id;
static HANDLE g_hEP02_Serial_Mutex; // EP02
static HANDLE g_hHomedEvent;
//
CSO7_Proto();
virtual ~CSO7_Proto();
// Global Structures
static struct_so7_ep_buff ep_buff[lEPSIZE];
static struct_so7_machine g_machine;
static struct s_so7_machine_interface_config g_so7_config;
int Get_SeqNumber(usb_dev_handle *udev);
SSI_STATUS_MOTION Init_SO7Usb(HWND _hwnd=nullptr);
SSI_STATUS_MOTION Exit_SO7Usb();
usb_dev_handle* _open_usb_dev(unsigned short sSeqNumber=256);
SSI_STATUS_MOTION _do_single_threaded_usb_comm(int iEP);
SSI_STATUS_MOTION _read_data_8x(int iEP_Base);
SSI_STATUS_MOTION _send_usb_cmd(int iEP_Base);
SSI_STATUS_MOTION _write_usb_data_only(int iEP_Base);
static void _process_rcv_transfer_data(int iEP);
static double TimeInSecs(void);
static CLogger* g_pLogger;
static usb_dev_handle *g_dev;
bool m_bHomingActive;
double ScaleToMM(long lCount, double dResolution);
long MMtoScale(double lDistanceMM, double dResolution);
static void Trace_EP_Buff(long lIndex);
static void _swap_byte(unsigned short &Val);
static void _reverse_dword(DWORD *);
static void _scale2inch(unsigned long scale, double &inch);
static void _inch2scale(unsigned long &scale, double inch);
static long _4char2long(unsigned char *cBuff);
static long _3char2long(unsigned char *cBuff);
static void _char2bin(unsigned char *cBuff, BYTE *cBytes, int len);
SSI_STATUS_MOTION _replay_capture(CString cFileName);
SSI_STATUS_MOTION _process_replay_capture_commands(char *inBuff, FILE* pInFile);
SSI_STATUS_MOTION Load_So7_Motion_Inifile(CString csSO7INIFile);
SSI_STATUS_MOTION Save_So7_Motion_Inifile(CString csSO7INIFile);
SSI_STATUS_MOTION Load_So7_Motion_Config(int _LoadType = 0);
SSI_STATUS_MOTION Save_So7_Motion_Config(int _SaveType = 0);
SSI_STATUS_MOTION Load_So7_Config_Inifile(int _LoadType = 0);
SSI_STATUS_MOTION Save_So7_Config_Inifile();
SSI_STATUS_MOTION GetAppPath(CString &Path);
SSI_STATUS_MOTION ExtractAppPath(CString &Path);
SSI_STATUS_MOTION so7_motion_startup(double x_scale_resolution, double y_scale_resolution, double z_scale_resolution);
SSI_STATUS_MOTION so7_motion_init_firmware_para();
bool so7_motion_is_homed();
SSI_STATUS_MOTION so7_motion_Dcc_Home();
SSI_STATUS_MOTION so7_motion_Dcc_HomeXYZ(char cHomeMachineMode=1);
SSI_STATUS_MOTION so7_motion_Dcc_Home_R();
SSI_STATUS_MOTION so7_Motion_R_IsHomed(bool &bHomed);
SSI_STATUS_MOTION so7_Motion_R_IsMotionFInished(bool &bFinished);
SSI_STATUS_MOTION _start_machine();
SSI_STATUS_MOTION _shutdown_machine();
SSI_STATUS_MOTION so7_motion_probe_on_off_(bool _bOnOff);
SSI_STATUS_MOTION so7_motion_reset_worktable_lower_left(char _HomeMode);
SSI_STATUS_MOTION so7_motion_reset_worktable_top_right();
SSI_STATUS_MOTION so7_motion_stop_motor_to_get_laser_data();
SSI_STATUS_MOTION so7_motion_laser_on_off(bool _bOnOff);
SSI_STATUS_MOTION so7_motion_fixture_on_off(bool _bOnOff);
SSI_STATUS_MOTION so7_motion_fixture_up_down(bool _bOnOff);
SSI_STATUS_MOTION so7_config_cfg_set_default_para();
SSI_STATUS_MOTION so7_motion_cfg_set_default_para();
SSI_STATUS_MOTION _get_xyz_index(long & lX, long & lY, long & lZ);
SSI_STATUS_MOTION so7_motion_jog(EMACHINE_AXIS cAxis,char cSpeedGear);
SSI_STATUS_MOTION so7_motion_get_position_xyz(double & dX, double & dY, double & dZ);
SSI_STATUS_MOTION so7_motion_set_position_xyz(double dX, double dY, double dZ, bool bWait);
SSI_STATUS_MOTION so7_Motion_XYZ_IsMotionFinished(bool &bFinished);
BOOL IsMotionFinishedManual(BOOL _BResetCnts=FALSE);
SSI_STATUS_MOTION so7_motion_set_speed_percent(EMACHINE_AXIS cAxis, char cSpeedGear, double dSpeedPercent,double dAccelPercent);
SSI_STATUS_MOTION so7_motion_set_speed_xyz(EMACHINE_AXIS cAxis,char cSpeedGear,char Acce,char cHoldSpeed,char cStartSpeed,char cRefreshCycle,double dBufferDis);
SSI_STATUS_MOTION so7_motion_get_speed_xyz(double &dPercentSpeed);
SSI_STATUS_MOTION so7_motion_set_position_R(double dR,bool bWait);
SSI_STATUS_MOTION so7_motion_get_position_R(double & dR);
SSI_STATUS_MOTION so7_motion_move_R(char _SpeedGear);
SSI_STATUS_MOTION so7_motion_get_3D_max_speed(double &dMaxSpeed);
SSI_STATUS_MOTION so7_motion_is_finished(char MotionType,BOOL& IsFinished);
SSI_STATUS_MOTION so7_motion_clear_finished_flag();
SSI_STATUS_MOTION so7_motion_set_all_speed_para();
void so7_motion_set_speed_accel_range();
SSI_STATUS_MOTION so7_motion_get_all_speed_para();
SSI_STATUS_MOTION so7_motion_set_all_so7_config();
SSI_STATUS_MOTION _calculate_straightline_motion(double dSpeedMM);
SSI_STATUS_MOTION so7_optics_set_scale_position(long lScale);
SSI_STATUS_MOTION so7_optics_get_scale_position(long &lScale);
SSI_STATUS_MOTION so7_optics_get_scale_range(long &neg_scale_range, long &pos_scale_range);
void so7_set_full_ringlight_data(long lIntensity);
void so7_set_ringlight_data(long lMaxSize, double *pSegments);
SSI_STATUS_MOTION so7_light_set_light_off();
SSI_STATUS_MOTION so7_light_set_light();
SSI_STATUS_MOTION so7_light_set_lamp_state(double dTopLightPercent,double dBottomLightPercent,double dCoaxialLightPercent,double dReservedLightPercent,double dRingLightPercent,char cOuterRingLightSwitch,char cInnerRingLightSwitch);
SSI_STATUS_MOTION so7_GetDIO(int Channel,BYTE& bDISts);
SSI_STATUS_MOTION so7_SetDO(int Channel,BYTE bDOSts);
SSI_STATUS_MOTION so7_motion_set_trig_para(char _cAxis,char _TrigMode,long _ParaNumber,long* _ParaData);
SSI_STATUS_MOTION so7_motion_get_trig_para(long _Index,char& _cAxis,char& _TrigMode,long& _ParaNumber,long& _ParaData);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_X(char SpeedGear);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_Y(char SpeedGear);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_Z(char SpeedGear);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_ZM(char SpeedGear);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_STOP_MOVE_XYZ();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_RESET_XYZ();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_RESET_V();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_STOP_V();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_TO_POS_X();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_TO_POS_Y();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_TO_POS_Z();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_TO_POS_ZM();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_TO_POS_XYZ(char ProbeType);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_TO_POS_XYZV();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_AXIS_XYZ();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_PROBE_XYZ();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_V_DATA();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_RESET_FLAG();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_FIXTURE_VALUE();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_RESET_FLAG();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_LIGHT_SIZE(char subCMD,BYTE LightValue);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_ALL_LIGHT_VALUE();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_VER_NUMBER();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_CORRECTION_SCALE(char cAxisType);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_SECTION(char cAxisType);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_COMMON_COMMAND(char Cmd,char SubCmd,char Type);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_COMMON_COMMAND_DATA(char Cmd,char SubCmd,char Type,char Data);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_ZOOM_SPEED(char xyz_gear);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_SPEED_PARAMETER(char axis_type,char xyz_gear);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_SPEED_PRECISION(char axis_type);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_SPEED_PARAMETER(char axis_type,char xyz_gear);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_MOTOR_SPEED_WHEELBASE_PARAMETER();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_MOTOR_SPEED_WHEELBASE_PARAMETER();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_SPEED_PRECISION(char axis_type);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_INTERRUPT_MESSAGE();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_ZOOM_MOTION_STATUS();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_OPEN_KEYENCE_LASER();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_INPUT_PORT_STATUS(char AddrType);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_ZSIGNAL_POS_X();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_ZSIGNAL_POS_Y();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_ZSIGNAL_POS_Z();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(char axis_type,char Addr,char Data);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(char axis_type,char Addr);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_FIRMWARE_VERSION_INFO();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_INTERRUPT_MSG(char cType);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_INTERRUPT_MSG(char cType,char cValue);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_GET_INTERRUPT_MSG_METHOD(char Method);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_MOVE_XY(char SpeedGearX,char SpeedGearY);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_CONSTANT_SPEED(int iSpeed,char axis_type,char xyz_gear);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_SEQ_NUMBER();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_SEQ_NUMBER();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_READ_TRIG_PULSE_PARA(long ParaIndex);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(char ActiveAxis,char TrigMode,long StartIndex,long ParaNumber,long* Para);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_TRIG_PULSE_START();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_TRIG_PULSE_STOP();
SSI_STATUS_MOTION _send_cmd_SO7_CMD_IO_PURPOSE(BOOL _bEnTrigIO);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_MOTION_CNTS(char _Speedgear,char _StartCnts,char _StopCnts);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_MOTION_CNTS(char _Speedgear=0);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_CONTROL_MODE(char axis_type,char ControlMode);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_CONTROL_MODE(char axis_type);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_MOTION_SEGMENT_DIS(char axis_type,char _SegmentIndex,long _lDis);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_MOTION_SEGMENT_DIS(char axis_type,char _SegmentIndex);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_EXTRA_IO(int nIONmmber,char bValue);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_EXTRA_IO(int nIONumber);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_MOTION_TYPE(BOOL type);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_MOTION_TYPE();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_X();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_Y();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_Z();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_ZM();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_RESET_XYZ();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_TO_POS_X();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_TO_POS_Y();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_TO_POS_Z();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_TO_POS_ZM();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_TO_POS_XYZ();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_AXIS_XYZ();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_PROBE_XYZ();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_V_DATA();
static SSI_STATUS_MOTION _process_SO7_CMD_GET_GET_RESET_FLAG();
static SSI_STATUS_MOTION _process_SO7_CMD_GET_GET_FIXTURE_VALUE();
static SSI_STATUS_MOTION _process_SO7_CMD_SET_LIGHT();
static SSI_STATUS_MOTION _process_SO7_CMD_SET_SPEED_PARAMETER();
static SSI_STATUS_MOTION _process_SO7_CMD_SET_SPEED_PRECISION();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_SPEED_PARAMETERX();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_SPEED_PARAMETERY();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_SPEED_PARAMETERZ();
static SSI_STATUS_MOTION _process_SO7_CMD_SET_SPEED_MOTOR_WHEELBASE_PARAMETER();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_MOTOR_SPEED_WHEELBASE_PARAMETER();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_SPEED_PRECISIONX();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_SPEED_PRECISIONY();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_SPEED_PRECISIONZ();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_INTERRUPT_MESSAGE();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_ZOOM_MOTION_STATUS();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_INPUT_PORT_STATUS();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_ZSIGNAL_POS_X();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_ZSIGNAL_POS_Y();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_ZSIGNAL_POS_Z();
static SSI_STATUS_MOTION _process_SO7_CMD_WRITE_DATA_TO_FPGA();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_DATA_FROM_FPGA();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_FIRMWARE_VERSION_INFO();
static SSI_STATUS_MOTION _process_SO7_CMD_GET_INTERRUPT_MSG(BYTE Type);
static SSI_STATUS_MOTION _process_SO7_CMD_GET_SEQ_NUMBER();
static SSI_STATUS_MOTION _process_SO7_CMD_READ_TRIG_PULSE_PARA();
static SSI_STATUS_MOTION _process_SO7_CMD_WRITE_TRIG_PULSE_PARA();
static SSI_STATUS_MOTION _process_SO7_CMD_GET_MOTION_CNTS();
static SSI_STATUS_MOTION _process_SO7_CMD_GET_CONTROL_MODE();
static SSI_STATUS_MOTION _process_SO7_CMD_GET_MOTION_SEGMENT_DIS(BYTE axis_type,BYTE _SegmentIndex);
static SSI_STATUS_MOTION _process_SO7_CMD_GET_EXTRA_IO_STATUS();
static SSI_STATUS_MOTION _process_SO7_CMD_SET_EXTRA_IO_STATUS();
static SSI_STATUS_MOTION _process_SO7_CMD_SET_MOTION_TYPE();
static SSI_STATUS_MOTION _process_SO7_CMD_GET_MOTION_TYPE();
CEF1AUsbDevice *g_EF1AUsbDevice;
bool isEF1AController;
bool m_bIoStatus;
void so7_load_ef1a_config(int _LoadType);
};
#endif