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

📄 pmacctrldlg.cpp

📁 利用VC编写的PMAC控制芯片驱动程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		GetDlgItem(IDC_SA_EDIT)->EnableWindow(FALSE);
		GetDlgItem(IDC_SB_EDIT)->EnableWindow(FALSE);
		GetDlgItem(IDC_EX_EDIT)->EnableWindow(FALSE);
		GetDlgItem(IDC_EY_EDIT)->EnableWindow(FALSE);
		GetDlgItem(IDC_EZ_EDIT)->EnableWindow(FALSE);
		GetDlgItem(IDC_EA_EDIT)->EnableWindow(FALSE);
		GetDlgItem(IDC_EB_EDIT)->EnableWindow(FALSE);

		GetDlgItem(IDC_SR_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_SANG_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_SCPX_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_SCPY_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_SCPZ_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_ER_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_EANG_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_ECPX_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_ECPY_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_ECPZ_EDIT)->EnableWindow(TRUE);

		UpdateData(TRUE);
		m_SrEdit = 0;		m_ErEdit = 0;		
		m_SangEdit = 0;		m_EangEdit = 0;
		m_ScpxEdit = 0;		m_EcpxEdit = 0;
		m_ScpyEdit = 0;		m_EcpyEdit = 0;
		m_ScpzEdit = 0;		m_EcpzEdit = 0;
		UpdateData(FALSE);
	}
}

//	============================="默认"按钮-函数================================
//	对应于"菜单-默认数据"
//	=============================================================================
void CPmacCtrlDlg::OnDefault() 
{
	CPmacCtrlDlg::OnFileDefault();
}

//	============================="保存"按钮-函数================================
void CPmacCtrlDlg::OnSave() 
{
	CPmacCtrlDlg::OnFileSave();
}

//	============================="确定"按钮-函数================================
//	对应于"控制-数据处理"
//	=============================================================================
void CPmacCtrlDlg::OnConfirm() 
{
	CPmacCtrlDlg::OnCtrlProcess();
}

//	============================="退出"按键-函数================================
void CPmacCtrlDlg::OnExit() 
{
	CPmacCtrlDlg::OnFileExit();
}

//	============================="初始化PMAC"-按钮================================
void CPmacCtrlDlg::OnInitial() 
{
	CPmacCtrlDlg::OnCtrlInitial();
}

//	============================="机床归零"-按钮================================
void CPmacCtrlDlg::OnZero() 
{
	CPmacCtrlDlg::OnCtrlZero();	
}

//	============================="零点偏移"-按钮================================
void CPmacCtrlDlg::OnExcursion() 
{
	CPmacCtrlDlg::OnCtrlExcursion();
}

//	============================="文件下载"按键-函数================================
void CPmacCtrlDlg::OnLoadfile() 
{
	CPmacCtrlDlg::OnCtrlLoadfile();	
}

//	============================="执行程序"-按钮================================
void CPmacCtrlDlg::OnExecute() 
{
	CPmacCtrlDlg::OnCtrlExecute();
}

//	============================="显示构型图例"-函数================================
void CPmacCtrlDlg::OnShowBUTTON() 
{
	CPmacCtrlDlg::OnCtrlOutputphoto();
}

//	============================="输出构型参数"-函数================================
void CPmacCtrlDlg::OnOutputpara() 
{
	CPmacCtrlDlg::OnCtrlOutputpara();
}

//	============================="查看插补数据"-函数================================
void CPmacCtrlDlg::OnViewInterpolation() 
{
	CPmacCtrlDlg::OnCtrlViewInterpolation();
}

//	============================="查看逆解数据"-函数================================
void CPmacCtrlDlg::OnViewInvkine() 
{
	CPmacCtrlDlg::OnCtrlViewInvkine();
}

//	============================="加载NC代码"按钮-函数================================
void CPmacCtrlDlg::OnLoadnc() 
{
	CPmacCtrlDlg::OnCtrlLoadnc();
}

//	============================="自动运行"按钮-函数================================
void CPmacCtrlDlg::OnAutoexecute() 
{
	CPmacCtrlDlg::OnCtrlAutoexecute();
}

//	=============="Linear Interpolation"==============

void CPmacCtrlDlg::OnCtrlInterpolationL() 
{
	double	Vmax = 200, Amax = 500;	//	unit: mm/s, mm/s2;
	double	dt = 0.02;				//	unit: s;
	double	dx, dy, dz, da, db, dmax;
	double	ta, tr, tt, T;
	double	vx, vy, vz, wa, wb, ax, ay, az, ea, eb;
	double	Inx, Iny, Inz, Ina, Inb, Ing;

	UpdateData(TRUE);
	dx = m_ExEdit - m_SxEdit;
	dy = m_EyEdit - m_SyEdit;
	dz = m_EzEdit - m_SzEdit;
	da = m_EaEdit*pi/180 - m_SaEdit*pi/180;
	db = m_EbEdit*pi/180 - m_SbEdit*pi/180;
	dmax = max(max(fabs(dx),fabs(dy)),fabs(dz));

	ta = Vmax/Amax;
	tr = dmax/Vmax - ta;
	tt = tr + 2*ta;

	vx = dx/(ta+tr);	ax = vx/ta;
	vy = dy/(ta+tr);	ay = vy/ta;
	vz = dz/(ta+tr);	az = vz/ta;
	wa = da/(ta+tr);	ea = wa/ta;
	wb = db/(ta+tr);	eb = wb/ta;

	FILE	*fp1, *fp2;
	FILE	*fp;
	fp1 = fopen(BASEDIR+FILEINTPL, "w+");	
	fp2 = fopen(BASEDIR+FILEINVKL, "w+");
	fp  = fopen(BASEDIR+FILEPMACL, "w+");
	fprintf(fp1, "*************插补数据*************\n");
	fprintf(fp1, "-----------------------------------------------------------\n");
	fprintf(fp2, "*************逆解数据*************\n");
	fprintf(fp2, "-----------------------------------------------------------\n");
	fprintf(fp, "\nOPEN PROG 10\nCLEAR\nABS\nF10\nLINEAR\n");
	for(int i=0; i<tt/dt+1; i++)
	{
		T = i*dt;
		if(T < ta)
		{
			Inx = m_SxEdit + 0.5*ax*T*T;
			Iny = m_SyEdit + 0.5*ay*T*T;
			Inz = m_SzEdit + 0.5*az*T*T;
			Ina = m_SaEdit + 0.5*ea*T*T;
			Inb = m_SbEdit + 0.5*eb*T*T;
			Ing = 0;
			fprintf(fp1, "X %.3f Y %.3f Z %.3f A %.3f B %.3f G %.3f\n", Inx,Iny,Inz,Ina,Inb,Ing);
			if(m_Structure == 0)
				CPmacCtrlDlg::OnCtrlInvkineA(Inx, Iny, Inz, Ina, Inb, Ing);
			else if(m_Structure == 1)
				CPmacCtrlDlg::OnCtrlInvkineB(Inx, Iny, Inz, Ina, Inb, Ing);
			else if(m_Structure == 2)
				CPmacCtrlDlg::OnCtrlInvkineC(Inx, Iny, Inz, Ina, Inb, Ing);
			else if(m_Structure == 3)
				CPmacCtrlDlg::OnCtrlInvkineD(Inx, Iny, Inz, Ina, Inb, Ing);
			else
				CPmacCtrlDlg::OnCtrlInvkineE(Inx, Iny, Inz, Ina, Inb, Ing);
			if(dl1 > 180 || dl2 > 180 || dl3 > 180 || dl4 > 180 || dl5 > 180 || dl6 > 180)
				goto quota;
			fprintf(fp2, "X %.3f Y %.3f Z %.3f U %.3f V %.3f W %.3f\n", -dl6,-dl5,-dl2,-dl1,-dl4,-dl3);
			fprintf(fp, "X %.3f Y %.3f Z %.3f U %.3f V %.3f W %.3f\n", -dl6,-dl5,-dl2,-dl1,-dl4,-dl3);
		}
		else if(T < (tt-ta))
		{
			Inx = m_SxEdit + 0.5*ax*T*T + vx*(T-ta);
			Iny = m_SyEdit + 0.5*ay*T*T + vy*(T-ta);
			Inz = m_SzEdit + 0.5*az*T*T + vz*(T-ta);
			Ina = m_SaEdit + 0.5*ea*T*T + wa*(T-ta);
			Inb = m_SbEdit + 0.5*eb*T*T + wb*(T-ta);
			Ing = 0;
			fprintf(fp1, "X %.3f Y %.3f Z %.3f A %.3f B %.3f G %.3f\n", Inx,Iny,Inz,Ina,Inb,Ing);
			if(m_Structure == 0)
				CPmacCtrlDlg::OnCtrlInvkineA(Inx, Iny, Inz, Ina, Inb, Ing);
			else if(m_Structure == 1)
				CPmacCtrlDlg::OnCtrlInvkineB(Inx, Iny, Inz, Ina, Inb, Ing);
			else if(m_Structure == 2)
				CPmacCtrlDlg::OnCtrlInvkineC(Inx, Iny, Inz, Ina, Inb, Ing);
			else if(m_Structure == 3)
				CPmacCtrlDlg::OnCtrlInvkineD(Inx, Iny, Inz, Ina, Inb, Ing);
			else
				CPmacCtrlDlg::OnCtrlInvkineE(Inx, Iny, Inz, Ina, Inb, Ing);
			if(dl1 > 180 || dl2 > 180 || dl3 > 180 || dl4 > 180 || dl5 > 180 || dl6 > 180)
				goto quota;
			fprintf(fp2, "X %.3f Y %.3f Z %.3f U %.3f V %.3f W %.3f\n", -dl6,-dl5,-dl2,-dl1,-dl4,-dl3);
			fprintf(fp, "X %.3f Y %.3f Z %.3f U %.3f V %.3f W %.3f\n", -dl6,-dl5,-dl2,-dl1,-dl4,-dl3);
		}
		else
		{
			Inx = m_ExEdit - 0.5*ax*(tt-T)*(tt-T);
			Iny = m_EyEdit - 0.5*ay*(tt-T)*(tt-T);
			Inz = m_EzEdit - 0.5*az*(tt-T)*(tt-T);
			Ina = m_EaEdit - 0.5*ea*(tt-T)*(tt-T);
			Inb = m_EbEdit - 0.5*eb*(tt-T)*(tt-T);
			Ing = 0;
			fprintf(fp1, "X %.3f Y %.3f Z %.3f A %.3f B %.3f G %.3f\n", Inx,Iny,Inz,Ina,Inb,Ing);
			if(m_Structure == 0)
				CPmacCtrlDlg::OnCtrlInvkineA(Inx, Iny, Inz, Ina, Inb, Ing);
			else if(m_Structure == 1)
				CPmacCtrlDlg::OnCtrlInvkineB(Inx, Iny, Inz, Ina, Inb, Ing);
			else if(m_Structure == 2)
				CPmacCtrlDlg::OnCtrlInvkineC(Inx, Iny, Inz, Ina, Inb, Ing);
			else if(m_Structure == 3)
				CPmacCtrlDlg::OnCtrlInvkineD(Inx, Iny, Inz, Ina, Inb, Ing);
			else
				CPmacCtrlDlg::OnCtrlInvkineE(Inx, Iny, Inz, Ina, Inb, Ing);
			if(dl1 > 180 || dl2 > 180 || dl3 > 180 || dl4 > 180 || dl5 > 180 || dl6 > 180)
				goto quota;
			fprintf(fp2, "X %.3f Y %.3f Z %.3f U %.3f V %.3f W %.3f\n", -dl6,-dl5,-dl2,-dl1,-dl4,-dl3);
			fprintf(fp, "X %.3f Y %.3f Z %.3f U %.3f V %.3f W %.3f\n", -dl6,-dl5,-dl2,-dl1,-dl4,-dl3);
		}
	}
	fprintf(fp,"CLOSE\n");
	goto	normal;
quota:	AfxMessageBox("给出轨迹参数超出机床的运动空间,请更改参数!");
normal:	fclose(fp1);
	fclose(fp2);
	fclose(fp);
	UpdateData(FALSE);
}

//	================="Circle Interpolation"=================

void CPmacCtrlDlg::OnCtrlInterpolationC()
{
	double	dt = 0.03, tt, T, rad = pi/180;
	double	AngVel = 200*rad;
	double	Xd[3] = {1, 0, 0}, Yd[3] = {0, 1, 0};	// Orientation;
	double	R, Ang, CInx, CIny, CInz, CIna, CInb, CIng;

	UpdateData(TRUE);
	R = m_SrEdit;
	tt = (m_EangEdit - m_SangEdit)/AngVel;
	
	FILE	*fp1, *fp2;
	FILE	*fp;
	fp1 = fopen(BASEDIR + FILEINTPC, "w+"); 
	fp2 = fopen(BASEDIR + FILEINVKC, "w+");
	fp =  fopen(BASEDIR + FILEPMACC, "w+");
	fprintf(fp1, "*************插补数据*************\n");
	fprintf(fp1, "-----------------------------------------------------------\n");
	fprintf(fp2, "*************逆解数据*************\n");
	fprintf(fp2, "-----------------------------------------------------------\n");
	fprintf(fp, "\nOPEN PROG 10\nCLEAR\nABS\nF10\nLINEAR\n");
	for(int i=0; i<tt/dt+1; i++)
	{
		T = i*dt;
		Ang = T*AngVel + m_SangEdit;
		CInx = m_ScpxEdit + R*Xd[0]*cos(Ang) + R*Yd[0]*sin(Ang);
		CIny = m_ScpyEdit + R*Xd[1]*cos(Ang) + R*Yd[1]*sin(Ang);
		CInz = m_ScpzEdit + R*Xd[2]*cos(Ang) + R*Yd[2]*sin(Ang);
		CIna = 0;
		CInb = 0;
		CIng = 0;
		fprintf(fp1, "X %.3f Y %.3f Z %.3f A %.3f B %.3f G %.3f\n", CInx,CIny,CInz,CIna,CInb,CIng);
		if(m_Structure == 0)
			CPmacCtrlDlg::OnCtrlInvkineA(CInx, CIny, CInz, CIna, CInb, CIng);
		else if(m_Structure == 1)
			CPmacCtrlDlg::OnCtrlInvkineB(CInx, CIny, CInz, CIna, CInb, CIng);
		else if(m_Structure == 2)
			CPmacCtrlDlg::OnCtrlInvkineC(CInx, CIny, CInz, CIna, CInb, CIng);
		else if(m_Structure == 3)
			CPmacCtrlDlg::OnCtrlInvkineD(CInx, CIny, CInz, CIna, CInb, CIng);
		else
			CPmacCtrlDlg::OnCtrlInvkineE(CInx, CIny, CInz, CIna, CInb, CIng);
		if(dl1 > 180 || dl2 > 180 || dl3 > 180 || dl4 > 180 || dl5 > 180 || dl6 > 180)
			goto quota;
		fprintf(fp2, "X %.3f Y %.3f Z %.3f U %.3f V %.3f W %.3f\n", -dl6,-dl5,-dl2,-dl1,-dl4,-dl3);
		fprintf(fp, "X %.3f Y %.3f Z %.3f U %.3f V %.3f W %.3f\n", -dl6,-dl5,-dl2,-dl1,-dl4,-dl3);
	}
	fprintf(fp,"CLOSE\n");
	goto	normal;
quota:	AfxMessageBox("给出轨迹参数超出机床的运动空间,请更改参数!");
normal:	fclose(fp1);
	fclose(fp2);
	fclose(fp);
	UpdateData(FALSE);
}

