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

📄 mshowdoc.cpp

📁 数控译码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				if (GSim[CodeNum].sflag == 1)
				{
					sprintf(bf,"Line %d S error",CodeLine+1);
					return 1;
				}
				GSim[CodeNum].sflag = 1;
				GCodeNow.sflag = 1;
				
				if ((GSen[i+1]<'0') || (GSen[i+1] >'9') )
				{
					sprintf(bf,"Line %d S error",CodeLine+1);
					return 1;
				}
				fd = atoi(&GSen[i+1]);

				if (fd>S_MAX)
				{
					sprintf(bf,"Line %d S error",CodeLine+1);
					return 1;
				}
				GSim[CodeNum].s = fd;
				GCodeNow.s = fd;
				break;

			case 'f':
			case 'F':  
				if (GSim[CodeNum].fflag == 1)
				{
					sprintf(bf,"Line %d F error",CodeLine+1);
					return 1;
				}

				GSim[CodeNum].fflag = 1;
				GCodeNow.fflag = 1;
				if ((GSen[i+1]<'0') || (GSen[i+1] >'9') )
				{
					sprintf(bf,"Line %d F error",CodeLine+1);
					return 1;
				}
				fd = atoi(&GSen[i+1]);
				
				if (fd>F_MAX)
				{
					sprintf(bf,"Line %d F error",CodeLine+1);
					return 1;
				}

				GSim[CodeNum].f = fd;
				GCodeNow.f = fd;
				break;

			case 'm':
	   	    case 'M': 
				if (fd<0||fd>99)
				{
					sprintf(bf,"Line %d M error",CodeLine+1);
					return 1;
				}
				GSim[CodeNum].mflag = 1;
				GCodeNow.mflag = 1;
				fd = atoi(&GSen[i+1]);
				GSim[CodeNum].m = fd;
				GCodeNow.m = fd;
				break;

			case ' ':   /*Space*/
				break;	
				
			
			case '\n':

				
				break;
				
			
			case EOF:
				break;   /*End Of File*/	
			
			default:
			   break;
		}
		
	}


	return 0;


}

int CMshowDoc::CheckSen(char * GSen)
{
	
	if ( ( nflag == 1)&& (NNow <= NOld) )		// Check N number inc
		return 1;
		 
	
	if ((G92flag == 0)&& (xflag || yflag || zflag)&& (GSim[CodeNum].gflag == 0) )
		if (G00Sign == 0xff)
			return 1;
		else
		{
			GSim[CodeNum].g = G00Sign;
			GSim[CodeNum].gflag = 1;	
			
			GCodeNow.g = G00Sign;
			GCodeNow.gflag = 1;
		}

	if ((tflag == 1) && (G40Sign == 2) )
	{
		Tr = - Tr;
		tflag = 0;
	}

	NOld = NNow;

	CodeLine++;
	nflag = xflag = yflag = zflag = iflag = jflag = kflag = 0;
	G92flag = 0;
	

	return 0;
}


int CMshowDoc::CompTypeGet()
{

	int i;

	i = VectYNow * VectXOld - VectYOld * VectXNow;
	/*
	if ( ((G40Sign == 1)&&(GCodeNow.y * GCodeOld.x - GCodeNow.x * GCodeOld.y > 0) )
			||((G40Sign == 2)&&(GCodeNow.y * GCodeOld.x - GCodeNow.x * GCodeOld.y < 0))
			)*/

	if ((G40Sign == 1)  || (G40Sign == 3) || (G40Sign == 5) )

		return i;
	else
		return (-i);

}

void CMshowDoc::VectGet()
{
	if ((GCodeOld.g == 0) || (GCodeOld.g == 1) )   //直线
	{
		VectXOld = GCodeOld.x;
		VectYOld = GCodeOld.y;
	}
	else if (GCodeOld.g == 2)						//顺圆
	{
		VectXOld = GCodeOld.y - GCodeOld.j;
		VectYOld = GCodeOld.i - GCodeOld.x;
	}
	else if (GCodeOld.g == 3)						//逆圆
	{
		VectXOld = -(GCodeOld.y - GCodeOld.j);
		VectYOld = -(GCodeOld.i - GCodeOld.x);
	}
	
	if ((GCodeNow.g == 0) || (GCodeNow.g == 1) )
	{
		VectXNow = GCodeNow.x;
		VectYNow = GCodeNow.y;
	}
	else if (GCodeNow.g == 2)
	{
		VectXNow = -GCodeNow.j;
		VectYNow = GCodeNow.i;
//		CenXNow = xOld + GCodeNow.i;				//圆弧绝对坐标
//		CenYNow = yOld + GCodeNow.j;
	}
	else if (GCodeNow.g == 3)
	{
		VectXNow = GCodeNow.j;
		VectYNow = -GCodeNow.i;
	}

	DistOld = (double)sqrt((double)(VectXOld * VectXOld + VectYOld * VectYOld));
	DistNow = (double)sqrt((double)(VectXNow * VectXNow + VectYNow * VectYNow));
		

	
}

void CMshowDoc::CutCompCalcu()
{
	if (CutCompType > 0 )
	{	
		xs =xOld - (int) (Tr * (VectYOld * DistNow + VectYNow * DistOld ) / ( DistOld * DistNow + VectXOld * VectXNow + VectYOld * VectYNow)); 
		ys =yOld + (int) (Tr * (VectXOld * DistNow + VectXNow * DistOld ) / ( DistOld * DistNow + VectXOld * VectXNow + VectYOld * VectYNow)); 
	
	
		if ((GCodeOld.g == 2) || (GCodeOld.g == 3) )  //前段为圆弧时,修正圆心
		{
			GCodeOld.i += xOld - GCodeOld.x - xLast;
			GCodeOld.j += yOld - GCodeOld.y - yLast;
		}
		
	
	}
	else if (CutCompType < 0)
	{
		xs = xOld - (int)(Tr * VectYOld / DistOld);
		ys = yOld + (int)(Tr * VectXOld / DistOld);

		if ((GCodeOld.g == 2) || (GCodeOld.g == 3) )  //前段为圆弧时,修正圆心
		{
			GCodeOld.i += xOld - GCodeOld.x - xLast;
			GCodeOld.j += yOld - GCodeOld.y - yLast;
		}
		
		GCodeOld.x = xs - xLast;
		GCodeOld.y = ys - yLast;
		
		xLast = xs;
		yLast = ys;
		
		memcpy(&GCode[GCodeNum],&GCodeOld,sizeof(GCODE));
		GCodeNum++;
		
		xs = xOld - (int)(Tr * VectYNow / DistNow);
		ys = yOld + (int)(Tr * VectXNow / DistNow);
		
		GCodeOld.x = xs - xLast;
		GCodeOld.y = ys - yLast;
		
		GCodeOld.i = xOld - xLast;  //圆弧过渡
		GCodeOld.j = yOld - yLast;
		
		if (G40Sign == 3)
			GCodeOld.g = 2;
		else
			GCodeOld.g = 3;
	}
	else
	{
		xs = xOld - (int)(Tr * VectYOld / DistOld);		
		ys = yOld + (int)(Tr * VectXOld / DistOld);	
		
		if ((GCodeOld.g == 2) || (GCodeOld.g == 3) )	//前段为圆弧时,修正圆心
		{
			GCodeOld.i += xOld - GCodeOld.x - xLast;
			GCodeOld.j += yOld - GCodeOld.y - yLast;
		}		
	}

	GCodeOld.x = xs - xLast;
	GCodeOld.y = ys - yLast;				
	xLast = xs;
	yLast = ys;
	memcpy(&GCode[GCodeNum],&GCodeOld,sizeof(GCODE));
	memcpy(&GCodeOld,&GCodeNow,sizeof(GCODE));
	memset(&GCodeNow,0,sizeof(GCODE));
	xOld = xNow;
	yOld = yNow;				
	GCodeNum++;
	
	


	
}

