- #include
- using namespace std;
- class CNC //CNC控制类
- {
- //私有方法部分
- protected:
- int CNC_x;//x轴当前值
- int CNC_y;//y轴当前值
- int CNC_Z;//z轴当前值
- int CNC_YS_X;//原点x坐标值
- int CNC_YS_Y;//原点y坐标值
- int CNC_YS_Z;//原点z坐标值
- //屏幕GDI函数用到的一些坐标
- int CNC_GDI_X; //屏幕显示偏移坐标
- int CNC_GDI_Y;
- int CNC_GDI_X_x; //x框架轴坐标
- int CNC_GDI_X_y;
- int CNC_GDI_Y_x; //y轴框架坐标
- int CNC_GDI_Y_y;
- int CNC_GDI_Z_x; //z轴框架坐标
- int CNC_GDI_Z_y;
- int CNC_GDI_D_x; /具位置坐标
- int CNC_GDI_D_y;
- int CNC_GDI_D_Z; //下刀深度
- //GDI函数用到的一些句柄
- HDC hdc; //获取绘图DC句柄
- HPEN hpen_x; //x轴画笔
- HBRUSH hbrush_x; //x轴画刷
- HPEN hpen_y; //y轴画笔
- HBRUSH hbrush_y; //y轴画刷
- HPEN hpen_z; //z轴画笔
- HBRUSH hbrush_z; //z轴画刷
- HPEN hpen_D; /路画笔
- HPEN hpen_cls; //清屏画笔
- HBRUSH hbrush_cls; //清屏画刷
- HPEN hpen_GJ; //工件画笔
- HBRUSH hbrush_GJ; //工件画刷
- //公共方法部分
- public:
- CNC(void);
- ~CNC(void);
- void CNC_GDI_DC(void); //初始化GDI绘图相关句柄
- void CNC_GDI_CLS(void); //清屏并画工件
- void CNC_GDI(void); //屏幕输出CNC状态
- void CNC_X_进(void); //x轴操作
- void CNC_X_退(void);
- void CNC_Y_进(void); //y轴操作
- void CNC_Y_退(void);
- void CNC_Z_进(void); //z轴操作
- void CNC_Z_退(void);
- void CNC_COM(void); //COM口驱动信号输出
- void CNC_DuiDao(void); //手动对刀设置原点
- int CNC_G00(char x,int x_z,char y,int y_z,char z,int z_z); //G00指令实现
- int CNC_G01(char x,int x_z,char y,int y_z,char z,int z_z,int f); //G01指令实现
- };
- #include "stdafx.h"
- #include "CNC控制.h"
- int CNC_GDI_DL[440][780];
- CNC::CNC(void)
- {
- //初始化
- //屏幕显示参考坐标,整个三轴都以此点为偏移
- CNC_GDI_X=30;
- CNC_GDI_Y=20;
- //为x,y,z轴坐标值及刀具位置坐标赋初值
- CNC_GDI_X_x=CNC_GDI_X; //x轴宽度为900像素
- CNC_GDI_X_y=CNC_GDI_Y;
- CNC_GDI_Y_x=CNC_GDI_X_x+10; //y轴宽度为500像素
- CNC_GDI_Y_y=CNC_GDI_X_y-10;
- CNC_GDI_Z_x=CNC_GDI_Y_x-10; //z轴深度屏幕上无法表示出来
- CNC_GDI_Z_y=CNC_GDI_Y_y+20;
- CNC_GDI_D_x=CNC_GDI_Z_x+35; /具位置坐标
- CNC_GDI_D_y=CNC_GDI_Z_y+25;
- CNC_GDI_D_Z=0; //下刀深度初始化
- int x,y;
- for(y=0;y<440;y++)
- for(x=0;x<780;x++)
- {
- CNC_GDI_DL[y][x]=0;
- }
- //////////////////////////////////////
- //初始化原点
- CNC_YS_X=CNC_GDI_D_x;
- CNC_YS_Y=CNC_GDI_D_y;
- CNC_YS_Z=CNC_GDI_D_Z;
- }
- CNC::~CNC(void)
- {
- // 释放资源
- DeleteObject(hpen_x);
- DeleteObject(hbrush_x);
- DeleteObject(hpen_y);
- DeleteObject(hbrush_y);
- DeleteObject(hpen_z);
- DeleteObject(hbrush_z);
- DeleteObject(hpen_x);
- DeleteObject(hpen_D);
- DeleteObject(hpen_x);
- }
- void CNC::CNC_GDI_CLS(void)
- {
- // 为DC选择笔和笔刷
- SelectObject(hdc, hpen_cls);
- SelectObject(hdc, hbrush_cls);
- // 绘制清屏矩形
- Rectangle( hdc,0,0,900,550 );
- // 为DC选择笔和笔刷
- SelectObject(hdc, hpen_GJ);
- SelectObject(hdc, hbrush_GJ);
- // 绘制工件矩形
- Rectangle( hdc,80,60,800,500 );
- //绘制刀路
- int x,y;
- if(CNC_GDI_D_Z>0&&CNC_GDI_D_y>=60&&CNC_GDI_D_x>=70&&CNC_GDI_D_y<=500&&CNC_GDI_D_x<=850)
- {
- //记录刀路
- CNC_GDI_DL[CNC_GDI_D_y-60][CNC_GDI_D_x-70]=CNC_GDI_D_Z;
- }
- for(y=0;y<440;y++)
- for(x=0;x<780;x++)
- {
- if(CNC_GDI_DL[y][x]!=0)
- {
- SetPixel (hdc, x+70, y+60,RGB(0,0,255));
- }
- }
- }
- void CNC::CNC_GDI_DC(void)
- {
- //初始化绘图DC
- CWnd * pWnd = AfxGetMainWnd();
- HWND haha = pWnd->m_hWnd;
- hdc = GetDC(haha); //这个DC为全局的
- hpen_x=CreatePen(PS_SOLID,1, RGB(255,255,0));
- hbrush_x=CreateSolidBrush(RGB(255,255,0));
- hpen_y=CreatePen(PS_SOLID,1, RGB(0,255,0));
- hbrush_y=CreateSolidBrush(RGB(0,255,0));
- hpen_z=CreatePen(PS_SOLID,1, RGB(255,0,0));
- hbrush_z=CreateSolidBrush(RGB(255,0,0));
- hpen_D=CreatePen(PS_SOLID,1, RGB(0,0,255));
- hpen_cls=CreatePen(PS_SOLID,1, RGB(0,0,0));
- hbrush_cls=CreateSolidBrush(RGB(0,0,0));
- hpen_GJ=CreatePen(PS_SOLID,1, RGB(128,255,255));
- hbrush_GJ=CreateSolidBrush(RGB(128,255,255));
- }
- void CNC::CNC_GDI(void)
- {
- CNC_GDI_CLS();
- // 为DC选择笔和笔刷
- SelectObject(hdc, hpen_x);
- SelectObject(hdc, hbrush_x);
- // 绘制x轴框架
- Rectangle( hdc,CNC_GDI_X_x,CNC_GDI_X_y,CNC_GDI_X_x+900,CNC_GDI_X_y+10 );
- Rectangle( hdc,CNC_GDI_X_x,CNC_GDI_X_y+510,CNC_GDI_X_x+900,CNC_GDI_X_y+10+510 );
- ///////////////////////////////////////////////////
- // 为DC选择笔和笔刷
- SelectObject(hdc, hpen_y);
- SelectObject(hdc, hbrush_y);
- // 绘制y轴框架
- Rectangle( hdc,CNC_GDI_Y_x,CNC_GDI_Y_y,CNC_GDI_Y_x+10,CNC_GDI_Y_y+540 );
- Rectangle( hdc,CNC_GDI_Y_x+40,CNC_GDI_Y_y,CNC_GDI_Y_x+10+40,CNC_GDI_Y_y+540 );
- ///////////////////////////////////////////////////
- // 为DC选择笔和笔刷
- SelectObject(hdc, hpen_z);
- SelectObject(hdc, hbrush_z);
- // 绘制z轴框架
- Rectangle( hdc,CNC_GDI_Z_x,CNC_GDI_Z_y,CNC_GDI_Z_x+70,CNC_GDI_Z_y+10 );
- Rectangle( hdc,CNC_GDI_Z_x,CNC_GDI_Z_y+40,CNC_GDI_Z_x+70,CNC_GDI_Z_y+10+40 );
- Rectangle( hdc,CNC_GDI_Z_x+30,CNC_GDI_Z_y+20,CNC_GDI_Z_x+40,CNC_GDI_Z_y+30);
- }
- void CNC::CNC_COM(void)
- {
- //从串口输出三轴步进电机驱动信号
- }
- void CNC::CNC_DuiDao(void)
- {
- //手动对刀设置原点
- CNC_YS_X=CNC_GDI_D_x;
- CNC_YS_Y=CNC_GDI_D_y;
- CNC_YS_Z=CNC_GDI_D_Z;
- }
- void CNC::CNC_X_进(void)
- {
- //x轴进给一个单位
- if(CNC_GDI_Y_x<(CNC_GDI_X+840))
- {
- CNC_GDI_Y_x+=1;
- CNC_GDI_Z_x+=1;
- CNC_GDI_D_x+=1;
- CNC_GDI();
- CNC_COM();
- }
- }
- void CNC::CNC_X_退(void)
- {
- //x轴后退一个单位
- if(CNC_GDI_Y_x>CNC_GDI_X+10)
- {
- CNC_GDI_Y_x-=1;
- CNC_GDI_Z_x-=1;
- CNC_GDI_D_x-=1;
- CNC_GDI();
- CNC_COM();
- }
- }
- void CNC::CNC_Y_进(void)
- {
- //y轴进给一个单位
- if(CNC_GDI_Z_y<(CNC_GDI_Y+460))
- {
- CNC_GDI_Z_y+=1;
- CNC_GDI_D_y+=1;
- CNC_GDI();
- CNC_COM();
- }
- }
- void CNC::CNC_Y_退(void)
- {
- //y轴后退一个单位
- if(CNC_GDI_Z_y>(CNC_GDI_Y+10))
- {
- CNC_GDI_Z_y-=1;
- CNC_GDI_D_y-=1;
- CNC_GDI();
- CNC_COM();
- }
- }
- void CNC::CNC_Z_进(void)
- {
- if(CNC_GDI_D_Z<10)
- {
- CNC_GDI_D_Z+=1;
- }
- CNC_GDI();
- CNC_COM();
- }
- void CNC::CNC_Z_退(void)
- {
- if(CNC_GDI_D_Z>0)
- {
- CNC_GDI_D_Z-=1;
- }
- CNC_GDI();
- CNC_COM();
- }
- int CNC::CNC_G00(char x,int x_z,char y,int y_z,char z,int z_z)
- {
- //G00指令实现
- int a,b,c;
- CNC_GDI_D_Z=0;
- for( a=1,b=1,c=1;a==1||b==1||c==1;)
- {
- if((x_z+CNC_YS_X)==CNC_GDI_D_x)
- {
- a=0;
- } else if((x_z+CNC_YS_X)<CNC_GDI_D_x&&a==1)
- {
- CNC_X_退();
- }else if((x_z+CNC_YS_X)>CNC_GDI_D_x&&a==1)
- {
- CNC_X_进();
- }
- if((y_z+CNC_YS_Y)==CNC_GDI_D_y)
- {
- b=0;
- } else if((y_z+CNC_YS_Y)<CNC_GDI_D_y&&b==1)
- {
- CNC_Y_退();
- }else if((y_z+CNC_YS_Y)>CNC_GDI_D_y&&b==1)
- {
- CNC_Y_进();
- }
- if((z_z+CNC_YS_Z)==CNC_GDI_D_Z)
- {
- c=0;
- } else if((z_z+CNC_YS_Z)<CNC_GDI_D_Z&&c==1)
- {
- CNC_Z_退();
- }else if((z_z+CNC_YS_Z)>CNC_GDI_D_Z&&c==1)
- {
- CNC_Z_进();
- }
- Sleep(10);
- }
- return 1;
- }
- int CNC::CNC_G01(char x,int x_z,char y,int y_z,char z,int z_z,int f)
- {
- //G00指令实现
- int a,b,c;
- for( a=1,b=1,c=1;a==1||b==1||c==1;)
- {
- if((x_z+CNC_YS_X)==CNC_GDI_D_x)
- {
- a=0;
- } else if((x_z+CNC_YS_X)<CNC_GDI_D_x&&a==1)
- {
- CNC_X_退();
- }else if((x_z+CNC_YS_X)>CNC_GDI_D_x&&a==1)
- {
- CNC_X_进();
- }
- if((y_z+CNC_YS_Y)==CNC_GDI_D_y)
- {
- b=0;
- } else if((y_z+CNC_YS_Y)<CNC_GDI_D_y&&b==1)
- {
- CNC_Y_退();
- }else if((y_z+CNC_YS_Y)>CNC_GDI_D_y&&b==1)
- {
- CNC_Y_进();
- }
- if((z_z+CNC_YS_Z)==CNC_GDI_D_Z)
- {
- c=0;
- } else if((z_z+CNC_YS_Z)<CNC_GDI_D_Z&&c==1)
- {
- CNC_Z_退();
- }else if((z_z+CNC_YS_Z)>CNC_GDI_D_Z&&c==1)
- {
- CNC_Z_进();
- }
- Sleep(f);
- }
- return 1;
- }
复制代码
|