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

📄 iplfunctest.cpp

📁 一个很好的VC++程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	CheckDlgButton(IDC_CHECK_AUTO_DEC, BST_UNCHECKED); 
	OnCheckAutoDec();
	GetDlgItem(IDC_CHECK_AUTO_DEC)->EnableWindow(FALSE);
}

void CIPLFuncTest::OnArctypeCw() 
{
	m_ArcType = ARC_TYPE_CW;
}

void CIPLFuncTest::OnArctypeCcw() 
{
	m_ArcType = ARC_TYPE_CCW;
}

void CIPLFuncTest::OnAcctypeCv() 
{
	m_AccType = ACC_TYPE_CV;

	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_VSACC)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_VSACC)->EnableWindow(FALSE);

	GetDlgItem(IDC_STATIC_VSDEC)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_VSDEC)->EnableWindow(FALSE);
}

void CIPLFuncTest::OnAcctypeT() 
{
	m_AccType = ACC_TYPE_T;

	GetDlgItem(IDC_STATIC_SV)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDIT_SV)->EnableWindow(TRUE);

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

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

	GetDlgItem(IDC_STATIC_VSACC)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_VSACC)->EnableWindow(FALSE);

	GetDlgItem(IDC_STATIC_VSDEC)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_VSDEC)->EnableWindow(FALSE);
}

void CIPLFuncTest::OnAcctypeS() 
{
	m_AccType = ACC_TYPE_FULL_S;

	GetDlgItem(IDC_STATIC_SV)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDIT_SV)->EnableWindow(TRUE);

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

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

	GetDlgItem(IDC_STATIC_VSACC)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_VSACC)->EnableWindow(FALSE);

	GetDlgItem(IDC_STATIC_VSDEC)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_VSDEC)->EnableWindow(FALSE);
}

void CIPLFuncTest::OnAcctypePartS() 
{
	m_AccType = ACC_TYPE_PART_S;

	GetDlgItem(IDC_STATIC_SV)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDIT_SV)->EnableWindow(TRUE);

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

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

	GetDlgItem(IDC_STATIC_VSACC)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDIT_VSACC)->EnableWindow(TRUE);

	GetDlgItem(IDC_STATIC_VSDEC)->EnableWindow(FALSE);
	GetDlgItem(IDC_EDIT_VSDEC)->EnableWindow(FALSE);
}

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

void CIPLFuncTest::OnKillfocusEditV() 
{
	m_V = GetDlgItemInt(IDC_EDIT_V);
	if(m_V<0 || m_V>4000000)
	{
		AfxMessageBox("数据允许的范围是[0,4000000],请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_V));
	}
/*
	else
	{
		if(m_AccType==ACC_TYPE_CV)
		{
			m_SV = m_V;
			SetDlgItemInt(IDC_EDIT_SV,m_V,1);
		}
	}
*/
}

void CIPLFuncTest::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));
	}
/*
	else
	{
		if(m_AccType==ACC_TYPE_FULL_S || m_AccType==ACC_TYPE_PART_S)
		{
			m_DecTime = m_AccTime;
			SetDlgItemText(IDC_EDIT_DEC_TIME,str);
		}
		else if(m_AccType==ACC_TYPE_CV)
		{
			SetDlgItemInt(IDC_EDIT_DEC_TIME,0,0);
		}
	}
*/
}

