📄 demodlg.cpp
字号:
//**************X轴驱动********************//
//*************速度设定*******************//
g_CtrlCard.Setup_Speed(1, m_nStartvX, m_nSpeedX, m_nAddX, m_nRatioX);
//*************X轴驱动********************//
g_CtrlCard.Axis_Pmove(1, m_nPulseX);
}
if(m_bY )
{
//**************Y轴驱动********************//
//*************速度设定*******************//
g_CtrlCard.Setup_Speed(2, m_nStartvY, m_nSpeedY, m_nAddY, m_nRatioY);
//*************Y轴驱动********************//
g_CtrlCard.Axis_Pmove(2, m_nPulseY);
}
if(m_bZ )
{
//**************Z轴驱动********************//
//*************速度设定*******************//
g_CtrlCard.Setup_Speed(3, m_nStartvZ, m_nSpeedZ, m_nAddZ, m_nRatioZ);
//*************Z轴驱动********************//
g_CtrlCard.Axis_Pmove(3, m_nPulseZ);
}
if(m_bW )
{
//**************W轴驱动********************//
//*************速度设定*******************//
g_CtrlCard.Setup_Speed(4, m_nStartvW, m_nSpeedW, m_nAddW, m_nRatioW);
//*************W轴驱动********************//
g_CtrlCard.Axis_Pmove(4, m_nPulseW);
}
}
void CDEMODlg::OnButtonInpmove()
{
UpdateData();
long Startv[]={m_nStartvX,m_nStartvY,m_nStartvZ,m_nStartvW}; //初始速度
long Speed[]={m_nSpeedX,m_nSpeedY,m_nSpeedZ,m_nSpeedW}; //驱动速度
long Add[] ={m_nAddX,m_nAddY,m_nAddZ,m_nAddW}; //加速度
long Pulse[]={m_nPulseX,m_nPulseY,m_nPulseZ,m_nPulseW}; //轴的驱动脉冲数
long Ratio[]={m_nRatioX,m_nRatioY,m_nRatioZ,m_nRatioW}; //倍率
/*****************速度设定判断************************
当硬件版本号为1时,须范围设置,决定倍率
初始速度和驱动速度的设置范围为(1×倍率~8000×倍率)
加速度的设置范围为(125×倍率~125×8000×倍率)
可通过修改倍率来改变设置范围
当硬件版本号>1时,无需范围设置
初始速度和驱动速度的设置范围为(1~1M)
加速度的设置范围为(1×125~65536×125)
*****************************************************/
if(g_CtrlCard.m_nHardwareVer==1)
{
for(int i=1; i<MAXAXIS+1; i++)
{
if(Startv[i-1]>8000*Ratio[i-1] || Startv[i-1]<Ratio[i-1])
{
if(MessageBox("起始速度设定超出设定范围,是否重新设置倍率?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
return;
}
if(Speed[i-1]>8000*Ratio[i-1] || Speed[i-1]<Ratio[i-1])
{
if(MessageBox("驱动速度设定超出设定范围,是否重新设置倍率?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
return;
}
if(Add[i-1]>125*8000*Ratio[i-1] || Add[i-1]<Ratio[i-1]*125)
{
if(MessageBox("加速度设定超出设定范围,是否重新设置倍率?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
return;
}
}
}
else
{
for(int i=1; i<MAXAXIS+1; i++)
{
if(Startv[i-1]>1000000 || Startv[i-1]<1)
{
if(MessageBox("起始速度设定超出设定范围,是否重新设置?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
return;
}
if(Speed[i-1]>1000000 || Speed[i-1]<1)
{
if(MessageBox("驱动速度设定超出设定范围,是否重新设置?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
return;
}
if(Add[i-1]>65536*125 || Add[i-1]<125)
{
if(MessageBox("加速度设定超出设定范围,是否重新设置?","提问",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
return;
}
}
}
//*******************两轴插补********************//
if(m_bX && m_bY && !m_bZ && !m_bW) //XY两轴插补
{
g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);
g_CtrlCard.Interp_Move2(1, 2, Pulse[0], Pulse[1]);
}
else if(m_bX && !m_bY && m_bZ && !m_bW) //XZ两轴插补
{
g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);
g_CtrlCard.Interp_Move2(1, 3, Pulse[0], Pulse[2]);
}
else if(m_bX && !m_bY && !m_bZ && m_bW) //XW两轴插补
{
g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);
g_CtrlCard.Interp_Move2(1, 4, Pulse[0], Pulse[3]);
}
else if(!m_bX && m_bY && m_bZ && !m_bW) //YZ两轴插补
{
g_CtrlCard.Setup_Speed(2, Startv[1], Speed[1], Add[1], Ratio[1]);
g_CtrlCard.Interp_Move2(2, 3, Pulse[1], Pulse[2]);
}
else if(!m_bX && m_bY && !m_bZ && m_bW) //YW两轴插补
{
g_CtrlCard.Setup_Speed(2, Startv[1], Speed[1], Add[1], Ratio[1]);
g_CtrlCard.Interp_Move2(2, 4, Pulse[1], Pulse[3]);
}
else if(!m_bX && !m_bY && m_bZ && m_bW) //ZW两轴插补
{
g_CtrlCard.Setup_Speed(3, Startv[2], Speed[2], Add[2], Ratio[2]);
g_CtrlCard.Interp_Move2(3, 4, Pulse[2], Pulse[3]);
}
//*******************三轴插补********************//
else if(m_bX && m_bY && m_bZ && !m_bW) //XYZ三轴插补
{
g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);
g_CtrlCard.Interp_Move3(1, 2, 3, Pulse[0], Pulse[1], Pulse[2]);
}
else if(m_bX && m_bY && m_bZ && !m_bW) //XYZ三轴插补
{
g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);
g_CtrlCard.Interp_Move3(1, 2, 3, Pulse[0], Pulse[1], Pulse[2]);
}
else if(m_bX && m_bY && !m_bZ && m_bW) //XYW三轴插补
{
g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);
g_CtrlCard.Interp_Move3(1, 2, 4, Pulse[0], Pulse[1], Pulse[3]);
}
else if(m_bX && !m_bY && m_bZ && m_bW) //XZW三轴插补
{
g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);
g_CtrlCard.Interp_Move3(1, 3, 4, Pulse[0], Pulse[2], Pulse[3]);
}
else if(!m_bX && m_bY && m_bZ && m_bW) //YZW三轴插补
{
g_CtrlCard.Setup_Speed(2, Startv[1], Speed[1], Add[1], Ratio[1]);
g_CtrlCard.Interp_Move3(2, 3, 4, Pulse[1], Pulse[2], Pulse[3]);
}
//*******************四轴插补********************//
else if(m_bX && m_bY && m_bZ && m_bW) //XYZW四轴插补
{
g_CtrlCard.Setup_Speed(1, Startv[0], Speed[0], Add[0], Ratio[0]);
g_CtrlCard.Interp_Move4(Pulse[0], Pulse[1], Pulse[2], Pulse[3]);
}
else
{
MessageBox("请选择插补轴!","提示");
}
}
/******************************
停止按钮动作
各轴立即停止
*******************************/
void CDEMODlg::OnButtonStop()
{
for (int i = 1; i<MAXAXIS; i++)
{
g_CtrlCard.StopRun(i,0);
}
}
//********************实时获取状态*************************//
// 获取逻辑位置、实际位置、运行速度和驱动状态 //
// 读取正负限位、stop0、stop1信号 //
//*********************************************************//
void CDEMODlg::OnTimer(UINT nIDEvent)
{
long log,act,spd;
UINT nID1[]={IDC_POS_LOGX,IDC_POS_LOGY,IDC_POS_LOGZ,IDC_POS_LOGW};
UINT nID2[]={IDC_POS_ACTX,IDC_POS_ACTY,IDC_POS_ACTZ,IDC_POS_ACTW};
UINT nID3[]={IDC_RUNSPEED_X,IDC_RUNSPEED_Y,IDC_RUNSPEED_Z,IDC_RUNSPEED_W};
UINT nID4[]={m_nRatioX,m_nRatioY,m_nRatioZ,m_nRatioW};
CStatic *lbl;
CString str;
int status[4];
for (int i=1; i<MAXAXIS+1; i++){
g_CtrlCard.Get_CurrentInf(i,log,act,spd); //读取逻辑位置、实际位置和运行速度
//******显示逻辑位置*********//
lbl=(CStatic*)GetDlgItem(nID1[i-1]);
str.Format("%ld",log);
lbl->SetWindowText(str);
//******显示实际位置*********//
lbl=(CStatic*)GetDlgItem(nID2[i-1]);
str.Format("%ld",act);
lbl->SetWindowText(str);
//******显示运行速度*********//
lbl=(CStatic*)GetDlgItem(nID3[i-1]);
if(g_CtrlCard.m_nHardwareVer==1) //硬件版本为1时,实际速度=获取的值×倍率
{
str.Format("%ld",spd*nID4[i-1]);
}
else //硬件版本>1时,无倍率设定,实际速度=获取的值
{
str.Format("%ld",spd);
}
lbl->SetWindowText(str);
//******获取驱动状态*********//
g_CtrlCard.Get_Status(i,status[i-1],0);
}
//***********************信号检测******************************
// X轴正限位-0 X轴负限位-1
// X轴STOP0 -2 X轴STOP1 -3
// Y轴正限位-4 Y轴负限位-5
// Y轴STOP0 -6 Y轴STOP1 -7
// Z轴正限位-8 Z轴负限位-9
// Z轴STOP0 -10 Z轴STOP1 -11
// W轴正限位-12 W轴负限位-13
// W轴STOP0 -14 W轴STOP1 -15
UINT nIDIN[]={ IDC_LIMIT_X,IDC_LIMIT_X2, //X轴正负限位
IDC_STOP0_X,IDC_STOP1_X,
IDC_LIMIT_Y,IDC_LIMIT_Y2, //Y轴正负限位
IDC_STOP0_X,IDC_STOP1_X,
IDC_LIMIT_Z,IDC_LIMIT_Z2, //Z轴正负限位
IDC_STOP0_Z,IDC_STOP1_Z,
IDC_LIMIT_W,IDC_LIMIT_W2, //W轴正负限位
IDC_STOP0_W,IDC_STOP1_W };
CButton *btn;
int value;
for (i=0; i<16; i++)
{
value=g_CtrlCard.Read_Input(i); //读取信号
btn=(CButton*)GetDlgItem(nIDIN[i]);
btn->SetCheck(value==0?1:0);
}
//******************************************************************
CDialog::OnTimer(nIDEvent);
}
void CDEMODlg::OnButtonIotest()
{
CIOTest dlg;
dlg.DoModal();
}
void CDEMODlg::OnButtonBasepara()
{
CBaseParaSet dlg;
dlg.DoModal();
}
void CDEMODlg::OnButtonClearpos()
{
for(int i=1; i<MAXAXIS+1; i++)
{
g_CtrlCard.Setup_Pos(i, 0, 0); //逻辑位置设置为零
g_CtrlCard.Setup_Pos(i, 0, 1); //实际位置设置为零
}
}
void CDEMODlg::OnDelay()
{
if ( g_CtrlCard.m_nHardwareVer ==1)
{
MessageBox("硬件版本号为1时无延时功能");
return;
}
g_CtrlCard.Setup_Delay(m_nDelayTime);
while(true)
{
m_bDelayStatus = true;
if(g_CtrlCard.Get_DelayStatus()==0)
{
m_bDelayStatus = false;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -