65.9K
CodeProject 正在变化。 阅读更多。
Home

CAM 模拟器

2002 年 2 月 20 日

viewsIcon

180005

downloadIcon

8068

该程序展示了 CN 机器的工作原理。

Sample Image - CAM_simulator.gif

引言

经过 6 个月的努力,我的第一个 MFC 程序终于发布了。这个程序是一个 CAM 模拟器。我不是软件工程师,请原谅我的错误。如果您有任何问题,请告诉我。我相信您会发现它们。一开始,读取数据文件对我来说是个大问题,所以这里是实现方法。我需要读取 CNC 机器生成的 *.txt 文件。例如:M X25 Y23 Z25 SPEED1500。这是用于设置机器的一个数据块。这是机器用来在工作空间内的坐标上移动的一种语言。因此,在此实现中,您可以读取整个文档,将数据块拆分为必要的 X、Y、Z 和 SPEED 值。这是我的第一次上传,关于这个程序我还有很多话要说,我会尽快改进这个简短的评论。

void CProgramaDoc::OnFileOpen() 
{
    CString fichero="archivo de Código G",temp;

    CFileDialog archivos(true,NULL,fichero,OFN_ALLOWMULTISELECT,
        "Codigo G (*.tap)|*.tap|Codigo G (*.act)|*.act||",NULL);

    if (archivos.DoModal() == FALSE) return;
    fichero=archivos.GetPathName();

    CFile cfFile (fichero, CFile::modeNoTruncate | CFile::modeRead);
    CArchive ar (&cfFile, CArchive::load); 

    if(!ar.ReadString(temp))  return;

    nl=0;
    do
    {
        if(temp.GetLength() == 0) continue;
        strcpy(linea[nl],temp);
        nl++;

    }while(ar.ReadString(temp));    

    
    // SEPARANDO COORDENADAS

    int i,j,k,d,sp;
    char aux[30];

    for ( i=0; i<5000; i++)
    {
        x[i] = y[i] = z[i] = 0;
    }    

    kn=0;
    for (i=0;i<nl;i++)
    {
        
        if (linea[i][0]=='S');
        {
            Inicio=1;
        }
        
        if (linea[i][0]=='M');
        {
        sp = 0;
        k = 0;
        d = strlen(linea[i]);

        for (j=0;j<d;j++)
        {
            if ((linea[i][j]=='-')|(isdigit(linea[i][j]))|
                                        (linea[i][j]=='.'))
            {
                aux[k] = linea[i][j];
                k++;
                continue;
            }

            if (linea[i][j]==' ')
            {
                sp++;
                if (sp==1) continue;

                aux[k]=0;

                if (sp==2)
                    if ((aux[0]=='-')|(isdigit(aux[0]))|(aux[0]=='.'))
                        x[kn] = atof(aux);
                    else
                        x[kn] = x[kn-1];

                if (sp==3) 
                    if ((aux[0]=='-')|(isdigit(aux[0]))|(aux[0]=='.')) 
                        y[kn] = atof(aux);
                    else
                        y[kn] = y[kn-1];

                if (sp==4)
                    if ((aux[0]=='-')|(isdigit(aux[0]))|(aux[0]=='.')) 
                        z[kn] = atof(aux);
                    else
                        z[kn] = z[kn-1];

                k = 0;
                continue;
            }            
        }

        kn++;
        j = d;
        }
    }
    
    presentar = 1;

    //    VERIFICANDO TORNO O FRESA

    sumz = 0;
    for (i=0; i<nl; i++)
    {
        sumz += abs(z[i]);
    }

    if (sumz == 0)
        torno = 1;
    else
        fresa = 1;

    UpdateAllViews(NULL);
    
}
© . All rights reserved.