• 3D列印服務
  • COSPLAY 3D 建模
  • #maker+t=market
  • 1
  • 2
  • 3

DIY CNC Machine.Taipei 造訪社團 » 組裝

原文網址 石小川
2019-10-03 19:28:13

使用Python語言做自動控制的方法 - I 軟體篇

[語法簡單明瞭]

Python語法簡單易學,最重要的是還有大量功能強大的免費模組可下載,其強大的應用層面已經發展到令人不可忽視的重要地位,甚至NASA也拿來當作航太人機介面的控制語言。早期接的專案我都是用Assembly、C、C++、C#等設計自動控制系統,這幾年我很多是改用Python來撰寫,好處是取得系統傳回的資料後,可很容易且快速的結合各種海量模組演算法發展出很專業的人工智慧機器。

[Python是跨平台語言]

Python本身沒有支援特定硬體控制的功能,也正因為如此它才能夠跨平台,但這不是原罪,相反的卻是它的優點,換句話說,在x86、Arm、Arduino、PC、手機或平板等不同的作業系統環境下,相同的程式皆可以很容易互相移植過去正常執行,這 print('免費資源 + 免費的模組 + 簡單易學') 根本是一場世界革命,能不紅嗎!

綜合以上講了一大堆,無非就是要說服工程師們是該改變自已接受世界脈動的時候了,我也不例外,以此共勉之!

[軟體開發]

接下來進入主題談論如何用Python開發一個多軸的CNC平台,會舉這個CNC專題當作例子是因為在我眼裡,CNC其實就是一個機器人,我的經驗是~只要搞懂CNC軟硬體知識後,無論是自駕車、四軸無人機或是工具機皆是囊中物,至於想要用它做些甚麼,端看你無限的想像力而定!

因為Python沒有直接存取硬體的介面,我的方法是用Python當作主程式,將底層存取硬體的API程式(動態連結程式庫 DLL)封裝成Python可調用的格式即可,如此一來多年使用C++/C#寫的程式庫都可引用了。因為程式很長, 為免洗板我簡略敘說過程如下:

(A). 封裝DLL程式庫成PyCNC.py 模組,其中 class __IMC_Pkg()就是封裝成類別的名稱, 將來Python與機器溝通的介面就是依靠這項。

#---------------------------------------------------------------------------

# 這是被呼叫的模組 : PyCNC.py

#---------------------------------------------------------------------------

# 需引用ctypes

import ctypes

import ctypes.wintypes

#------------------------------------------------------------------------------

class __IMC_Pkg():

def __init__(self):

self.ptr = ctypes.WinDLL('IMC_Pkg.dll') # _stdcall

#---------------------------------------------------------------------------

def Open(self, netcardId, imcId):

self.ptr.PKG_IMC_Open.argtypes = (ctypes.c_int, ctypes.c_int)

self.ptr.PKG_IMC_Open.restype = ctypes.POINTER(ctypes.c_voidp)

return self.ptr.PKG_IMC_Open(netcardId, imcId) #---------------------------------------------------------------------------

def Close(self, handle):

self.ptr.PKG_IMC_Close.argtypes = (ctypes.POINTER(ctypes.c_voidp), )

self.ptr.PKG_IMC_Close.restype = ctypes.c_int

return self.ptr.PKG_IMC_Close(handle)

#---------------------------------------------------------------------------

def MoveAbs(self, handle, pos, startvel, tgvel, wait, axis):

self.ptr.PKG_IMC_MoveAbs.argtypes = (ctypes.POINTER(ctypes.c_voidp), ctypes.c_int, ctypes.c_double, ctypes.c_double, ctypes.c_int, ctypes.c_int) self.ptr.PKG_IMC_MoveAbs.restype = ctypes.c_int

return self.ptr.PKG_IMC_MoveAbs(handle, pos, startvel, tgvel, wait, axis)

#---------------------------------------------------------------------------

def MoveAbs_P(self, handle, pos, startvel, tgvel, wait, axis): # P 輔助座標

