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

DIY CNC Machine.Taipei 造訪社團 » PC

原文網址 石小川
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-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


原文網址 曾維明
2019-06-07 09:04:48

目前有8尺4尺PC板代工需求,需長期配合,台南高雄歡迎洽談

曾豪仁
2019-06-07 09:28:43

彰化可以吗?

李侑翰
2019-06-07 11:33:09

壓克力,pc,pvc,pet皆可加工

Yu Fan
2019-06-07 13:30:40


原文網址 石小川
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的樂趣是嗎?


原文網址 石小川
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-13 12:53:47

用C++/C# 程式直接控制USB Mach3 CNC運動控制卡簡介

分享給想要了解Mach3及USB控制卡如何通訊的朋友參考.

Mach3 USB程式是以HID裝置類型通訊協定作為溝通管道, 因為現在Windows 作業系統都有內建支援HID裝置的驅動程式, 所以焦點只要設計PC應用程式即可, 省掉很多麻煩事情.

如果用抓封包工具程式(Wireshark 或 Bus Hound)觀察Mach3 USB封包可得知, HID報告描述元(Report)的每次輸入/輸出資料交易是以61個位元組(Byte)為單位送出或接收, 只要解析這些位元組即可直接控制USB Mach3 CNC運動控制卡, 不須Mach3介入, 這樣做的好處是可以自已設計一些人工智慧演算法(例如影像辨識)去直接控制CNC機台做自動光學檢測(AOI), 或改裝CNC成機器手等. 當然有些非Mach3 CNC控制卡廠商有推出API開發包, 應用程式直接呼叫API就更方便了, 這樣就不需要了解煩人的底層封包問題, 不過這篇是要分享給想設計類似Mach3程式或製作USB Mach3 CNC運動控制卡的人參考, 由於資料太多, 不想洗板, 我就列出部分範例提供參考.

我的CNC機器裝置配備是USB Mach3 CNC六軸連動控制卡, 螺桿Pitch=5mm, 步進驅動128細分.

解析後的封包資料如下:
基本上Reset , M code, G Code都要解碼.

(A)繼電器控制
M204/M205碼我是規劃成繼電器控制警示燈
M204 Code(Output 7 ON) :
public string[] Output = { "02 06 58 00 09 20 00 00 f0 f7 19 00 97 b1 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 00 00 00 00 1c f8 19 00 0c f8 19 00 10 80 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 1c f8 19 00 00" };

M205 Code(Output 7 OFF) :
public string[] Output = { "02 06 58 00 09 00 00 00 f0 f7 19 00 97 b1 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 00 00 00 00 1c f8 19 00 0c f8 19 00 10 80 9d 06 44 f8 19 00 00 01 00 00 9c b4 9e 06 1c f8 19 00 00" };

p.s. 標註的02 06 58 是M控制碼, 09 20/09 00 是On/Off作動參數.

(B)步進馬達控制
G0 Xn Code :
public string[][] G0X = {
//G0 X0
new string[]
{"02 0e 55 e6 ff 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 06 df 59 77 34 ef 55 77 f8 5b 38 a0 00 00 00 00 00 c0 2c 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00",
"02 0e 55 b4 ff 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 06 df 59 77 34 ef 55 77 f8 5b 38 a0 00 00 00 00 00 c0 2c 00 ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00",
.
.
};

p.s. 標註的02 0e 55 是G0控制碼, e6 ff/b4 ff 是馬達脈衝參數.

另外值得一提的是Mach3步進馬達的脈衝控制是以圖中(G0 X5)所示的方式控制, 只要遵照斜率及內插數值就可組合出想要馬達移動的距離及速度了, 如果是六軸連動當然更複雜了!

沒圖沒真相, 最後簡單的寫了一個小程式Demo一下, 有興趣的朋友可參考一下囉!

林志強
2018-10-13 13:00:25

好強啊

Brian Kuo
2018-10-13 13:23:48

您是解析USB HID 的byte array來進行驅動控制板,印象中Mach3 軟體有提供API可以直接控制。可能會更方便哦,之前有下載但一直沒時間玩。。。

感謝您的分享哦~ 謝謝您

蘇炳文
2018-10-13 13:37:38

感謝分享,以前都用wireshark抓Ethernet封包觀看Internet的protocol,現在才知道也可以抓USB封包,太好用了。

Kenny Plus
2018-10-13 15:01:18

大大好強

Suadia Wu
2018-10-13 17:53:26

大大開個手把手的課啦~

廖元佑
2018-10-14 08:55:55

好厲害

李大熊
2018-11-03 00:13:00

連G Code都出來了 哈哈哈


原文網址 Xuân Nghi
2017-04-27 20:31:47

出售
4/pcs


原文網址 車刀
2017-04-23 03:48:37

謝謝各位大哥老闆支持 ? ? ?

? 工廠自銷自製 ?
? 專賣鑽石車刀,CBN熱處理車刀
❗ 普通車刀片無銷售
❗ 車刀照片工廠自製實做作品

? 捨棄式鑽石車刀(PCD)

? CBN熱處理車刀

? 铣床刀片

? 切削工具

? 鎢鋼圓棒

? 花鼓刀,切斷刀,霸王刀

✨ 刀具磨損小
✨ 都可以在做維修,修磨的工作
✨ 可以在多次利用工作
------------------------------------
✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔

‼️ 價格絕對有比市場上優惠
歡迎大家還私訊洽詢 ? ? ?

((賴ID:c565656))


原文網址 車刀
2017-04-01 09:10:56

連假愉快 旅途平安
不好意思打擾囉 ? ? ?

? 工廠自銷自製 ?
? 專賣鑽石車刀(PCD)
? CBN熱處理車刀 (氮化硼)

❗ 普通車刀片無銷售
❗ 車刀照片工廠自製實做作品

? 捨棄式鑽石車刀(PCD)

? CBN熱處理車刀

? 铣床刀片

? 切削工具

? 鎢鋼圓棒

? 花鼓刀,切斷刀,霸王刀

✨ 刀具磨損小
✨ 都可以在做維修,修磨的工作
✨ 可以在多次利用工作

價格絕對有比市場上優惠
歡迎大家還私訊洽詢 ? ? ?

((賴ID:c565656))


原文網址 Nilesh Tilak
2016-05-05 18:24:01

www.conexups.com , for Outdoor & Indoor LED lights, Solar system , Inverter, UPS, lift inverter, SMPS, Battery; Battery charges, servo Stabalizers , Isolation transformer, Power supply,
In SOLAR we have Grid Tied, Grid Sharing, PCU, MPPT CHARGER,
for last 22 years, info@conexups.com; nile5637@gmail.com, Nilesh Tilak, Pune,

翻譯年糕