Files
EF3-Interface/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp
T
2014-06-20 18:25:58 +08:00

6661 lines
231 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "stdafx.h"
#include <math.h>
#include "SO7_Proto.h"
#define MY_CONFIG 1
#define MAX_DEVPATH_LENGTH 256
#define ENDPOINT_TIMEOUT 500
#define MAX_IN_BUFF_SIZE 1024
#define M_PI 3.14159265358979323846
const INT HOME_TIMEOUT=300000;
const INT MOVETO_TIMEOUT=60000;
const INT MIN_SLEEP_TIME=20;
const DOUBLE ROTARY_MMtoScale_RESOLUTION=0.0005;
//***** Static Data *****
static char *outBuff = NULL;
struct_so7_ep_buff CSO7_Proto::ep_buff[lEPSIZE];
//================================================================
int CSO7_Proto::g_hEP8x_Thread_State=THREAD_PAUSED;
HANDLE CSO7_Proto::g_hEP8x_Thread_Id=NULL;
//================================================================
int CSO7_Proto::g_hEP02_Thread_State=THREAD_PAUSED;
HANDLE CSO7_Proto::g_hEP02_Thread_Id=NULL;
HANDLE CSO7_Proto::g_hEP02_Serial_Mutex;
//================================================================
struct_so7_machine CSO7_Proto::g_machine;
usb_dev_handle *CSO7_Proto::g_dev=NULL;
CLogger *CSO7_Proto::g_pLogger=NULL;
HANDLE CSO7_Proto::g_hHomedEvent = NULL;
//===========================================================================
// Worker Thread to serialize EP_S07_02 commands.
//===========================================================================
unsigned __stdcall CSO7_Proto::g_EP02_Thread(LPVOID pThis)
{
CSO7_Proto* _This = (CSO7_Proto*)pThis;
for (;;)
{
//TRACE0("g_hEP02_Thread in loop set.\n");
if (g_hEP02_Thread_State == THREAD_EXIT)
ExitThread(0);
WaitForSingleObject(ep_buff[EP_02_CMD_IDX]._event,INFINITE);
//TRACE0("g_hEP02_Thread obtained event.\n");
switch (g_hEP02_Thread_State)
{
case THREAD_EXIT:
{
ExitThread(0);
}
case THREAD_PAUSED:
break;
case THREAD_RUNNING_STATE1:
{
//TRACE0("g_hEP02_Thread calling _send_usb_cmd. EP_S07_02; \n");
_This->_send_usb_cmd(EP_02_CMD_IDX);
//TRACE0("g_hEP02_Thread return _send_usb_cmd. EP_S07_02; \n");
break;
}
case THREAD_RUNNING_STATE2:
{
//TRACE0("g_hSerDialUsbThread processing _write_usb_data_only();\n");
_This->_write_usb_data_only(EP_02_CMD_IDX);
//TRACE0("g_hSerialUsbThread return from _write_usb_data_only();\n");
break;
}
default:
ExitThread(0);
}
};
g_hEP02_Thread_State = THREAD_EXIT;
ExitThread(0);
};
//******************************************************************************
// This is the worker thread to process USBD_TRANSFER_DIRECTION_IN
//******************************************************************************
unsigned __stdcall CSO7_Proto::g_EP8x_Thread(LPVOID pThis)
{
CSO7_Proto* _This = (CSO7_Proto*)pThis;
for (;;)
{
//TRACE0("g_hEP8x_Thread_State in loop set.\n");
if (g_hEP8x_Thread_State == THREAD_EXIT)
ExitThread(0);
WaitForSingleObject(ep_buff[EP_82_DATA_IDX]._event, INFINITE);
//TRACE0("g_hEP8x_Thread_State obtained event.\n");
switch (g_hEP8x_Thread_State)
{
case THREAD_EXIT:
{
ExitThread(0);
}
case THREAD_PAUSED:
break;
case THREAD_RUNNING_STATE1:
{
_This->_read_data_8x(EP_81_DATA_IDX);
break;
}
case THREAD_RUNNING_STATE2:
{
_This->_read_data_8x(EP_82_DATA_IDX);
break;
}
default:
ExitThread(0);
}
}
}
//******************************************************************************
// Parse the data received based on the index (which EP are we processing).
// The CCmdObj should only have one CMD_STATUS_PROCESSING.
// Update CCmdObj _ep_01_status and _ep_81_status.
// Update _status to CMD_STATUS_COMPLETE when both _ep_01_status and _ep_81_status
// are CMD_STATUS_COMPLETE.
//
//******************************************************************************
void CSO7_Proto::_process_rcv_transfer_data(int iEP)
{
switch (iEP)
{
case EP_01_CMD_IDX :
TRACE0("_process_rcv_transfer_data() : Update EP_01_CMD_IDX.\r\n");
break;
case EP_82_DATA_IDX : //
if (ep_buff[EP_02_CMD_IDX]._save_send_cmd == CT_MOTOR)
{
switch (ep_buff[EP_02_CMD_IDX]._save_send_cmd0)
{
case CT_MOVEX:
_process_SO7_CMD_MOVE_X();
break;
case CT_MOVEY:
_process_SO7_CMD_MOVE_Y();
break;
case CT_MOVEZ:
_process_SO7_CMD_MOVE_Z();
break;
case CT_MOVEV:
_process_SO7_CMD_MOVE_ZM();
break;
case CT_RESET:
_process_SO7_CMD_MOVE_RESET_XYZ();
break;
case CT_MOVETOX:
_process_SO7_CMD_MOVE_TO_POS_X();
break;
case CT_MOVETOY:
_process_SO7_CMD_MOVE_TO_POS_Y();
break;
case CT_MOVETOZ:
_process_SO7_CMD_MOVE_TO_POS_Z();
break;
case CT_MOVETOV:
_process_SO7_CMD_MOVE_TO_POS_ZM();
break;
case CT_MOVETOXYZ:
_process_SO7_CMD_MOVE_TO_POS_XYZ();
break;
case CT_SET_SPEEDX:
case CT_SET_SPEEDY:
case CT_SET_SPEEDZ:
_process_SO7_CMD_SET_SPEED_PARAMETER();
break;
case CT_READ_SPEEDX:
_process_SO7_CMD_READ_SPEED_PARAMETERX();
break;
case CT_READ_SPEEDY:
_process_SO7_CMD_READ_SPEED_PARAMETERY();
break;
case CT_READ_SPEEDZ:
_process_SO7_CMD_READ_SPEED_PARAMETERZ();
break;
case CT_SET_PRECISIONX:
case CT_SET_PRECISIONY:
case CT_SET_PRECISIONZ:
_process_SO7_CMD_SET_SPEED_PRECISION();
break;
case CT_READ_PRECISIONX:
_process_SO7_CMD_READ_SPEED_PRECISIONX();
break;
case CT_READ_PRECISIONY:
_process_SO7_CMD_READ_SPEED_PRECISIONY();
break;
case CT_READ_PRECISIONZ:
_process_SO7_CMD_READ_SPEED_PRECISIONZ();
break;
case CT_SET_MOTOR_CAL:
_process_SO7_CMD_SET_SPEED_MOTOR_WHEELBASE_PARAMETER();
break;
case CT_READ_MOTOR_CAL:
_process_SO7_CMD_READ_MOTOR_SPEED_WHEELBASE_PARAMETER();
break;
break;
case CT_TEST_STOP:
_process_SO7_CMD_READ_ZOOM_MOTION_STATUS();
break;
case CT_GET_INTERRUPT_MSG:
_process_SO7_CMD_GET_INTERRUPT_MSG(ep_buff[EP_02_CMD_IDX]._save_send_cmd1);
break;
default:
TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_02_CMD_IDX]._save_send_cmd : %X \r\n", ep_buff[EP_02_CMD_IDX]._save_send_cmd);
TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_81_DATA_IDX]._buffer[0] : %X \r\n", ep_buff[EP_81_DATA_IDX]._buffer[0]);
break;
};
}
else if(ep_buff[EP_02_CMD_IDX]._save_send_cmd == CT_DATA)
{
switch (ep_buff[EP_02_CMD_IDX]._save_send_cmd0)
{
case CT_READ_AXISXYZ:
_process_SO7_CMD_READ_AXIS_XYZ();
break;
case CT_READ_PROBEXYZ:
_process_SO7_CMD_READ_PROBE_XYZ();
break;
case CT_READ_AXISV:
_process_SO7_CMD_READ_V_DATA();
break;
case CT_READ_IO_DAT:
_process_SO7_CMD_READ_INPUT_PORT_STATUS();
break;
case CT_READ_SEC_REALX:
_process_SO7_CMD_READ_ZSIGNAL_POS_X();
break;
case CT_READ_SEC_REALY:
_process_SO7_CMD_READ_ZSIGNAL_POS_Y();
break;
case CT_READ_SEC_REALZ:
_process_SO7_CMD_READ_ZSIGNAL_POS_Z();
break;
case CT_WRITE_SYSTEM:
_process_SO7_CMD_WRITE_DATA_TO_FPGA();
break;
case CT_READ_SYSTEM:
_process_SO7_CMD_READ_DATA_FROM_FPGA();
break;
case CT_READ_SEQ_NUMBER:
_process_SO7_CMD_GET_SEQ_NUMBER();
break;
case CT_READ_TRIG_PULSE_PARA:
_process_SO7_CMD_READ_TRIG_PULSE_PARA();
break;
case CT_WRITE_TRIG_PULSE_PARA:
_process_SO7_CMD_WRITE_TRIG_PULSE_PARA();
break;
default:
TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_02_CMD_IDX]._save_send_cmd : %X \r\n", ep_buff[EP_02_CMD_IDX]._save_send_cmd);
TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_81_DATA_IDX]._buffer[0] : %X \r\n", ep_buff[EP_81_DATA_IDX]._buffer[0]);
break;
};
}
else if(ep_buff[EP_02_CMD_IDX]._save_send_cmd == CT_SCALE)
{
switch (ep_buff[EP_02_CMD_IDX]._save_send_cmd0)
{
case CT_GET_RESET_FLAG:
_process_SO7_CMD_GET_GET_RESET_FLAG();
break;
case CT_GET_SYSTEM_VER_INFO:
_process_SO7_CMD_READ_FIRMWARE_VERSION_INFO();
break;
default:
TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_02_CMD_IDX]._save_send_cmd : %X \r\n", ep_buff[EP_02_CMD_IDX]._save_send_cmd);
TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_81_DATA_IDX]._buffer[0] : %X \r\n", ep_buff[EP_81_DATA_IDX]._buffer[0]);
break;
};
}
else if(ep_buff[EP_02_CMD_IDX]._save_send_cmd == CT_LIGHT)
{
switch (ep_buff[EP_02_CMD_IDX]._save_send_cmd0)
{
case CT_LIGHT1_SWITCH:
case CT_LIGHT2_SWITCH:
case CT_LIGHT3_SWITCH:
case CT_LIGHT4_SWITCH:
case CT_LIGHT1_SIZE:
case CT_LIGHT2_SIZE:
case CT_LIGHT3_SIZE:
case CT_LIGHT4_SIZE:
case CT_LIGHT_CMD:
_process_SO7_CMD_SET_LIGHT();
break;
default:
TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_02_CMD_IDX]._save_send_cmd : %X \r\n", ep_buff[EP_02_CMD_IDX]._save_send_cmd);
TRACE1("_process_rcv_transfer_data() : Unknown ep_buff[EP_81_DATA_IDX]._buffer[0] : %X \r\n", ep_buff[EP_81_DATA_IDX]._buffer[0]);
break;
};
}
//TRACE0("_process_rcv_transfer_data() : Update EP_82_DATA_IDX status.\r\n");
break;
case EP_02_CMD_IDX :
TRACE0("_process_rcv_transfer_data() : Update EP_02_CMD_IDX.\r\n");
break;
case EP_81_DATA_IDX :
_process_SO7_CMD_READ_INTERRUPT_MESSAGE();
TRACE0("_process_rcv_transfer_data() : Update EP_81_DATA_IDX.\r\n");
break;
default:
break;
};
};
//===========================================================================
double CSO7_Proto::ScaleToMM(long lCount, double dResolution)
{
double dMM = 0.0;
dMM = (lCount* dResolution) /1000 ;
return dMM;
}
//===========================================================================
long CSO7_Proto::MMtoScale(double lDistanceMM, double dResolution)
{
long lCounts(0);
if (dResolution)
lCounts = static_cast<long> (lDistanceMM *1000 / dResolution);
else
ASSERT(0);
return lCounts;
}
//===========================================================================
void CSO7_Proto::Trace_EP_Buff(long lIndex)
{
UCHAR tmp[256];
CString csTmp;
memcpy(tmp, ep_buff[lIndex]._buffer, ep_buff[lIndex]._size);
csTmp = _T("Trace_EP_Buff _59 ");
for (int ii= 0 ; ii < ep_buff[lIndex]._size ; ++ii)
{
CString csTmpHex;
csTmpHex.Format(_T("%2X"), tmp[ii] );
csTmp += csTmpHex;
}
TRACE1("_process_SO7_CMD_GET_INDEX_4E() Trace_EP_Buff %s \n", csTmp);
}
//=====================================================================================
long CSO7_Proto::_4char2long(unsigned char *cBuff)
{
union
{
long l_value;
char c_array[5];
};
memset (c_array, 0, 5);
c_array[0] = cBuff[3];
c_array[1] = cBuff[2];
c_array[2] = cBuff[1];
c_array[3] = cBuff[0];
return(l_value);
}
//=====================================================================================
long CSO7_Proto::_3char2long(unsigned char *cBuff)
{
union
{
long l_value;
char c_array[5];
};
memset (c_array, 0, 5);
c_array[0] = cBuff[2];
c_array[1] = cBuff[1];
c_array[2] = cBuff[0];
return(l_value);
}
//========================================================================
void CSO7_Proto::_reverse_dword(DWORD *dWord)
{
BYTE cBuff[4];
BYTE *dwBuff = (BYTE *)dWord;
for ( int ii = 0 ; ii < 4 ; ++ii )
cBuff[ii]= dwBuff[ii];
dwBuff[0] = cBuff[3];
dwBuff[1] = cBuff[2];
dwBuff[2] = cBuff[1];
dwBuff[3] = cBuff[0];
}
//******************************************************************************
void CSO7_Proto::_scale2inch(unsigned long scale, double &inch)
{
UNREFERENCED_PARAMETER(scale);
UNREFERENCED_PARAMETER(inch);
}
//******************************************************************************
void CSO7_Proto::_inch2scale(unsigned long &scale, double inch)
{
UNREFERENCED_PARAMETER(scale);
UNREFERENCED_PARAMETER(inch);
}
//******************************************************************************
// convert a string of characters into its binary form
void CSO7_Proto::_char2bin(unsigned char *cBuff, BYTE *cBytes, int iLen)
{
memset(cBytes, 0, MAX_BUFF_SIZE);
for (int i=0;i<iLen;i++)
{
sscanf_s((const char *)(cBuff+i*2), "%2x", (cBytes+i));
};
return;
}
//******************************************************************************
void CSO7_Proto::_swap_byte(unsigned short &Val)
{
unsigned short MSB = Val<<8;
BYTE LSB = Val>>8;
Val = MSB|LSB;
}
//******************************************************************************
double CSO7_Proto::TimeInSecs(void)
{
double Secs;
LARGE_INTEGER HPCounterTicksPerSecond;
BOOL HasHPCounter = QueryPerformanceFrequency(&HPCounterTicksPerSecond);
if (HasHPCounter == TRUE)
{
// Use high resolution clock.
double HPCounterTicksPersec = (DWORD)((double) HPCounterTicksPerSecond.QuadPart);
LARGE_INTEGER HPTicks;
QueryPerformanceCounter(&HPTicks);
Secs = ((double)HPTicks.QuadPart / HPCounterTicksPersec);
}
else
{
// Use clock with less resolution.
Secs = GetTickCount();
Secs /= 1000.0;
}
return Secs;
}
//******************************************************************************
CSO7_Proto::CSO7_Proto()
{
ep_buff[EP_01_CMD_IDX]._ep = EP_S07_01;
ep_buff[EP_81_DATA_IDX]._ep = EP_S07_81;
ep_buff[EP_02_CMD_IDX]._ep = EP_S07_02;
ep_buff[EP_82_DATA_IDX]._ep = EP_S07_82;
for (int i=0;i<lEPSIZE;i++)
{
ep_buff[i]._size = 0;
ep_buff[i]._save_send_cmd = 99;
ep_buff[i]._async_context = NULL;
ep_buff[i]._buffer = (char *)malloc(MAX_BUFF_SIZE);
ep_buff[i]._hProtoPending = false;
ep_buff[i]._event = NULL;
};
for (int i=0;i<20;i++)
{
for (int j=0;j<2;j++)
{
g_machine.GetInterruptMsg[i][j]=0;
}
}
g_machine.IsSupportReadInterrputMsg=FALSE;
g_machine.IsOffline=TRUE;
g_machine.FPGAData=0;
g_machine.FirmwareVer=FirmwareVer_3_X;
g_machine.x._Move_Speed_Gear =2;
g_machine.y._Move_Speed_Gear =2;
g_machine.z._Move_Speed_Gear =2;
g_machine.x._MoveTo_Speed_Gear =0;
g_machine.y._MoveTo_Speed_Gear =0;
g_machine.z._MoveTo_Speed_Gear =0;
g_machine.zm._Move_Speed_Gear =2;
g_machine.x._pos_fixed._long_ =0;
g_machine.y._pos_fixed._long_ =0;
g_machine.z._pos_fixed._long_ =0;
g_machine.zm._pos_fixed._long_ =0;
g_machine.x._ZSignal_pos._long_=0;
g_machine.y._ZSignal_pos._long_=0;
g_machine.z._ZSignal_pos._long_=0;
g_machine.x._d_cur_pos_ = 0;
g_machine.y._d_cur_pos_ = 0;
g_machine.z._d_cur_pos_ = 0;
g_machine.zm._d_cur_pos_ = 0;
g_machine.ADC_Number=0;
g_machine.ADC_Value =0;
g_machine.Sys_Reset_Flag=0;
g_machine.cFixtureFlag=0;
g_machine.cVerNumber=3;
g_machine.s_lights_value._top_light=1;
g_machine.s_lights_value._bottom_light=1;
g_machine.s_lights_value._ring_light=1;
g_machine.s_lights_value._coaxial_light=1;
g_machine.s_lights_value._spare_light1=1;
g_machine.s_lights_value.segment[0]=0;
g_machine.s_lights_value.segment[1]=0;
g_machine.dRotaryCirclDis=100;
g_machine.Light_Size=0;
g_machine.Light_Switch=0;
g_machine.SEQ_NUMBER=0;
g_machine.s_machine_config.x_axis._MoveToSpeed[0]=0.0;
g_machine.s_machine_config.x_axis._MoveToSpeed[1]=0.0;
g_machine.s_machine_config.x_axis._MotionSpeedScale=1.0;
g_machine.s_machine_config.y_axis._MoveToSpeed[0]=0.0;
g_machine.s_machine_config.y_axis._MoveToSpeed[1]=0.0;
g_machine.s_machine_config.y_axis._MotionSpeedScale=1.0;
g_machine.s_machine_config.z_axis._MoveToSpeed[0]=0.0;
g_machine.s_machine_config.z_axis._MoveToSpeed[1]=0.0;
g_machine.s_machine_config.z_axis._MotionSpeedScale=1.0;
g_machine.s_machine_config.zm_axis._ProductID=_T("So7123456");
g_machine.s_machine_config.zm_axis._ComPort=1;
g_machine.s_machine_config.zm_axis._StartDegree=0.0;
g_machine.s_machine_config.zm_axis._EndDegree=0.0;
g_machine.s_machine_config.zm_axis._RelativeZeroDegree=0.0;
g_machine.s_machine_config.zm_axis._Deadband=0.1;
g_machine.s_machine_config.zm_axis._ReadingInterval=60;
g_machine.s_machine_config.zm_axis._PulseScale=25.13473606496862;
g_machine.s_machine_config.zm_axis._SpeedFast=2000;
g_machine.s_machine_config.zm_axis._SpeedSlow=800;
g_machine.s_machine_config.zm_axis._speed._short_=0;
g_machine.MotionType=-1;
g_machine.s_status._bIsZMMotionFinished=0;
g_machine.x._scale_pos._long_ = 0;
g_machine.y._scale_pos._long_ = 0;
g_machine.z._scale_pos._long_ = 0;
g_machine.zm._scale_pos._long_ = 0;
g_machine.x._d_cur_pos_ = 0;
g_machine.y._d_cur_pos_ = 0;
g_machine.z._d_cur_pos_ = 0;
g_machine.zm._d_cur_pos_= 0;
g_machine.x._dSet_Zero_Pos = 0.0;
g_machine.y._dSet_Zero_Pos = 0.0;
g_machine.z._dSet_Zero_Pos = 0.0;
g_machine.zm._dSet_Zero_Pos = 0.0;
g_machine.x._lSet_Zero_Pos = 0;
g_machine.y._lSet_Zero_Pos = 0;
g_machine.z._lSet_Zero_Pos = 0;
g_machine.zm._lSet_Zero_Pos = 0;
g_machine.s_machine_config._dXYZSpeed=50;
g_machine.InterruptFlag[0]=0;
g_machine.InterruptFlag[1]=0;
g_machine.InPortStatus=0;
so7_motion_reset_controller_parameter();
so7_config_para_set_default();
m_bHomingActive = false;
g_pLogger = new CLogger(_T("\\MachineInterface.Log"));
};
//******************************************************************************
CSO7_Proto::~CSO7_Proto()
{
for (int i=0;i<lEPSIZE;i++)
{
free(ep_buff[i]._buffer);
};
if (g_pLogger)
{
delete g_pLogger;
g_pLogger = NULL;
}
}
#pragma warning(disable:4996)
//==============================================================================
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::so7_config_para_set_default()
{
g_machine.s_machine_config.motion._EnCloseLoop=FALSE;
g_machine.s_machine_config.motion._RetryTimes=0;
g_machine.s_machine_config.motion._ShiftPositionX=0.0;
g_machine.s_machine_config.motion._ShiftPositionY=0.0;
g_machine.s_machine_config.motion._ShiftPositionZ=0.0;
g_machine.s_machine_config.motion._ShiftPositionZ=0.0;
g_machine.s_machine_config.motion.GetInterruptMsgMethod=E_GET_INTERRUPT_MSG_INQUIRY;
g_machine.s_machine_config.motion.m_WriteDataSleepTime=0;
g_machine.s_machine_config.motion.m_AccuraErrPulseX=1;
g_machine.s_machine_config.motion.m_AccuraErrPulseY=1;
g_machine.s_machine_config.motion.m_AccuraErrPulseZ=1;
g_machine.s_machine_config.motion.m_EQUIDIS_X=0;
g_machine.s_machine_config.motion.m_EQUIDIS_Y=0;
g_machine.s_machine_config.motion.m_EQUIDIS_Z=0;
g_machine.s_machine_config.motion.m_CNC_Deadlock_Solution=1;
g_machine.s_machine_config.motion.m_CNC_Deadlock_JudgeMaxCnts=6;
g_machine.s_machine_config.motion.m_TouchProbeEnable=0;
g_machine.s_machine_config.motion.m_FootSwitchEnable=0;
g_machine.s_machine_config.motion.m_JoyStickEnable=0;
g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable=0;
g_machine.s_machine_config.motion.m_DebugOutputEnable=0;
g_machine.s_machine_config.motion.m_SDK3000_CntThreadSleepVal=550000;
g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[0]=70;
g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[1]=70;
g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[2]=70;
g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[3]=70;
g_machine.s_machine_config.motion.m_MachineType=MACHINE_SO7_CONTROLLER;
g_machine.s_machine_config.motion.m_VideoCardType=0;
g_machine.s_machine_config.x_axis._scale_resolution=0.5;
g_machine.s_machine_config.y_axis._scale_resolution=0.5;
g_machine.s_machine_config.z_axis._scale_resolution=0.5;
g_machine.s_machine_config.x_axis._neg_working_limit=0;
g_machine.s_machine_config.x_axis._pos_working_limit=200;
g_machine.s_machine_config.y_axis._neg_working_limit=0;
g_machine.s_machine_config.y_axis._pos_working_limit=100;
g_machine.s_machine_config.z_axis._neg_working_limit=0;
g_machine.s_machine_config.z_axis._pos_working_limit=200;
g_machine.s_machine_config.motion.m_RotaryCircleDis=7.2;
g_machine.s_machine_config.motion.m_RotaryCirclePulse=14400;
g_machine.s_machine_config.motion.m_RotaryAxisNO=MACHINE_AXIS_NONE;
return SSI_STATUS_MOTION_NORMAL;
}
SSI_STATUS_MOTION CSO7_Proto::so7_motion_reset_controller_parameter()
{
for(int i=0;i<5;i++)
{
g_machine.s_machine_config.x_axis._speed_base[i]=0;
g_machine.s_machine_config.x_axis._speed_max[i]=0;
g_machine.s_machine_config.x_axis._speed_start[i]=0;
g_machine.s_machine_config.x_axis._speed_fresh[i]=0;
g_machine.s_machine_config.x_axis._speed_slow_dis[i]=0;
g_machine.s_machine_config.y_axis._speed_base[i]=0;
g_machine.s_machine_config.y_axis._speed_max[i]=0;
g_machine.s_machine_config.y_axis._speed_start[i]=0;
g_machine.s_machine_config.y_axis._speed_fresh[i]=0;
g_machine.s_machine_config.y_axis._speed_slow_dis[i]=0;
g_machine.s_machine_config.z_axis._speed_base[i]=0;
g_machine.s_machine_config.z_axis._speed_max[i]=0;
g_machine.s_machine_config.z_axis._speed_start[i]=0;
g_machine.s_machine_config.z_axis._speed_fresh[i]=0;
g_machine.s_machine_config.z_axis._speed_slow_dis[i]=0;
}
g_machine.s_machine_config.x_axis._motor_wheelbase=0;
g_machine.s_machine_config.y_axis._motor_wheelbase=0;
g_machine.s_machine_config.z_axis._motor_wheelbase=0;
g_machine._motor_pulse_num=10000;
g_machine.s_machine_config.x_axis._motor_precision=0;
g_machine.s_machine_config.y_axis._motor_precision=0;
g_machine.s_machine_config.z_axis._motor_precision=0;
return SSI_STATUS_MOTION_NORMAL;
}
//=========================================================================================
SSI_STATUS_MOTION CSO7_Proto::Save_SevenOcean_Inifile(CString path_and_fileName)
{
FILE* m_pOutFile;
char *outBuff = NULL;
char tmp;
_wfopen_s(&m_pOutFile, path_and_fileName, _T("wt"));
if (!m_pOutFile)
{
free(outBuff);
}
else
{
outBuff="[HARDWARE]";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile, "\n");
outBuff="MOVETOSPEED_FAST_X=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.x_axis._MoveToSpeed[0]);
fprintf(m_pOutFile, "\n");
outBuff="MOVETOSPEED_SLOW_X=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.x_axis._MoveToSpeed[1]);
fprintf(m_pOutFile, "\n");
outBuff="MOVETOSPEED_SCALE_X=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.x_axis._MotionSpeedScale);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="MOVETOSPEED_FAST_Y=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.y_axis._MoveToSpeed[0]);
fprintf(m_pOutFile, "\n");
outBuff="MOVETOSPEED_SLOW_Y=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.y_axis._MoveToSpeed[1]);
fprintf(m_pOutFile, "\n");
outBuff="MOVETOSPEED_SCALE_Y=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.y_axis._MotionSpeedScale);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="MOVETOSPEED_FAST_Z=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.z_axis._MoveToSpeed[0]);
fprintf(m_pOutFile, "\n");
outBuff="MOVETOSPEED_SLOW_Z=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.z_axis._MoveToSpeed[1]);
fprintf(m_pOutFile, "\n");
outBuff="MOVETOSPEED_SCALE_Z=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%9.8f", g_machine.s_machine_config.z_axis._MotionSpeedScale);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_X1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.x_axis._speed_base[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_X1=";
fprintf(m_pOutFile,"%s", outBuff);
tmp= g_machine.s_machine_config.x_axis._speed_max[0];
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.x_axis._speed_max[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_X1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_start[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_X1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_fresh[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_X1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[0]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_X2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.x_axis._speed_base[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_X2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.x_axis._speed_max[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_X2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_start[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_X2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_fresh[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_X2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[1]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_X3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte) g_machine.s_machine_config.x_axis._speed_base[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_X3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.x_axis._speed_max[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_X3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_start[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_X3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_fresh[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_X3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[2]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_X4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.x_axis._speed_base[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_X4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.x_axis._speed_max[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_X4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_start[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_X4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_fresh[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_X4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[3]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_X5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.x_axis._speed_base[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_X5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.x_axis._speed_max[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_X5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_start[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_X5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.x_axis._speed_fresh[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_X5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._speed_slow_dis[4]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Y1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.y_axis._speed_base[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Y1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.y_axis._speed_max[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Y1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_start[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Y1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_fresh[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Y1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[0]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Y2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.y_axis._speed_base[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Y2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.y_axis._speed_max[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Y2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_start[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Y2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_fresh[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Y2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[1]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Y3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.y_axis._speed_base[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Y3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.y_axis._speed_max[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Y3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_start[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Y3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_fresh[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Y3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[2]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Y4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.y_axis._speed_base[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Y4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.y_axis._speed_max[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Y4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_start[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Y4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_fresh[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Y4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[3]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Y5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.y_axis._speed_base[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Y5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.y_axis._speed_max[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Y5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_start[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Y5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.y_axis._speed_fresh[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Y5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._speed_slow_dis[4]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Z1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_base[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Z1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_max[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Z1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_start[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Z1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_fresh[0]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Z1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[0]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Z2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_base[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Z2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_max[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Z2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_start[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Z2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_fresh[1]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Z2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[1]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Z3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_base[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Z3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_max[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Z3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_start[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Z3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_fresh[2]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Z3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[2]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Z4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_base[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Z4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_max[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Z4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_start[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Z4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_fresh[3]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Z4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[3]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="SPEED_BASE_Z5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_base[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_MAX_Z5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", (byte)g_machine.s_machine_config.z_axis._speed_max[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_START_Z5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_start[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_FRESH_Z5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",(byte)g_machine.s_machine_config.z_axis._speed_fresh[4]);
fprintf(m_pOutFile, "\n");
outBuff="SPEED_SLOW_Z5=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._speed_slow_dis[4]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="X_MOTOR_PRECISION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._motor_precision);
fprintf(m_pOutFile, "\n");
outBuff="Y_MOTOR_PRECISION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._motor_precision);
fprintf(m_pOutFile, "\n");
outBuff="Z_MOTOR_PRECISION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._motor_precision);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="X_MOTOR_WHEELBASE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.x_axis._motor_wheelbase);
fprintf(m_pOutFile, "\n");
outBuff="Y_MOTOR_WHEELBASE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.y_axis._motor_wheelbase);
fprintf(m_pOutFile, "\n");
outBuff="Z_MOTOR_WHEELBASE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f",g_machine.s_machine_config.z_axis._motor_wheelbase);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="MOTOR_PULSE_NUM=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d",g_machine._motor_pulse_num);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
//===========worktable=====================
outBuff="[WORKTABLE]";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile, "\n");
outBuff="X_SCALE_RESOLUTION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.x_axis._scale_resolution);
fprintf(m_pOutFile, "\n");
outBuff="Y_SCALE_RESOLUTION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.y_axis._scale_resolution);
fprintf(m_pOutFile, "\n");
outBuff="Z_SCALE_RESOLUTION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.z_axis._scale_resolution);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="X_NEG_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.x_axis._neg_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="Y_NEG_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.y_axis._neg_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="Z_NEG_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.z_axis._neg_working_limit);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
outBuff="X_POS_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.x_axis._pos_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="Y_POS_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.y_axis._pos_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="Z_POS_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.s_machine_config.z_axis._pos_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="ROTARY_CIR_DIS=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.3f", g_machine.dRotaryCirclDis);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile,"%s", ";\n");
fclose(m_pOutFile);
}
return SSI_STATUS_MOTION_NORMAL;
}
//******************************************************************************
//log file shows the machine speed data
SSI_STATUS_MOTION CSO7_Proto::Load_SevenOcean_Inifile(CString cso7IniFile)
{
FILE *hConfigFile = NULL;
char szLine[MAX_BUFF_SIZE];
char *token = NULL;
char seps[] = " =,\t\n";
char cTemp[20]={0};
CString csSO7ConfigFile =cso7IniFile;//csAppPath+_T("\\so7_config.ini");
_wfopen_s(&hConfigFile,csSO7ConfigFile,_T("rt"));
if(hConfigFile)
{
while (!feof(hConfigFile))
{
fgets(szLine,MAX_BUFF_SIZE,hConfigFile);//read a line
if((szLine[0]!=';')&&(strlen(szLine)>2))
{
token = strtok(szLine,seps);
if(!_stricmp(token,"MOVETOSPEED_FAST_X"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._MoveToSpeed[0]=atof(cTemp);
}
}
else if(!_stricmp(token,"MOVETOSPEED_SLOW_X"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._MoveToSpeed[1]=atof(cTemp);
}
}
else if(!_stricmp(token,"MOVETOSPEED_SCALE_X"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._MotionSpeedScale=atof(cTemp);
}
}
else if(!_stricmp(token,"MOVETOSPEED_FAST_Y"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._MoveToSpeed[0]=atof(cTemp);
}
}
else if(!_stricmp(token,"MOVETOSPEED_SLOW_Y"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._MoveToSpeed[1]=atof(cTemp);
}
}
else if(!_stricmp(token,"MOVETOSPEED_SCALE_Y"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._MotionSpeedScale=atof(cTemp);
}
}
else if(!_stricmp(token,"MOVETOSPEED_FAST_Z"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._MoveToSpeed[0]=atof(cTemp);
}
}
else if(!_stricmp(token,"MOVETOSPEED_SLOW_Z"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._MoveToSpeed[1]=atof(cTemp);
}
}
else if(!_stricmp(token,"MOVETOSPEED_SCALE_Z"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._MotionSpeedScale=atof(cTemp);
}
}
// X1
else if(!_stricmp(token,"SPEED_BASE_X1"))//SPEED_BASE_X1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_base[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_X1"))//SPEED_FRESH_X1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_fresh[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_X1"))//SPEED_START_X1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_start[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_X1"))//SPEED_MAX_X1
{
token = strtok( NULL, seps);
// temp=token;
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_max[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_X1"))//SPEED_SLOW_X1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_slow_dis[0]=atof(cTemp);
}
}
// X2
else if(!_stricmp(token,"SPEED_BASE_X2"))//SPEED_BASE_X2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_base[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_X2"))//SPEED_FRESH_X2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_fresh[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_X2"))//SPEED_START_X2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_start[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_X2"))//SPEED_MAX_X2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_max[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_X2"))//SPEED_SLOW_X2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_slow_dis[1]=atof(cTemp);
}
}
//X3
else if(!_stricmp(token,"SPEED_BASE_X3"))//SPEED_BASE_X3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_base[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_X3"))//SPEED_FRESH_X3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_fresh[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_X3"))//SPEED_START_X3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_start[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_X3"))//SPEED_MAX_X3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_max[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_X3"))//SPEED_SLOW_X3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_slow_dis[2]=atof(cTemp);
}
}
// X4
else if(!_stricmp(token,"SPEED_BASE_X4"))//SPEED_BASE_X4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_base[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_X4"))//SPEED_FRESH_X4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_fresh[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_X4"))//SPEED_START_X4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_start[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_X4"))//SPEED_MAX_X4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_max[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_X4"))//SPEED_SLOW_X4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_slow_dis[3]=atof(cTemp);
}
}
//X5
else if(!_stricmp(token,"SPEED_BASE_X5"))//SPEED_BASE_X5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_base[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_X5"))//SPEED_FRESH_X5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_fresh[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_X5"))//SPEED_START_X5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_start[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_X5"))//SPEED_MAX_X5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_max[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_X5"))//SPEED_SLOW_X5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._speed_slow_dis[4]=atof(cTemp);
}
}
// Y_axis
else if(!_stricmp(token,"SPEED_BASE_Y1"))//SPEED_BASE_Y1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_base[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Y1"))//SPEED_FRESH_Y1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_fresh[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Y1"))//SPEED_START_Y1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_start[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Y1"))//SPEED_MAX_Y1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_max[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Y1"))//SPEED_SLOW_Y1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_slow_dis[0]=atof(cTemp);
}
}
//Y2
else if(!_stricmp(token,"SPEED_BASE_Y2"))//SPEED_BASE_Y2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_base[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Y2"))//SPEED_FRESH_Y2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_fresh[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Y2"))//SPEED_START_Y2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_start[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Y2"))//SPEED_MAX_Y2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_max[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Y2"))//SPEED_SLOW_Y2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_slow_dis[1]=atof(cTemp);
}
}
//Y3
else if(!_stricmp(token,"SPEED_BASE_Y3"))//SPEED_BASE_Y3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_base[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Y3"))//SPEED_FRESH_Y3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_fresh[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Y3"))//SPEED_START_Y3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_start[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Y3"))//SPEED_MAX_Y3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_max[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Y3"))//SPEED_SLOW_Y3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_slow_dis[2]=atof(cTemp);
}
}
// Y4
else if(!_stricmp(token,"SPEED_BASE_Y4"))//SPEED_BASE_Y4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_base[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Y4"))//SPEED_FRESH_Y4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_fresh[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Y4"))//SPEED_START_Y4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_start[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Y4"))//SPEED_MAX_Y4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_max[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Y4"))//SPEED_SLOW_Y4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_slow_dis[3]=atof(cTemp);
}
}
//Y5
else if(!_stricmp(token,"SPEED_BASE_Y5"))//SPEED_BASE_Y5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_base[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Y5"))//SPEED_FRESH_Y5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_fresh[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Y5"))//SPEED_START_Y5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_start[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Y5"))//SPEED_MAX_Y5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_max[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Y5"))//SPEED_SLOW_Y5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._speed_slow_dis[4]=atof(cTemp);
}
}
// Z_axis
else if(!_stricmp(token,"SPEED_BASE_Z1"))//SPEED_BASE_Z1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_base[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Z1"))//SPEED_FRESH_Z1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_fresh[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Z1"))//SPEED_START_Z1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_start[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Z1"))//SPEED_MAX_Z1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_max[0]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Z1"))//SPEED_SLOW_Z1
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_slow_dis[0]=atof(cTemp);
}
}
//Z2
else if(!_stricmp(token,"SPEED_BASE_Z2"))//SPEED_BASE_Z2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_base[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Z2"))//SPEED_FRESH_Z2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_fresh[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Z2"))//SPEED_START_Z2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_start[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Z2"))//SPEED_MAX_Z2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_max[1]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Z2"))//SPEED_SLOW_Z2
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_slow_dis[1]=atof(cTemp);
}
}
//Z3
else if(!_stricmp(token,"SPEED_BASE_Z3"))//SPEED_BASE_Z3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_base[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Z3"))//SPEED_FRESH_Z3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_fresh[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Z3"))//SPEED_START_Z3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_start[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Z3"))//SPEED_MAX_Z3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_max[2]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Z3"))//SPEED_SLOW_Z3
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_slow_dis[2]=atof(cTemp);
}
}
// Z4
else if(!_stricmp(token,"SPEED_BASE_Z4"))//SPEED_BASE_Z4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_base[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Z4"))//SPEED_FRESH_Z4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_fresh[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Z4"))//SPEED_START_Z4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_start[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Z4"))//SPEED_MAX_Z4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_max[3]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Z4"))//SPEED_SLOW_Z4
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_slow_dis[3]=atof(cTemp);
}
}
//Z5
else if(!_stricmp(token,"SPEED_BASE_Z5"))//SPEED_BASE_Z5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_base[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_FRESH_Z5"))//SPEED_FRESH_Z5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_fresh[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_START_Z5"))//SPEED_START_Z5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_start[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_MAX_Z5"))//SPEED_MAX_Z5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_max[4]=static_cast<char>(atoi(cTemp));
}
}
else if(!_stricmp(token, "SPEED_SLOW_Z5"))//SPEED_SLOW_Z5
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._speed_slow_dis[4]=atof(cTemp);
}
}
//XZY_MOTOR_PRECISION
else if(!_stricmp(token, "X_MOTOR_PRECISION"))//SET MOTOR PRECISION
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._motor_precision=atof(cTemp);
}
}
else if(!_stricmp(token, "Y_MOTOR_PRECISION"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._motor_precision=atof(cTemp);
}
}
else if(!_stricmp(token, "Z_MOTOR_PRECISION"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._motor_precision=atof(cTemp);
}
}
else if(!_stricmp(token, "X_MOTOR_WHEELBASE"))//SET MOTOR WHEELBASE
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._motor_wheelbase=atof(cTemp);
}
}
else if(!_stricmp(token, "Y_MOTOR_WHEELBASE"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._motor_wheelbase=atof(cTemp);
}
}
else if(!_stricmp(token, "Z_MOTOR_WHEELBASE"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._motor_wheelbase=atof(cTemp);
}
}
else if(!_stricmp(token, "MOTOR_PULSE_NUM"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine._motor_pulse_num=atoi(cTemp);
}
}
/*
//=====================[WORKTABLE]========================
else if(!_stricmp(token, "X_SCALE_RESOLUTION"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._scale_resolution=atof(cTemp);
}
}
else if(!_stricmp(token, "Y_SCALE_RESOLUTION"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._scale_resolution=atof(cTemp);
}
}
else if(!_stricmp(token, "Z_SCALE_RESOLUTION"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._scale_resolution=atof(cTemp);
}
}
else if(!_stricmp(token, "X_NEG_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._neg_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "Y_NEG_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._neg_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "Z_NEG_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._neg_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "X_POS_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._pos_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "Y_POS_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._pos_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "Z_POS_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._pos_working_limit=atof(cTemp);
}
}
else if (!_stricmp(token,"ROTARY_CIR_DIS"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.dRotaryCirclDis=atof(cTemp);
}
}
*/
}
}
fclose(hConfigFile);
}
return SSI_STATUS_MOTION_NORMAL;
}
//=========================================================================================
SSI_STATUS_MOTION CSO7_Proto::Save_So7_Config()
{
FILE* m_pOutFile= NULL;
char *outBuff = NULL;
CString csAppPath;
GetAppPath(csAppPath);
CString cFileName=csAppPath+_T("\\so7_config.ini");
_wfopen_s(&m_pOutFile, cFileName, _T("wt"));
if (!m_pOutFile)
{
free(outBuff);
}
else
{
outBuff="[7OCEANAUTOZOOM]";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_PRODUCT_ID=";
fprintf(m_pOutFile,"%s", outBuff);
USES_CONVERSION;
outBuff=T2A(g_machine.s_machine_config.zm_axis._ProductID);
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_COM_PORT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.zm_axis._ComPort);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_START_DEG=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.zm_axis._StartDegree);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_END_DEG=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.zm_axis._EndDegree);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_ORG_DEG=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.zm_axis._RelativeZeroDegree);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_DEADBAND_DEG=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.zm_axis._Deadband);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_PULSE_PER_DEG=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.15f", g_machine.s_machine_config.zm_axis._PulseScale);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_READING_INTERVAL_TIME=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.zm_axis._ReadingInterval);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_MOTOR_SPEED_FAST=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.zm_axis._SpeedFast);
fprintf(m_pOutFile, "\n");
outBuff="ZOOM_MOTOR_SPEED_SLOW=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.zm_axis._SpeedSlow);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile, ";\n");
outBuff="[CONTROLLER]";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile, "\n");
outBuff="CLOSE_LOOP_ENABLED=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion._EnCloseLoop);
fprintf(m_pOutFile, "\n");
outBuff="MOTION_RETRY_TIMES=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion._RetryTimes);
fprintf(m_pOutFile, "\n");
outBuff="SHIFT_POSITION_X=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.motion._ShiftPositionX);
fprintf(m_pOutFile, "\n");
outBuff="SHIFT_POSITION_Y=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.motion._ShiftPositionY);
fprintf(m_pOutFile, "\n");
outBuff="SHIFT_POSITION_Z=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.motion._ShiftPositionZ);
fprintf(m_pOutFile, "\n");
outBuff="GET_USB_MESSAGE_METHOD=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.GetInterruptMsgMethod);
fprintf(m_pOutFile, "\n");
outBuff="WRITE_DATA_SLEEP_TIME=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_WriteDataSleepTime);
fprintf(m_pOutFile, "\n");
outBuff="ACCURA_ERROR_PULSE_X=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_AccuraErrPulseX);
fprintf(m_pOutFile, "\n");
outBuff="ACCURA_ERROR_PULSE_Y=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_AccuraErrPulseY);
fprintf(m_pOutFile, "\n");
outBuff="ACCURA_ERROR_PULSE_Z=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_AccuraErrPulseZ);
fprintf(m_pOutFile, "\n");
outBuff="EQUIDISTANCE_PULSE_X=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_EQUIDIS_X);
fprintf(m_pOutFile, "\n");
outBuff="EQUIDISTANCE_PULSE_Y=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_EQUIDIS_Y);
fprintf(m_pOutFile, "\n");
outBuff="EQUIDISTANCE_PULSE_Z=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_EQUIDIS_Z);
fprintf(m_pOutFile, "\n");
outBuff="CNC_DEADLOCK_SOLUTION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_CNC_Deadlock_Solution);
fprintf(m_pOutFile, "\n");
outBuff="CNC_DEADLOCK_MAX_CNTS=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_CNC_Deadlock_JudgeMaxCnts);
fprintf(m_pOutFile, "\n");
outBuff="TOUCH_PROBE_ENABLE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_TouchProbeEnable);
fprintf(m_pOutFile, "\n");
outBuff="FOOT_SWITCH_ENABLE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_FootSwitchEnable);
fprintf(m_pOutFile, "\n");
outBuff="JOYSTICK_ENABLE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_JoyStickEnable);
fprintf(m_pOutFile, "\n");
outBuff="CCS_PRIMA_ENABLE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable);
fprintf(m_pOutFile, "\n");
outBuff="DEBUG_LOG_ENABLE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_DebugOutputEnable);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile, ";\n");
outBuff="[VIDEOCARD]";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile, "\n");
outBuff="SDK3000_SLEEP_COUNT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SDK3000_CntThreadSleepVal);
fprintf(m_pOutFile, "\n");
outBuff="SV4000E_DENOISE_PARA_CHANNEL1=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[0]);
fprintf(m_pOutFile, "\n");
outBuff="SV4000E_DENOISE_PARA_CHANNEL2=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[1]);
fprintf(m_pOutFile, "\n");
outBuff="SV4000E_DENOISE_PARA_CHANNEL3=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[2]);
fprintf(m_pOutFile, "\n");
outBuff="SV4000E_DENOISE_PARA_CHANNEL4=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[3]);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile, ";\n");
outBuff="[HSI]";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile, "\n");
outBuff="MACHINE_CONTROLLER_TYPE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_MachineType);
fprintf(m_pOutFile, "\n");
outBuff="MACHINE_VIDEOCARD_TYPE=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_VideoCardType);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile, ";\n");
outBuff="[CUSTOM_MACHINE]";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile, "\n");
outBuff="X_SCALE_RESOLUTION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.x_axis._scale_resolution);
fprintf(m_pOutFile, "\n");
outBuff="Y_SCALE_RESOLUTION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.y_axis._scale_resolution);
fprintf(m_pOutFile, "\n");
outBuff="Z_SCALE_RESOLUTION=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.z_axis._scale_resolution);
fprintf(m_pOutFile, "\n");
outBuff="X_NEG_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.x_axis._neg_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="X_POS_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.x_axis._pos_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="Y_NEG_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.y_axis._neg_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="Y_POS_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.y_axis._pos_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="Z_NEG_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.z_axis._neg_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="Z_POS_WORKING_LIMIT=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.z_axis._pos_working_limit);
fprintf(m_pOutFile, "\n");
outBuff="ROTARY_AXIS_NUMBER=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_RotaryAxisNO);
fprintf(m_pOutFile, "\n");
outBuff="ROTARY_CIR_DIS=";
fprintf(m_pOutFile,"%s", outBuff);
fprintf(m_pOutFile,"%.6f", g_machine.s_machine_config.motion.m_RotaryCircleDis);
fprintf(m_pOutFile, "\n");
fprintf(m_pOutFile, ";\n");
fclose(m_pOutFile);
}
return SSI_STATUS_MOTION_NORMAL;
}
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::Load_So7_Config()
{
FILE *hConfigFile = NULL;
char szLine[MAX_BUFF_SIZE];
char *token = NULL;
char seps[] = " =,\t\n";
char cTemp[30]={0};
CString csAppPath;
GetAppPath(csAppPath);
CString csSO7ConfigFile =csAppPath+_T("\\so7_config.ini");
_wfopen_s(&hConfigFile,csSO7ConfigFile,_T("rt"));
if(hConfigFile)
{
while (!feof(hConfigFile))
{
fgets(szLine,MAX_BUFF_SIZE,hConfigFile);//read a line
if((szLine[0]!=';')&&(strlen(szLine)>2))
{
token = strtok(szLine,seps);
//==============7OceanAutozoom==============================
if(!_stricmp(token,"ZOOM_PRODUCT_ID"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._ProductID=cTemp;
}
}
else if(!_stricmp(token,"ZOOM_COM_PORT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._ComPort=atoi(cTemp);
}
}
else if(!_stricmp(token,"ZOOM_START_DEG"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._StartDegree=atof(cTemp);
}
}
else if (!_stricmp(token,"ZOOM_END_DEG"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._EndDegree=atof(cTemp);
}
}
else if (!_stricmp(token,"ZOOM_ORG_DEG"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._RelativeZeroDegree=atof(cTemp);
}
}
else if (!_stricmp(token,"ZOOM_DEADBAND_DEG"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._Deadband=atof(cTemp);
}
}
else if (!_stricmp(token,"ZOOM_PULSE_PER_DEG"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._PulseScale=atof(cTemp);
}
}
else if (!_stricmp(token,"ZOOM_READING_INTERVAL_TIME"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._ReadingInterval=atoi(cTemp);
}
}
else if (!_stricmp(token,"ZOOM_MOTOR_SPEED_FAST"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._SpeedFast=static_cast<short>(atoi(cTemp));
}
}
else if (!_stricmp(token,"ZOOM_MOTOR_SPEED_SLOW"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.zm_axis._SpeedSlow=static_cast<short>(atoi(cTemp));
}
}
//==============Motion=====================
else if(!_stricmp(token,"CLOSE_LOOP_ENABLED"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion._EnCloseLoop=atoi(cTemp);
}
}
else if (!_stricmp(token,"MOTION_RETRY_TIMES"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion._RetryTimes=atoi(cTemp);
}
}
else if (!_stricmp(token,"SHIFT_POSITION_X"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion._ShiftPositionX=atof(cTemp);
}
}
else if (!_stricmp(token,"SHIFT_POSITION_Y"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion._ShiftPositionY=atof(cTemp);
}
}
else if (!_stricmp(token,"SHIFT_POSITION_Z"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion._ShiftPositionZ=atof(cTemp);
}
}
else if (!_stricmp(token,"GET_USB_MESSAGE_METHOD"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.GetInterruptMsgMethod=static_cast<char>(atoi(cTemp));
}
}
else if (!_stricmp(token,"WRITE_DATA_SLEEP_TIME"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_WriteDataSleepTime=atoi(cTemp);
}
}
else if (!_stricmp(token,"ACCURA_ERROR_PULSE_X"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_AccuraErrPulseX=atoi(cTemp);
}
}
else if (!_stricmp(token,"ACCURA_ERROR_PULSE_Y"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_AccuraErrPulseY=atoi(cTemp);
}
}
else if (!_stricmp(token,"ACCURA_ERROR_PULSE_Z"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_AccuraErrPulseZ=atoi(cTemp);
}
}
else if (!_stricmp(token,"EQUIDISTANCE_PULSE_X"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_EQUIDIS_X=atoi(cTemp);
}
}
else if (!_stricmp(token,"EQUIDISTANCE_PULSE_Y"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_EQUIDIS_Y=atoi(cTemp);
}
}
else if (!_stricmp(token,"EQUIDISTANCE_PULSE_Z"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_EQUIDIS_Z=atoi(cTemp);
}
}
else if (!_stricmp(token,"CNC_DEADLOCK_SOLUTION"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_CNC_Deadlock_Solution=atoi(cTemp);
}
}
else if (!_stricmp(token,"CNC_DEADLOCK_MAX_CNTS"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_CNC_Deadlock_JudgeMaxCnts=atoi(cTemp);
}
}
else if (!_stricmp(token,"TOUCH_PROBE_ENABLE"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_TouchProbeEnable=atoi(cTemp);
}
}
else if (!_stricmp(token,"FOOT_SWITCH_ENABLE"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_FootSwitchEnable=atoi(cTemp);
}
}
else if (!_stricmp(token,"JOYSTICK_ENABLE"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_JoyStickEnable=atoi(cTemp);
}
}
else if (!_stricmp(token,"CCS_PRIMA_ENABLE"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable=atoi(cTemp);
}
}
else if (!_stricmp(token,"DEBUG_LOG_ENABLE"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_DebugOutputEnable=atoi(cTemp);
}
}
//=================VideoCard========================
else if (!_stricmp(token,"SDK3000_SLEEP_COUNT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_SDK3000_CntThreadSleepVal=atoi(cTemp);
}
}
else if (!_stricmp(token,"SV4000E_DENOISE_PARA_CHANNEL1"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[0]=atoi(cTemp);
}
}
else if (!_stricmp(token,"SV4000E_DENOISE_PARA_CHANNEL2"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[1]=atoi(cTemp);
}
}
else if (!_stricmp(token,"SV4000E_DENOISE_PARA_CHANNEL3"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[2]=atoi(cTemp);
}
}
else if (!_stricmp(token,"SV4000E_DENOISE_PARA_CHANNEL4"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[3]=atoi(cTemp);
}
}
//=================MSI========================
else if(!_stricmp(token,"MACHINE_CONTROLLER_TYPE"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_MachineType=atoi(cTemp);
}
}
else if(!_stricmp(token,"MACHINE_VIDEOCARD_TYPE"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_VideoCardType=atoi(cTemp);
}
}
//=================Custom machine========================
else if(!_stricmp(token, "X_SCALE_RESOLUTION"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._scale_resolution=atof(cTemp);
}
}
else if(!_stricmp(token, "Y_SCALE_RESOLUTION"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._scale_resolution=atof(cTemp);
}
}
else if(!_stricmp(token, "Z_SCALE_RESOLUTION"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._scale_resolution=atof(cTemp);
}
}
else if(!_stricmp(token, "X_NEG_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._neg_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "X_POS_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.x_axis._pos_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "Y_NEG_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._neg_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "Y_POS_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.y_axis._pos_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "Z_NEG_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._neg_working_limit=atof(cTemp);
}
}
else if(!_stricmp(token, "Z_POS_WORKING_LIMIT"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.z_axis._pos_working_limit=atof(cTemp);
}
}
else if (!_stricmp(token,"ROTARY_AXIS_NUMBER"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_RotaryAxisNO=atoi(cTemp);
}
}
else if (!_stricmp(token,"ROTARY_CIR_DIS"))
{
token = strtok( NULL, seps);
if (token)
{
strcpy(cTemp,token);
g_machine.s_machine_config.motion.m_RotaryCircleDis=atof(cTemp);
g_machine.s_machine_config.motion.m_RotaryCirclePulse=g_machine.s_machine_config.motion.m_RotaryCircleDis/ROTARY_MMtoScale_RESOLUTION;
}
}
}
}
fclose(hConfigFile);
}
else
{
return SSI_STATUS_SO7_CONFIG_FILE_NOT_FOUND;
}
return SSI_STATUS_MOTION_NORMAL;
}
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::GetAppPath(CString &Path)
{
Path=_T(""); // Speed optimization - noticed slow in GlowCode
if (Path.IsEmpty())
{
CString tmpPath;
GetModuleFileName(NULL,tmpPath.GetBuffer(255),255);
tmpPath.ReleaseBuffer();
tmpPath.TrimRight();
int nLastSlash = tmpPath.ReverseFind('\\');
if (nLastSlash >= 0)
tmpPath = tmpPath.Left(nLastSlash);
else
tmpPath.Empty();
Path=tmpPath;
}
return SSI_STATUS_MOTION_NORMAL;
};
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::ExtractAppPath(CString &Path)
{
CString tmpPath = Path;
tmpPath.TrimRight();
tmpPath.TrimLeft();
int nLastSlash = tmpPath.ReverseFind('\\');
if (nLastSlash > -1)
{ // complete path
tmpPath = Path.Left(nLastSlash);
Path = tmpPath;
}
else
{ // not a complete path
Path="";
};
return SSI_STATUS_MOTION_NORMAL;
};
//******************************************************************************
// Replay the capture file.
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::_replay_capture(CString s_replay_file)
{
char *_0x4e00_cmd = "4e00";
FILE* pInFile;
_wfopen_s(&pInFile, s_replay_file, _T("r"));
if (pInFile == NULL)
return SSI_STATUS_UNKNOWN_ERROR;
char *cData = (char *)malloc(MAX_BUFF_SIZE);
char *inBuff = (char *)malloc(MAX_BUFF_SIZE);
fgets((char *)inBuff, MAX_BUFF_SIZE, pInFile ); // pick up the first line
while (!feof(pInFile))
{
if (*inBuff == '>')
{
if (strstr(inBuff, "0x00000001"))
{
if (!(_strnicmp(inBuff+35, _0x4e00_cmd, 4))) break;
_process_replay_capture_commands(inBuff, pInFile);
}
};
fgets((char *)inBuff, MAX_BUFF_SIZE, pInFile ); // pick up the first line
};
fclose(pInFile);
free(cData);
free(inBuff);
return SSI_STATUS_MOTION_NORMAL;
}
//******************************************************************************
// Do not send out DCC Home. We can send everything else.
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::_process_replay_capture_commands(char *inBuff, FILE* pInFile)
{
char x[3];
char cSize[9];
int iSendSize;
int iRcvSize;
if ( ((*(inBuff+35) == '4')) && (*(inBuff+36) == 'f'))
{
fgets((char *)inBuff, MAX_BUFF_SIZE, pInFile ); // pick up the first line
return SSI_STATUS_MOTION_NORMAL;
};
memset(cSize, 0 , 9);
memcpy(cSize, inBuff+24, 8);
sscanf_s(cSize, "%8x", &iSendSize); // get the length of the transmission
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0, MAX_BUFF_SIZE);
for (int j=0;j<iSendSize;j++)
{
memset(x, 0, 3);
memcpy(x, inBuff+35+(j*2), 2);
sscanf_s(x, "%2x", ep_buff[EP_02_CMD_IDX]._buffer+j);
};
ep_buff[EP_02_CMD_IDX]._size = iSendSize;
fgets((char *)inBuff, MAX_BUFF_SIZE, pInFile ); // pick up the first line
if (feof(pInFile)) SSI_STATUS_MOTION_NORMAL; // if error, exit
memset(cSize, 0 , 9);
memcpy(cSize, inBuff+24, 8);
sscanf_s(cSize, "%8x", &iRcvSize); // get the length of the transmission
ep_buff[EP_81_DATA_IDX]._size = iRcvSize;
#pragma message("no usb comm??")
// _do_single_threaded_usb_comm(EP_01_CMD_IDX);
return SSI_STATUS_MOTION_NORMAL;
};
//******************************************************************************
usb_dev_handle* CSO7_Proto::_open_usb_dev(unsigned short sSeqNumber)
{
struct usb_bus *bus = NULL;
struct usb_device *dev = NULL;
usb_dev_handle *udev = NULL;
for (bus = usb_get_busses(); bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
if (dev->descriptor.idVendor == SEVENOCEAN_VID && dev->descriptor.idProduct == SEVENOCEAN_PID)
{
udev = usb_open(dev);
usb_claim_interface(udev, 0);
if (sSeqNumber>255)
{
return udev;
}
else
{
if(Get_SeqNumber(udev) != sSeqNumber)
{
usb_close(udev);
}
else
{
return udev;
}
}
}
}
}
return NULL;
}
//******************************************************************************
int CSO7_Proto::Get_SeqNumber(usb_dev_handle *udev)
{
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SEQ_NUMBER;
ep_buff[EP_02_CMD_IDX]._size = 0x02;
ep_buff[EP_82_DATA_IDX]._size = 0x01;
int _ret;
_ret = usb_bulk_write(udev, ep_buff[2]._ep, (char *)ep_buff[2]._buffer,(int) ep_buff[2]._size, 50);
if (_ret < 0)
{
return -1;
}
_ret = usb_bulk_read(udev, ep_buff[3]._ep, (char *)ep_buff[3]._buffer,(int) ep_buff[3]._size, 5000);
if (_ret < 0)
{
return -1;
}
g_machine.SEQ_NUMBER = -1;
g_machine.SEQ_NUMBER = *(ep_buff[EP_82_DATA_IDX]._buffer);
return g_machine.SEQ_NUMBER;
}
//******************************************************************************
// Send is direct and async.
// The receive thread will receive data and interpret it.
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::Init_SO7Usb()
{
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("Enter Initialize Usb.\n"));
}
//Set initial state of the machine
g_machine.s_status._machine_running = false;
SSI_STATUS_MOTION rStatus=SSI_STATUS_MOTION_NORMAL;
if (!g_dev)
{
g_machine.IsOffline=FALSE;
int usb_status = NULL;
usb_init(); // initialize the library
usb_status = usb_find_busses(); // find all busses
usb_status = usb_find_devices(); // find all connected devices
g_dev = _open_usb_dev();
if (!g_dev)
{
MessageBox(NULL, _T("Unable to open device"), _T("Message"), MB_OK|MB_ICONERROR);
g_machine.IsOffline=TRUE;
rStatus= SSI_STATUS_MOTION_DATALINK_ERROR;
}
else if (usb_set_configuration(g_dev, MY_CONFIG) < 0)
{
g_dev=NULL;
MessageBox(NULL, _T("Unable to SET CONFIGURATION"), _T("Message"), MB_OK|MB_ICONERROR);
g_machine.IsOffline=TRUE;
rStatus=SSI_STATUS_MOTION_DATALINK_ERROR;
}
else if (usb_claim_interface(g_dev, 0) < 0)
{
usb_close(g_dev);
g_dev=NULL;
MessageBox(NULL, _T("Unable to CLAIM DEVICE"), _T("Message"), MB_OK|MB_ICONERROR);
g_machine.IsOffline=TRUE;
rStatus=SSI_STATUS_MOTION_DATALINK_ERROR;
}
// ********************************************************************
// This event is used to kick the Serial Usb Command process. This threading model
// is important because the underlying library is not thread-safe.
//
ep_buff[EP_02_CMD_IDX]._event = CreateEvent(NULL, // default security attributes
FALSE, // manual reset event object
NULL, // signaled
NULL); // unamed object
g_hEP02_Thread_Id = CreateThread( (LPSECURITY_ATTRIBUTES) NULL,
0,
(LPTHREAD_START_ROUTINE) g_EP02_Thread,
(LPVOID) this,
0,
NULL);
g_hEP02_Thread_State = THREAD_RUNNING_STATE1;
// ********************************************************************
// Prepare and start EP_S07_81 Thread - Use async commit.
//
ep_buff[EP_82_DATA_IDX]._event = CreateEvent(NULL, // default security attributes
FALSE, // manual reset event object
NULL, // signaled
NULL); // unamed object
g_hEP8x_Thread_State = THREAD_PAUSED;
g_hEP8x_Thread_Id = CreateThread( (LPSECURITY_ATTRIBUTES) NULL,
0,
(LPTHREAD_START_ROUTINE) g_EP8x_Thread,
(LPVOID) this,
0,
NULL);
g_hEP02_Serial_Mutex = CreateMutex(NULL, // default security attributes
FALSE, // initial owner
NULL); // name
// *********************************************************************
g_hHomedEvent = CreateEvent(NULL, // default security attributes
TRUE, // manual reset event object
FALSE, // initial state is signaled
NULL); // unamed object
}
return rStatus;
}
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::Exit_SO7Usb()
{
SSI_STATUS_MOTION Status=SSI_STATUS_MOTION_NORMAL;
g_hEP8x_Thread_State = THREAD_EXIT;
g_hEP02_Thread_State = THREAD_EXIT;
SetEvent(ep_buff[EP_82_DATA_IDX]._event);
if (g_hEP8x_Thread_Id)
{
DWORD dwCode = STILL_ACTIVE;
while (dwCode == STILL_ACTIVE)
{
GetExitCodeThread(g_hEP8x_Thread_Id,&dwCode);
Sleep(1);
}
}
SetEvent(ep_buff[EP_02_CMD_IDX]._event);
if (g_hEP02_Thread_Id)
{
DWORD dwCode = STILL_ACTIVE;
while (dwCode == STILL_ACTIVE)
{
GetExitCodeThread(g_hEP02_Thread_Id,&dwCode);
Sleep(1);
}
}
if (g_dev)
{
usb_release_interface(g_dev,0);
usb_close(g_dev);
g_dev = NULL;
}
SetEvent(ep_buff[EP_82_DATA_IDX]._event);
CloseHandle(ep_buff[EP_82_DATA_IDX]._event);
SetEvent(ep_buff[EP_02_CMD_IDX]._event);
CloseHandle(ep_buff[EP_02_CMD_IDX]._event);
g_hEP02_Thread_State = THREAD_EXIT;
ReleaseMutex(g_hEP02_Serial_Mutex);
CloseHandle(g_hEP02_Serial_Mutex);
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("Exit Exit_SO7Usb.\n"));
}
return Status;
}
//******************************************************************************
// Kick the g_hEP01_Thread_Event to get the g_EP01_Thread going.
// iEP = EP_S07_01 or EP_S07_02 = 0x01 or 0x02
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::_do_single_threaded_usb_comm(int iEP_Base)
{
//TRACE1("=====_do_single_threaded_usb_comm(iEP) g_hEP01_Thread_Event. %x\n", iEP_Base);
while ((ep_buff[iEP_Base]._hProtoPending == TRUE) || (ep_buff[iEP_Base+1]._hProtoPending == TRUE))
{
ASSERT(0);
Sleep(3);
}
ep_buff[iEP_Base]._hProtoPending = ep_buff[iEP_Base+1]._hProtoPending = TRUE;
//TRACE1("=====_do_single_threaded_usb_comm(iEP_Base) SetEvent(g_hEP01_Thread_Event): %X \r\n", ep_buff[iEP_Base]._save_send_cmd);
if (iEP_Base == EP_01_CMD_IDX)
SetEvent(ep_buff[EP_82_DATA_IDX]._event);
else
SetEvent(ep_buff[iEP_Base]._event);
while ((ep_buff[iEP_Base]._hProtoPending == TRUE) || (ep_buff[iEP_Base+1]._hProtoPending == TRUE))
{
Sleep(3);
}
//TRACE1("=====_do_single_threaded_usb_comm(iEP) g_hProtoDoneEvents. %x\n", iEP_Base);
return SSI_STATUS_MOTION_NORMAL;
}
//******************************************************************************
// This startup just kicks off the EP_S07_81 worker thread.
//******************************************************************************
SSI_STATUS_MOTION CSO7_Proto::_start_machine()
{
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("_start_machine.\n"));
}
g_hEP8x_Thread_State = THREAD_RUNNING_STATE2;
g_machine.s_status._machine_running = true;
SetEvent(g_hHomedEvent);
//so7_motion_probe_on_off_(false);
//so7_motion_fixture_on_off(true);
//so7_motion_fixture_up_down(true);
return SSI_STATUS_MOTION_NORMAL;
};
//===============================================================================
SSI_STATUS_MOTION CSO7_Proto::_shutdown_machine()
{
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("_shutdown_machine.\n"));
}
g_machine.s_status._machine_running = false;
return SSI_STATUS_MOTION_NORMAL;
};
//===============================================================================
// iEP_Base : EP_81_DATA_IDX/EP_82_DATA_IDX
//
//===============================================================================
SSI_STATUS_MOTION CSO7_Proto::_read_data_8x(int iEP_Base)
{
if (g_machine.IsOffline)
{
ep_buff[EP_82_DATA_IDX]._hProtoPending = false;
ep_buff[EP_01_CMD_IDX]._hProtoPending = false;
ep_buff[EP_81_DATA_IDX]._hProtoPending = false;
return SSI_STATUS_MOTION_NORMAL;
}
if (iEP_Base == EP_82_DATA_IDX)
{
//TRACE2("_read_data_81() iEP : %X - ep_buff[iEP]._size : %X \r\n", iEP_Base, ep_buff[iEP_Base]._size);
int _ret;
_ret = usb_bulk_read(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 5000);
if (_ret > 0)
{
_process_rcv_transfer_data(iEP_Base);
ep_buff[EP_82_DATA_IDX]._hProtoPending = false;
}
else
{
TRACE1("Read Timeout %xx\n", *((char *)ep_buff[iEP_Base]._buffer));
ASSERT(0);
return SSI_STATUS_MOTION_TIMEOUT;
}
return SSI_STATUS_MOTION_NORMAL;
}
else
{
//TRACE2("_read_data_81() iEP : %X - ep_buff[iEP]._size : %X \r\n", iEP_Base, ep_buff[iEP_Base]._size);
int _ret;
_ret = usb_interrupt_read(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 20);
if (_ret > 0)
{
_process_rcv_transfer_data(iEP_Base);
}
else
{
g_machine.InterruptFlag[0] = 0;
TRACE1("There is no data interrupt read from controller. %xx\n", *((char *)ep_buff[iEP_Base]._buffer));
}
ep_buff[EP_01_CMD_IDX]._hProtoPending = false;
ep_buff[EP_81_DATA_IDX]._hProtoPending = false;
return SSI_STATUS_MOTION_NORMAL;
}
}
//===============================================================================
// _send_usb_cmd(iEP) sends data to the corresponding iEP channel.
// iEP = EP_S07_01 / EP_S07_02 EP_S07_01 = 0x01; EP_S07_02 = 0x02;
//===============================================================================
SSI_STATUS_MOTION CSO7_Proto::_send_usb_cmd(int iEP_Base)
{
if (g_machine.IsOffline)
{
SetEvent(ep_buff[iEP_Base+1]._event);
ep_buff[iEP_Base]._hProtoPending = false;
return SSI_STATUS_MOTION_NORMAL;
}
int _ret;
ep_buff[iEP_Base]._save_send_cmd = ep_buff[iEP_Base]._buffer[0];
ep_buff[iEP_Base]._save_send_cmd0 = ep_buff[iEP_Base]._buffer[1];
ep_buff[iEP_Base]._save_send_cmd1 = ep_buff[iEP_Base]._buffer[2];
//TRACE3("_send_usb_cmd() iEP : %X - ep_buff[iEP]._save_send_cmd : %X ._buffer[0] : %X\r\n", iEP_Base, ep_buff[iEP_Base]._save_send_cmd, ep_buff[iEP_Base]._buffer[0]);
_ret = usb_bulk_write(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 50);
if (_ret < 0)
{
TRACE("Write Timeout \n");
ASSERT(0);
return SSI_STATUS_MOTION_TIMEOUT;
}
SetEvent(ep_buff[iEP_Base+1]._event);
ep_buff[iEP_Base]._hProtoPending = false;
return SSI_STATUS_MOTION_NORMAL;
}
//===============================================================================
// _write_usb_data_only(iEP) sends data to the corresponding iEP channel.No need to
//process the reap async
// iEP = EP_S07_01 / EP_S07_02 EP_S07_01 = 0x01; EP_S07_02 = 0x02;
//===============================================================================
SSI_STATUS_MOTION CSO7_Proto::_write_usb_data_only(int iEP_Base)
{
if (g_machine.IsOffline)
{
ep_buff[iEP_Base]._hProtoPending = false;
ep_buff[iEP_Base+1]._hProtoPending = false;
return SSI_STATUS_MOTION_NORMAL;
}
int _ret;
ep_buff[iEP_Base]._save_send_cmd = ep_buff[iEP_Base]._buffer[0];
ep_buff[iEP_Base]._save_send_cmd0 = ep_buff[iEP_Base]._buffer[1];
ep_buff[iEP_Base]._save_send_cmd1 = ep_buff[iEP_Base]._buffer[2];
//TRACE3("_send_usb_cmd() iEP : %X - ep_buff[iEP]._save_send_cmd : %X ._buffer[0] : %X\r\n", iEP_Base, ep_buff[iEP_Base]._save_send_cmd, ep_buff[iEP_Base]._buffer[0]);
_ret = usb_bulk_write(g_dev, ep_buff[iEP_Base]._ep, (char *)ep_buff[iEP_Base]._buffer,(int) ep_buff[iEP_Base]._size, 50);
if (_ret < 0)
{
TRACE("Write Timeout \n");
ASSERT(0);
return SSI_STATUS_MOTION_TIMEOUT;
}
ep_buff[iEP_Base]._hProtoPending = false;
ep_buff[iEP_Base+1]._hProtoPending = false;
return SSI_STATUS_MOTION_NORMAL;
}
//=================================================================
// false: probe off ǰ̽ͷΪ⣻true: probe onǰ̽ͷΪӴʽ.//
//=================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_probe_on_off_(bool _bOnOff)
{
if (_bOnOff)
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_PROBE_ON,0);
else
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_PROBE_OFF,1);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_reset_worktable_lower_left(char _HomeMode)
{
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_RESET_LEFT,_HomeMode);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_reset_worktable_top_right()
{
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_RESET_RIGHT,1);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_stop_motor_to_get_laser_data()
{
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_GET_LASE,1);
return SSI_STATUS_MOTION_NORMAL;
};
//=================================================================
// false: رռо true: о. //
//=================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_fixture_on_off(bool _bOnOff)
{
if (_bOnOff)
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_SWITCH_START,1);
else
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_SWITCH_CLOSE,1);
return SSI_STATUS_MOTION_NORMAL;
};
//=================================================================
// false: о true: о. //
//=================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_fixture_up_down(bool _bOnOff)
{
if (_bOnOff)
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_SWITCH_BOM,1);
else
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_SWITCH_TOP,1);
return SSI_STATUS_MOTION_NORMAL;
};
//==================================================================
//false: CT_LASE_TIMMER_ON  true: CT_LASE_TIMMER_OFF //
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_laser_on_off(bool _bOnOff)
{
if (_bOnOff)
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_LASE_TIMMER_OFF,1);
else
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_LASE_TIMMER_ON,1);
return SSI_STATUS_MOTION_NORMAL;
};
//**********************************************************************//
//**********************************************************************//
SSI_STATUS_MOTION CSO7_Proto::so7_motion_init_firmware_para()
{
_send_cmd_SO7_CMD_GET_RESET_FLAG();
if(g_machine.IsSupportReadInterrputMsg)
{
_send_cmd_SO7_CMD_SET_GET_INTERRUPT_MSG_METHOD(g_machine.s_machine_config.motion.GetInterruptMsgMethod);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_READ_FIRMWARE_VERSION_INFO();
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
CStringA csAStr("");
csAStr.Format("FirmwareVersion:%s.\n",g_machine.FirmwareInfo);
CString csStr(csAStr);
g_pLogger->SendAndFlushWithTime(csStr);
}
if (g_machine.FirmwareVer==FirmwareVer_6_X)
{
_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_X,E_WRITE_ACCURA_ERR,static_cast<char>(g_machine.s_machine_config.motion.m_AccuraErrPulseX));
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Y,E_WRITE_ACCURA_ERR,static_cast<char>(g_machine.s_machine_config.motion.m_AccuraErrPulseY));
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Z,E_WRITE_ACCURA_ERR,static_cast<char>(g_machine.s_machine_config.motion.m_AccuraErrPulseZ));
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_X,E_WRITE_EQUIDISTANCE,static_cast<char>(g_machine.s_machine_config.motion.m_EQUIDIS_X));
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Y,E_WRITE_EQUIDISTANCE,static_cast<char>(g_machine.s_machine_config.motion.m_EQUIDIS_Y));
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(E_AXIS_Z,E_WRITE_EQUIDISTANCE,static_cast<char>(g_machine.s_machine_config.motion.m_EQUIDIS_Z));
Sleep(MIN_SLEEP_TIME);
}
}
else
{
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("FirmwareVersion:UNKNOWN.\n"));
}
}
return SSI_STATUS_MOTION_NORMAL;
}
//==================================================================
bool CSO7_Proto::so7_motion_is_homed()
{
//if (g_machine.IsOffline)
//{
// g_machine.Sys_Reset_Flag =1;
// SetEvent(g_hHomedEvent);
//}
_send_cmd_SO7_CMD_GET_RESET_FLAG();
if (g_machine.Sys_Reset_Flag == 1)
{
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("so7_motion_is_homed:true.\n"));
}
SetEvent(g_hHomedEvent);
return true;
}
else
{
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("so7_motion_is_homed:false.\n"));
}
return false;
}
};
//========================================================================
// Move the stage left/right until the index location is non-zero
//========================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_Dcc_Home()
{
if (g_machine.IsOffline)
{
SetEvent(g_hHomedEvent);
return SSI_STATUS_MOTION_NORMAL;
}
//ѯǷλ
_send_cmd_SO7_CMD_GET_RESET_FLAG();
g_machine.cVerNumber=3;
if (g_machine.Sys_Reset_Flag == 1)
{
_send_cmd_SO7_CMD_SET_VER_NUMBER();
SetEvent(g_hHomedEvent);
return SSI_STATUS_MOTION_NORMAL;
}
m_bHomingActive = true; // Tell the world we need to home the stage
// Home
so7_motion_reset_worktable_lower_left(CT_HOME_XYZ);
TRACE0(" - waiting for X,Y,Zm to stop moving\n");
//========================================
// Wait until X-Y-Zm stopped moving
INT iRetry(0);
while (g_machine.Sys_Reset_Flag != 1)
{
Sleep(50);
_send_cmd_SO7_CMD_GET_RESET_FLAG();
iRetry++;
}
//_get_xyz_index(g_machine.s_machine_config.x_axis._neg_working_limit,g_machine.s_machine_config.y_axis._neg_working_limit,g_machine.s_machine_config.z_axis._neg_working_limit);
_send_cmd_SO7_CMD_SET_VER_NUMBER();
m_bHomingActive = false;
SetEvent(g_hHomedEvent);
return SSI_STATUS_MOTION_NORMAL;
}
//========================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_Dcc_HomeXYZ(char cHomeMachineMode)
{
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("Enter so7_motion_Dcc_HomeXYZ(%d).\n"),cHomeMachineMode);
}
if (g_machine.IsOffline)
{
SetEvent(g_hHomedEvent);
return SSI_STATUS_MOTION_NORMAL;
}
//ѯǷλ
_send_cmd_SO7_CMD_GET_RESET_FLAG();
g_machine.cVerNumber=3;
if (g_machine.Sys_Reset_Flag == 1)
{
_send_cmd_SO7_CMD_SET_VER_NUMBER();
SetEvent(g_hHomedEvent);
return SSI_STATUS_MOTION_NORMAL;
}
m_bHomingActive = true; // Tell the world we need to home the stage
// Home
so7_motion_reset_worktable_lower_left(cHomeMachineMode);
TRACE0("Waiting for X,Y,Zm to stop moving\n");
//========================================
// Wait until X-Y-Zm stopped moving
//========================================
INT lSleep = 20;
INT lMaxLoopCnt = HOME_TIMEOUT/lSleep;
INT lLoopCnt = 0;
Sleep(lSleep);
do
{
Sleep(lSleep);
_send_cmd_SO7_CMD_GET_RESET_FLAG();
lLoopCnt++;
} while (g_machine.Sys_Reset_Flag != 1 && lLoopCnt < lMaxLoopCnt);
//_get_xyz_index(g_machine.s_machine_config.x_axis._neg_working_limit,g_machine.s_machine_config.y_axis._neg_working_limit,g_machine.s_machine_config.z_axis._neg_working_limit);
m_bHomingActive = false;
if (g_machine.Sys_Reset_Flag == 1)
{
SetEvent(g_hHomedEvent);
_send_cmd_SO7_CMD_SET_VER_NUMBER();
return SSI_STATUS_MOTION_NORMAL;
}
else
{
return SSI_STATUS_MOTION_TIMEOUT;
}
}
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_Motion_R_IsHomed(bool &bHomed)
{
_send_cmd_SO7_CMD_GET_RESET_FLAG();
if (g_machine.Sys_Reset_Flag == 1)
{
SetEvent(g_hHomedEvent);
bHomed=true;
}
else
{
bHomed=false;
}
return SSI_STATUS_MOTION_NORMAL;
}
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_Dcc_Home_R()
{
//ѯǷλ
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("Enter so7_motion_Dcc_Home_R.\n"));
}
_send_cmd_SO7_CMD_GET_RESET_FLAG();
if (g_machine.Sys_Reset_Flag == 1)
{
SetEvent(g_hHomedEvent);
return SSI_STATUS_MOTION_NORMAL;
}
m_bHomingActive = true; // Tell the world we need to home the stage
// Home r
long lMoveToDis(0);
g_machine.x._pos_fixed._long_=0;
g_machine.y._pos_fixed._long_=0;
g_machine.z._pos_fixed._long_=0;
lMoveToDis=MMtoScale(2.0*g_machine.s_machine_config.motion.m_RotaryCircleDis,ROTARY_MMtoScale_RESOLUTION);
if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X)
{
g_machine.x._pos_fixed._long_=lMoveToDis;
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y)
{
g_machine.y._pos_fixed._long_=lMoveToDis;
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z)
{
g_machine.z._pos_fixed._long_=lMoveToDis;
}
_send_cmd_SO7_CMD_MOVE_TO_POS_XYZ(CT_MOVETOXYZ);
//========================================
INT lSleep = 20;
INT lMaxLoopCnt = MOVETO_TIMEOUT/lSleep;
INT lLoopCnt = 0;
Sleep(lSleep);
bool IsFinished(FALSE);
do
{
so7_Motion_R_IsMotionFInished(IsFinished);
Sleep(lSleep);
++lLoopCnt;
} while (!IsFinished && lLoopCnt < lMaxLoopCnt);
m_bHomingActive = false;
if (IsFinished)
{
_send_cmd_SO7_CMD_SET_RESET_FLAG();
g_machine.cVerNumber = 3;
_send_cmd_SO7_CMD_SET_VER_NUMBER();
SetEvent(g_hHomedEvent);
return SSI_STATUS_MOTION_NORMAL;
}
else
{
return SSI_STATUS_MOTION_TIMEOUT;
}
}
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_position_R(double & dRad)
{
WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done
long lX=0, lY=0, lZ=0;
long lX_Ref=0, lY_Ref=0, lZ_Ref=0;
double dR(0.0);
_send_cmd_SO7_CMD_READ_AXIS_XYZ();
if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X)
{
lX = g_machine.x._scale_pos._long_;
_send_cmd_SO7_CMD_READ_ZSIGNAL_POS_X();
lX_Ref=g_machine.x._ZSignal_pos._long_;
dR=static_cast<double>(lX-lX_Ref);
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y)
{
lY = g_machine.y._scale_pos._long_;
_send_cmd_SO7_CMD_READ_ZSIGNAL_POS_Y();
lY_Ref=g_machine.y._ZSignal_pos._long_;
dR=static_cast<double>(lY-lY_Ref);
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z)
{
lZ = g_machine.z._scale_pos._long_;
_send_cmd_SO7_CMD_READ_ZSIGNAL_POS_Z();
lZ_Ref=g_machine.z._ZSignal_pos._long_;
dR=static_cast<double>(lZ-lZ_Ref);
}
bool bPlus(true);
if (dR<-0.00001)
{
bPlus=true;
}
else
{
bPlus=false;
}
int iRetryCnts(0);
if (fabs(dR)-fabs(2.0*g_machine.s_machine_config.motion.m_RotaryCirclePulse)>100)
{
do
{
iRetryCnts++;
if (bPlus)
{
dR+=8388608;
}
else
{
dR-=8388608;
}
//m_csMessage.Format("[CONVERT RotaryY]CNTS:%d;PLUS:%d;ScaleYResult:%.4f.",iRetryCnts,bPlus,dR);
} while ((iRetryCnts<5)&&
(fabs(dR)-fabs(g_machine.s_machine_config.motion.m_RotaryCirclePulse)>100));
}
dRad = 2.0*M_PI*dR/(g_machine.s_machine_config.motion.m_RotaryCirclePulse);
return SSI_STATUS_MOTION_NORMAL;
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_R(double dRad,bool bWait)
{
WaitForSingleObject(g_hHomedEvent, INFINITE);
// get the current position
double dRStart(0.0),dRMovetoDis(0.0);
long lMoveToDis(0);
so7_motion_get_position_R(dRStart);
dRMovetoDis=dRad-dRStart;
double dMod=dRMovetoDis/(2.0*M_PI);
int iMod(0);
if(dMod>=0.0001)
{
iMod=static_cast<int>(floor(dMod));
}
else
{
iMod=static_cast<int>(ceil(dMod));
}
dRMovetoDis=dRMovetoDis-2.0*M_PI*static_cast<double>(iMod);
if ((dRMovetoDis)<=-0.01)
{
dRMovetoDis=2.0*M_PI+dRMovetoDis;
}
else
{
dRMovetoDis=dRMovetoDis;
}
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("so7_motion_set_position_R:[From]%.4f;[To]%.4f;[Dis]%.4F.\n")
,dRStart,dRad,dRMovetoDis);
}
lMoveToDis=static_cast<long>(dRMovetoDis*(static_cast<double>(g_machine.s_machine_config.motion.m_RotaryCirclePulse))/(2.0*M_PI));
g_machine.x._pos_fixed._long_=0;
g_machine.y._pos_fixed._long_=0;
g_machine.z._pos_fixed._long_=0;
if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X)
{
g_machine.x._pos_fixed._long_=lMoveToDis;
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y)
{
g_machine.y._pos_fixed._long_=lMoveToDis;
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z)
{
g_machine.z._pos_fixed._long_=lMoveToDis;
}
_send_cmd_SO7_CMD_MOVE_TO_POS_XYZ(CT_MOVETOXYZ);
g_machine.MotionType=EMSG_STOPXYZ_1_MOVETOXYZ;
bool IsFinished(true);
if (bWait)
{
INT lSleep = 20;
INT lMaxLoopCnt = MOVETO_TIMEOUT/lSleep; // use max homing time of 20 seconds
INT lLoopCnt = 0;
Sleep(lSleep);
do
{
so7_Motion_R_IsMotionFInished(IsFinished);
Sleep(lSleep);
++lLoopCnt;
} while (!IsFinished && lLoopCnt < lMaxLoopCnt);
}
if (IsFinished)
{
g_machine.MotionType=-1;
return SSI_STATUS_MOTION_NORMAL;
}
else
{
return SSI_STATUS_MOTION_TIMEOUT;
}
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_Motion_R_IsMotionFInished(bool &bFinished)
{
if (g_machine.MotionType<EMSG_STOPXYZ_1_MOVETOXYZ)
{
bFinished=true;
}
else
{
BOOL IsFinished(TRUE);
so7_motion_is_finished(g_machine.MotionType,IsFinished);
if (IsFinished)
{
bFinished=true;
IsMotionFinishedManual(TRUE);
}
else
{
IsFinished=IsMotionFinishedManual();
if (IsFinished)
{
bFinished=true;
}
else
{
bFinished=false;
}
}
}
return SSI_STATUS_MOTION_NORMAL;
}
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_move_R(char _SpeedGear)
{
//4-FASTER,1-SLOWER
if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X)
{
_send_cmd_SO7_CMD_MOVE_X(_SpeedGear);
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y)
{
_send_cmd_SO7_CMD_MOVE_Y(_SpeedGear);
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z)
{
_send_cmd_SO7_CMD_MOVE_Z(_SpeedGear);
}
return SSI_STATUS_MOTION_NORMAL;
}
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_startup(double dScaleResolutionX, double dScaleResolutionY, double dScaleResolutionZ)
{
g_machine.s_machine_config.x_axis._scale_resolution = dScaleResolutionX;
g_machine.s_machine_config.y_axis._scale_resolution = dScaleResolutionY;
g_machine.s_machine_config.z_axis._scale_resolution = dScaleResolutionZ;
_start_machine();
so7_motion_Dcc_Home();
_replay_capture(_T("Replay_Capture"));
return SSI_STATUS_MOTION_NORMAL;
};
//========================================================================
// read the configuration from the controller and populate the g_machine
// data structure
//========================================================================
SSI_STATUS_MOTION CSO7_Proto::_get_xyz_index(long & lX, long & lY, long & lZ)
{
_send_cmd_SO7_CMD_READ_AXIS_XYZ();
lX = g_machine.x._scale_pos._long_;
lY = g_machine.y._scale_pos._long_;
lZ = g_machine.z._scale_pos._long_;
return SSI_STATUS_MOTION_NORMAL;
};
SSI_STATUS_MOTION CSO7_Proto::so7_motion_jog(EMACHINE_AXIS cAxis,char cSpeedGear)
{
if (abs(cSpeedGear)>4)
{
if (cSpeedGear>0)
{
cSpeedGear=4;
}
else
{
cSpeedGear=-4;
}
}
if (abs(cSpeedGear)<1)
{
cSpeedGear=1;
}
switch (cAxis)
{
case MACHINE_AXIS_X:
{
if (cSpeedGear==4)
{
double dXStart(0.0), dYStart(0.0), dZStart(0.0);
so7_motion_get_position_xyz(dXStart, dYStart, dZStart);
return so7_motion_set_position_xyz(g_machine.s_machine_config.x_axis._pos_working_limit,dYStart,dZStart,false);
}
else if (cSpeedGear==-4)
{
double dXStart(0.0), dYStart(0.0), dZStart(0.0);
so7_motion_get_position_xyz(dXStart, dYStart, dZStart);
return so7_motion_set_position_xyz(g_machine.s_machine_config.x_axis._neg_working_limit,dYStart,dZStart,false);
}
else
{
return _send_cmd_SO7_CMD_MOVE_X(cSpeedGear);
}
break;
}
case MACHINE_AXIS_Y:
{
if (cSpeedGear==4)
{
double dXStart(0.0), dYStart(0.0), dZStart(0.0);
so7_motion_get_position_xyz(dXStart, dYStart, dZStart);
return so7_motion_set_position_xyz(dXStart,g_machine.s_machine_config.y_axis._pos_working_limit,dZStart,false);
}
else if (cSpeedGear==-4)
{
double dXStart(0.0), dYStart(0.0), dZStart(0.0);
so7_motion_get_position_xyz(dXStart, dYStart, dZStart);
return so7_motion_set_position_xyz(dXStart,g_machine.s_machine_config.y_axis._neg_working_limit,dZStart,false);
}
else
{
return _send_cmd_SO7_CMD_MOVE_Y(cSpeedGear);
}
break;
}
case MACHINE_AXIS_Z:
{
if (cSpeedGear==4)
{
double dXStart(0.0), dYStart(0.0), dZStart(0.0);
so7_motion_get_position_xyz(dXStart, dYStart, dZStart);
return so7_motion_set_position_xyz(dXStart,dYStart,g_machine.s_machine_config.z_axis._pos_working_limit,false);
}
else if (cSpeedGear==-4)
{
double dXStart(0.0), dYStart(0.0), dZStart(0.0);
so7_motion_get_position_xyz(dXStart, dYStart, dZStart);
return so7_motion_set_position_xyz(dXStart,dYStart,g_machine.s_machine_config.z_axis._neg_working_limit,false);
}
else
{
return _send_cmd_SO7_CMD_MOVE_Z(cSpeedGear);
}
break;
}
case MACHINE_AXIS_ZOOM:
{
if (abs(cSpeedGear)==4)
{
if (cSpeedGear>0)
{
cSpeedGear=5;
}
else
{
cSpeedGear=-5;
}
}
else if (abs(cSpeedGear)==3)
{
if (cSpeedGear>0)
{
cSpeedGear=5;
}
else
{
cSpeedGear=-5;
}
}
else if (abs(cSpeedGear)==2)
{
if (cSpeedGear>0)
{
cSpeedGear=1;
}
else
{
cSpeedGear=-1;
}
}
else if (abs(cSpeedGear)==1)
{
if (cSpeedGear>0)
{
cSpeedGear=2;
}
else
{
cSpeedGear=-2;
}
}
return _send_cmd_SO7_CMD_MOVE_ZM(cSpeedGear);
break;
}
case MACHINE_AXIS_R:
{
return so7_motion_move_R(cSpeedGear);
break;
}
default:
{
return SSI_STATUS_MOTION_INVALID_PARAMETERS;
break;
}
}
return SSI_STATUS_MOTION_NORMAL;
}
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_position_xyz(double & dX, double & dY, double & dZ)
{
WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done
long lX=0, lY=0, lZ=0;
_send_cmd_SO7_CMD_READ_AXIS_XYZ();
lX = g_machine.x._scale_pos._long_;
lY = g_machine.y._scale_pos._long_;
lZ = g_machine.z._scale_pos._long_;
dX = ScaleToMM(lX, g_machine.s_machine_config.x_axis._scale_resolution);
dY = ScaleToMM(lY, g_machine.s_machine_config.y_axis._scale_resolution);
dZ = ScaleToMM(lZ, g_machine.s_machine_config.z_axis._scale_resolution);
//dX -= g_machine.s_machine_config.x_axis._neg_working_limit;
//dY -= g_machine.s_machine_config.y_axis._neg_working_limit;
//dZ -= g_machine.s_machine_config.z_axis._neg_working_limit;
return SSI_STATUS_MOTION_NORMAL;
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_position_xyz(double dX, double dY, double dZ, bool bWait)
{
WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done
if (g_machine.IsOffline)
{
SetEvent(g_hHomedEvent);
return SSI_STATUS_MOTION_NORMAL;
}
// get the current position
double dXStart, dYStart, dZStart;
so7_motion_get_position_xyz(dXStart, dYStart, dZStart);
SO7AXISMOVE X;
SO7AXISMOVE Y;
SO7AXISMOVE Z;
X.dFromMM = dXStart;
if (dX<g_machine.s_machine_config.x_axis._neg_working_limit)
{
X.dToMM=g_machine.s_machine_config.x_axis._neg_working_limit;
}
else if (dX>g_machine.s_machine_config.x_axis._pos_working_limit)
{
X.dToMM=g_machine.s_machine_config.x_axis._pos_working_limit;
}
else
{
X.dToMM = dX;
}
Y.dFromMM = dYStart;
if (dY<g_machine.s_machine_config.y_axis._neg_working_limit)
{
Y.dToMM=g_machine.s_machine_config.y_axis._neg_working_limit;
}
else if (dY>g_machine.s_machine_config.y_axis._pos_working_limit)
{
Y.dToMM=g_machine.s_machine_config.y_axis._pos_working_limit;
}
else
{
Y.dToMM = dY;
}
Z.dFromMM = dZStart;
if (dZ<g_machine.s_machine_config.z_axis._neg_working_limit)
{
Z.dToMM=g_machine.s_machine_config.z_axis._neg_working_limit;
}
else if (dZ>g_machine.s_machine_config.z_axis._pos_working_limit)
{
Z.dToMM=g_machine.s_machine_config.z_axis._pos_working_limit;
}
else
{
Z.dToMM = dZ;
}
X.from = MMtoScale(dXStart, g_machine.s_machine_config.x_axis._scale_resolution);
X.to = MMtoScale(dX, g_machine.s_machine_config.x_axis._scale_resolution);
Y.from = MMtoScale(dYStart, g_machine.s_machine_config.y_axis._scale_resolution);
Y.to = MMtoScale(dY, g_machine.s_machine_config.y_axis._scale_resolution);
Z.from = MMtoScale(dZStart, g_machine.s_machine_config.z_axis._scale_resolution);
Z.to = MMtoScale(dZ, g_machine.s_machine_config.z_axis._scale_resolution);
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("so7_motion_set_position_xyz:[From]X:%.4f,Y:%.4f,Z:%.4f;[To]X:%.4f,Y:%.4f,Z:%.4f.\n")
,dXStart,dYStart,dZStart,dX,dY,dZ);
}
// move the position to make the -X, -Y, -Z position 0,0,0
//X.to += g_machine.s_machine_config.x_axis._neg_working_limit;
//Y.to += g_machine.s_machine_config.y_axis._neg_working_limit;
//Z.to += g_machine.s_machine_config.z_axis._neg_working_limit;
//X.from += g_machine.s_machine_config.x_axis._neg_working_limit;
//Y.from += g_machine.s_machine_config.y_axis._neg_working_limit;
//Z.from += g_machine.s_machine_config.z_axis._neg_working_limit;
g_machine.x._pos_fixed._long_=X.to-X.from;
g_machine.y._pos_fixed._long_=Y.to-Y.from;
g_machine.z._pos_fixed._long_=Z.to-Z.from;
// _calculate_straightline_motion(g_machine.s_machine_config._dXYZSpeed);
_send_cmd_SO7_CMD_MOVE_TO_POS_XYZ(CT_MOVETOXYZ);
g_machine.MotionType=EMSG_STOPXYZ_1_MOVETOXYZ;
#pragma message("Test settle wait comparing the status bit to the scale monitor")
TRACE1("Presettle Time: %lf\n", TimeInSecs());
if (bWait)
{
INT lSleep = 20;
INT lMaxLoopCnt = MOVETO_TIMEOUT/lSleep; // use max homing time of 20 seconds
INT lLoopCnt = 0;
Sleep(lSleep);
bool IsFinished(FALSE);
do
{
so7_Motion_XYZ_IsMotionFinished(IsFinished);
Sleep(lSleep);
++lLoopCnt;
} while (!IsFinished && lLoopCnt < lMaxLoopCnt);
TRACE1("Postsettle Time: %lf\n", TimeInSecs());
if (IsFinished)
{
g_machine.MotionType=-1;
return SSI_STATUS_MOTION_NORMAL;
}
else
{
return SSI_STATUS_MOTION_TIMEOUT;
}
}
return SSI_STATUS_MOTION_NORMAL;
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_Motion_XYZ_IsMotionFinished(bool &bFinished)
{
if (g_machine.MotionType<EMSG_STOPXYZ_1_MOVETOXYZ)
{
bFinished=true;
}
else
{
BOOL IsFinished(FALSE);
so7_motion_is_finished(g_machine.MotionType,IsFinished);
if (IsFinished)
{
g_machine.MotionType=-1;
bFinished=true;
IsMotionFinishedManual(TRUE);
}
else
{
IsFinished=IsMotionFinishedManual();
if (IsFinished)
{
g_machine.MotionType=-1;
bFinished=true;
}
else
{
bFinished=false;
}
}
}
return SSI_STATUS_MOTION_NORMAL;
}
//==================================
BOOL CSO7_Proto::IsMotionFinishedManual(BOOL _BResetCnts)
{
if (_BResetCnts)
{
g_machine.MotionFinished=FALSE;
g_machine.MotionFinishedCnts=0;
}
else
{
if (g_machine.s_machine_config.motion.m_CNC_Deadlock_Solution>=1)
{
double dPosX(0.0),dPosY(0.0),dPosZ(0.0);
so7_motion_get_position_xyz(dPosX,dPosY,dPosZ);
if ((fabs(dPosX-g_machine.x._ReCorded_Pos)<=g_machine.s_machine_config.x_axis._motor_precision)
&& (fabs(dPosY-g_machine.y._ReCorded_Pos)<=g_machine.s_machine_config.y_axis._motor_precision)
&& (fabs(dPosZ-g_machine.z._ReCorded_Pos)<=g_machine.s_machine_config.z_axis._motor_precision))
{
g_machine.MotionFinishedCnts++;
if (g_machine.MotionFinishedCnts>g_machine.s_machine_config.motion.m_CNC_Deadlock_JudgeMaxCnts)
{
g_machine.MotionFinished=TRUE;
}
else
{
g_machine.MotionFinished=FALSE;
}
}
else
{
g_machine.MotionFinishedCnts=0;
}
g_machine.x._ReCorded_Pos=dPosX;
g_machine.y._ReCorded_Pos=dPosY;
g_machine.z._ReCorded_Pos=dPosZ;
}
else
{
g_machine.MotionFinished=FALSE;
g_machine.MotionFinishedCnts=0;
}
}
return g_machine.MotionFinished;
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_is_finished(char MotionType,BOOL& IsFinished)
{
WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done
BOOL bIsFinised(FALSE);
if (g_machine.s_machine_config.motion.GetInterruptMsgMethod==E_GET_INTERRUPT_MSG_INQUIRY)
{
_send_cmd_SO7_CMD_GET_INTERRUPT_MSG(MotionType);
if (g_machine.GetInterruptMsg[MotionType][0]==CT_STOPXYZ)
{
bIsFinised=TRUE;
_send_cmd_SO7_CMD_SET_INTERRUPT_MSG(MotionType,0);
}
}
else
{
_send_cmd_SO7_CMD_READ_INTERRUPT_MESSAGE();
if (g_machine.InterruptFlag[0]==CT_STOPXYZ)
{
bIsFinised=TRUE;
g_machine.InterruptFlag[0]=0;
}
}
IsFinished=bIsFinised;
return SSI_STATUS_MOTION_NORMAL;
};
//========================================================================
// This speed setting will be carried out in the next DCC move
// Full Speed -> dPercentSpeed = 100%
// Slow Speed -> dPercentSpeed = 20%
//========================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_speed_xyz(EMACHINE_AXIS cAxis,char cSpeedGear,char Acce,char cHoldSpeed,char cStartSpeed,char cRefreshCycle,double dBufferDis)
{
char SetSpeedGear(0);
EMACHINE_AXIS SetAXIS(MACHINE_AXIS_NONE);
SetSpeedGear=static_cast<char>(abs(cSpeedGear));
if (SetSpeedGear>4)
{
SetSpeedGear=4;
}
else if (SetSpeedGear<1)
{
SetSpeedGear=1;
}
SetSpeedGear=4-SetSpeedGear;
if (cAxis==MACHINE_AXIS_R)
{
if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_X)
{
SetAXIS=MACHINE_AXIS_X;
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Y)
{
SetAXIS=MACHINE_AXIS_Y;
}
else if (g_machine.s_machine_config.motion.m_RotaryAxisNO==MACHINE_AXIS_Z)
{
SetAXIS=MACHINE_AXIS_Z;
}
}
switch(cAxis)
{
case MACHINE_AXIS_X:
{
g_machine.s_machine_config.x_axis._speed_base[SetSpeedGear]=Acce;
g_machine.s_machine_config.x_axis._speed_max[SetSpeedGear]=cHoldSpeed;
g_machine.s_machine_config.x_axis._speed_start[SetSpeedGear]=cStartSpeed;
g_machine.s_machine_config.x_axis._speed_fresh[SetSpeedGear]=cRefreshCycle;
g_machine.s_machine_config.x_axis._speed_slow_dis[SetSpeedGear]=dBufferDis;
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,SetSpeedGear);
Sleep(MIN_SLEEP_TIME);
break;
}
case MACHINE_AXIS_Y:
{
g_machine.s_machine_config.y_axis._speed_base[SetSpeedGear]=Acce;
g_machine.s_machine_config.y_axis._speed_max[SetSpeedGear]=cHoldSpeed;
g_machine.s_machine_config.y_axis._speed_start[SetSpeedGear]=cStartSpeed;
g_machine.s_machine_config.y_axis._speed_fresh[SetSpeedGear]=cRefreshCycle;
g_machine.s_machine_config.y_axis._speed_slow_dis[SetSpeedGear]=dBufferDis;
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,SetSpeedGear);
Sleep(MIN_SLEEP_TIME);
break;
}
case MACHINE_AXIS_Z:
{
g_machine.s_machine_config.z_axis._speed_base[SetSpeedGear]=Acce;
g_machine.s_machine_config.z_axis._speed_max[SetSpeedGear]=cHoldSpeed;
g_machine.s_machine_config.z_axis._speed_start[SetSpeedGear]=cStartSpeed;
g_machine.s_machine_config.z_axis._speed_fresh[SetSpeedGear]=cRefreshCycle;
g_machine.s_machine_config.z_axis._speed_slow_dis[SetSpeedGear]=dBufferDis;
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,SetSpeedGear);
Sleep(MIN_SLEEP_TIME);
break;
}
case MACHINE_AXIS_ZOOM:
{
if (SetSpeedGear==4)
{
SetSpeedGear=0;
}
else if (SetSpeedGear==3)
{
SetSpeedGear=0;
}
else if (SetSpeedGear==2)
{
SetSpeedGear=1;
}
else if (SetSpeedGear==1)
{
SetSpeedGear=2;
}
g_machine.s_machine_config.zm_axis._speed._char_[0]=cStartSpeed;
g_machine.s_machine_config.zm_axis._speed._char_[1]=cHoldSpeed;
_send_cmd_SO7_CMD_SET_ZOOM_SPEED(SetSpeedGear);
Sleep(MIN_SLEEP_TIME);
break;
}
default:break;
}
return SSI_STATUS_MOTION_NORMAL;
}
//========================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_speed_xyz(double &dPercentSpeed)
{
dPercentSpeed = g_machine.s_machine_config._dXYZSpeed;
return SSI_STATUS_MOTION_NORMAL;
}
//========================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_3D_max_speed(double &dMaxSpeed)
{
double dMaxSpeedX = g_machine.s_machine_config.x_axis._speed_max[0];
double dMaxSpeedY = g_machine.s_machine_config.y_axis._speed_max[0];
double dMaxSpeedZ = g_machine.s_machine_config.z_axis._speed_max[0];
dMaxSpeed = sqrt(dMaxSpeedX*dMaxSpeedX + dMaxSpeedY*dMaxSpeedY + dMaxSpeedZ*dMaxSpeedZ);
return SSI_STATUS_MOTION_NORMAL;
}
//========================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_all_speed_para()
{
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,0);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,1);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,2);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,3);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,4);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,0);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,1);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,2);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,3);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,4);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,0);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,1);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,2);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,3);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,4);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PRECISION(0);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PRECISION(1);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_SPEED_PRECISION(2);
Sleep(MIN_SLEEP_TIME);
_send_cmd_SO7_CMD_SET_MOTOR_SPEED_WHEELBASE_PARAMETER();
Sleep(MIN_SLEEP_TIME);
return SSI_STATUS_MOTION_NORMAL;
}
//========================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_all_speed_para()
{
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 0, 0);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 0, 1);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 0, 2);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 0, 3);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 0, 4);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 1, 0);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 1, 1);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 1, 2);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 1, 3);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 1, 4);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 2, 0);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 2, 1);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 2, 2);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 2, 3);
_send_cmd_SO7_CMD_READ_SPEED_PARAMETER( 2, 4);
_send_cmd_SO7_CMD_READ_SPEED_PRECISION(0);
_send_cmd_SO7_CMD_READ_SPEED_PRECISION(1);
_send_cmd_SO7_CMD_READ_SPEED_PRECISION(2);
_send_cmd_SO7_CMD_READ_MOTOR_SPEED_WHEELBASE_PARAMETER();
return SSI_STATUS_MOTION_NORMAL;
}
//========================================================================
SSI_STATUS_MOTION CSO7_Proto::_calculate_straightline_motion(double dSpeedMM)
{
CString csAppPath;
GetAppPath(csAppPath);
CString csSO7ConfigFile = csAppPath + _T("\\Utility_Config.ini");
Load_SevenOcean_Inifile(csSO7ConfigFile);
g_machine.s_machine_config.x_axis._speed_max[0]=static_cast<char>(g_machine.s_machine_config.x_axis._speed_max[0]*dSpeedMM);
g_machine.s_machine_config.y_axis._speed_max[0]=static_cast<char>(g_machine.s_machine_config.y_axis._speed_max[0]*dSpeedMM);
g_machine.s_machine_config.z_axis._speed_max[0]=static_cast<char>(g_machine.s_machine_config.z_axis._speed_max[0]*dSpeedMM);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(0,0);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(1,0);
_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(2,0);
return SSI_STATUS_MOTION_NORMAL;
}
//**********************************************************************//
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_optics_set_scale_position(long lScale)
{
WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done
TRACE1("caller set scale position = %X \r\n", lScale);
lScale += g_machine.s_machine_config.zm_axis._neg_working_limit;
g_machine.zm._pos_fixed._long_=(lScale);
_send_cmd_SO7_CMD_MOVE_TO_POS_ZM();
return SSI_STATUS_MOTION_NORMAL;
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_optics_get_scale_position(long &lScale)
{
WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done
_send_cmd_SO7_CMD_READ_V_DATA();
lScale = g_machine.zm._scale_pos._long_;
return SSI_STATUS_MOTION_NORMAL;
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_optics_get_scale_range(long &neg_scale_range, long &pos_scale_range)
{
WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done
neg_scale_range = g_machine.s_machine_config.zm_axis._neg_working_limit;
pos_scale_range = g_machine.s_machine_config.zm_axis._pos_working_limit;
TRACE2("Get Scale Range : %X, %X \r\n",neg_scale_range, pos_scale_range);
return SSI_STATUS_MOTION_NORMAL;
};
//**********************************************************************//
void CSO7_Proto::so7_set_full_ringlight_data(long lIntensity)
{
g_machine.s_lights_value.segment[0]=static_cast<BYTE>(0xff);
g_machine.s_lights_value.segment[1]=static_cast<BYTE>(0xff);
g_machine.s_lights_value._ring_light=static_cast<char>(lIntensity);
};
//=========================================================================================
void CSO7_Proto::so7_set_ringlight_data(long lMaxSize, double *pSegments)
{
if (pSegments && (lMaxSize == (TWO_RINGS*EIGHT_SEGS)))
{
BYTE cRingSwitchOn=0x01;
BYTE cRingSwitchOff=0xfe;
for (int ii=0 ; ii<TWO_RINGS; ii++ )
{
for (int jj=0 ; jj<EIGHT_SEGS ; jj++)
{
if ((pSegments[ii * EIGHT_SEGS + jj])>1)
{
g_machine.s_lights_value.segment[ii] |= (cRingSwitchOn<<jj);
g_machine.s_lights_value._ring_light=static_cast<char>((pSegments[ii * EIGHT_SEGS + jj])/100.0 * (MAXLIGHTVALUE));
}
else
{
g_machine.s_lights_value.segment[ii] &= (cRingSwitchOff<<jj);
}
}
}
}
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_light_set_light_off()
{
WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done
g_machine.s_lights_value._top_light=1;
g_machine.s_lights_value._bottom_light=1;
g_machine.s_lights_value._ring_light=1;
g_machine.s_lights_value._coaxial_light=1;
g_machine.s_lights_value._spare_light1=1;
g_machine.s_lights_value.segment[0]=0;
g_machine.s_lights_value.segment[1]=0;
_send_cmd_SO7_CMD_SET_ALL_LIGHT_VALUE();
Sleep(3*MIN_SLEEP_TIME);
return SSI_STATUS_MOTION_NORMAL;
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_light_set_light()
{
WaitForSingleObject(g_hHomedEvent, INFINITE); // machine start and homing is done
_send_cmd_SO7_CMD_SET_ALL_LIGHT_VALUE();
Sleep(3*MIN_SLEEP_TIME);
return SSI_STATUS_MOTION_NORMAL;
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_light_set_lamp_state(double dTopLightPercent,double dBottomLightPercent,double dCoaxialLightPercent,double dReservedLightPercent,double dRingLightPercent,char cOuterRingLightSwitch,char cInnerRingLightSwitch)
{
WaitForSingleObject(g_hHomedEvent, INFINITE);
g_machine.s_lights_value._bottom_light = (static_cast<char>(dTopLightPercent* (MAXLIGHTVALUE-MINLIGHTVALUE)/100.0 ))+MINLIGHTVALUE;
g_machine.s_lights_value._top_light = (static_cast<char>(dBottomLightPercent*(MAXLIGHTVALUE-MINLIGHTVALUE)/100.0))+MINLIGHTVALUE;
g_machine.s_lights_value._ring_light = (static_cast<char>(dRingLightPercent*(MAXLIGHTVALUE-MINLIGHTVALUE)/100.0))+MINLIGHTVALUE;
g_machine.s_lights_value._coaxial_light = (static_cast<char>(dCoaxialLightPercent*(MAXLIGHTVALUE-MINLIGHTVALUE)/100.0))+MINLIGHTVALUE;
g_machine.s_lights_value._spare_light1 = (static_cast<char>(dReservedLightPercent*(MAXLIGHTVALUE-MINLIGHTVALUE)/100.0))+MINLIGHTVALUE;
g_machine.s_lights_value.segment[0] = cOuterRingLightSwitch;
g_machine.s_lights_value.segment[1] = cInnerRingLightSwitch;
_send_cmd_SO7_CMD_SET_ALL_LIGHT_VALUE();
Sleep(3*MIN_SLEEP_TIME);
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("so7_light_set_lamp_state:TOP:%d,BOT:%d,COAXIAL:%d,RESERVED:%d,RING:%d,ORING:%d,IRING:%d.\n")
,(BYTE)g_machine.s_lights_value._bottom_light,(BYTE)g_machine.s_lights_value._top_light,(BYTE)g_machine.s_lights_value._coaxial_light
,(BYTE)g_machine.s_lights_value._spare_light1,(BYTE)g_machine.s_lights_value._ring_light,(BYTE)g_machine.s_lights_value.segment[0]
,(BYTE)g_machine.s_lights_value.segment[1]);
}
return SSI_STATUS_MOTION_NORMAL;
};
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_GetDIO(int Channel,BYTE& bDISts)
{
char Addr(0);
switch(Channel)
{
case INPORT_J2:
{
Addr=ESO7_CONTROLLER_INPUT_PORT_ADDR;
break;
}
case OUTPORT_J1:
{
Addr=ESO7_CONTROLLER_WOUTPUT_PORT_ADDR;
break;
}
case OUTPORT_J3:
{
Addr=ESO7_CONTROLLER_OUTPUT_PORT_ADDR;
break;
}
case LIMIT_SWITCH_J4:
{
Addr=ESO7_CONTROLLER_LIMIT_SWITCH_ADDR;
break;
}
default:
{
Addr=-1;
break;
}
}
if (Addr>=0)
{
_send_cmd_SO7_CMD_READ_INPUT_PORT_STATUS(Addr);
bDISts=static_cast<BYTE>(g_machine.InPortStatus);
return SSI_STATUS_MOTION_NORMAL;
}
else
{
bDISts=0;
return SSI_STATUS_MOTION_INVALID_PARAMETERS;
}
}
//==================================================================
SSI_STATUS_MOTION CSO7_Proto::so7_SetDO(int Channel,BYTE bDOSts)
{
char cSetIOStatusAddr(0);
char cSetValue(0);
switch(Channel)
{
case OUTPORT_J1:
{
if (bDOSts&HBIT0)
{
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_LASE_ON,0);
}
else
{
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_LASE_OFF,0);
}
Sleep(5);
if (bDOSts&HBIT1)
{
cSetIOStatusAddr=1;
cSetValue=1;
}
else
{
cSetIOStatusAddr=1;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
if (bDOSts&HBIT2)
{
cSetIOStatusAddr=2;
cSetValue=1;
}
else
{
cSetIOStatusAddr=2;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
if (bDOSts&HBIT3)
{
cSetIOStatusAddr=3;
cSetValue=1;
}
else
{
cSetIOStatusAddr=3;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
if (bDOSts&HBIT4)
{
cSetIOStatusAddr=4;
cSetValue=1;
}
else
{
cSetIOStatusAddr=4;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
if (bDOSts&HBIT5)
{
cSetIOStatusAddr=5;
cSetValue=1;
}
else
{
cSetIOStatusAddr=5;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
break;
}
case OUTPORT_J3:
{
if (bDOSts&HBIT0)
{
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_PROBE_OFF,0);
Sleep(5);
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_LASE_TIMMER_ON,0);
}
else
{
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_M_PROBE_ON,0);
Sleep(5);
_send_cmd_SO7_CMD_COMMON_COMMAND(CT_MOTOR,CT_LASE_TIMMER_OFF,0);
}
Sleep(5);
if (bDOSts&HBIT1)
{
cSetIOStatusAddr=11;
cSetValue=1;
}
else
{
cSetIOStatusAddr=11;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
if (bDOSts&HBIT2)
{
cSetIOStatusAddr=12;
cSetValue=1;
}
else
{
cSetIOStatusAddr=12;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
if (bDOSts&HBIT3)
{
cSetIOStatusAddr=13;
cSetValue=1;
}
else
{
cSetIOStatusAddr=13;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
if (bDOSts&HBIT4)
{
cSetIOStatusAddr=14;
cSetValue=1;
}
else
{
cSetIOStatusAddr=14;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
if (bDOSts&HBIT5)
{
cSetIOStatusAddr=15;
cSetValue=1;
}
else
{
cSetIOStatusAddr=15;
cSetValue=0;
}
_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(CT_DATA,CT_WRITE_IO_DAT,cSetIOStatusAddr,cSetValue);
Sleep(5);
break;
}
default:
{
break;
}
}
return SSI_STATUS_MOTION_NORMAL;
}
SSI_STATUS_MOTION CSO7_Proto::so7_motion_set_trig_para(char _cAxis,char _TrigMode,short _ParaNumber,short* _ParaData)
{
short SetStartIndex(0);
short SetParaNumber(0);
do
{
if ((_ParaNumber-SetStartIndex)>20)
{
SetParaNumber=20;
}
else
{
SetParaNumber=(_ParaNumber-SetStartIndex);
}
_send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(_cAxis,_TrigMode,SetStartIndex,SetParaNumber,_ParaData);
SetStartIndex+=SetParaNumber;
} while ((_ParaNumber-SetStartIndex)>0);
return SSI_STATUS_MOTION_NORMAL;
}
SSI_STATUS_MOTION CSO7_Proto::so7_motion_get_trig_para(short _Index,char& _cAxis,char& _TrigMode,short& _ParaNumber,short& _ParaData)
{
_send_cmd_SO7_CMD_READ_TRIG_PULSE_PARA(_Index);
_cAxis=g_machine.TrigPara.TrigPulseActiveAxis;
_TrigMode=g_machine.TrigPara.TrigPulseMethod;
_ParaNumber=static_cast<short>(g_machine.TrigPara.TrigTotalNo._long_);
_ParaData=static_cast<short>(g_machine.TrigPara.TrigReadPara._long_);
return SSI_STATUS_MOTION_NORMAL;
}
//********************************************************************************//
//********************************************************************************//
//==================================================================================
//==================================================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_X(char SpeedGear)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEX;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear;
TRACE1("[MOVE_X]:%d\n",static_cast<int>(SpeedGear));
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("Jog X:%d.\n"),SpeedGear);
}
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_Y(char SpeedGear)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEY;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear;
TRACE1("[MOVE_Y]:%d\n",static_cast<int>(SpeedGear));
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("Jog Y:%d.\n"),SpeedGear);
}
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_Z(char SpeedGear)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEZ;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear;
TRACE1("[MOVE_Z]:%d\n",static_cast<int>(SpeedGear));
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("Jog Z:%d.\n"),SpeedGear);
}
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_ZM(char SpeedGear)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEV;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = SpeedGear;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_STOP_MOVE_XYZ()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_STOPA;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0x00;
TRACE("[STOP_XYZ]\n");
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_81_DATA_IDX]._size = 0x04;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_RESET_XYZ()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_RESET;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = 0X00;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x03;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_RESET_V()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_TESTV;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = 0;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x10;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_STOP_V()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_STOPV;
ep_buff[EP_02_CMD_IDX]._size = 0x02;
ep_buff[EP_82_DATA_IDX]._size = 0x10;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_TO_POS_X()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVETOX;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=(((g_machine.x._pos_fixed._char_[3])<0x80)?(g_machine.x._pos_fixed._char_[2]):((g_machine.x._pos_fixed._char_[2])|0x80));//λ
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=(g_machine.x._pos_fixed._char_[1]);
*(ep_buff[EP_02_CMD_IDX]._buffer+4)=(g_machine.x._pos_fixed._char_[0]);
ep_buff[EP_02_CMD_IDX]._size = 0x07;
ep_buff[EP_81_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_TO_POS_Y()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVETOY;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=(((g_machine.y._pos_fixed._char_[3])<0x80)?(g_machine.y._pos_fixed._char_[2]):((g_machine.y._pos_fixed._char_[2])|0x80));//λ
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=(g_machine.y._pos_fixed._char_[1]);
*(ep_buff[EP_02_CMD_IDX]._buffer+4)=(g_machine.y._pos_fixed._char_[0]);
ep_buff[EP_02_CMD_IDX]._size = 0x07;
ep_buff[EP_81_DATA_IDX]._size = 0x07;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_TO_POS_Z()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVETOZ;
if(g_machine.z._pos_fixed._long_<0)
{
g_machine.z._pos_fixed._long_=-g_machine.z._pos_fixed._long_;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=((g_machine.z._pos_fixed._char_[2])|0x80);//λ
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=(g_machine.z._pos_fixed._char_[1]);
*(ep_buff[EP_02_CMD_IDX]._buffer+4)=(g_machine.z._pos_fixed._char_[0]);
}
else
{
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=(g_machine.z._pos_fixed._char_[2]);//λ
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=(g_machine.z._pos_fixed._char_[1]);
*(ep_buff[EP_02_CMD_IDX]._buffer+4)=(g_machine.z._pos_fixed._char_[0]);
}
ep_buff[EP_02_CMD_IDX]._size = 0x07;
ep_buff[EP_81_DATA_IDX]._size = 0x07;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_TO_POS_ZM()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVETOV;
if(g_machine.zm._pos_fixed._long_<0)
{
g_machine.zm._pos_fixed._long_=-g_machine.zm._pos_fixed._long_;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=((g_machine.zm._pos_fixed._char_[2])|0x80);//λ
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=(g_machine.zm._pos_fixed._char_[1]);
*(ep_buff[EP_02_CMD_IDX]._buffer+4)=(g_machine.zm._pos_fixed._char_[0]);
}
else
{
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=(g_machine.zm._pos_fixed._char_[2]);//λ
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=(g_machine.zm._pos_fixed._char_[1]);
*(ep_buff[EP_02_CMD_IDX]._buffer+4)=(g_machine.zm._pos_fixed._char_[0]);
}
ep_buff[EP_02_CMD_IDX]._size = 0x07;
ep_buff[EP_81_DATA_IDX]._size = 0x07;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_TO_POS_XYZ(char ProbeType)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
pSO7_CMD_02->uCmdByte = CT_MOTOR;
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.uSubCmdByte =ProbeType;
if(g_machine.x._pos_fixed._long_<0)
{
g_machine.x._pos_fixed._long_=-g_machine.x._pos_fixed._long_;
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[0]=(g_machine.x._pos_fixed._char_[2] | 0x80);//λ
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[1]=(g_machine.x._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[2]=(g_machine.x._pos_fixed._char_[0]);
}
else
{
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[0]=(g_machine.x._pos_fixed._char_[2]);//λ
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[1]=(g_machine.x._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[2]=(g_machine.x._pos_fixed._char_[0]);
}
if(g_machine.y._pos_fixed._long_<0)
{
g_machine.y._pos_fixed._long_=-g_machine.y._pos_fixed._long_;
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[3]=(g_machine.y._pos_fixed._char_[2] | 0x80);//λ
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[4]=(g_machine.y._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[5]=(g_machine.y._pos_fixed._char_[0]);
}
else
{
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[3]=(g_machine.y._pos_fixed._char_[2]);//λ
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[4]=(g_machine.y._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[5]=(g_machine.y._pos_fixed._char_[0]);
}
if(g_machine.z._pos_fixed._long_<0)
{
g_machine.z._pos_fixed._long_=-g_machine.z._pos_fixed._long_;
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[6]=(g_machine.z._pos_fixed._char_[2] | 0x80);//λ
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[7]=(g_machine.z._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[8]=(g_machine.z._pos_fixed._char_[0]);
}
else
{
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[6]=(g_machine.z._pos_fixed._char_[2]);//λ
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[7]=(g_machine.z._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[8]=(g_machine.z._pos_fixed._char_[0]);
}
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[9]=(g_machine.x._MoveTo_Speed_Gear);
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[10]=(g_machine.y._MoveTo_Speed_Gear);
pSO7_CMD_02->s_SO7_CMD_MOVE_TO_XYZ.data[11]=(g_machine.z._MoveTo_Speed_Gear);
ep_buff[EP_02_CMD_IDX]._size = 0x0E;
ep_buff[EP_82_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_TO_POS_XYZV()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
pSO7_CMD_02->uCmdByte = CT_MOTOR;
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.uSubCmdByte =CT_MOVETOXYZV;
if(g_machine.x._pos_fixed._long_<0)
{
g_machine.x._pos_fixed._long_=-g_machine.x._pos_fixed._long_;
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[0]=(g_machine.x._pos_fixed._char_[2] | 0x80);//λ
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[1]=(g_machine.x._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[2]=(g_machine.x._pos_fixed._char_[0]);
}
else
{
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[0]=(g_machine.x._pos_fixed._char_[2]);//λ
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[1]=(g_machine.x._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[2]=(g_machine.x._pos_fixed._char_[0]);
}
if(g_machine.y._pos_fixed._long_<0)
{
g_machine.y._pos_fixed._long_=-g_machine.y._pos_fixed._long_;
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[3]=(g_machine.y._pos_fixed._char_[2] | 0x80);//λ
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[4]=(g_machine.y._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[5]=(g_machine.y._pos_fixed._char_[0]);
}
else
{
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[3]=(g_machine.y._pos_fixed._char_[2]);//λ
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[4]=(g_machine.y._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[5]=(g_machine.y._pos_fixed._char_[0]);
}
if(g_machine.z._pos_fixed._long_<0)
{
g_machine.z._pos_fixed._long_=-g_machine.z._pos_fixed._long_;
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[6]=(g_machine.z._pos_fixed._char_[2] | 0x80);//λ
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[7]=(g_machine.z._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[8]=(g_machine.z._pos_fixed._char_[0]);
}
else
{
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[6]=(g_machine.z._pos_fixed._char_[2]);//λ
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[7]=(g_machine.z._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[8]=(g_machine.z._pos_fixed._char_[0]);
}
if(g_machine.zm._pos_fixed._long_<0)
{
g_machine.zm._pos_fixed._long_=-g_machine.z._pos_fixed._long_;
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[6]=(g_machine.zm._pos_fixed._char_[2] | 0x80);//λ
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[7]=(g_machine.zm._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[8]=(g_machine.zm._pos_fixed._char_[0]);
}
else
{
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[9]=(g_machine.zm._pos_fixed._char_[2]);//λ
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[10]=(g_machine.zm._pos_fixed._char_[1]);
pSO7_CMD_02->s_SO7_CMD_MOVETOXYZV.data[11]=(g_machine.zm._pos_fixed._char_[0]);
}
ep_buff[EP_02_CMD_IDX]._size = 0x0F;
ep_buff[EP_82_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_AXIS_XYZ()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_AXISXYZ;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0x00;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x09;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_PROBE_XYZ()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_PROBEXYZ;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0x00;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x09;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_V_DATA()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_AXISV;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = 0x00;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x03;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_GET_RESET_FLAG()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_SCALE;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_GET_RESET_FLAG;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = 0x00;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x02;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_GET_FIXTURE_VALUE()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_M_SWITCH_VALUE;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = 0x00;
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = 0x00;
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_82_DATA_IDX]._size = 0x02;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_RESET_FLAG()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_SCALE;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_RESET_FLAG;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = 0x01;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x02;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_LIGHT_SIZE(char subCMD,BYTE LightValue)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_LIGHT;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = subCMD;//CT_LIGHT/1-4/_SIZE or CT_LIGHT/1-4/_SWITCH
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = LightValue-1;
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = 0;
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_82_DATA_IDX]._size = 0x02;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_ALL_LIGHT_VALUE()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
pSO7_CMD_02->uCmdByte = CT_LIGHT;
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT.uSubCmdByte =CT_LIGHT_CMD;
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT.uStartCmdByte =(BYTE)0xA1;
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._bottom_light =g_machine.s_lights_value._bottom_light;
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._top_light =g_machine.s_lights_value._top_light;
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._ring_light =g_machine.s_lights_value._ring_light;
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._coaxial_light =g_machine.s_lights_value._coaxial_light;
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._spare_light1 =g_machine.s_lights_value._spare_light1;
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._outer_ring_light_switch =g_machine.s_lights_value.segment[0];
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT._inner_ring_light_switch =g_machine.s_lights_value.segment[1];
pSO7_CMD_02->s_SO7_CMD_SET_LIGHT.uEndCmdByte =(BYTE)0xB1;
ep_buff[EP_02_CMD_IDX]._size = 0x0B;
ep_buff[EP_82_DATA_IDX]._size = 0x10;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_VER_NUMBER()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_SCALE;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_VERNO;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = g_machine.cVerNumber;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x10;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_CORRECTION_SCALE(char cAxisType)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_SCALE;
if (cAxisType == 0)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_LINE_X;
else if(cAxisType == 1)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_LINE_Y;
else if(cAxisType == 2)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_LINE_Z;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = 1;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x10;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_SECTION(char cAxisType)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_SCALE;
if (cAxisType == 0)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SECTION_X;
else if(cAxisType == 1)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SECTION_Y;
else if(cAxisType == 2)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SECTION_Z;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = 1;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x10;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_COMMON_COMMAND(char Cmd,char SubCmd,char Type)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = Cmd;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = SubCmd;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = Type;
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = 0x00;
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_82_DATA_IDX]._size = 0x10;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_COMMON_COMMAND_DATA(char Cmd,char SubCmd,char Type,char Data)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
if (g_machine.s_machine_config.motion.m_DebugOutputEnable>=1)
{
g_pLogger->SendAndFlushWithTime(_T("SEND_SYS_COMMAND:Cmd:%d,BOT:%d,SubCmd:%d,Type:%d,Data:%d.\n")
,Cmd,SubCmd,Type,Data);
}
*(ep_buff[EP_02_CMD_IDX]._buffer) = Cmd;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = SubCmd;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = Type;
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = Data;
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_82_DATA_IDX]._size = 0x10;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//=============================================================
//xyz_gear=0(slow) 1 2 3(fast);
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_ZOOM_SPEED(char xyz_gear)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SPEEDV;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = xyz_gear;
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = g_machine.s_machine_config.zm_axis._speed._char_[1];
*(ep_buff[EP_02_CMD_IDX]._buffer+4) = g_machine.s_machine_config.zm_axis._speed._char_[0];
ep_buff[EP_02_CMD_IDX]._size = 0x05;
ep_buff[EP_82_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//=============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_CONSTANT_SPEED(int iSpeed,char axis_type,char xyz_gear)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
int iDeceDistance(0);
char _speed_base(0);
char _speed_fresh(0);
char _speed_start(0);
char _speed_max(0);
if (g_machine.FirmwareVer==FirmwareVer_6_X)
{
iDeceDistance = iSpeed;
}
else
{
if (iSpeed>255)
{
BYTE MaxSpeed(255);
_speed_start=static_cast<char>((iSpeed%256)+1);
_speed_max=static_cast<char>(MaxSpeed);
}
else
{
_speed_start= static_cast<char>(iSpeed);
*(ep_buff[EP_02_CMD_IDX]._buffer+6) = 0;
}
iDeceDistance =0;
}
if(axis_type == 0)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SPEEDX;
else if(axis_type == 1)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SPEEDY;
else if(axis_type == 2)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SPEEDZ;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = xyz_gear+1;
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = _speed_base;
*(ep_buff[EP_02_CMD_IDX]._buffer+4) = _speed_fresh;
*(ep_buff[EP_02_CMD_IDX]._buffer+5) = _speed_start;
*(ep_buff[EP_02_CMD_IDX]._buffer+6) = _speed_max;
char cBuffer;
cBuffer =static_cast<char>(iDeceDistance/1000);
*(ep_buff[EP_02_CMD_IDX]._buffer+7) =cBuffer;
cBuffer = static_cast<char>((iDeceDistance%1000)/100);
*(ep_buff[EP_02_CMD_IDX]._buffer+8) = cBuffer;
cBuffer = static_cast<char>((iDeceDistance%100)/10);
*(ep_buff[EP_02_CMD_IDX]._buffer+9) = cBuffer;
cBuffer = static_cast<char>(iDeceDistance%10);
*(ep_buff[EP_02_CMD_IDX]._buffer+10)= cBuffer;
ep_buff[EP_02_CMD_IDX]._size = 0x0b;
ep_buff[EP_82_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//=============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_SPEED_PARAMETER(char axis_type,char xyz_gear)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
int iDeceDistance = 0;
if(axis_type == 0)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SPEEDX;
else if(axis_type == 1)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SPEEDY;
else if(axis_type == 2)
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_SPEEDZ;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = xyz_gear+1;
if(axis_type==0)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = g_machine.s_machine_config.x_axis._speed_base[xyz_gear];
*(ep_buff[EP_02_CMD_IDX]._buffer+4) = g_machine.s_machine_config.x_axis._speed_fresh[xyz_gear];
*(ep_buff[EP_02_CMD_IDX]._buffer+5) = g_machine.s_machine_config.x_axis._speed_start[xyz_gear];
*(ep_buff[EP_02_CMD_IDX]._buffer+6) = g_machine.s_machine_config.x_axis._speed_max[xyz_gear];
iDeceDistance =(int)((g_machine.s_machine_config.x_axis._speed_slow_dis[xyz_gear] ) * 1000);
}
else if(axis_type==1)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = g_machine.s_machine_config.y_axis._speed_base[xyz_gear];
*(ep_buff[EP_02_CMD_IDX]._buffer+4) = g_machine.s_machine_config.y_axis._speed_fresh[xyz_gear];
*(ep_buff[EP_02_CMD_IDX]._buffer+5) = g_machine.s_machine_config.y_axis._speed_start[xyz_gear];
*(ep_buff[EP_02_CMD_IDX]._buffer+6) = g_machine.s_machine_config.y_axis._speed_max[xyz_gear];
iDeceDistance =(int)((g_machine.s_machine_config.y_axis._speed_slow_dis[xyz_gear] ) * 1000);
}
else if(axis_type==2)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = g_machine.s_machine_config.z_axis._speed_base[xyz_gear];
*(ep_buff[EP_02_CMD_IDX]._buffer+4) = g_machine.s_machine_config.z_axis._speed_fresh[xyz_gear];
*(ep_buff[EP_02_CMD_IDX]._buffer+5) = g_machine.s_machine_config.z_axis._speed_start[xyz_gear];
*(ep_buff[EP_02_CMD_IDX]._buffer+6) = g_machine.s_machine_config.z_axis._speed_max[xyz_gear];
iDeceDistance =(int)((g_machine.s_machine_config.z_axis._speed_slow_dis[xyz_gear] ) * 1000);
}
char cBuffer;
cBuffer =static_cast<char>(iDeceDistance/1000);
*(ep_buff[EP_02_CMD_IDX]._buffer+7) =cBuffer;
cBuffer = static_cast<char>((iDeceDistance%1000)/100);
*(ep_buff[EP_02_CMD_IDX]._buffer+8) = cBuffer;
cBuffer = static_cast<char>((iDeceDistance%100)/10);
*(ep_buff[EP_02_CMD_IDX]._buffer+9) = cBuffer;
cBuffer = static_cast<char>(iDeceDistance%10);
*(ep_buff[EP_02_CMD_IDX]._buffer+10)= cBuffer;
ep_buff[EP_02_CMD_IDX]._size = 0x0b;
ep_buff[EP_82_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_SPEED_PRECISION(char axis_type)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
if(axis_type == 0)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_PRECISIONX;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) =static_cast<char>(g_machine.s_machine_config.x_axis._motor_precision*1000+1);
}
else if(axis_type == 1)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_PRECISIONY;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = static_cast<char>(g_machine.s_machine_config.y_axis._motor_precision*1000+1);
}
else if (axis_type == 2)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_PRECISIONZ;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = static_cast<char>(g_machine.s_machine_config.z_axis._motor_precision*1000+1);
}
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x06;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_MOTOR_SPEED_WHEELBASE_PARAMETER()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
float fmotor_wheelbasex(0.0);
float fmotor_wheelbasey(0.0);
float fmotor_wheelbasez(0.0);
fmotor_wheelbasex=static_cast<float>(((g_machine.s_machine_config.x_axis._scale_resolution)*(g_machine._motor_pulse_num))/(g_machine.s_machine_config.x_axis._motor_wheelbase*1000));
fmotor_wheelbasey=static_cast<float>(((g_machine.s_machine_config.y_axis._scale_resolution)*(g_machine._motor_pulse_num))/(g_machine.s_machine_config.y_axis._motor_wheelbase*1000));
fmotor_wheelbasez=static_cast<float>(((g_machine.s_machine_config.z_axis._scale_resolution)*(g_machine._motor_pulse_num))/(g_machine.s_machine_config.z_axis._motor_wheelbase*1000));
*(ep_buff[EP_02_CMD_IDX]._buffer)=CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1)=CT_SET_MOTOR_CAL;
memcpy(ep_buff[EP_02_CMD_IDX]._buffer+2,&fmotor_wheelbasex,4);
memcpy(ep_buff[EP_02_CMD_IDX]._buffer+6,&fmotor_wheelbasey,4);
memcpy(ep_buff[EP_02_CMD_IDX]._buffer+10,&fmotor_wheelbasez,4);
*(ep_buff[EP_02_CMD_IDX]._buffer+14)=0;
ep_buff[EP_02_CMD_IDX]._size = 0x0f;
ep_buff[EP_82_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_SPEED_PARAMETER(char axis_type,char xyz_gear)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
if(axis_type == 0)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SPEEDX;
}
else if(axis_type == 1)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SPEEDY;
}
else if (axis_type == 2)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SPEEDZ;
}
*(ep_buff[EP_02_CMD_IDX]._buffer+2)= xyz_gear;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x06;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_SPEED_PRECISION(char axis_type)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
if(axis_type == 0)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_PRECISIONX;
}
else if(axis_type == 1)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_PRECISIONY;
}
else if (axis_type == 2)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_PRECISIONZ;
}
ep_buff[EP_02_CMD_IDX]._size = 0x02;
ep_buff[EP_82_DATA_IDX]._size = 0x01;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_MOTOR_SPEED_WHEELBASE_PARAMETER()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_MOTOR_CAL;
ep_buff[EP_02_CMD_IDX]._size = 0x02;
ep_buff[EP_82_DATA_IDX]._size = 0x0C;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_INTERRUPT_MESSAGE()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
ep_buff[EP_81_DATA_IDX]._size = 0x02;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE1;
_do_single_threaded_usb_comm(EP_01_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_ZOOM_MOTION_STATUS()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_TEST_STOP;
ep_buff[EP_02_CMD_IDX]._size = 0x02;
ep_buff[EP_82_DATA_IDX]._size = 0x02;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_OPEN_KEYENCE_LASER()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_GET_LASE;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = 1;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x02;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_INPUT_PORT_STATUS(char AddrType)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_IO_DAT;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=AddrType;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x01;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_ZSIGNAL_POS_X()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SEC_REALX;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x03;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_ZSIGNAL_POS_Y()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SEC_REALY;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x03;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_ZSIGNAL_POS_Z()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SEC_REALZ;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x03;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(char axis_type,char Addr,char Data)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_WRITE_SYSTEM;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=axis_type;
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=Addr;
*(ep_buff[EP_02_CMD_IDX]._buffer+4)=Data;
ep_buff[EP_02_CMD_IDX]._size = 0x05;
ep_buff[EP_82_DATA_IDX]._size = 0x01;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(char axis_type,char Addr)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SYSTEM;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=axis_type;
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=Addr;
*(ep_buff[EP_02_CMD_IDX]._buffer+4)=0;
ep_buff[EP_02_CMD_IDX]._size = 0x05;
ep_buff[EP_82_DATA_IDX]._size = 0x12;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_FIRMWARE_VERSION_INFO()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_SCALE;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_GET_SYSTEM_VER_INFO;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x12;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_GET_INTERRUPT_MSG(char cType)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_GET_INTERRUPT_MSG;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=cType;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_82_DATA_IDX]._size = 0x12;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_INTERRUPT_MSG(char cType,char cValue)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_INTERRUPT_MSG;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=cType;
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=cValue;
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_81_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_GET_INTERRUPT_MSG_METHOD(char Method)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_GETINTERRUPTMSG_METHOD;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=Method;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_MOVE_XY(char SpeedGearX,char SpeedGearY)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_MOTOR;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_MOVEXY;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=SpeedGearX;
*(ep_buff[EP_02_CMD_IDX]._buffer+3)=SpeedGearY;
TRACE2("[MOVE_XY]:X %d;Y %d.\n",static_cast<int>(SpeedGearX),static_cast<int>(SpeedGearY));
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_81_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_SEQ_NUMBER()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_WRITE_SEQ_NUMBER;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=g_machine.SEQ_NUMBER;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x45;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_GET_SEQ_NUMBER()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_SEQ_NUMBER;
ep_buff[EP_02_CMD_IDX]._size = 0x02;
ep_buff[EP_82_DATA_IDX]._size = 0x01;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_READ_TRIG_PULSE_PARA(short ParaIndex)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
char cBuff(0);
g_machine.TrigPara.TrigReadIndex._long_=ParaIndex;
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_READ_TRIG_PULSE_PARA;
cBuff = (ParaIndex>>8) & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = cBuff;
cBuff = ParaIndex & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = cBuff;
ep_buff[EP_02_CMD_IDX]._size = 0x04;
ep_buff[EP_82_DATA_IDX]._size = 0x08;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
static char caxis=1;
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_WRITE_TRIG_PULSE_PARA(char ActiveAxis,char TrigMode,short StartIndex,short ParaNumber,short* Para)
{
caxis=ActiveAxis;
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
char cBuff(0);
short sPara(0);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_WRITE_TRIG_PULSE_PARA;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = ActiveAxis;
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = TrigMode;
cBuff = (StartIndex>>8) & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+4) = cBuff;
cBuff = StartIndex & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+5) = cBuff;
cBuff = (ParaNumber>>8) & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+6) = cBuff;
cBuff = ParaNumber & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+7) = cBuff;
int j=8;
for (short i=StartIndex;i<(StartIndex+ParaNumber);i++)
{
if (Para[i]<0)
{
sPara=-Para[i];
cBuff = (sPara>>8) & 0x0ff;
cBuff = cBuff | 0x80;
*(ep_buff[EP_02_CMD_IDX]._buffer+j) = cBuff;
j++;
cBuff = sPara & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+j) = cBuff;
j++;
}
else
{
cBuff = (Para[i]>>8) & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+j) = cBuff;
j++;
cBuff = Para[i] & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+j) = cBuff;
j++;
}
}
ep_buff[EP_02_CMD_IDX]._size = j;
ep_buff[EP_82_DATA_IDX]._size = 0x02;
g_hEP02_Thread_State=THREAD_RUNNING_STATE1;
g_hEP8x_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_TRIG_PULSE_START()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_START_TRIG_PULSE;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=caxis;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x00;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_TRIG_PULSE_STOP()
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_STOP_TRIG_PULSE;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=caxis;
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x00;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_IO_PURPOSE(BOOL _bEnTrigIO)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
*(ep_buff[EP_02_CMD_IDX]._buffer) = CT_DATA;
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = CT_SET_IO_PURPOSE;
if (_bEnTrigIO)
{
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=1;
}
else
{
*(ep_buff[EP_02_CMD_IDX]._buffer+2)=0;
}
ep_buff[EP_02_CMD_IDX]._size = 0x03;
ep_buff[EP_81_DATA_IDX]._size = 0x00;
g_hEP02_Thread_State=THREAD_RUNNING_STATE2;
_do_single_threaded_usb_comm(EP_02_CMD_IDX);
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_X()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_Y()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_Z()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_ZM()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_RESET_XYZ()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_TO_POS_X()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_TO_POS_Y()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_TO_POS_Z()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_TO_POS_ZM()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_MOVE_TO_POS_XYZ()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_AXIS_XYZ()
{
g_machine.x._scale_pos._long_=0;
g_machine.y._scale_pos._long_=0;
g_machine.z._scale_pos._long_=0;
g_machine.y._scale_pos._char_[2] = *(ep_buff[EP_82_DATA_IDX]._buffer);
g_machine.y._scale_pos._char_[1] = *(ep_buff[EP_82_DATA_IDX]._buffer+1);
g_machine.y._scale_pos._char_[0] = *(ep_buff[EP_82_DATA_IDX]._buffer+2);
g_machine.y._scale_pos._char_[3] = 0;
g_machine.x._scale_pos._char_[2] = *(ep_buff[EP_82_DATA_IDX]._buffer+3);
g_machine.x._scale_pos._char_[1] = *(ep_buff[EP_82_DATA_IDX]._buffer+4);
g_machine.x._scale_pos._char_[0] = *(ep_buff[EP_82_DATA_IDX]._buffer+5);
g_machine.x._scale_pos._char_[3] = 0;
g_machine.z._scale_pos._char_[2] = *(ep_buff[EP_82_DATA_IDX]._buffer+6);
g_machine.z._scale_pos._char_[1] = *(ep_buff[EP_82_DATA_IDX]._buffer+7);
g_machine.z._scale_pos._char_[0] = *(ep_buff[EP_82_DATA_IDX]._buffer+8);
g_machine.z._scale_pos._char_[3] = 0;
if (g_machine.x._scale_pos._long_ > 8388608)
g_machine.x._scale_pos._long_=g_machine.x._scale_pos._long_-16777216;
if (g_machine.y._scale_pos._long_ > 8388608)
g_machine.y._scale_pos._long_=g_machine.y._scale_pos._long_-16777216;
if (g_machine.z._scale_pos._long_ > 8388608)
g_machine.z._scale_pos._long_=g_machine.z._scale_pos._long_-16777216;
// for rotary table
//if (g_machine.z._scale_pos._long_ > 4194304)
// g_machine.z._scale_pos._long_=g_machine.z._scale_pos._long_-8388608;
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_PROBE_XYZ()
{
g_machine.y._scale_probe= _3char2long((unsigned char*)(ep_buff[EP_82_DATA_IDX]._buffer));
g_machine.x._scale_probe= _3char2long((unsigned char*)(ep_buff[EP_82_DATA_IDX]._buffer+3));
g_machine.z._scale_probe= _3char2long((unsigned char*)(ep_buff[EP_82_DATA_IDX]._buffer+6));
if (g_machine.x._scale_probe > 8388608)
g_machine.x._scale_probe=g_machine.x._scale_probe-16777216;
if (g_machine.y._scale_probe > 8388608)
g_machine.y._scale_probe=g_machine.y._scale_probe-16777216;
if (g_machine.z._scale_probe > 8388608)
g_machine.z._scale_probe=g_machine.z._scale_probe-16777216;
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_V_DATA()
{
g_machine.zm._scale_pos._char_[2] = *(ep_buff[EP_82_DATA_IDX]._buffer);
g_machine.zm._scale_pos._char_[1] = *(ep_buff[EP_82_DATA_IDX]._buffer+1);
g_machine.zm._scale_pos._char_[0] = *(ep_buff[EP_82_DATA_IDX]._buffer+2);
g_machine.zm._scale_pos._char_[3] = 0;
if (g_machine.zm._scale_pos._long_ > 8388608)
g_machine.zm._scale_pos._long_=g_machine.zm._scale_pos._long_-16777216;
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_GET_RESET_FLAG()
{
g_machine.Sys_Reset_Flag=*(ep_buff[EP_82_DATA_IDX]._buffer);
char cTmp=*(ep_buff[EP_82_DATA_IDX]._buffer+1);
if (cTmp==1)
{
g_machine.IsSupportReadInterrputMsg=TRUE;
}
else
{
g_machine.IsSupportReadInterrputMsg=FALSE;
}
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_SET_LIGHT()
{
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_GET_FIXTURE_VALUE()
{
g_machine.cFixtureFlag = ep_buff[EP_82_DATA_IDX]._buffer[0] & 0x3f;
return SSI_STATUS_MOTION_NORMAL;
};
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_SET_SPEED_MOTOR_WHEELBASE_PARAMETER()
{
return SSI_STATUS_MOTION_NORMAL;
}
//===============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_SET_SPEED_PARAMETER()
{
return SSI_STATUS_MOTION_NORMAL;
}
//===============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_SET_SPEED_PRECISION()
{
return SSI_STATUS_MOTION_NORMAL;
}
//===============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_SPEED_PARAMETERX()
{
g_machine.s_machine_config.x_axis._speed_base[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer);
g_machine.s_machine_config.x_axis._speed_fresh[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer+1);
g_machine.s_machine_config.x_axis._speed_start[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer+2);
g_machine.s_machine_config.x_axis._speed_max[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer+3);
g_machine.s_machine_config.x_axis._speed_slow_dis[ep_buff[EP_02_CMD_IDX]._save_send_cmd1] =(static_cast<double>(((((BYTE)ep_buff[EP_82_DATA_IDX]._buffer[4])*256))+((BYTE)ep_buff[EP_82_DATA_IDX]._buffer[5])))/1000;
return SSI_STATUS_MOTION_NORMAL;
}
//===============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_SPEED_PARAMETERZ()
{
g_machine.s_machine_config.z_axis._speed_base[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer);
g_machine.s_machine_config.z_axis._speed_fresh[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer+1);
g_machine.s_machine_config.z_axis._speed_start[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer+2);
g_machine.s_machine_config.z_axis._speed_max[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer+3);
g_machine.s_machine_config.z_axis._speed_slow_dis[ep_buff[EP_02_CMD_IDX]._save_send_cmd1] =(static_cast<double>(((((BYTE)ep_buff[EP_82_DATA_IDX]._buffer[4])*256))+((BYTE)ep_buff[EP_82_DATA_IDX]._buffer[5])))/1000;
return SSI_STATUS_MOTION_NORMAL;
}
//===============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_SPEED_PARAMETERY()
{
g_machine.s_machine_config.y_axis._speed_base[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer);
g_machine.s_machine_config.y_axis._speed_fresh[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer+1);
g_machine.s_machine_config.y_axis._speed_start[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer+2);
g_machine.s_machine_config.y_axis._speed_max[ep_buff[EP_02_CMD_IDX]._save_send_cmd1]=*(ep_buff[EP_82_DATA_IDX]._buffer+3);
g_machine.s_machine_config.y_axis._speed_slow_dis[ep_buff[EP_02_CMD_IDX]._save_send_cmd1] =(static_cast<double>(((((BYTE)ep_buff[EP_82_DATA_IDX]._buffer[4])*256))+((BYTE)ep_buff[EP_82_DATA_IDX]._buffer[5])))/1000;
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_SPEED_PRECISIONX()
{
g_machine.s_machine_config.x_axis._motor_precision=(static_cast<double>(ep_buff[EP_82_DATA_IDX]._buffer[0]-1))/1000;
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_SPEED_PRECISIONY()
{
g_machine.s_machine_config.y_axis._motor_precision=(static_cast<double>(ep_buff[EP_82_DATA_IDX]._buffer[0]-1))/1000;
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_SPEED_PRECISIONZ()
{
g_machine.s_machine_config.z_axis._motor_precision=(static_cast<double>(ep_buff[EP_82_DATA_IDX]._buffer[0]-1))/1000;
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_MOTOR_SPEED_WHEELBASE_PARAMETER()
{
float fmotor_wheelbasex(0.0);
float fmotor_wheelbasey(0.0);
float fmotor_wheelbasez(0.0);
memcpy(&fmotor_wheelbasex,ep_buff[EP_82_DATA_IDX]._buffer,4);
g_machine.s_machine_config.x_axis._motor_wheelbase=((g_machine.s_machine_config.x_axis._scale_resolution)*(g_machine._motor_pulse_num))/(fmotor_wheelbasex*1000);
memcpy(&fmotor_wheelbasey,ep_buff[EP_82_DATA_IDX]._buffer+4,4);
g_machine.s_machine_config.y_axis._motor_wheelbase=((g_machine.s_machine_config.y_axis._scale_resolution)*(g_machine._motor_pulse_num))/(fmotor_wheelbasey*1000);
memcpy(&fmotor_wheelbasez,ep_buff[EP_82_DATA_IDX]._buffer+8,4);
g_machine.s_machine_config.z_axis._motor_wheelbase=((g_machine.s_machine_config.z_axis._scale_resolution)*(g_machine._motor_pulse_num))/(fmotor_wheelbasez*1000);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_ZOOM_MOTION_STATUS()
{
g_machine.s_status._bIsZMMotionFinished=*(ep_buff[EP_82_DATA_IDX]._buffer);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_INTERRUPT_MESSAGE()
{
g_machine.InterruptFlag[0]=*(ep_buff[EP_81_DATA_IDX]._buffer);
g_machine.InterruptFlag[1]=*(ep_buff[EP_81_DATA_IDX]._buffer+1);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_INPUT_PORT_STATUS()
{
g_machine.InPortStatus=0;
g_machine.InPortStatus=*(ep_buff[EP_82_DATA_IDX]._buffer);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_ZSIGNAL_POS_X()
{
g_machine.x._ZSignal_pos._char_[2] = *(ep_buff[EP_82_DATA_IDX]._buffer);
g_machine.x._ZSignal_pos._char_[1] = *(ep_buff[EP_82_DATA_IDX]._buffer+1);
g_machine.x._ZSignal_pos._char_[0] = *(ep_buff[EP_82_DATA_IDX]._buffer+2);
g_machine.x._ZSignal_pos._char_[3] = 0;
if (g_machine.x._ZSignal_pos._long_ > 8388608)
g_machine.x._ZSignal_pos._long_=g_machine.x._ZSignal_pos._long_-16777216;
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_ZSIGNAL_POS_Y()
{
g_machine.y._ZSignal_pos._char_[2] = *(ep_buff[EP_82_DATA_IDX]._buffer);
g_machine.y._ZSignal_pos._char_[1] = *(ep_buff[EP_82_DATA_IDX]._buffer+1);
g_machine.y._ZSignal_pos._char_[0] = *(ep_buff[EP_82_DATA_IDX]._buffer+2);
g_machine.y._ZSignal_pos._char_[3] = 0;
if (g_machine.y._ZSignal_pos._long_ > 8388608)
g_machine.y._ZSignal_pos._long_=g_machine.y._ZSignal_pos._long_-16777216;
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_ZSIGNAL_POS_Z()
{
g_machine.z._ZSignal_pos._char_[2] = *(ep_buff[EP_82_DATA_IDX]._buffer);
g_machine.z._ZSignal_pos._char_[1] = *(ep_buff[EP_82_DATA_IDX]._buffer+1);
g_machine.z._ZSignal_pos._char_[0] = *(ep_buff[EP_82_DATA_IDX]._buffer+2);
g_machine.z._ZSignal_pos._char_[3] = 0;
if (g_machine.z._ZSignal_pos._long_ > 8388608)
g_machine.z._ZSignal_pos._long_=g_machine.z._ZSignal_pos._long_-16777216;
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_WRITE_DATA_TO_FPGA()
{
g_machine.FPGAData = *(ep_buff[EP_82_DATA_IDX]._buffer);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_DATA_FROM_FPGA()
{
g_machine.FPGAData = *(ep_buff[EP_82_DATA_IDX]._buffer);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_FIRMWARE_VERSION_INFO()
{
for (int i=0;i<10;i++)
{
g_machine.FirmwareInfo[i]=*(ep_buff[EP_82_DATA_IDX]._buffer+i);
}
if (g_machine.FirmwareInfo[3]=='6')
{
g_machine.FirmwareVer=FirmwareVer_6_X;
}
else
{
g_machine.FirmwareVer=FirmwareVer_3_X;
}
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_INTERRUPT_MSG(BYTE Type)
{
g_machine.GetInterruptMsg[Type][0]=*(ep_buff[EP_82_DATA_IDX]._buffer);
g_machine.GetInterruptMsg[Type][1]=*(ep_buff[EP_82_DATA_IDX]._buffer+1);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_SEQ_NUMBER()
{
g_machine.SEQ_NUMBER=*(ep_buff[EP_82_DATA_IDX]._buffer);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_TRIG_PULSE_PARA()
{
int index(0);
g_machine.TrigPara.TrigPulseActiveAxis=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
index++;
g_machine.TrigPara.TrigPulseMethod=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
index++;
g_machine.TrigPara.TrigTotalNo._char_[1]=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
index++;
g_machine.TrigPara.TrigTotalNo._char_[0]=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
g_machine.TrigPara.TrigTotalNo._char_[2]=0;
g_machine.TrigPara.TrigTotalNo._char_[3]=0;
index++;
g_machine.TrigPara.TrigCurIndex._char_[1]=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
index++;
g_machine.TrigPara.TrigCurIndex._char_[0]=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
g_machine.TrigPara.TrigCurIndex._char_[2]=0;
g_machine.TrigPara.TrigCurIndex._char_[3]=0;
index++;
g_machine.TrigPara.TrigReadPara._char_[1]=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
index++;
g_machine.TrigPara.TrigReadPara._char_[0]=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
g_machine.TrigPara.TrigReadPara._char_[2]=0;
g_machine.TrigPara.TrigReadPara._char_[3]=0;
index++;
if (g_machine.TrigPara.TrigReadPara._long_>32768)
{
g_machine.TrigPara.TrigReadPara._long_-=32768;
g_machine.TrigPara.TrigReadPara._long_*=-1;
}
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_WRITE_TRIG_PULSE_PARA()
{
int index(0);
g_machine.TrigPara.TrigTotalNo._char_[1]=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
index++;
g_machine.TrigPara.TrigTotalNo._char_[0]=*(ep_buff[EP_82_DATA_IDX]._buffer+index);
g_machine.TrigPara.TrigTotalNo._char_[2]=0;
g_machine.TrigPara.TrigTotalNo._char_[3]=0;
index++;
return SSI_STATUS_MOTION_NORMAL;
}