self.ptr.PKG_IMC_MoveAbs_P.argtypes = (ctypes.POINTER(ctypes.c_voidp), ctypes.c_int, ctypes.c_double, ctypes.c_double, ctypes.c_int, ctypes.c_int) self.ptr.PKG_IMC_MoveAbs_P.restype = ctypes.c_int

return self.ptr.PKG_IMC_MoveAbs_P(handle, pos, startvel, tgvel, wait, axis)

.

.

(B). 主程式motion.py 要引用也很簡單, 只要加上PyCNC.py模組,就可以調用IMC_Pkg所有的功能

#---------------------------------------------------------------------------

# 這是主程式 : motion.py

#---------------------------------------------------------------------------

from CNC import PyCNC

IMC_Pkg = PyCNC.__IMC_Pkg()

#---------------------------------------------------------------------------

if(self.gHandle != None):

IMC_Pkg.Close(self.gHandle)

self.gHandle = IMC_Pkg.Open(netcardId, imcId)

if(self.gHandle != None): #//if(IsOpen())

if(IMC_Pkg.InitCfg(self.gHandle) != 0):

self.nAxis = IMC_Pkg.GetNaxis(self.gHandle) # 取得設備支援軸數

p, self.Position = self.GetPosition(3)

(C). 建議開發環境安裝Anaconda開發包, 在設計Python程式時可少走很多冤枉路,為了相容以前DLL程式庫,我是下載Anaconda3 - 32bit - Python3.7.3版本。

p.s. (1). IMC3xx/IMC4xx系列運動控制卡所有函數(IMC_Pkg.dll)我都有封裝成PyCNC.py以方便Python呼叫,有興趣的朋友可加入我臉書討論。