void CIPLFuncTest::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 CIPLFuncTest::OnKillfocusEditVsacc() 
{
	m_Vsacc = GetDlgItemInt(IDC_EDIT_VSACC);

	if(m_Vsacc<0 || m_Vsacc>4000000)
	{
		AfxMessageBox("数据允许的范围是[0,4000000],请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_VSACC));
	}
}

void CIPLFuncTest::OnKillfocusEditVsdec() 
{
	m_Vsdec = GetDlgItemInt(IDC_EDIT_VSDEC);

	if(m_Vsdec<0 || m_Vsdec>4000000)
	{
		AfxMessageBox("数据允许的范围是[0,4000000],请重新输入");
		GotoDlgCtrl(GetDlgItem(IDC_EDIT_VSDEC));
	}
}


void CIPLFuncTest::OnDeltaposSpinCiplSegNo(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here
	
	int LastSegIndex = m_CiplSegIndex;

	if(pNMUpDown->iDelta==1)
	{
		if(m_CiplSegIndex > 1 )
			m_CiplSegIndex -= 1;
	}
	else if(pNMUpDown->iDelta==-1)
	{
		if(m_CiplSegIndex < CIPL_SEG_MAX-1 )
			m_CiplSegIndex += 1;
	}

	SetDlgItemInt(IDC_EDIT_CIPL_SEG_NR, m_CiplSegIndex, 0);

	if(	m_CiplSegIndex != LastSegIndex )
		CiplChangeSegment(LastSegIndex);

	*pResult = 0;
}

void CIPLFuncTest::CiplChangeSegment(int LastSegIndex) 
{
	// Save current segment data
	m_P1Array[LastSegIndex] = m_P1;
	m_P2Array[LastSegIndex] = m_P2;
	m_P3Array[LastSegIndex] = m_P3;
	m_P4Array[LastSegIndex] = m_P4;
	m_C1Array[LastSegIndex] = m_C1;
	m_C2Array[LastSegIndex] = m_C2;
	m_Ax3EnArray[LastSegIndex] = m_Ax3En;
	m_Ax4EnArray[LastSegIndex] = m_Ax4En;
	m_IplTypeArray[LastSegIndex] = m_IplType;
	m_ArcTypeArray[LastSegIndex] = m_ArcType;
	m_AxisSelArray[LastSegIndex][0] = m_AxisSel[0];
	m_AxisSelArray[LastSegIndex][1] = m_AxisSel[1];
	m_AxisSelArray[LastSegIndex][2] = m_AxisSel[2];
	m_AxisSelArray[LastSegIndex][3] = m_AxisSel[3];

	// restore next segment data
	m_P1 = m_P1Array[m_CiplSegIndex];
	m_P2 = m_P2Array[m_CiplSegIndex];
	m_P3 = m_P3Array[m_CiplSegIndex];
	m_P4 = m_P4Array[m_CiplSegIndex];
	m_C1 = m_C1Array[m_CiplSegIndex];
	m_C2 = m_C2Array[m_CiplSegIndex];
	m_Ax3En = m_Ax3EnArray[m_CiplSegIndex];
	m_Ax4En = m_Ax4EnArray[m_CiplSegIndex];
	m_IplType = m_IplTypeArray[m_CiplSegIndex];
	m_ArcType = m_ArcTypeArray[m_CiplSegIndex];
	m_AxisSel[0] = m_AxisSelArray[m_CiplSegIndex][0];
	m_AxisSel[1] = m_AxisSelArray[m_CiplSegIndex][1];
	m_AxisSel[2] = m_AxisSelArray[m_CiplSegIndex][2];
	m_AxisSel[3] = m_AxisSelArray[m_CiplSegIndex][3];

	
	// Draw GUI element by new segment data
	OnInitDialog();

	GetDlgItem(IDC_COMBO_AX1)->EnableWindow(m_CiplSegIndex==1);
}


void CIPLFuncTest::OnDeltaposSpinCiplSegCnt(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here

	if(pNMUpDown->iDelta==1)
	{
		if(m_CiplSegCount > 1 )
			m_CiplSegCount -= 1;
	}
	else if(pNMUpDown->iDelta==-1)
	{
		if(m_CiplSegCount < CIPL_SEG_MAX-1 )
			m_CiplSegCount += 1;
	}

	SetDlgItemInt(IDC_EDIT_CIPL_SEG_CNT, m_CiplSegCount, 0);
	
	*pResult = 0;
}

void CIPLFuncTest::OnChangeEditCiplSegNr() 
{
	int LastSegIndex = m_CiplSegIndex;

	m_CiplSegIndex = GetDlgItemInt(IDC_EDIT_CIPL_SEG_NR);

	if(m_CiplSegIndex<1)
	{
		m_CiplSegIndex = 1;
		SetDlgItemInt(IDC_EDIT_CIPL_SEG_NR, m_CiplSegIndex, 0);
	}
	else if(m_CiplSegIndex>CIPL_SEG_MAX-1)
	{
		m_CiplSegIndex = CIPL_SEG_MAX-1;
		SetDlgItemInt(IDC_EDIT_CIPL_SEG_NR, m_CiplSegIndex, 0);
	}

	if(	m_CiplSegIndex != LastSegIndex )
		CiplChangeSegment(LastSegIndex);

}

void CIPLFuncTest::OnChangeEditCiplSegCnt() 
{
	m_CiplSegCount = GetDlgItemInt(IDC_EDIT_CIPL_SEG_CNT);	

	if(m_CiplSegCount<1)
	{
		m_CiplSegCount = 1;
		SetDlgItemInt(IDC_EDIT_CIPL_SEG_CNT, m_CiplSegCount, 0);
	}
	else if(m_CiplSegCount>CIPL_SEG_MAX-1)
	{
		m_CiplSegCount = CIPL_SEG_MAX-1;
		SetDlgItemInt(IDC_EDIT_CIPL_SEG_CNT, m_CiplSegCount, 0);
	}
}

int  CIPLFuncTest::IplCalcDP(int seg)
{
	int DP,DP0,P;
	float DecTime;
	CString str;
	
	if(m_AccType == ACC_TYPE_T)
		DecTime = m_DecTime;
	else
		DecTime = m_AccTime;

	DP0 = (m_SV + m_V)* DecTime/2;

	if(m_IplTypeArray[seg]==IPL_TYPE_ARC)
	{
		P = ArcLength(m_C1Array[seg], m_C2Array[seg], m_P1Array[seg], m_P2Array[seg], m_ArcTypeArray[seg]);
	}
	else if(m_IplTypeArray[seg]==IPL_TYPE_BP)
	{
		P = 0;		// Temp, no down speed
	}
	else
	{
		if(m_Ax4EnArray[seg])
			P = max(max(abs(m_P1Array[seg]),abs(m_P2Array[seg])),max(abs(m_P3Array[seg]),abs(m_P4Array[seg])));
		else if(m_Ax3EnArray[seg])
			P = max(max(abs(m_P1Array[seg]),abs(m_P2Array[seg])),abs(m_P3Array[seg]) );
		else
			P = max( abs(m_P1Array[seg]),abs(m_P2Array[seg]) );
	}

	DP = P - DP0;
	if(DP < 0)
		DP = 0;


	return DP;
}

LONG CIPLFuncTest::OnSm5kCnextValid(WPARAM wData, LPARAM lData)
{
	int m_WR5;
	int m_WR5_LowByte;

	if(m_CiplCurrentSeg < m_CiplSegCount)
	{
		m_CiplCurrentSeg++;

		m_strTXDataCOM1.Empty();

		int m_Lspd = m_LspdEn? m_LspdType : 0;

		if(ChipSel==2)
		{
			m_WR5_LowByte = chip.GetWR5() & 0x00ff;
			m_WR5 = 
				(m_BpiplIEn	 <<15) + 
				(m_CiplIEn	 <<14) + 
				(m_CmdStepEn <<13) + 
				(m_PlsStepEn <<12) + 
				(m_Lspd      << 8) +
				m_WR5_LowByte; 
		}
		else
		{
			m_WR5 = 
				(m_BpiplIEn	 <<15) + 
				(m_CiplIEn	 <<14) + 
				(m_Ax4En	 <<13) + 
				(m_CmdStepEn <<12) + 
				(m_PlsStepEn <<11) + 
				(m_Lspd      << 8) + 
				(m_AxisSel[3]<< 6) + 
				(m_AxisSel[2]<< 4) + 
				(m_AxisSel[1]<< 2) + 
				 m_AxisSel[0]      ; 
		}


		WriteReg( 5, m_WR5 );

		if(m_CiplCurrentSeg==m_CiplSegCount)		// Last segment
		{
			WriteParam ( DP_ADDR, IplCalcDP(m_CiplCurrentSeg), m_AxisSel[0]);
			SendDriveCommand( 0x3B, 0, 0, 0, 0 );	// DS_Valid
		}

		if(m_IplTypeArray[m_CiplCurrentSeg]==IPL_TYPE_LINE)
		{
			if(m_Ax4EnArray[m_CiplCurrentSeg])
				inp_line4(m_AxisSelArray[m_CiplCurrentSeg], m_P1Array[m_CiplCurrentSeg], m_P2Array[m_CiplCurrentSeg], m_P3Array[m_CiplCurrentSeg], m_P4Array[m_CiplCurrentSeg] );
			else if(m_Ax3EnArray[m_CiplCurrentSeg])
				inp_line3(m_AxisSelArray[m_CiplCurrentSeg], m_P1Array[m_CiplCurrentSeg], m_P2Array[m_CiplCurrentSeg], m_P3Array[m_CiplCurrentSeg] );
			else
				inp_line2(m_AxisSelArray[m_CiplCurrentSeg], m_P1Array[m_CiplCurrentSeg], m_P2Array[m_CiplCurrentSeg] );
		}
		else if(m_IplTypeArray[m_CiplCurrentSeg]==IPL_TYPE_ARC)
		{
			inp_arc2( m_AxisSelArray[m_CiplCurrentSeg], m_C1Array[m_CiplCurrentSeg], m_C2Array[m_CiplCurrentSeg], m_P1Array[m_CiplCurrentSeg], m_P2Array[m_CiplCurrentSeg], m_ArcTypeArray[m_CiplCurrentSeg]);
		}
		else if(m_IplTypeArray[m_CiplCurrentSeg]==IPL_TYPE_BP)
		{
		}

		m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
	}

	return 0;
}

void CIPLFuncTest::OnButtonDsstop() 
{
	m_strTXDataCOM1.Empty();
	pMonitorIPL->SpeedDownStop();	
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CIPLFuncTest::OnButtonGohome() 
{
	m_strTXDataCOM1.Empty();
	pMonitorIPL->GoHome();	
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CIPLFuncTest::OnButtonImstop() 
{
	//pMyView->SendMessage(ID_TEST_IMSTOP,0,0);
	m_strTXDataCOM1.Empty();
	pMonitorIPL->EmergencyStop();	
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CIPLFuncTest::OnUpdateV() 
{
	AfxMessageBox("该功能暂未实现");
	m_strTXDataCOM1.Empty();
	WriteParam( 5, m_V, m_AxisSel[0] );
	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);
}

void CIPLFuncTest::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 CIPLFuncTest::OnKillfocusEditAo() 
{
	m_AO = GetDlgItemInt(IDC_EDIT_AO);
	g_AO = m_AO;
}

void CIPLFuncTest::OnButtonAx1() 
{
	COtherIplParam OtherIplParam;
	if(OtherIplParam.DoModal()==IDOK)
	{
		m_LP[0] = OtherIplParam.m_LP;
		m_CP[0] = OtherIplParam.m_CP;
		m_CM[0] = OtherIplParam.m_CM;

		m_LP_EN[0] = OtherIplParam.m_LP_EN;
		m_CP_EN[0] = OtherIplParam.m_CP_EN;
		m_CM_EN[0] = OtherIplParam.m_CM_EN;
	}

}

void CIPLFuncTest::OnButtonAx2() 
{
	COtherIplParam OtherIplParam;
	if(OtherIplParam.DoModal()==IDOK)
	{
		m_LP[1] = OtherIplParam.m_LP;
		m_CP[1] = OtherIplParam.m_CP;
		m_CM[1] = OtherIplParam.m_CM;

		m_LP_EN[1] = OtherIplParam.m_LP_EN;
		m_CP_EN[1] = OtherIplParam.m_CP_EN;
		m_CM_EN[1] = OtherIplParam.m_CM_EN;
	}

}

void CIPLFuncTest::OnButtonAx3() 
{
	COtherIplParam OtherIplParam;
	if(OtherIplParam.DoModal()==IDOK)
	{
		m_LP[2] = OtherIplParam.m_LP;
		m_CP[2] = OtherIplParam.m_CP;
		m_CM[2] = OtherIplParam.m_CM;

		m_LP_EN[2] = OtherIplParam.m_LP_EN;
		m_CP_EN[2] = OtherIplParam.m_CP_EN;
		m_CM_EN[2] = OtherIplParam.m_CM_EN;
	}

}

void CIPLFuncTest::OnButtonAx4() 
{
	COtherIplParam OtherIplParam;
	if(OtherIplParam.DoModal()==IDOK)
	{
		m_LP[3] = OtherIplParam.m_LP;
		m_CP[3] = OtherIplParam.m_CP;
		m_CM[3] = OtherIplParam.m_CM;

		m_LP_EN[3] = OtherIplParam.m_LP_EN;
		m_CP_EN[3] = OtherIplParam.m_CP_EN;
		m_CM_EN[3] = OtherIplParam.m_CM_EN;
	}

}

void CIPLFuncTest::OnStepCmd() 
{
	m_strTXDataCOM1.Empty();

	SendDriveCommand(0x3A, 0, 0, 0, 0);

	m_ComPort.WriteToPort((LPCTSTR)m_strTXDataCOM1);

}

void CIPLFuncTest::OnStaticBp2() 
{
	MessageBox("poakdpfew");
}

⌨️ 快捷键说明

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