⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drvfunctest.cpp

📁 一个很好的VC++程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:

void CDrvFuncTest::OnKillfocusEditPos() 
{
	m_Position = GetDlgItemInt(IDC_EDIT_POS);
}

void CDrvFuncTest::OnKillfocusEditP() 
{
	m_P = GetDlgItemInt(IDC_EDIT_P2);
	if(m_P<0 || m_P>2147483647)
	{
		AfxMessageBox("数据允许的范围是[0,2147483647],请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_P2));
	}
}

void CDrvFuncTest::OnKillfocusEditCompp() 
{
	m_COMPP = GetDlgItemInt(IDC_EDIT_COMPP);
}

void CDrvFuncTest::OnKillfocusEditCompm() 
{
	m_COMPM = GetDlgItemInt(IDC_EDIT_COMPM);
}


void CDrvFuncTest::OnKillfocusEditSv() 
{
	m_SV = GetDlgItemInt(IDC_EDIT_SV);
	if(m_SV<0 || m_SV>4000000)
	{
		AfxMessageBox("数据允许的范围是[0,4000000],请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_SV));
	}
}

void CDrvFuncTest::OnKillfocusEditV() 
{
	m_V = GetDlgItemInt(IDC_EDIT_V);
	if(m_V<0 || m_V>4000000)
	{
		AfxMessageBox("数据允许的范围是[0,4000000],请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_V));
	}
}

void CDrvFuncTest::OnKillfocusEditVaAcc() 
{
	m_VaAcc = GetDlgItemInt(IDC_EDIT_VA_ACC);
	if(m_VaAcc<0 || m_VaAcc>4000000)
	{
		AfxMessageBox("数据允许的范围是[0,4000000],请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_VA_ACC));
	}
}

void CDrvFuncTest::OnKillfocusEditVaDec() 
{
	m_VaDec = GetDlgItemInt(IDC_EDIT_VA_DEC);
	if(m_VaDec<0 || m_VaDec>4000000)
	{
		AfxMessageBox("数据允许的范围是[0,4000000],请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_VA_DEC));
	}
}

void CDrvFuncTest::OnKillfocusEditAo() 
{
	m_AO = GetDlgItemInt(IDC_EDIT_AO);
	g_AO = m_AO;
}

void CDrvFuncTest::OnKillfocusEditAccTime() 
{
	CString str;
	GetDlgItemText(IDC_EDIT_ACC_TIME,str);
	m_AccTime = atof(str);
	if(m_AccTime<0 )
	{
		AfxMessageBox("数据不能小于0,请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_ACC_TIME));
	}
}

void CDrvFuncTest::OnKillfocusEditDecTime() 
{
	CString str;
	GetDlgItemText(IDC_EDIT_DEC_TIME,str);
	m_DecTime = atof(str);
	if(m_DecTime<0 )
	{
		AfxMessageBox("数据不能小于0,请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_DEC_TIME));
	}
}

void CDrvFuncTest::OnUpdateV() 
{
	m_strTXDataCOM1.Empty();
	WriteParam( 5, m_V, CurrentAxis );
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);

}


void CDrvFuncTest::OnUpdateLpEp() 
{
	m_strTXDataCOM1.Empty();
	WriteParam( 9, m_LP, (CurrentAxis==0), (CurrentAxis==1), (CurrentAxis==2), (CurrentAxis==3) );
	WriteParam(10, m_LP, (CurrentAxis==0), (CurrentAxis==1), (CurrentAxis==2), (CurrentAxis==3) );
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CDrvFuncTest::OnReadLpep() 
{
	m_LP = pMonitorAxis[0]->GetLP(CurrentAxis);
	SetDlgItemInt(IDC_EDIT_LP,m_LP,1);
}

void CDrvFuncTest::OnUpdateCompp() 
{
	m_strTXDataCOM1.Empty();
	WriteParam(11, m_COMPP, (CurrentAxis==0), (CurrentAxis==1), (CurrentAxis==2), (CurrentAxis==3) );
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CDrvFuncTest::OnUpdateCompm() 
{
	m_strTXDataCOM1.Empty();
	WriteParam(12, m_COMPM, (CurrentAxis==0), (CurrentAxis==1), (CurrentAxis==2), (CurrentAxis==3) );
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CDrvFuncTest::OnUpdateP2() 
{
	m_strTXDataCOM1.Empty();
	WriteParam( 6, m_P, (CurrentAxis==0), (CurrentAxis==1), (CurrentAxis==2), (CurrentAxis==3) );
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CDrvFuncTest::OnUpdatePos() 
{
	int NewP;
	m_strTXDataCOM1.Empty();
	NewP = max(0, m_Position - m_LP);
	WriteParam( 6, NewP, (CurrentAxis==0), (CurrentAxis==1), (CurrentAxis==2), (CurrentAxis==3) );
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}



void CDrvFuncTest::OnStart() 
{
	CString str;
	int m_Vsacc;
	int m_P_signed;

	m_strTXDataCOM1.Empty();

	WriteParam ( LP_ADDR,  m_LP    ,CurrentAxis );
	WriteParam ( EP_ADDR,  m_LP    ,CurrentAxis );
	WriteParam ( CP_ADDR,  m_COMPP ,CurrentAxis );
	WriteParam ( CM_ADDR,  m_COMPM ,CurrentAxis );
	WriteParam ( AO_ADDR,  m_AO    ,CurrentAxis );

	if(m_Direction==DIR_NEG)
	{
		m_P_signed = - m_P;   //(mp为输出脉冲数)
	}
	else
	{
		m_P_signed =   m_P;
	}
	

	if(m_AccType==ACC_TYPE_FULL_S)//完全S曲线
		m_Vsacc = 0;
	else if(m_VaAcc<((m_SV+m_V)/2))  //S加速末速
		m_Vsacc = m_VaAcc;
	else
		m_Vsacc = 0;

	if(m_V < m_SV )  m_SV = m_V;


    if(m_DrvType==DRV_TYPE_C)
	{
		if( m_ExppEn )   //外部脉冲驱动
			SetExop (1, CurrentAxis );
		else
			SetExop (0, CurrentAxis );

		if(m_AccType==ACC_TYPE_FULL_S || m_AccType==ACC_TYPE_PART_S)
			sv_move(CurrentAxis,m_SV,m_V,m_AccTime,m_Vsacc,m_Direction);
		else if(m_AccType==ACC_TYPE_T)
			tv_move(CurrentAxis,m_SV,m_V,m_AccTime,m_Direction);
		else if(m_AccType==ACC_TYPE_CV)
			cv_move(CurrentAxis,m_V,m_Direction);
	}
	else
	{
		if( m_ExppEn && m_PulsarEn)
		{
			SetExop (3, CurrentAxis );
		}
		else if( m_ExppEn )
		{
			SetExop (2, CurrentAxis );
		}
		else
		{
			SetExop (0, CurrentAxis );
		}

		if(m_AccType==ACC_TYPE_FULL_S || m_AccType==ACC_TYPE_PART_S)
		{
			if(m_PosType==POS_TYPE_ABS) //绝对位置
				start_sa_move(CurrentAxis,m_Position,m_SV,m_V,m_AccTime,m_DecTime,m_Vsacc,m_VaDec);
			else
				start_sr_move(CurrentAxis,m_P_signed,m_SV,m_V,m_AccTime,m_DecTime,m_Vsacc,m_VaDec);
		}
		else if(m_AccType==ACC_TYPE_T)
		{
			if(m_PosType==POS_TYPE_ABS)
				start_ta_move(CurrentAxis,m_Position,m_SV,m_V,m_AccTime,m_DecTime);
			else
				start_tr_move(CurrentAxis,m_P_signed,m_SV,m_V,m_AccTime,m_DecTime);
		}
		else if(m_AccType==ACC_TYPE_CV)
		{
			if(m_PosType==POS_TYPE_ABS)
				start_ca_move(CurrentAxis,m_Position,m_V);
			else
				start_cr_move(CurrentAxis,m_P_signed,m_V);
		}
	}

	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
	

}


BOOL CDrvFuncTest::OnInitDialog() 
{
	CDialog::OnInitDialog();
		
	CRect rect;
	GetClientRect(&rect);
	MoveWindow(270,130,rect.Width() + 15,rect.Height() + 35,TRUE);
	
	// TODO: Add extra initialization here
	GetDlgItem(IDC_STATIC_POS)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_POS)->EnableWindow(FALSE);

	GetDlgItem(IDC_UPDATE_POS)->EnableWindow(FALSE);
	GetDlgItem(IDC_STATIC_SV)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_SV)->EnableWindow(FALSE);

	GetDlgItem(IDC_STATIC_ACC_TIME)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_ACC_TIME)->EnableWindow(FALSE);

	GetDlgItem(IDC_STATIC_DEC_TIME)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_DEC_TIME)->EnableWindow(FALSE);

	GetDlgItem(IDC_STATIC_VA_ACC)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_VA_ACC)->EnableWindow(FALSE);

	GetDlgItem(IDC_STATIC_VA_DEC)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_VA_DEC)->EnableWindow(FALSE);
	
	GetDlgItem(IDC_STATIC_AO)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_AO)->EnableWindow(FALSE);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


void CDrvFuncTest::OnDsstop() 
{
	m_strTXDataCOM1.Empty();
	pMonitorAxis[0]->SpeedDownStop();	
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CDrvFuncTest::OnImstop() 
{
	m_strTXDataCOM1.Empty();
	pMonitorAxis[0]->EmergencyStop();	
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CDrvFuncTest::OnHome() 
{
	m_strTXDataCOM1.Empty();
	pMonitorAxis[0]->GoHome();	
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CDrvFuncTest::OnCheckAutoDec() 
{
	m_AutoDec = ! m_AutoDec;
	g_AutoDec = m_AutoDec;

	GetDlgItem(IDC_EDIT_DEC_TIME)->EnableWindow(!m_AutoDec);
	GetDlgItem(IDC_STATIC_DEC_TIME)->EnableWindow(!m_AutoDec);
}

void CDrvFuncTest::OnCheckPulsar() 
{
	m_PulsarEn = ! m_PulsarEn;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -