Machine Interface Utility:VER1.0
This commit is contained in:
@@ -0,0 +1,433 @@
|
||||
// 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 "..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Include\lusb0_usb.h"
|
||||
#include "..\MicroVu\SsiStatus.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 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
|
||||
|
||||
const long MAX_INTENSITY = 0x3FF;
|
||||
#define MAXLIGHTVALUE 256
|
||||
|
||||
|
||||
#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;
|
||||
union
|
||||
{
|
||||
long _long_;
|
||||
char _char_[4];
|
||||
}_pos_fixed;
|
||||
union
|
||||
{
|
||||
long _long_;
|
||||
char _char_[4];
|
||||
}_scale_pos;
|
||||
double _d_cur_pos_;
|
||||
long _scale_probe;
|
||||
double _dSet_Zero_Pos;
|
||||
long _lSet_Zero_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];
|
||||
|
||||
long _scale_range;
|
||||
double _neg_working_limit;
|
||||
double _pos_working_limit;
|
||||
|
||||
double _scale_resolution;
|
||||
bool _bhomed;
|
||||
};
|
||||
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
|
||||
{
|
||||
BOOL _EnCloseLoop;
|
||||
int _RetryTimes;
|
||||
double _ShiftPositionX;
|
||||
double _ShiftPositionY;
|
||||
double _ShiftPositionZ;
|
||||
};
|
||||
|
||||
//======================
|
||||
typedef struct s_so7_xyzzm
|
||||
{
|
||||
bool bFast;
|
||||
long from;
|
||||
long to;
|
||||
long speed;
|
||||
long acc;
|
||||
long dec;
|
||||
double dFromMM;
|
||||
double dToMM;
|
||||
} SO7AXISMOVE;
|
||||
//--------------------------------------------------------------------
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
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_zm_axis_config zm_axis;
|
||||
struct s_so7_machine_interface_config motion;
|
||||
} 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;
|
||||
} 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];
|
||||
int _motor_pulse_num;
|
||||
|
||||
struct s_so7_axis x;
|
||||
struct s_so7_axis y;
|
||||
struct s_so7_axis z;
|
||||
struct s_so7_axis zm;
|
||||
|
||||
};
|
||||
|
||||
#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[9];
|
||||
}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;
|
||||
char *_buffer; // MAX_BUFF_SIZE
|
||||
int _size;
|
||||
void *_async_context;
|
||||
BOOL _hProtoPending;
|
||||
HANDLE _event;
|
||||
};
|
||||
|
||||
//======================================================================================
|
||||
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;
|
||||
|
||||
|
||||
SSI_STATUS_MOTION Init_SO7Usb();
|
||||
SSI_STATUS_MOTION Exit_SO7Usb();
|
||||
|
||||
usb_dev_handle* _open_usb_dev(void);
|
||||
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_SevenOcean_Inifile(CString csSO7INIFile);
|
||||
SSI_STATUS_MOTION Save_SevenOcean_Inifile(CString csSO7INIFile);
|
||||
SSI_STATUS_MOTION Load_So7_Config();
|
||||
SSI_STATUS_MOTION Save_So7_Config();
|
||||
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);
|
||||
bool so7_motion_is_homed();
|
||||
SSI_STATUS_MOTION so7_motion_Dcc_Home();
|
||||
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();
|
||||
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_motion_reset_controller_parameter();
|
||||
|
||||
SSI_STATUS_MOTION _get_xyz_index(long & lX, long & lY, long & lZ);
|
||||
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_set_speed_xyz(double dPercentSpeed);
|
||||
SSI_STATUS_MOTION so7_motion_get_speed_xyz(double &dPercentSpeed);
|
||||
SSI_STATUS_MOTION so7_motion_get_3D_max_speed(double &dMaxSpeed);
|
||||
|
||||
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 dBottomPercent, double dTopPercent);
|
||||
|
||||
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();
|
||||
|
||||
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();
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user