新增可读写不同档位限定的位移值。

This commit is contained in:
TAO Cheng
2014-07-25 16:47:36 +08:00
parent ae262c9015
commit 4bb02c6002
17 changed files with 431 additions and 56 deletions
@@ -207,7 +207,12 @@ void CSO7_Proto::_process_rcv_transfer_data(int iEP)
break;
case CT_GET_MOTION_FINISHED_CNTS:
_process_SO7_CMD_GET_MOTION_CNTS();
break;
case CT_GET_MOTION_SEGMENT_DIS:
_process_SO7_CMD_GET_MOTION_SEGMENT_DIS(ep_buff[EP_02_CMD_IDX]._save_send_cmd1+1,ep_buff[EP_02_CMD_IDX]._save_send_cmd2);
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]);
@@ -551,6 +556,16 @@ CSO7_Proto::CSO7_Proto()
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.s_machine_config.x_axis._MotionSegmentDis[0]=100;
g_machine.s_machine_config.x_axis._MotionSegmentDis[1]=1000;
g_machine.s_machine_config.x_axis._MotionSegmentDis[2]=5000;
g_machine.s_machine_config.y_axis._MotionSegmentDis[0]=100;
g_machine.s_machine_config.y_axis._MotionSegmentDis[1]=1000;
g_machine.s_machine_config.y_axis._MotionSegmentDis[2]=5000;
g_machine.s_machine_config.z_axis._MotionSegmentDis[0]=100;
g_machine.s_machine_config.z_axis._MotionSegmentDis[1]=1000;
g_machine.s_machine_config.z_axis._MotionSegmentDis[2]=5000;
g_machine.MotionType=-1;
g_machine.s_status._bIsZMMotionFinished=0;
@@ -3298,6 +3313,7 @@ SSI_STATUS_MOTION CSO7_Proto::_send_usb_cmd(int iEP_Base)
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];
ep_buff[iEP_Base]._save_send_cmd2= ep_buff[iEP_Base]._buffer[3];
//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]);
@@ -3330,6 +3346,7 @@ SSI_STATUS_MOTION CSO7_Proto::_write_usb_data_only(int iEP_Base)
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];
ep_buff[iEP_Base]._save_send_cmd2 = ep_buff[iEP_Base]._buffer[3];
//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]);
@@ -6415,6 +6432,62 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_GET_CONTROL_MODE(char axis_type)
ReleaseMutex(g_hEP02_Serial_Mutex);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_MOTION_SEGMENT_DIS(char axis_type,char _SegmentIndex,long _lDis)
{
WaitForSingleObject(g_hEP02_Serial_Mutex, INFINITE);
memset(ep_buff[EP_02_CMD_IDX]._buffer, 0x00, MAX_BUFF_SIZE);
char cBuff(0);
int index(0);
*(ep_buff[EP_02_CMD_IDX]._buffer+index) = CT_MOTOR;
index++;
*(ep_buff[EP_02_CMD_IDX]._buffer+index) = CT_SET_MOTION_SEGMENT_DIS;
index++;
*(ep_buff[EP_02_CMD_IDX]._buffer+index) = axis_type-1;
index++;
*(ep_buff[EP_02_CMD_IDX]._buffer+index) = _SegmentIndex;
index++;
cBuff = (_lDis>>16) & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+index) = cBuff;
index++;
cBuff = (_lDis>>8) & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+index) = cBuff;
index++;
cBuff = _lDis & 0x0ff;
*(ep_buff[EP_02_CMD_IDX]._buffer+index) = cBuff;
index++;
ep_buff[EP_02_CMD_IDX]._size = index;
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_GET_MOTION_SEGMENT_DIS(char axis_type,char _SegmentIndex)
{
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_MOTION_SEGMENT_DIS;
*(ep_buff[EP_02_CMD_IDX]._buffer+2) = axis_type-1;
*(ep_buff[EP_02_CMD_IDX]._buffer+3) = _SegmentIndex;
ep_buff[EP_02_CMD_IDX]._size = 0x04;
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::_process_SO7_CMD_MOVE_X()
{
@@ -6752,7 +6825,18 @@ SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_READ_FIRMWARE_VERSION_INFO()
}
else if (g_machine.FirmwareInfo[3]=='7')
{
g_machine.FirmwareVer=FirmwareVer_7_X;
if (g_machine.FirmwareInfo[5]=='1')
{
g_machine.FirmwareVer=FirmwareVer_7_A;
}
else if (g_machine.FirmwareInfo[5]=='0' && g_machine.FirmwareInfo[6]=='9' )
{
g_machine.FirmwareVer=FirmwareVer_7_9;
}
else
{
g_machine.FirmwareVer=FirmwareVer_7_X;
}
}
else
{
@@ -6836,4 +6920,26 @@ SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_CONTROL_MODE()
{
g_machine.FPGAData = *(ep_buff[EP_82_DATA_IDX]._buffer);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_MOTION_SEGMENT_DIS(BYTE axis_type,BYTE _SegmentIndex)
{
BYTE rBuffer[3] = {0};
rBuffer[0]=*(ep_buff[EP_82_DATA_IDX]._buffer);
rBuffer[1]=*(ep_buff[EP_82_DATA_IDX]._buffer+1);
rBuffer[2]=*(ep_buff[EP_82_DATA_IDX]._buffer+2);
if (axis_type==E_ACTIVE_AXIS_X)
{
g_machine.s_machine_config.x_axis._MotionSegmentDis[_SegmentIndex]=rBuffer[0]*65536+rBuffer[1]*256+rBuffer[2];
}
else if (axis_type==E_ACTIVE_AXIS_Y)
{
g_machine.s_machine_config.y_axis._MotionSegmentDis[_SegmentIndex]=rBuffer[0]*65536+rBuffer[1]*256+rBuffer[2];
}
else
{
g_machine.s_machine_config.z_axis._MotionSegmentDis[_SegmentIndex]=rBuffer[0]*65536+rBuffer[1]*256+rBuffer[2];
}
return SSI_STATUS_MOTION_NORMAL;
}