DIY CNC Machine.Taipei 造訪社團 » CNC

原文網址 石小川
2019-08-14 13:40:17

淺談 G-Code 產生器

窮忙一陣子後今天終於可偷閒寫一下文章跟大家分享一下上回談的G-Code產生器了. 我用最簡單的CNC圓形切割來圖文解釋一下, 相信應該可以很快了解其中運作原理.

先解釋一下Entity名詞, Entity在CAD工程上是實體的意思, AutoCAD出圖後的元件我們稱為Entity, 如圓弧, 直線, 雲行線等皆是實體. 上回提過由DWG/DXF檔案 經過程式剖析分解後產生一連串Entity的資料, 如圖一, 是圓的Entity, 將它送入GCodeCircle(Entity) 函式就可很快地產生切圓的G-Code, 下面是GCodeCircle(Entity)程式範例:

//-------------------------------------------------------------------------

public string GCodeCircle(EntityRecord entityrecord)

{

string gCode = "";

Point3D center = new Point3D(entityrecord.Circle.Center.X, entityrecord.Circle.Center.Y, entityrecord.Circle.Center.Z);

double radius = entityrecord.Circle.Radius;

Point3D point = new Point3D(0, 0, 0);

point.X = center.X + radius;

point.Y = center.Y;

gCode += "G00 X" + (point.X - center.X).ToString("#0.0000") + " " + "Y"+ (point.Y - center.Y).ToString("#0.0000") + " " + "Z5.0000"+ "\n";

//此段是為了說明已經簡化許多參數

gCode += "G01" + " " + "Z-1.0000"+ " " + "F200"+ "\n";

gCode += "G02" + " " + "I-"+ radius.ToString("#0.0000");

return gCode;

}

圖二是產生的G-Code, 可直接送去機器做切割一個100mm的正圓.

另外之前有位朋友問我5軸聯動切向跟隨實作問題, 我列出部分程式碼給您參考一下, 基本上我大部分實作都是圓弧直線插補ArcLine()就可完成.

//---------------------------------------------------------------------------

//圓弧直線跟隨插補

//pos : Z軸直線運動位置

//axisNum = 3, 圓弧+直線運動軸數 X Y Z

public boolArcLine(int startx, int starty, int endx, int endy, int cx, intcy, int[] pos, int[] axis, int dir = 0, int axisNum = 3, double acc = 10, doubletgvel = 100, double endvel = 0, double feedRate = 1.0, int wait = 1, intfifo = (int)FIFO_SEL.SEL_PFIFO1, boolbAbs = true)

{

int st;

if(axisNum < 2 || axisNum > MAX_NAXIS)

return false;

//清空PFIFO

st = IMC_Pkg.PKG_IMC_PFIFOclear(gHandle, fifo);

if(st == 0)

return false;

//設置加速度和進給率

if(SetPFIFO(acc, feedRate, fifo) == false)

return false;

//映射軸

st = IMC_Pkg.PKG_IMC_AxisMap(gHandle, axis, axisNum, fifo);

if(st == 0)

return false;

double dx,dy;

dx = startx - cx;

dy = starty - cy;

double r1 = Math.Sqrt(dx * dx + dy * dy);

dx = endx - cx;

dy = endy - cy;

double r2 = Math.Sqrt(dx * dx + dy * dy);

//判斷, 如果起點到圓心距離r1 != 終點到圓心距離r2 表示圓弧軌跡不正確, 跳出不執行

if(r1 != r2)

return false;

//由當前位置移動到指定位置

if(bAbs) //絕對位置

st = IMC_Pkg.PKG_IMC_ArcLine_Pos(gHandle, endx, endy, cx, cy, dir, pos, axisNum - 2, tgvel, endvel, wait, fifo); //絕對位置

else

st = IMC_Pkg.PKG_IMC_ArcLine_Dist(gHandle, endx, endy, cx, cy, dir, pos, axisNum - 2, tgvel, endvel, wait, fifo); //相對位置

if(st == 0)

return false;

return true;

}

圖三是我執行雷射切割的機台, 雷射頭是5.5W藍光雷射, 下回再分享此G-Code雷射切割成果.

p.s. 在我的APP程式直接畫圖我是直接呼叫運動卡驅動CNC, 沒有經過G-Code產生器這道手續, 加快CNC處理速度, 除非是匯入DWG/DXF檔案才會呼叫G-Code 產生器。

黃小法
2019-08-14 14:25:41

這個有開源?

Jade Yang
2019-08-14 15:07:20

無私 , 給你讚。字串相加可改用 $”{}”你以後看才不會累


原文網址 石小川
2019-07-11 17:28:35

DWG/DXF to CNC 工程 I - DWG/DXF圖檔解析篇

對於想用CNC製作一些零組件的朋友來說,要學會AutoCAD、SolidWork、uG、Fusion360、ARTCAM、PowerMill、 MasterCAM、Mach3等,我相信會嚇跑一票人的熱血。其實CAD/CAM套裝軟體很強但有很多功能幾百年也用不到,只是浪費錢而已,在接工廠自動控制客製化軟體方面絕大部分作動都很單純,我這裡是將所有功能精簡成 : /檔案/機器/刀具/G-Code sender,只要讀檔或在螢幕寫字、繪圖後自動產生G-Code直接送至CNC銑床或雷射加工,盡量能由機器代勞的就盡量隱藏在程式裏面,操作介面就只有一個螢幕面板Panel。

要做到這點須先解析DWG檔案結構,後續追加功能才有辦法走下去,AutoCAD DWG檔案簡直就是一個複雜的巨型圖層資料庫而且每兩年改版一次,建議還是用DXF圖檔相容性較高,有機會再談談DXF檔結構。這裡先分享一下DWG解析方法給有興趣研發的好友參考一 下。

基本上程式要解析其中的資料結構如下,有點長刪減一些函數但原理不變。

讀取DWG檔後打開資料庫取實體EntityName的字串名稱(約50個標籤名稱)一層層解析後繪圖即可原圖重現,看你要加圖、刪圖或送去產生G-Code等,另外如果用不著的功能就略過,沒必要全部實作,有興趣可一起討論,下回再討論G-Code產生器。

//-------------------------------------------------------------------

public void Draw(List<CadParse> cadparselist)

{

foreach(CadParse cadParse in cadparselist)

{

switch(cadParse.EntityName)

{

case "AcDbAlignedDimension":

break;

case "AcDbArc":

break;

case "AcDbArcDimension":

break;

case "AcDbBlockReference":

break;

case "AcDbBody":

break;

case "AcDbCircle":

DrawCircle(cadParse);

break;

case "AcDbPoint":

break;

case "AcDbDiametricDimension":

break;

case "AcDbViewport":

break;

case "AcDbEllipse":

DrawEllipse (cadParse);

break;

case "AcDbFace":

break;

case "AcDbHatch":

break;

case "AcDbLeader":

break;

case "AcDbLine":

DrawLine(cadParse);

break;

case "AcDb2LineAngularDimension":

break;

case "AcDbMInsertBlock":

break;

case "AcDbMline":

break;

case "AcDbMText":

break;

case "AcDbOle2Frame":

break;

case "AcDbOrdinateDimension":

break;

case "AcDb3PointAngularDimension":

break;

case "AcDbPolyFaceMesh":

break;

case "AcDbPolygonMesh":

break;

case "AcDbPolyline":

DrawPolyLine(cadParse);

break;

case "AcDb2dPolyline":

break;

case "AcDb3dPolyline":

break;

case "AcDbProxyEntity":

break;

case "AcDbRadialDimension":

break;

case "AcDbRasterImage":

break;

case "AcDbRay":

break;

case "AcDbRegion":

break;

case "AcDbRotatedDimension":

break;

case "AcDbShape":

break;

case "AcDbSolid":

break;

case "AcDb3dSolid":

break;

case "AcDbSpline":

break;

case "AcDbTable":

break;

case "AcDbTrace":

break;

case "AcDbWipeout":

break;

case "AcDbXline":

break;

case "AcDbPdfReference":

break;

case "AcDbDwfReference":

break;

case "AcDbDgnReference":

break;

} //end switch(cadParse.EntityName)

} //end foreach(CadParse cadParse in _cadParseList)

} //end public void Draw()


原文網址 石小川
2019-06-25 17:45:49

已將 iMC3xx2E 及 iMC4xxE/A系列所有開發工具、驅動軟體及文件都一次分享到Dropbox上,有興趣的朋友可瀏覽下載,將來我有試用版的軟體也會放在此網站提供免費試用。

我Dropbox網址如下:

只要下載壓縮檔即可 (rar, zip)

https://www.dropbox.com/…/2xu861…/AADz5dAuvRhq2Y9_M61Gp8PLa…

玩過PLC 及PC base控制後, 我現在重心主要是集中在PC base控制這一塊了, 吸引我的地方是PC base軟硬體可塑性太高了, 尤其人工智慧演算法很容易就可結合CNC機器, 這對我來說簡直是致命的吸引力, 想要做甚麼幾乎都可以, 當然不可否認的PLC還是有它的優點。

客戶通常認為PC設備便宜但還要加軟體費用很貴, 那是以前觀念, 更何況如果軟體是我們自已寫的那就另當別論了, 有這方面的技術問題歡迎互相技術交流!

謝謝囉^^

Don Si
2019-06-25 18:37:14

感謝分享

Eric Lin
2019-06-25 21:40:05

分享出去了

曾豪仁
2019-06-25 23:29:18

石兄有开班授课嗎?

陳必凱
2019-06-26 07:07:29

陳必凱
2019-06-26 07:07:52

開課+1

林志強
2019-06-27 21:39:36


原文網址 Sean Chen
2019-06-21 10:18:19

請教各位前輩

傳統銑床改CNC+伺服
是用mach3好,還是脫機控制好

有前輩改過可提供建議的嗎

Longjan Chen
2019-06-21 10:22:34

這跟預算有關係,少就用mach3好,多就用脫機控制好,更多的話可以上番那科整套系統

林志強
2019-06-21 11:57:02

推薦
方明亮

尤宏耀
2019-06-21 12:06:54

當然是脫機好,大陸一堆脫機便宜好用

Mach Chuang
2019-06-21 12:50:35

脫機+1

李派克
2019-06-21 13:09:17

脫機+1

方明亮
2019-06-21 15:00:04

您好,我專改傳統機械,歡迎詢問


原文網址 林志強
2019-06-08 20:30:57

感謝南部的朋友
情義相挺
提供優質的場地
作為
南部第一次的diy Cnc 的研討會

陳世杭
2019-06-08 21:13:19

Shih Chieh Huang
2019-06-09 13:34:30

林志強
2019-06-10 12:47:57

感謝按讚

Chihfu Huang
2019-06-23 17:27:47

好帥

Chihfu Huang
2019-06-23 17:49:47

北部桃園地區有沒有研討會??


原文網址 林建良
2019-06-05 16:52:37

以下訊息如有違反版規,敬請版主告知,將會配合立即刪文。

本人於本週六(6月8日)14:30~17:00於台北市中崙圖書館七樓視聽室進行家用小型三軸CNC機台學習與應用的心得分享會,歡迎有興趣的朋友前往以下鏈結參與活動,謝謝!

https://www.facebook.com/146196102075491/posts/2749715698390172/


原文網址 石小川
2019-06-01 14:32:26

雙眼攝影機測距 I – 設備實體製作