int CMshowDoc::CutComp()
{

	if (G40Sign == 0 )
	{
		memcpy(&GCode[GCodeNum],&GCodeNow,sizeof(GCODE));
		memset(&GCodeNow,0,sizeof(GCODE));
		GCodeNum++;
	}
	else if ( (G40Sign == 1)|| (G40Sign == 2) )
	{
		if(G40Beg == 0)
		{
			if (GCodeNow.gflag != 1)
			{
				sprintf(bf,"Line %d  Cut Com Build  error",CodeLine+1);
				return 1;

			}

			if ((GCodeNow.g == 0) || (GCodeNow.g == 1))
			{
				memcpy(&GCodeOld,&GCodeNow,sizeof(GCODE));
				xOld = xNow;
				yOld = yNow;
				memset(&GCodeNow,0,sizeof(GCODE));
				G40Beg = 1;
			}
			else
			{
				sprintf(bf,"刀补建立必须在直线段上");
				return 1;
				
			}
		}
		else
		{
	
			if ((GCodeNow.gflag == 0) && (GCodeNow.mflag == 0) && (GCodeNow.sflag == 0) && (GCodeNow.fflag == 0) )
				return 0;
						
			VectGet();
			CutCompType = CompTypeGet();

			if((GCodeNow.g == 0)||(GCodeNow.g == 1))
				if ((GCodeNow.x == 0) && (GCodeNow.y == 0) )  //没有进给
				{
					sprintf(bf,"Line %d    error",CodeLine+1);
					return 1;					
				}
			else
			{   //缺少判误 判断接圆弧
										
			}

			if ( CutCompType > 0 )    //缩短型 直线接直线(或圆弧) 刀补建立
			{
				xs = xOld - (int)(Tr * VectYNow / DistNow) ;
				ys = yOld + (int)(Tr * VectXNow / DistNow);
				GCodeOld.x = xs - DUIDAOX;
				GCodeOld.y = ys - DUIDAOY;

				xLast = xs;
				yLast = ys;
				memcpy(&GCode[GCodeNum],&GCodeOld,sizeof(GCODE));
				memcpy(&GCodeOld,&GCodeNow,sizeof(GCODE));
				memset(&GCodeNow,0,sizeof(GCODE));
				xOld = xNow;
				yOld = yNow;
				
				GCodeNum++;
			}
			else
			{
				sprintf(bf,"刀补建立不是缩短型");
				return 1;					
			}								
		
			G40Beg = 0;

			if (G40Sign == 1)
				G40Sign = 3;
			else
				G40Sign = 4;
		}
	}
	else if ((G40Sign == 3)|| (G40Sign == 4) )  //刀补进行
	{
		if ((GCodeNow.gflag == 0) && (GCodeNow.mflag == 0) && (GCodeNow.sflag == 0) && (GCodeNow.fflag == 0) )
			return 0;

		VectGet();
		CutCompType = CompTypeGet();
		CutCompCalcu();
	}
	else  //刀补撤销
	{
				
			VectGet();
			CutCompType = CompTypeGet();
			
			if((GCodeNow.g == 0)||(GCodeNow.g ==1))
				if ((GCodeNow.x == 0) && (GCodeNow.y == 0) )  //没有进给
				{
					sprintf(bf,"Line %d    error",CodeLine+1);
					return 1;					
				}
				else
				{   //缺少判误 判断接圆弧
					
				}
				
				if ( CutCompType > 0 )    //缩短型 直线(或圆弧)接直线 刀补撤销
				{
					xs = xOld - (int)(Tr * VectYOld / DistOld);
					ys = yOld + (int)(Tr * VectXOld / DistOld);
				

					if ((GCodeOld.g == 2) || (GCodeOld.g == 3))
					{
						GCodeOld.i += xOld - GCodeOld.x;
						GCodeOld.j += yOld - GCodeOld.y;

					}

					GCodeOld.x = xs - xLast;
					GCodeOld.y = ys - yLast;

					
					memcpy(&GCode[GCodeNum],&GCodeOld,sizeof(GCODE));
					GCodeNum++;

					GCodeOld.x = xNow - xs;
					GCodeOld.y = yNow - ys;
					xLast = xNow;
					yLast = yNow;
					memcpy(&GCode[GCodeNum],&GCodeOld,sizeof(GCODE));
					memset(&GCodeNow,0,sizeof(GCODE));
					GCodeNum++;
				}
				else
				{
					sprintf(bf,"刀补撤销不是缩短型");
					return 1;					
				}
		
//				G40End = 1;
				G40Sign = 0;			

//		}
		/*
		else
				{
					memcpy(&GCode[GCodeNum],&GCodeOld,sizeof(GCODE));
					GCodeNum++;
		
					if ((GCodeNow.gflag == 0) && (GCodeNow.mflag == 0) && (GCodeNow.sflag == 0) && (GCodeNow.fflag == 0) )
						return 0;
					else
					{
						memcpy(&GCode[GCodeNum],&GCodeNow,sizeof(GCODE));
						GCodeNum++;
					}
		
					G40Sign = 0;
					G40End = 0;
		
				}*/
		
		
	

	}


	
	return 0;

	
}