//	================="Helix Interpolation"=================

void CPmacCtrlDlg::OnCtrlInterpolationH()
{
	double	dt = 0.03, tt, T, rad = pi/180;
	double	AngVel = 200*rad;
	double	Xd[3] = {1, 0, 0}, Yd[3] = {0, 1, 0};	// Orientation;
	double	R, Ang, Xv, Yv, Zv;
	double	HInx, HIny, HInz, HIna, HInb, HIng;

	UpdateData(TRUE);
	tt = (m_EangEdit - m_SangEdit)/AngVel;
	Xv = (m_EcpxEdit - m_ScpxEdit)/tt;
	Yv = (m_EcpyEdit - m_ScpyEdit)/tt;
	Zv = (m_EcpzEdit - m_ScpzEdit)/tt;
	
	FILE	*fp1, *fp2;
	FILE	*fp;
	fp1 = fopen(BASEDIR + FILEINTPH, "w+"); 
	fp2 = fopen(BASEDIR + FILEINVKH, "w+");
	fp =  fopen(BASEDIR + FILEPMACH, "w+");
	fprintf(fp1, "*************插补数据*************\n");
	fprintf(fp1, "-----------------------------------------------------------\n");
	fprintf(fp2, "*************逆解数据*************\n");
	fprintf(fp2, "-----------------------------------------------------------\n");
	fprintf(fp, "\nOPEN PROG 10\nCLEAR\nABS\nF10\nLINEAR\n");
	for(int i=0; i<tt/dt+1; i++)
	{
		T = i*dt;
		R = m_SrEdit + T*((m_ErEdit - m_SrEdit)/tt);
		Ang = T*AngVel + m_SangEdit;
		HInx = m_ScpxEdit + R*Xd[0]*cos(Ang) + R*Yd[0]*sin(Ang) + Xv*T;
		HIny = m_ScpyEdit + R*Xd[1]*cos(Ang) + R*Yd[1]*sin(Ang) + Yv*T;
		HInz = m_ScpzEdit + R*Xd[2]*cos(Ang) + R*Yd[2]*sin(Ang) + Zv*T;
		HIna = 0;
		HInb = 0;
		HIng = 0;
		fprintf(fp1, "X %.3f Y %.3f Z %.3f A %.3f B %.3f G %.3f\n", HInx,HIny,HInz,HIna,HInb,HIng);
		if(m_Structure == 0)
			CPmacCtrlDlg::OnCtrlInvkineA(HInx, HIny, HInz, HIna, HInb, HIng);
		else if(m_Structure == 1)
			CPmacCtrlDlg::OnCtrlInvkineB(HInx, HIny, HInz, HIna, HInb, HIng);
		else if(m_Structure == 2)
			CPmacCtrlDlg::OnCtrlInvkineC(HInx, HIny, HInz, HIna, HInb, HIng);
		else if(m_Structure == 3)
			CPmacCtrlDlg::OnCtrlInvkineD(HInx, HIny, HInz, HIna, HInb, HIng);
		else
			CPmacCtrlDlg::OnCtrlInvkineE(HInx, HIny, HInz, HIna, HInb, HIng);
		if(dl1 > 180 || dl2 > 180 || dl3 > 180 || dl4 > 180 || dl5 > 180 || dl6 > 180)
			goto quota;
		fprin

⌨️ 快捷键说明

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