久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4837|回復: 1
打印 上一主題 下一主題
收起左側

串口三軸CNC控制類(只實現了G00和G01兩條命令)

[復制鏈接]
跳轉到指定樓層
樓主
ID:72008 發表于 2015-1-11 20:11 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include
  2. using namespace std;

  3. class CNC //CNC控制類
  4. {
  5. //私有方法部分
  6. protected:
  7. int CNC_x;//x軸當前值
  8. int CNC_y;//y軸當前值
  9. int CNC_Z;//z軸當前值
  10. int CNC_YS_X;//原點x坐標值
  11. int CNC_YS_Y;//原點y坐標值
  12. int CNC_YS_Z;//原點z坐標值

  13. //屏幕GDI函數用到的一些坐標
  14. int CNC_GDI_X; //屏幕顯示偏移坐標
  15. int CNC_GDI_Y;
  16. int CNC_GDI_X_x; //x框架軸坐標
  17. int CNC_GDI_X_y;
  18. int CNC_GDI_Y_x; //y軸框架坐標
  19. int CNC_GDI_Y_y;
  20. int CNC_GDI_Z_x; //z軸框架坐標
  21. int CNC_GDI_Z_y;
  22. int CNC_GDI_D_x; /具位置坐標
  23. int CNC_GDI_D_y;
  24. int CNC_GDI_D_Z; //下刀深度

  25. //GDI函數用到的一些句柄
  26. HDC hdc; //獲取繪圖DC句柄
  27. HPEN hpen_x; //x軸畫筆
  28. HBRUSH hbrush_x; //x軸畫刷
  29. HPEN hpen_y; //y軸畫筆
  30. HBRUSH hbrush_y; //y軸畫刷
  31. HPEN hpen_z; //z軸畫筆
  32. HBRUSH hbrush_z; //z軸畫刷
  33. HPEN hpen_D; /路畫筆
  34. HPEN hpen_cls; //清屏畫筆
  35. HBRUSH hbrush_cls; //清屏畫刷
  36. HPEN hpen_GJ; //工件畫筆
  37. HBRUSH hbrush_GJ; //工件畫刷




  38. //公共方法部分
  39. public:
  40. CNC(void);
  41. ~CNC(void);
  42. void CNC_GDI_DC(void); //初始化GDI繪圖相關句柄
  43. void CNC_GDI_CLS(void); //清屏并畫工件
  44. void CNC_GDI(void); //屏幕輸出CNC狀態
  45. void CNC_X_進(void); //x軸操作
  46. void CNC_X_退(void);
  47. void CNC_Y_進(void); //y軸操作
  48. void CNC_Y_退(void);
  49. void CNC_Z_進(void); //z軸操作
  50. void CNC_Z_退(void);
  51. void CNC_COM(void); //COM口驅動信號輸出
  52. void CNC_DuiDao(void); //手動對刀設置原點
  53. int CNC_G00(char x,int x_z,char y,int y_z,char z,int z_z); //G00指令實現
  54. int CNC_G01(char x,int x_z,char y,int y_z,char z,int z_z,int f); //G01指令實現
  55. };


  56. #include "stdafx.h"
  57. #include "CNC控制.h"

  58. int CNC_GDI_DL[440][780];

  59. CNC::CNC(void)
  60. {
  61. //初始化
  62. //屏幕顯示參考坐標,整個三軸都以此點為偏移
  63. CNC_GDI_X=30;
  64. CNC_GDI_Y=20;
  65. //為x,y,z軸坐標值及刀具位置坐標賦初值
  66. CNC_GDI_X_x=CNC_GDI_X; //x軸寬度為900像素
  67. CNC_GDI_X_y=CNC_GDI_Y;
  68. CNC_GDI_Y_x=CNC_GDI_X_x+10; //y軸寬度為500像素
  69. CNC_GDI_Y_y=CNC_GDI_X_y-10;
  70. CNC_GDI_Z_x=CNC_GDI_Y_x-10; //z軸深度屏幕上無法表示出來
  71. CNC_GDI_Z_y=CNC_GDI_Y_y+20;
  72. CNC_GDI_D_x=CNC_GDI_Z_x+35; /具位置坐標
  73. CNC_GDI_D_y=CNC_GDI_Z_y+25;
  74. CNC_GDI_D_Z=0; //下刀深度初始化
  75. int x,y;
  76. for(y=0;y<440;y++)
  77. for(x=0;x<780;x++)
  78. {
  79. CNC_GDI_DL[y][x]=0;
  80. }

  81. //////////////////////////////////////
  82. //初始化原點
  83. CNC_YS_X=CNC_GDI_D_x;
  84. CNC_YS_Y=CNC_GDI_D_y;
  85. CNC_YS_Z=CNC_GDI_D_Z;


  86. }

  87. CNC::~CNC(void)
  88. {
  89. // 釋放資源
  90. DeleteObject(hpen_x);
  91. DeleteObject(hbrush_x);
  92. DeleteObject(hpen_y);
  93. DeleteObject(hbrush_y);
  94. DeleteObject(hpen_z);
  95. DeleteObject(hbrush_z);
  96. DeleteObject(hpen_x);
  97. DeleteObject(hpen_D);
  98. DeleteObject(hpen_x);

  99. }

  100. void CNC::CNC_GDI_CLS(void)
  101. {
  102. // 為DC選擇筆和筆刷
  103. SelectObject(hdc, hpen_cls);
  104. SelectObject(hdc, hbrush_cls);
  105. // 繪制清屏矩形
  106. Rectangle( hdc,0,0,900,550 );
  107. // 為DC選擇筆和筆刷
  108. SelectObject(hdc, hpen_GJ);
  109. SelectObject(hdc, hbrush_GJ);
  110. // 繪制工件矩形
  111. Rectangle( hdc,80,60,800,500 );
  112. //繪制刀路
  113. int x,y;
  114. 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)
  115. {
  116. //記錄刀路

  117. CNC_GDI_DL[CNC_GDI_D_y-60][CNC_GDI_D_x-70]=CNC_GDI_D_Z;
  118. }

  119. for(y=0;y<440;y++)
  120. for(x=0;x<780;x++)
  121. {
  122. if(CNC_GDI_DL[y][x]!=0)
  123. {
  124. SetPixel (hdc, x+70, y+60,RGB(0,0,255));
  125. }
  126. }

  127. }

  128. void CNC::CNC_GDI_DC(void)
  129. {
  130. //初始化繪圖DC
  131. CWnd * pWnd = AfxGetMainWnd();
  132. HWND haha = pWnd->m_hWnd;
  133. hdc = GetDC(haha); //這個DC為全局的
  134. hpen_x=CreatePen(PS_SOLID,1, RGB(255,255,0));
  135. hbrush_x=CreateSolidBrush(RGB(255,255,0));
  136. hpen_y=CreatePen(PS_SOLID,1, RGB(0,255,0));
  137. hbrush_y=CreateSolidBrush(RGB(0,255,0));
  138. hpen_z=CreatePen(PS_SOLID,1, RGB(255,0,0));
  139. hbrush_z=CreateSolidBrush(RGB(255,0,0));
  140. hpen_D=CreatePen(PS_SOLID,1, RGB(0,0,255));
  141. hpen_cls=CreatePen(PS_SOLID,1, RGB(0,0,0));
  142. hbrush_cls=CreateSolidBrush(RGB(0,0,0));
  143. hpen_GJ=CreatePen(PS_SOLID,1, RGB(128,255,255));
  144. hbrush_GJ=CreateSolidBrush(RGB(128,255,255));

  145. }

  146. void CNC::CNC_GDI(void)
  147. {
  148. CNC_GDI_CLS();
  149. // 為DC選擇筆和筆刷
  150. SelectObject(hdc, hpen_x);
  151. SelectObject(hdc, hbrush_x);
  152. // 繪制x軸框架
  153. Rectangle( hdc,CNC_GDI_X_x,CNC_GDI_X_y,CNC_GDI_X_x+900,CNC_GDI_X_y+10 );
  154. Rectangle( hdc,CNC_GDI_X_x,CNC_GDI_X_y+510,CNC_GDI_X_x+900,CNC_GDI_X_y+10+510 );
  155. ///////////////////////////////////////////////////
  156. // 為DC選擇筆和筆刷
  157. SelectObject(hdc, hpen_y);
  158. SelectObject(hdc, hbrush_y);
  159. // 繪制y軸框架
  160. Rectangle( hdc,CNC_GDI_Y_x,CNC_GDI_Y_y,CNC_GDI_Y_x+10,CNC_GDI_Y_y+540 );
  161. Rectangle( hdc,CNC_GDI_Y_x+40,CNC_GDI_Y_y,CNC_GDI_Y_x+10+40,CNC_GDI_Y_y+540 );
  162. ///////////////////////////////////////////////////
  163. // 為DC選擇筆和筆刷
  164. SelectObject(hdc, hpen_z);
  165. SelectObject(hdc, hbrush_z);
  166. // 繪制z軸框架
  167. Rectangle( hdc,CNC_GDI_Z_x,CNC_GDI_Z_y,CNC_GDI_Z_x+70,CNC_GDI_Z_y+10 );
  168. Rectangle( hdc,CNC_GDI_Z_x,CNC_GDI_Z_y+40,CNC_GDI_Z_x+70,CNC_GDI_Z_y+10+40 );
  169. Rectangle( hdc,CNC_GDI_Z_x+30,CNC_GDI_Z_y+20,CNC_GDI_Z_x+40,CNC_GDI_Z_y+30);
  170. }

  171. void CNC::CNC_COM(void)
  172. {
  173. //從串口輸出三軸步進電機驅動信號
  174. }

  175. void CNC::CNC_DuiDao(void)
  176. {
  177. //手動對刀設置原點
  178. CNC_YS_X=CNC_GDI_D_x;
  179. CNC_YS_Y=CNC_GDI_D_y;
  180. CNC_YS_Z=CNC_GDI_D_Z;
  181. }

  182. void CNC::CNC_X_進(void)
  183. {
  184. //x軸進給一個單位
  185. if(CNC_GDI_Y_x<(CNC_GDI_X+840))
  186. {
  187. CNC_GDI_Y_x+=1;
  188. CNC_GDI_Z_x+=1;
  189. CNC_GDI_D_x+=1;
  190. CNC_GDI();
  191. CNC_COM();
  192. }
  193. }

  194. void CNC::CNC_X_退(void)
  195. {
  196. //x軸后退一個單位
  197. if(CNC_GDI_Y_x>CNC_GDI_X+10)
  198. {
  199. CNC_GDI_Y_x-=1;
  200. CNC_GDI_Z_x-=1;
  201. CNC_GDI_D_x-=1;
  202. CNC_GDI();
  203. CNC_COM();
  204. }
  205. }

  206. void CNC::CNC_Y_進(void)
  207. {
  208. //y軸進給一個單位
  209. if(CNC_GDI_Z_y<(CNC_GDI_Y+460))
  210. {
  211. CNC_GDI_Z_y+=1;
  212. CNC_GDI_D_y+=1;
  213. CNC_GDI();
  214. CNC_COM();
  215. }
  216. }

  217. void CNC::CNC_Y_退(void)
  218. {
  219. //y軸后退一個單位
  220. if(CNC_GDI_Z_y>(CNC_GDI_Y+10))
  221. {
  222. CNC_GDI_Z_y-=1;
  223. CNC_GDI_D_y-=1;
  224. CNC_GDI();
  225. CNC_COM();
  226. }
  227. }

  228. void CNC::CNC_Z_進(void)
  229. {
  230. if(CNC_GDI_D_Z<10)
  231. {
  232. CNC_GDI_D_Z+=1;
  233. }
  234. CNC_GDI();
  235. CNC_COM();
  236. }

  237. void CNC::CNC_Z_退(void)
  238. {
  239. if(CNC_GDI_D_Z>0)
  240. {
  241. CNC_GDI_D_Z-=1;
  242. }
  243. CNC_GDI();
  244. CNC_COM();
  245. }

  246. int CNC::CNC_G00(char x,int x_z,char y,int y_z,char z,int z_z)
  247. {
  248. //G00指令實現
  249. int a,b,c;
  250. CNC_GDI_D_Z=0;
  251. for( a=1,b=1,c=1;a==1||b==1||c==1;)
  252. {
  253. if((x_z+CNC_YS_X)==CNC_GDI_D_x)
  254. {
  255. a=0;
  256. } else if((x_z+CNC_YS_X)<CNC_GDI_D_x&&a==1)
  257. {
  258. CNC_X_退();
  259. }else if((x_z+CNC_YS_X)>CNC_GDI_D_x&&a==1)
  260. {
  261. CNC_X_進();
  262. }

  263. if((y_z+CNC_YS_Y)==CNC_GDI_D_y)
  264. {
  265. b=0;
  266. } else if((y_z+CNC_YS_Y)<CNC_GDI_D_y&&b==1)
  267. {
  268. CNC_Y_退();
  269. }else if((y_z+CNC_YS_Y)>CNC_GDI_D_y&&b==1)
  270. {
  271. CNC_Y_進();
  272. }

  273. if((z_z+CNC_YS_Z)==CNC_GDI_D_Z)
  274. {
  275. c=0;
  276. } else if((z_z+CNC_YS_Z)<CNC_GDI_D_Z&&c==1)
  277. {
  278. CNC_Z_退();
  279. }else if((z_z+CNC_YS_Z)>CNC_GDI_D_Z&&c==1)
  280. {
  281. CNC_Z_進();
  282. }
  283. Sleep(10);

  284. }


  285. return 1;
  286. }

  287. int CNC::CNC_G01(char x,int x_z,char y,int y_z,char z,int z_z,int f)
  288. {
  289. //G00指令實現
  290. int a,b,c;
  291. for( a=1,b=1,c=1;a==1||b==1||c==1;)
  292. {
  293. if((x_z+CNC_YS_X)==CNC_GDI_D_x)
  294. {
  295. a=0;
  296. } else if((x_z+CNC_YS_X)<CNC_GDI_D_x&&a==1)
  297. {
  298. CNC_X_退();
  299. }else if((x_z+CNC_YS_X)>CNC_GDI_D_x&&a==1)
  300. {
  301. CNC_X_進();
  302. }

  303. if((y_z+CNC_YS_Y)==CNC_GDI_D_y)
  304. {
  305. b=0;
  306. } else if((y_z+CNC_YS_Y)<CNC_GDI_D_y&&b==1)
  307. {
  308. CNC_Y_退();
  309. }else if((y_z+CNC_YS_Y)>CNC_GDI_D_y&&b==1)
  310. {
  311. CNC_Y_進();
  312. }

  313. if((z_z+CNC_YS_Z)==CNC_GDI_D_Z)
  314. {
  315. c=0;
  316. } else if((z_z+CNC_YS_Z)<CNC_GDI_D_Z&&c==1)
  317. {
  318. CNC_Z_退();
  319. }else if((z_z+CNC_YS_Z)>CNC_GDI_D_Z&&c==1)
  320. {
  321. CNC_Z_進();
  322. }
  323. Sleep(f);

  324. }
  325. return 1;
  326. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:243748 發表于 2017-12-3 12:47 來自手機 | 只看該作者
這是51單片機程序嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人欧美一区二区三区在线观看 | 久久久久久99 | 一区二区三区精品视频 | www.亚洲一区二区三区 | 日本精品视频在线 | 国产二区精品视频 | 91亚洲欧美 | 久久精品久久久久久 | 亚洲欧洲在线观看视频 | 一区二区三区免费 | 欧美中文字幕在线观看 | 色免费在线视频 | 18gay男同69亚洲网站 | 国产精品久久久久久久久动漫 | 日韩中文字幕一区 | 99热这里都是精品 | 欧美日韩最新 | 黄色一级大片在线免费看产 | 午夜婷婷激情 | 成人免费视频观看 | 免费网站国产 | 国产高清精品一区二区三区 | av毛片 | 国产一级在线 | 国产ts人妖另类 | 亚洲成人日韩 | 国产一区二区三区免费视频 | 日韩在线免费视频 | 中文字幕亚洲欧美 | 99国产在线 | 久草视频2| 精品av天堂毛片久久久借种 | 久久久久无码国产精品一区 | 日韩在线视频一区 | 亚洲午夜一区二区 | 欧美日韩国产高清视频 | 视频一二三区 | 中文字幕一二三区 | 久久av一区二区三区 | 欧美日韩淫片 | 亚洲综合久久精品 |