void CMshowDoc::Init()
{
	for (int i=0;i<50;i++)
	{
		memset(&GSim[i],0,sizeof(GCODE));
		memset(&GCode[i],0,sizeof(GCODE));
	}

	
	memset(&GCodeNow,0,sizeof(GCODE));
	memset(&GCodeOld,0,sizeof(GCODE));

	GCodeNum = 0;

	G91Sign = 0;
	G92flag = 0;
	
	nflag = xflag = yflag = zflag = iflag = jflag = kflag = tflag = 0;
	CodeLine = 0;



	NOld = -1;
	NNow = 0;

	G00Sign = 0xff;

	G40Sign = 0; //默认 无刀补
//	memset( &GDataOld, 0, sizeof(GDATA));
//	memset( &GDataNew, 0, sizeof(GDATA));
	G40Beg = 0;
//	G40End = 0;
	


	datumx = DUIDAOX;datumy = DUIDAOY;  datumz = DUIDAOZ;
	tx = ty = tz = 0;
	mchx = datumx + tx;
	mchy = datumy + ty;
	mchz = datumz + tz;

	G31x = G31y =G31z = 0;

	G53x = 400;
	G53y = 0;
	G53z = 0;


	xNow = mchx;
	yNow = mchy;
	zNow = mchz;

	xOld = xNow;
	yOld = yNow;
	xLast = xNow;
	yLast = yNow;
}

void CMshowDoc::List()
{
    CStdioFile myinputfile;
	BOOL isend=TRUE;
	myinputfile.Open(FileName,CFile::modeRead| CFile::typeText );
	CString mystring[100];
	int number=0;
	while (isend)
	{
			isend = myinputfile.ReadString(mystring[number]);
			if (isend) 
			{
				number++;
			}
			else
				number--;
	}
	myinputfile.Close();

    CMshowView *pMshowview = (CMshowView*)((CMainFrame*)AfxGetMainWnd())->GetActiveView();
    
	((CListBox *)(((CMainFrame*)AfxGetMainWnd())->m_wndDialogBar.GetDlgItem(IDC_LIST)))->ResetContent();
	for(int i=0;i<=number;i++)
	{
		((CListBox *)(((CMainFrame*)AfxGetMainWnd())->m_wndDialogBar.GetDlgItem(IDC_LIST)))->InsertString(i,mystring[i]);
	}
}

⌨️ 快捷键说明

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