((2). 圖-1. 八軸運動+I/O+AD/DA控制卡應用圖例

圖-2. motion.py 主程式的視窗介面

影片-1. 使用motion.py 展示CNC軸控,也順便Demo飛行搖桿控制3軸及發射雷射

影片-2. 電腦執行motion.py情形

影片-3. 使用motion.py 執行G-Code,用雷射雕刻一個正圓

(3). 下回有機會再補上 : "使用Python語言做自動控制的方法 - I I 硬體篇"及 "使用Python語言做自動控制的方法 - I I I 通信篇" (UART、USB、TCP/IP)兩篇才算完整,並且教導大家如何組裝一台三軸運動控制平台的知識(機械結構及控制電路的接法),對於想創業設計自已機器的朋友不要錯過了。在臉書不適合長篇大論所以只能簡單敘述,總感覺見樹不見林,當然我也有開相關的指導課程,有興趣的朋友可上我臉書或私訊我。

Wei-Hsiung Huang
2019-10-03 19:48:42

Nice..

便宜十塊錢
2019-10-03 19:49:49

Python好用+1
我幫公司做一個簡易Web資訊看板
用一台PLC+乙太模組做收集各產線資訊
(我很懶得拓樸一大堆通訊線,跑RS485 To Zigbee)
由乙太模組把資訊先推到ModbusTCP層
再由Python讀ModbusTCP把讀到的值推到前端Web上
簡易的產能看板
跨平台真的好用

吳小東
2019-10-03 22:16:58

深深認同

石小川
2019-10-03 23:30:37

good job! 這是很好的應用, 以前接工廠資料收集器專案, 通信用RS232, 十台一大捆線, 現在看太不可思議了, 哈哈^^

便宜十塊錢
2019-10-03 23:57:01

石小川 我收集的PLC有做類心跳封包,只對有開機的機台通訊,不然Timeout會拖慢速度,越多台沒開越慢,所有的數值都在各機台PLC處理好,再收集
另外還有外加自動紀錄(5天)+控制各站自動歸零(各站開機時規零)

便宜十塊錢
2019-10-04 00:08:16

這個是第一個有線通訊(4台)
現在在做的無線(9台)快好了
規劃排點位跟處理問題較麻煩 ?

石小川
2019-10-04 12:12:53

感謝分享, 在關燈無人工廠掘起後, 機台間的通信越來越重要了, 大大的技術應該很有潛力, 我還停留在十幾年前TCP/IP抓封包技術, 有機會再請教您^^


原文網址 石小川
2019-08-17 16:45:50

G-Code雷射切割成果

趁假日趕快補上回未完的下集!

在設計CNC刀路軟體時, 如果能掌握多軸聯動及圓弧直線插補演算法技巧, 那差不多成功一半了, 有心要走設計機器手定位的人一定要熟悉。DWG/DXF轉CNC程式內部採用Double雙倍浮點運算,至少抓小數點第四位,如果機器校準正確的話精度應沒問題。

此次臨時組裝一個雷射機台做軟體測試,使用一顆5.5W藍光半導體雷射頭做工件雕刻, 圖中皆是用上回介紹的圓弧插補演算法用雷射刻出直徑50mm的全圓, 刀路頭尾都準確接合, 真圓度也高,已符合一般業界需求了。

圖一是製作飛機用的巴沙木。(表面雕刻, 雷射頭停留久時可切斷、貫穿)

圖二是厚皮革。(表面雕刻, 雷射頭停留久時可切斷、貫穿)

圖三是一般影印紙。(切斷)

p.s. 如果要切斷材料功能,可用程式設定進給將G-Code Fxxxx調慢些, 或換功率更大的雷射頭。


原文網址 石小川
2019-02-01 20:22:47

Q2光學自動檢測控制機台組裝完成

先簡單分享一下PC base機台硬體如下, 過完年後再分享一些機台如何結合AI應用篇。(ARM base 機台年後也會產出)

PC控制器採用8軸聯動(目前只用4軸, 其餘留給機械手臂), 80個輸入/ 48個輸出, 用TCP/IP RJ45網路線傳輸控制碼控制機台, 工業相機是採用1400萬像素, 及附加一個觸控螢幕. 所有功能可用C++或C#程式自由控制, 應該足夠一般工廠自動化機台使用了!

p.s. 有需要瞭解或組裝的好友可私密我! 祝大家新年快樂囉 ^^

Kenny Plus
2019-02-01 20:29:08

請私,謝謝

Eric Lin
2019-02-01 23:07:11

厲害

周英男
2019-02-02 16:45:57

請問用的是什麼控制卡?

曾鈺憲
2019-02-03 08:50:18

辛育全
2019-03-03 00:03:05

"機台如何結合AI應用篇"???
看不懂後面預計做的目標是...???


原文網址 林志強
2018-10-12 20:34:04

阿強二號
4050
全鋼型試組裝
成功

梁慶鴻
2018-10-12 20:37:54

500*1000*300?

Roland Shiu
2018-10-12 23:42:45

看起來很重

Viliterosity Chen
2018-10-13 09:02:55

閃閃發亮

林志強
2018-10-14 20:54:39

感謝按讚

林志強
2018-10-28 19:34:06

感謝按讚

林志強
2018-10-30 10:20:11

感謝按讚


原文網址 林志強
2018-07-30 15:44:02

阿強二號
試組裝完畢
準備 送硬陽
跟染黑

林志強
2018-07-30 16:43:39

感謝捧場

平凡
2018-07-30 17:00:44

厲害

梁樺暐
2018-07-30 19:50:41

算是3D雕銑機嗎

林志強
2018-07-30 22:25:12

感謝捧場

Master Alves
2018-07-31 01:01:09

如何拥有cnc程序

Master Alves
2018-07-31 01:01:42

alemaochaveiro@hotmail.com

林志強
2018-07-31 10:27:12

感謝捧場

平凡
2018-07-31 11:42:04

方便有空可以過去看看聊天嗎

林志強
2018-07-31 11:53:35

歡迎

梁樺暐
2018-07-31 12:05:44

做木雕,銅鋁應該沒問題吧

林志強
2018-07-31 12:46:13

一定沒問題

林志強
2018-07-31 14:56:33

感謝捧場

林志強
2018-09-20 21:01:43


原文網址 林志強
2018-07-18 23:14:37

加工完畢
明天開始
試組裝
再來送硬陽
跟染黑
................
腳很痛
身體很累
但我卻是自得其樂
這就是
熱情啊

黃俊凱
2018-07-18 23:44:16

水啦,還送去硬陽ㄟ,搞工喔

Longjan Chen
2018-07-19 06:57:20

加油,希望以後越做越好

林志強
2018-07-22 23:51:46

感謝捧場

林志強
2018-07-22 23:52:08

歡迎帶料試機

林志強
2018-07-29 21:44:07

感謝捧場

林志強
2018-08-01 20:02:29

感謝捧場


原文網址 尤宏耀
2017-12-23 16:36:22

銑了兩天的零件,假組裝假掰一下......

廖元佑
2017-12-23 16:37:13

小台了點

Mach Chuang
2017-12-24 16:31:43

你是要裝前陣子買的那支換刀主軸嗎??

Hoang Thang
2018-02-20 22:53:08

This machine for cut the steel or wood bro ?

尤宏耀
2018-03-29 23:13:44

掛上z軸....

Mach Chuang
2018-03-29 23:14:55

看來離完工不遠了!!

戴健吉
2018-03-31 13:13:29

門框哪家的能介紹一下嗎


原文網址 林志強
2017-08-05 15:32:05

我的阿強一號
終於組裝製作完成
還差電控
每一顆零件都是
自己用下班時間製作

每做完一件
心中就有無比的踏實感
Diy 的感覺就是這樣

王智立
2017-08-05 16:39:01

有工具機真好。

Hidibe G-power
2017-08-05 17:01:48

超讚的!!!我想主軸可以用瓦數高一點!!

梁樺暐
2017-08-05 17:46:25

要上那去買ㄚ


原文網址 洪志仁
2017-07-27 10:43:15

有了新歡,舊愛也不能忘,搬完家重新組裝後,就一直沒校正,要開始接單了,桌面修一下吧!

Tommy Lin
2017-07-27 10:45:20

好長~很適合下料切割用。哈~

洪志仁
2017-07-27 10:50:52

是的,原設計X1800

洪志仁
2017-07-27 10:53:15

這台應該是全台灣的第二台DIY CNC吧!? 已經十幾年了!

Tommy Lin
2017-07-27 10:54:05

怎說~那誰是第一台?

洪志仁
2017-07-27 10:55:18

賣我控制器的是第一台,那個時候我找遍網路都沒有看到。

王銘
2017-07-27 12:23:26

好有趣的cnc,可以參觀嗎?

洪志仁
2017-07-27 12:25:30

抱歉,在家裡不方便喔!若是以前在外面時,我都很歡迎,以前最多一次來了30個人來參觀咧!

Tako Sun
2017-07-27 13:28:08

有用過這塊的話,HOMENADE DIY CNC 應該可以排到100名內。
當年網路不發達,只有從事資訊相關或想法先進的人,才會去申請網路,那年,我申請中華電信撥接時,我還沒當兵,我民國81年退伍。
這塊是哪一國人開源的?如果回答的出來,就是骨灰級玩家了 XD

洪志仁
2017-07-27 13:51:40

喔!這樣您比我更早了喔!很高興認識您! 不過我民國81還是82年就有在上網了喔!

Michael Lin
2017-07-27 20:53:20

要手焊的嗎?這是我現在還在服役的板子...

Tim Chang
2017-07-29 13:10:14

上面那塊板子我還有全新空板,有沒有人要

Tim Chang
2017-07-29 13:12:11

最早還有用GMFC軟體切保麗龍的cnc,我還有一台控制器,不過泡過水了XD


原文網址 Devon Hsin
2017-07-09 13:12:51

話說大家都用什麼方式校正垂直?

比方說我組的移動龍門,Y軸雖然採用大部分人不傾向的左右雙螺桿設計,但它倒是有個好處,就是可以事後調整XY之間的垂直

若是一般中置一支螺桿的Y軸,都怎麼修正組裝造成的垂直誤差呢?