其實這個就是光學雷達(Lidar)的一種。在機器人視覺中模擬人眼雙目測距是最基本功夫,而且設備簡單只要兩個攝像頭加上演算法即可實現測距,沒有雷射輔助的話10公尺的誤差在1公分以內, 算是可接受範圍,精準度要看個人調校技巧了,加上雷射光或其他結構光輔助更可進一步將RGB影像加上深度資訊,換句話說就是上回談到的點雲圖了,這對機器人視覺來說太有用了。

在研讀聚合物(Polymer)時,對於壓克力的物理化學特性就深受其吸引,所以做產品或實驗時常拿壓克力練功。 因為壓克力有易碎特性,此次用CNC銑時參數調慢些, 壓克力厚: 30mm,Tool: D6*6*50,轉速: S6000, 進給: F300, 每層下切: 0.5mm,成果還不錯只是慢了些花了兩個鐘頭,下次實驗再調快否則有點大材小用,對不起這台專門銑不銹鋼模具的機器。

圖示是實作的設備,兩個攝像頭(Camera x 2) + 一個雷射頭(Laser x 1),外加演算法,就這麼簡單! 至於雙眼測距原理就是上童軍課的三角測距法,下回 “雙眼攝影機測距 I I – 原理解析” 再來聊聊了^^

p.s. 此次銑完壓克力邊緣沒後製熱處理,相信社團有很多人銑壓克力的經驗比我豐富,可來分享一下參數讓大家學習一下經驗, 感謝了^^

蔡文泰
2019-06-03 11:50:37

用雷割比較快哦


原文網址 陳啟耀
2019-05-28 19:14:28

各位CNC比較推薦脫機還是用電腦操作比較好?
各位有推薦的脫機品牌嗎?

Shih Chieh Huang
2019-05-28 19:16:26

想買多大的

陳啟耀
2019-05-28 19:17:45

我要用在3040的CNC上

Peter Chen
2019-05-28 20:21:28

Mach Chuang
2019-05-28 21:20:26

脫機+1

柯統海
2019-05-29 00:30:25

電腦問題太多 當機材料就了掉

李派克
2019-05-29 00:53:21

脫機+1

Longjan Chen
2019-05-29 11:31:04

脫機+1

Devon Hsin
2019-05-29 11:38:44

脫,加手輪

朱毓民
2019-05-29 12:07:28

脫機面板用大陸的一組含箱也要3~4萬起跳…要看cp值決定比較好,但是脫機真的穩又好用

尤宏耀
2019-05-30 22:48:44

如果機器等級不錯就用好一點脫機約2..3萬,如果是簡單的鋁擠結構5...6千的脫機系統都很好用了.主要還是看你預約玩,大陸都做的不錯每套都很好用,買來自己玩習慣就好了

李力
2019-05-30 23:56:33

想知道什麼是脫機@@


原文網址 石小川
2019-05-17 19:40:20

應用攝影機對CNC自動對刀程式的設計

對於非侵入性的偵測來說,我首推影像辨識技術,因為攝像頭價格越來越便宜,如果善用一些數位演算法的話,其實在CNC機台上可以做很多事,活用的話甚至可媲美幾百萬的進口機器。 我寫的這套VT軟體是結合了C++/C#/Qt + Mach3 + OpenCV和一些演算法來完成Z軸影像自動對刀功能,我是利用雷射來定位工件,其中攝像頭畸變須要校準才能量測準確,精密度我抓小數點第三位(單位mm)。 其它像工件尺寸量測、3D工件掃描建模直接出圖、或是機台要做手機拆解機器…等原理皆一樣,如果要做到物件直間掃描再CNC複製, 應該可挑戰一下,這就留給有興趣的人想想實作了, 先寫到這裡,祝各位好友假日愉快^^

林志強
2019-05-17 19:56:00

宜震陳
2019-05-17 20:00:39

已跪

辛育全
2019-05-17 22:20:29

哥 鏡頭可以考慮換焦段大一點的變異比較小,當然鏡頭品牌品質有差,且焦段大也不用看太多其他地方,可以增加你的解析,規格選一下可以不用校正就不要校正,然後改成背光,因為用環境光你需要限制客戶背景!


原文網址 石小川
2019-05-10 16:49:04

介紹一款CNC運動控制卡給喜歡自已寫控制程式的人參考

通常我不在社團內介紹商品以免有廣告之嫌, 不過這個運動卡我用過好幾個專案, 可控制自由度高, 一年了也沒出問題, 所以決定分享給社團好友參考.

如圖所示 IMC3xx2E 運動卡簡介: 我用的的是八軸及六軸聯動運動卡, 介面是採用RJ45網路線傳輸控制碼到機台, 以八軸卡來說內有80個輸入/ 48個輸出, 足夠一般機器使用, 在PC也是用ethernet 與運動卡通訊, 好處是防雜訊比USB好很多, 而且網路線可拉很長很長, 只要你網路可通的話!

我的重點是廠商有提共完整的API函數庫(VB, VC++, VC#, QT)讓你控制CNC所有功能, 包括網卡搜尋, 八軸運動, I/O狀態, 圓弧直線插補, 族繁不及備載, 該有的應該都有了, 端看你要如何應用, 我打算用跑Linux 的ARM板做脫機, 我這裡有一些相關pdf資料, 如果有興趣的人可mail我.

程式控制很簡單, 以C#為例:

(1)專案加入IMC_PKG.cs

(2)程式前面加上 using imcpkg;

//---------------------------------------------------------------------

//單軸連續移動(continue)

private void MachineMove(int axis, bool bDirection)

{

double acc = 10;

double startvel = 100;

double tgvel = 100;

IMC_Pkg.PKG_IMC_SetAccel(Global.gHandle,

acc, acc, axis);

if(bDirection)

IMC_Pkg.PKG_IMC_MoveVel(Global.gHandle,

startvel, tgvel, axis);

else

IMC_Pkg.PKG_IMC_MoveVel(Global.gHandle,

-startvel, -tgvel, axis);

}

//---------------------------------------------------------------------

//單軸移動至指定位置(step)

private void MachineMove(float pos, int axis)

{

double acc = 10;

double startvel = 100;

double tgvel = 100;

int pulse_per_mm = 5120; //steps_per=pulse/mm

int dist = (int)(pos * pulse_per_mm);

IMC_Pkg.PKG_IMC_SetAccel(Global.gHandle,

acc, acc, axis);

IMC_Pkg.PKG_IMC_MoveDist(Global.gHandle,

dist, startvel, tgvel, 0, axis);

}

//---------------------------------------------------------------------

David Chuang
2019-05-10 16:58:12

我有興趣

Allen Chang
2019-05-10 16:58:29

宜震陳
2019-05-10 17:00:32

? ?

蔣益民
2019-05-10 17:17:22

您可以將檔案分享到社團的檔案區

石小川
2019-05-10 17:28:31

ok! 已分享乙太網運動卡兩個檔案至社團檔案區, 有需要的可參考看, 軟硬體有問題可互相討論!

Don Si
2019-05-10 17:41:53

感謝分享

黃小法
2019-05-10 18:01:49

不好意思,小弟愚拙,這個該怎麼應用到CNC上??介面要自己搞??

Cheng Chris
2019-05-10 18:49:02

請教一下如果是大機台的那種可以嗎

辛育全
2019-05-10 19:33:52

哥價格落在哪?

盧人菖
2019-05-10 22:02:48

林錫義
2019-05-10 22:54:33

可以控制伺服馬達?

陳竑吾
2019-05-11 01:07:41

謝謝推薦!很實用的資訊

吳忠哲
2019-05-11 11:17:22

用這個來做CNC的話,可以享受自己搞一個Mach3的樂趣是嗎?


 

全不選 發文排行