新增X、Y、Z轴运动模式可设置开环或闭环。

This commit is contained in:
TAO Cheng
2014-07-24 18:19:56 +08:00
parent d64816b286
commit ae262c9015
8 changed files with 150 additions and 44 deletions
@@ -360,6 +360,14 @@ enum PRO_DATA
CT_SET_TRIG_SAMPLE_CNT,
CT_GET_TRIG_SAMPLE_CNT,
CT_READ_X_CONTROL_MODE,
CT_WRITE_X_CONTROL_MODE,
CT_READ_Y_CONTROL_MODE,
CT_WRITE_Y_CONTROL_MODE,
CT_READ_Z_CONTROL_MODE,
CT_WRITE_Z_CONTROL_MODE,
CT_DATA_TOTAL=255
};
enum EHOME_MODE
@@ -254,7 +254,11 @@ void CSO7_Proto::_process_rcv_transfer_data(int iEP)
case CT_WRITE_TRIG_PULSE_PARA:
_process_SO7_CMD_WRITE_TRIG_PULSE_PARA();
break;
case CT_READ_X_CONTROL_MODE:
case CT_READ_Y_CONTROL_MODE:
case CT_READ_Z_CONTROL_MODE:
_process_SO7_CMD_GET_CONTROL_MODE();
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]);
@@ -6349,6 +6353,69 @@ SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_GET_MOTION_CNTS(char _Speedgear)
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
SSI_STATUS_MOTION CSO7_Proto::_send_cmd_SO7_CMD_SET_CONTROL_MODE(char axis_type,char ControlMode)
{
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;
char cCMD(0);
if(axis_type==E_AXIS_X)
{
cCMD=CT_WRITE_X_CONTROL_MODE;
}
else if(axis_type==E_AXIS_Y)
{
cCMD=CT_WRITE_Y_CONTROL_MODE;
}
else
{
cCMD=CT_WRITE_Z_CONTROL_MODE;
}
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = cCMD;
*(ep_buff[EP_02_CMD_IDX]._buffer+2)= ControlMode;
ep_buff[EP_02_CMD_IDX]._size = 0x05;
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_CONTROL_MODE(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_DATA;
char cCMD(0);
if(axis_type==E_AXIS_X)
{
cCMD=CT_READ_X_CONTROL_MODE;
}
else if(axis_type==E_AXIS_Y)
{
cCMD=CT_READ_Y_CONTROL_MODE;
}
else
{
cCMD=CT_READ_Z_CONTROL_MODE;
}
*(ep_buff[EP_02_CMD_IDX]._buffer+1) = cCMD;
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::_process_SO7_CMD_MOVE_X()
{
@@ -6764,3 +6831,9 @@ SSI_STATUS_MOTION CSO7_Proto::_process_SO7_CMD_GET_MOTION_CNTS()
g_machine.Arm_MotionStopCnts[index]=*(ep_buff[EP_82_DATA_IDX]._buffer+2);
return SSI_STATUS_MOTION_NORMAL;
}
//==============================================================
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;
}
@@ -574,7 +574,8 @@ public:
SSI_STATUS_MOTION _send_cmd_SO7_CMD_IO_PURPOSE(BOOL _bEnTrigIO);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_MOTION_CNTS(char _Speedgear,char _StartCnts,char _StopCnts);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_MOTION_CNTS(char _Speedgear=0);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_SET_CONTROL_MODE(char axis_type,char ControlMode);
SSI_STATUS_MOTION _send_cmd_SO7_CMD_GET_CONTROL_MODE(char axis_type);
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_X();
static SSI_STATUS_MOTION _process_SO7_CMD_MOVE_Y();
@@ -616,7 +617,7 @@ public:
static SSI_STATUS_MOTION _process_SO7_CMD_READ_TRIG_PULSE_PARA();
static SSI_STATUS_MOTION _process_SO7_CMD_WRITE_TRIG_PULSE_PARA();
static SSI_STATUS_MOTION _process_SO7_CMD_GET_MOTION_CNTS();
static SSI_STATUS_MOTION _process_SO7_CMD_GET_CONTROL_MODE();
};
#endif
@@ -4750,3 +4750,8 @@ Usb Port Initialized.
Usb Port Initialized.
Usb Port Initialized.
Usb Port Initialized.
Usb Port Initialized.
Usb Port Initialized.
Usb Port Initialized.
Usb Port Initialized.
Usb Port Initialized.
@@ -11,41 +11,41 @@ MOVETOSPEED_FAST_Z=0.00000000
MOVETOSPEED_SLOW_Z=0.00000000
MOVETOSPEED_SCALE_Z=1.00000000
;
SPEED_BASE_X1=50
SPEED_BASE_X1=28
SPEED_MAX_X1=30
SPEED_START_X1=20
SPEED_FRESH_X1=7
SPEED_SLOW_X1=3.500
SPEED_FRESH_X1=8
SPEED_SLOW_X1=3.000
;
SPEED_BASE_X2=16
SPEED_MAX_X2=10
SPEED_START_X2=12
SPEED_FRESH_X2=10
SPEED_SLOW_X2=0.100
SPEED_SLOW_X2=2.000
;
SPEED_BASE_X3=2
SPEED_MAX_X3=0
SPEED_START_X3=0
SPEED_FRESH_X3=10
SPEED_FRESH_X3=100
SPEED_SLOW_X3=0.001
;
SPEED_BASE_X4=2
SPEED_MAX_X4=0
SPEED_START_X4=5
SPEED_FRESH_X4=10
SPEED_FRESH_X4=100
SPEED_SLOW_X4=0.001
;
SPEED_BASE_X5=2
SPEED_MAX_X5=0
SPEED_START_X5=50
SPEED_FRESH_X5=10
SPEED_FRESH_X5=100
SPEED_SLOW_X5=0.000
;
SPEED_BASE_Y1=60
SPEED_BASE_Y1=20
SPEED_MAX_Y1=10
SPEED_START_Y1=20
SPEED_FRESH_Y1=8
SPEED_SLOW_Y1=3.000
SPEED_SLOW_Y1=2.000
;
SPEED_BASE_Y2=16
SPEED_MAX_Y2=10
@@ -56,20 +56,20 @@ SPEED_SLOW_Y2=1.000
SPEED_BASE_Y3=2
SPEED_MAX_Y3=0
SPEED_START_Y3=0
SPEED_FRESH_Y3=10
SPEED_FRESH_Y3=100
SPEED_SLOW_Y3=0.001
;
SPEED_BASE_Y4=2
SPEED_MAX_Y4=0
SPEED_START_Y4=10
SPEED_FRESH_Y4=10
SPEED_FRESH_Y4=100
SPEED_SLOW_Y4=0.001
;
SPEED_BASE_Y5=60
SPEED_MAX_Y5=10
SPEED_START_Y5=20
SPEED_FRESH_Y5=8
SPEED_SLOW_Y5=3.000
SPEED_BASE_Y5=2
SPEED_MAX_Y5=0
SPEED_START_Y5=50
SPEED_FRESH_Y5=100
SPEED_SLOW_Y5=0.000
;
SPEED_BASE_Z1=20
SPEED_MAX_Z1=100
@@ -86,28 +86,28 @@ SPEED_SLOW_Z2=1.500
SPEED_BASE_Z3=3
SPEED_MAX_Z3=5
SPEED_START_Z3=5
SPEED_FRESH_Z3=10
SPEED_FRESH_Z3=100
SPEED_SLOW_Z3=0.001
;
SPEED_BASE_Z4=2
SPEED_MAX_Z4=0
SPEED_START_Z4=18
SPEED_FRESH_Z4=10
SPEED_FRESH_Z4=100
SPEED_SLOW_Z4=0.001
;
SPEED_BASE_Z5=2
SPEED_MAX_Z5=6
SPEED_START_Z5=133
SPEED_FRESH_Z5=10
SPEED_FRESH_Z5=100
SPEED_SLOW_Z5=0.000
;
X_MOTOR_PRECISION=0.008
Y_MOTOR_PRECISION=0.004
Y_MOTOR_PRECISION=0.009
Z_MOTOR_PRECISION=0.004
;
X_MOTOR_WHEELBASE=3.047
Y_MOTOR_WHEELBASE=2.971
Z_MOTOR_WHEELBASE=1.500
X_MOTOR_WHEELBASE=1.875
Y_MOTOR_WHEELBASE=1.875
Z_MOTOR_WHEELBASE=1.000
;
MOTOR_PULSE_NUM=10000
;
@@ -218,7 +218,7 @@ BOOL CSO7_Send_Parameter::OnInitDialog()
((CButton *)GetDlgItem(IDC_RADIO_CANVAS_SPEED_TIME))->SetCheck(true);
if (m_pSO7_Proto->g_machine.FirmwareVer>=FirmwareVer_6_X)
{
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA1))->SetWindowTextW(_T("¼ÓËÙ¶È(0-255)"));
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA1))->SetWindowTextW(_T("¼Ó¼õËÙ¶È(0-255)"));
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA2))->SetWindowTextW(_T("缓冲距离(0-255)"));
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA3))->SetWindowTextW(_T("最低速率(0-255)"));
((CStatic *)GetDlgItem(IDC_STATIC_SPEED_PARA4))->SetWindowTextW(_T("刷新周期(0-255)"));
@@ -191,7 +191,7 @@ BOOL CSO7_UtilDlg::OnInitDialog()
((CButton *)GetDlgItem(IDC_RADIO_READ_OUTPUT_PORT2))->SetCheck(false);
m_ReadIOStatusAddr=ESO7_CONTROLLER_LIMIT_SWITCH_ADDR;
UpdateIOAddrCaption();
CString csTmp=_T("");
((CComboBox *)GetDlgItem(IDC_COMBO_OUTPORT_NUMBER))->ResetContent();
int iComboxIndex(0);
@@ -210,38 +210,42 @@ BOOL CSO7_UtilDlg::OnInitDialog()
((CComboBox *)GetDlgItem(IDC_COMBO_OUTPORT_NUMBER))->SetCurSel(0);
((CComboBox *)GetDlgItem(IDC_COMBO_RWDATA_ADDR))->ResetContent();
for(int i=0;i<16;i++)
int nIndex=0;
for( nIndex=0;nIndex<16;nIndex++)
{
if (i==9)
if (nIndex==9)
{
csTmp=_T("Flags");
}
else if (i==10)
else if (nIndex==10)
{
csTmp=_T("TrigLSB");
}
else if (i==11)
else if (nIndex==11)
{
csTmp=_T("AccErr");
}
else if (i==12)
else if (nIndex==12)
{
csTmp=_T("TrigMSBI");
}
else if (i==13)
else if (nIndex==13)
{
csTmp=_T("TrigMSBII");
}
else if (i==14)
else if (nIndex==14)
{
csTmp=_T("TrigHoldTime");
}
else
{
csTmp.Format(_T("%d"),i);
csTmp.Format(_T("%d"),nIndex);
}
((CComboBox *)GetDlgItem(IDC_COMBO_RWDATA_ADDR))->InsertString(i,csTmp);
((CComboBox *)GetDlgItem(IDC_COMBO_RWDATA_ADDR))->InsertString(nIndex,csTmp);
}
csTmp=_T("ControlMode");
((CComboBox *)GetDlgItem(IDC_COMBO_RWDATA_ADDR))->InsertString(nIndex,csTmp);
((CComboBox *)GetDlgItem(IDC_COMBO_RWDATA_ADDR))->SetCurSel(10);
GetDlgItem(IDC_EDIT_RWDATA_DATA)->SetWindowTextW(_T("0"));
@@ -347,7 +351,7 @@ void CSO7_UtilDlg::UpdateCtrlsStatus(bool _bEnable)
GetDlgItem(IDC_CHECK_CONTINUOUS_READ_IO_STATUS)->EnableWindow(_bEnable);
GetDlgItem(IDC_BUTTON_SO7_TEST_Z_SIGNAL)->EnableWindow(_bEnable);
GetDlgItem(IDC_BUTTON_S07_SET_IO_PURPOSE)->EnableWindow(_bEnable);
GetDlgItem(IDC_EDIT_SET_VER_NO)->EnableWindow(_bEnable);
GetDlgItem(IDC_BUTTON_SO7_CNC_PROGRAM)->EnableWindow(_bEnable);
GetDlgItem(IDC_BUTTON_SO7_SENDDATATOFPGA)->EnableWindow(_bEnable);
@@ -360,14 +364,14 @@ void CSO7_UtilDlg::UpdateCtrlsStatus(bool _bEnable)
GetDlgItem(IDC_CHECK_SO7_RING_LIGHT_SEG_ON2)->EnableWindow(_bEnable);
GetDlgItem(IDC_CHECK_SO7_COAXIAL_LIGHT_ON)->EnableWindow(_bEnable);
GetDlgItem(IDC_CHECK_SO7_SPARE_LIGHT_ON)->EnableWindow(_bEnable);
GetDlgItem(IDC_BUTTON_SO7_EXTERNAL_TRIG)->EnableWindow(_bEnable);
GetDlgItem(IDC_EDIT_SET_SEQ_NO)->EnableWindow(_bEnable);
GetDlgItem(IDC_BUTTON_SO7_GET_SEQ_NUMBER)->EnableWindow(_bEnable);
GetDlgItem(IDC_BUTTON_SO7_SET_SEQ_NUMBER)->EnableWindow(_bEnable);
GetDlgItem(IDC_BUTTON_SO7_SET_VER_NUMBER)->EnableWindow(_bEnable);
GetDlgItem(IDC_BUTTON_SET_SCALE_COEFFICIENT)->EnableWindow(_bEnable);
}
//=====================================================================
@@ -421,7 +425,7 @@ void CSO7_UtilDlg::OnBnClickedButtonStartSo7machine()
OnBnClickedButtonInitSo7usb();
if(XBoxPlayer->IsConnected())
{
XBoxPlayer->XBoxControllerInit();
XBoxPlayer->XBoxControllerInit();
m_OutMessage=_T("XBoxController has connected.");
OutputWithScroll(m_OutMessage,m_edMSG);
}
@@ -437,7 +441,7 @@ void CSO7_UtilDlg::OnBnClickedButtonStartSo7machine()
if(m_pSO7_Proto->g_machine.IsSupportReadInterrputMsg)
{
m_pSO7_Proto->_send_cmd_SO7_CMD_READ_FIRMWARE_VERSION_INFO();
m_pSO7_Proto->_send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(E_AXIS_V,9);
char cData[2]={0};
cData[0]=(m_pSO7_Proto->g_machine.FPGAData>>4)&0x0f;
@@ -1197,7 +1201,15 @@ void CSO7_UtilDlg::OnBnClickedButtonSo7Senddatatofpga()
GetDlgItem(IDC_EDIT_RWDATA_DATA)->GetWindowText(str);
const char* cTempValue=T2A(str);
char cTmpData= static_cast<char>(atoi(cTempValue));
m_pSO7_Proto->_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(m_RWDataAxis,m_RWDataAddr,cTmpData);
if(m_RWDataAddr==16)
{
m_pSO7_Proto->_send_cmd_SO7_CMD_SET_CONTROL_MODE(m_RWDataAxis,cTmpData);
m_pSO7_Proto->g_machine.FPGAData=1;
}
else
{
m_pSO7_Proto->_send_cmd_SO7_CMD_WRITE_DATA_TO_FPGA(m_RWDataAxis,m_RWDataAddr,cTmpData);
}
if (m_pSO7_Proto->g_machine.FPGAData>0)
{
m_OutMessage=_T("Write data successful.");
@@ -1213,7 +1225,14 @@ void CSO7_UtilDlg::OnBnClickedButtonSo7Senddatatofpga()
//================================================================================================
void CSO7_UtilDlg::OnBnClickedButtonSo7Readdatafromfpga()
{
m_pSO7_Proto->_send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(m_RWDataAxis,m_RWDataAddr);
if(m_RWDataAddr==16)
{
m_pSO7_Proto->_send_cmd_SO7_CMD_GET_CONTROL_MODE(m_RWDataAxis);
}
else
{
m_pSO7_Proto->_send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(m_RWDataAxis,m_RWDataAddr);
}
m_OutMessage.Format(_T("[Read]Data=%d ."),(BYTE)m_pSO7_Proto->g_machine.FPGAData);
OutputWithScroll(m_OutMessage,m_edMSG);
}