中國(guó)自動(dòng)化學(xué)會(huì)專(zhuān)家咨詢工作委員會(huì)指定宣傳媒體
文摘詳情
gkongbbs

EtherCAT運(yùn)動(dòng)控制器上位機(jī)之Python+Qt(一):鏈接與單軸運(yùn)動(dòng)

http://casecurityhq.com 2024-07-30 16:48 深圳市正運(yùn)動(dòng)技術(shù)有限公司

公眾號(hào)抬頭2.gif

ZMC408CE硬件介紹

ZMC408CE是正運(yùn)動(dòng)推出的一款多軸高性能 EtherCAT 總線運(yùn)動(dòng)控制器,具有EtherCAT、EtherNET、RS232、CAN和U盤(pán)等通訊接口,ZMC系列運(yùn)動(dòng)控制器可應(yīng)用于各種需要脫機(jī)或聯(lián)機(jī)運(yùn)行的場(chǎng)合。

ZMC408CE運(yùn)動(dòng)控制器.png

ZMC408CE支持8軸運(yùn)動(dòng)控制,最多可擴(kuò)展至32軸,支持 直線插補(bǔ) 、任意圓弧插補(bǔ)、空間圓弧、螺旋插補(bǔ)、電子凸輪、電子齒輪、同步跟隨等功能。

ZMC408CE支持PLC、Basic、HMI組態(tài)三種編程方式。PC 上位機(jī) API編程支持C#、C++、LabVIEW、Matlab、Qt、Linux、VB.Net、Python等接口。

ZMC408CE組合圖.png

ZMC408CE支持8軸運(yùn)動(dòng)控制,可采用脈沖軸(帶編碼器反饋)或EtherCAT總線軸,通用IO包含24路輸入口和16路輸出口,部分IO為高速I(mǎi)O,模擬量AD/DA各兩路,EtherCAT最快125us的刷新周期。

ZMC408CE支持8個(gè)通道的硬件比較輸出、硬件定時(shí)器、運(yùn)動(dòng)中精準(zhǔn)輸出,還支持8通道PWM輸出,對(duì)應(yīng)的輸出口為OUT0-7,支持8個(gè)通道同時(shí)觸發(fā)硬件比較輸出。

PCIE464M硬件介紹

PCIE464M是一款基于PCIe的PCI Express的EtherCAT總線 運(yùn)動(dòng)控制卡 ,具有多項(xiàng)實(shí)時(shí)和高精度運(yùn)動(dòng)控制控制功能。

PCIE464M運(yùn)動(dòng)控制卡.png

用戶可直接將PCIE464M嵌入標(biāo)準(zhǔn)PC機(jī)實(shí)現(xiàn)高性能的EtherCAT運(yùn)動(dòng)控制功能,實(shí)現(xiàn)高精多軸同步控制,EtherCAT控制周期最小可達(dá)100us!

PCIE464M內(nèi)置多路高速I(mǎi)O輸入輸出,可滿足用戶的多樣化高速I(mǎi)O應(yīng)用需求,如:高速色標(biāo)鎖存、高速PWM、多維位置比較輸出PSO、視覺(jué)飛拍、速度前瞻、編碼器位置檢測(cè)等應(yīng)用。

PCIE464M控制卡架構(gòu)圖.png

PCIE464M運(yùn)動(dòng)控制卡上自帶16進(jìn)16出,第三方圖像處理工控機(jī)或PC無(wú)需額外配置IO數(shù)據(jù)采集卡和PLC,即可實(shí)現(xiàn)IPC形態(tài)的機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī),簡(jiǎn)化硬件架構(gòu),節(jié)省成本,軟硬件一體化。

一、Python語(yǔ)言開(kāi)發(fā)流程

本文案例Python開(kāi)發(fā)環(huán)境:

操作系統(tǒng)環(huán)境:Win10_64位

Python版本:python-3.10.10-amd64.exe

Pycharm版本:pycharm-community-2024.1.3.exe

1、Python開(kāi)發(fā)前對(duì)環(huán)境、解析器進(jìn)行配置。

1)安裝漢化包:點(diǎn)擊file → setting → plugins,然后搜索Chinese中文包。

1.png

2)python解析器安裝Pyside2軟件包(QT庫(kù)):File → Settings → Project pythonProject。

2.png

3)配置自定義控件: File → Settings → Tools → External Tools點(diǎn)擊+新增自定義工具。

3.png

自定義QtDesigner

目的: 用于生成.ui文件

Name:QtDesigner

Group: Qt

Program: PySide2安裝路徑下的designer.exe路徑

例如: C:\Python\Python39\Scripts\pyside2-designer.exe

Working directory: $ProjectFileDir$

自定義Pyside2-uic

目的: 將制作好的.ui文件轉(zhuǎn)化為.py文件

Name: Pyside2-uic

Group: Qt

Program: Python安裝目錄下Scripts\pyside2-uic.exe

例如: C:\Python\Python39\Scripts\pyside2-uic.exe  

Arguments : $FileName$ -o $FileNameWithoutExtension$.py

Working directory: $FileDir$

自定義Pyside2-rcc

目的: 將圖片文件轉(zhuǎn)化為.py文件

Name: Pyside2-rcc

Group: Qt

Program: Python安裝目錄下Scripts\pyside2-rcc.exe

例如: C:\Python\Python39\Scripts\pyside2-rcc.exe  

Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py

Working directory: $FileDir$

4)配置好自定義控件后,后續(xù)可以直接在pycharm菜單中使用。

4.png

二、Python+Qt進(jìn)行運(yùn)動(dòng)控制開(kāi)發(fā)

1、新建項(xiàng)目

5.png

6.png

2、UI設(shè)置界面

1)進(jìn)入項(xiàng)目ui設(shè)置界面:工具 → Qt → QtDesigner。

7.png

8.png

2)設(shè)置項(xiàng)目Ui:通過(guò)拖動(dòng)控件到界面設(shè)置ui。

9.png

3)ui設(shè)置完后保存文件:文件 → 保存。

10.png

3、Python 運(yùn)行 UI

1)添加UI運(yùn)行的python文件:選中項(xiàng)目右鍵 → 新建 → Python File。

11.png

12.png

2)Ui_Weiget文件里面添加UI處理的類(lèi)。

13.png
34.png

3)同步驟1添加主運(yùn)行python文件Main,并添加主入口運(yùn)行函數(shù)。

14.png
35.png

4)此時(shí)在Main文件點(diǎn)擊運(yùn)行按鈕,可以運(yùn)行程序顯示UI界面。

15.png

4、添加庫(kù)文件、庫(kù)函數(shù)封裝的Python文件。

1)找 到廠家提供的光盤(pán)資料里面的python函數(shù)庫(kù),路徑如下(64位庫(kù)為例)。

A、進(jìn)入廠商提供的光盤(pán)資料找到“04PC函數(shù)”文件夾,并點(diǎn)擊進(jìn)入。

16.png

B、選擇“PC函數(shù)庫(kù)V2.1”文件夾。

17.png

C、選擇“Windows平臺(tái)”文件夾。

18.png

D、根據(jù)需要選擇對(duì)應(yīng)的函數(shù)庫(kù),這里選擇64位庫(kù)。

19.png

E、解壓Python64壓縮包,里面有Python對(duì)應(yīng)的函數(shù)庫(kù),與 運(yùn)動(dòng)函數(shù)封裝的python文件。

20.png

2)將廠商提供的python的庫(kù)文件以及相關(guān)文件復(fù)制到新建的項(xiàng)目中。

A、進(jìn)入dll文件夾,選中zauxdll.dl、zmotion.dll、zauxdllPython.py三個(gè)文件復(fù)制。

21.png

22.png

B、選中新建的項(xiàng)目粘貼,便把對(duì)應(yīng)的庫(kù)文件與封裝的運(yùn)動(dòng)Python文件粘貼到了項(xiàng)目中。

23.png

3)進(jìn)入ui的python文件在文件開(kāi)頭處導(dǎo)入zauxdllPython文件的ZAUXDLL類(lèi),并在界面類(lèi)中創(chuàng)建ZAUXDLL對(duì)象。

24.png

三、相關(guān)PC函數(shù)介紹

1、PC函數(shù)手冊(cè)可在光盤(pán)資料查看,具體路徑如下

25.png

2、連接控制器。
27.png

3、 讀取當(dāng)前軸運(yùn)動(dòng)是否在運(yùn)動(dòng)中。
28.png

4、 設(shè)置脈沖當(dāng)量。
29.png

5、設(shè)置軸運(yùn)動(dòng)速度。
30.png

6、單軸持續(xù)運(yùn)動(dòng)。
31.png

7、單軸絕對(duì)運(yùn)動(dòng)。
32.png

8、單軸停止運(yùn)動(dòng)。
33.png

四、例程演示

1、連接控制器。

#連接控制器, 控制器默認(rèn)IP是192.168.0.11,此處使用comboBox內(nèi)輸入的ip
def on_btn_open_clicked(self):
    strtemp = self.ui.comboBox.currentText()
    print("當(dāng)前的ip是 :", strtemp)
    if self.Zmc.handle.value is not None:
        self.Zmc.ZAux_Close()
        self.time1.stop()
        self.ui.setWindowTitle("單軸運(yùn)動(dòng)")
    iresult = self.Zmc.ZAux_OpenEth(strtemp)#連接控制器
    if 0 != iresult:
        QMessageBox.warning(self.ui, "提示", "連接失敗")
    else:
        QMessageBox.warning(self.ui, "提示", "連接成功")
        str_title = self.ui.windowTitle() + strtemp
        self.ui.setWindowTitle(str_title)
        self.Up_State()  #刷新函數(shù)
        self.time1.start(100)#開(kāi)啟定時(shí)器

2、軸運(yùn)動(dòng)。

#軸運(yùn)行函數(shù)
def on_btn_Run_clicked(self):
    if self.Zmc.handle.value is None:
        QMessageBox.warning(self.ui, "警告", "未連接控制器")
        return
    # 獲取軸運(yùn)動(dòng)狀態(tài)0 –運(yùn)動(dòng)中,-1-未運(yùn)動(dòng)
    isidle=self.Zmc.ZAux_Direct_GetIfIdle(self.axis_Num)[1].value 
    isidle=int(isidle)
    if self.mode == 1 and not isidle:
        QMessageBox.warning(self.ui, "警告", "未停止")
        return
    # 設(shè)置脈沖當(dāng)量
    str_tmp = self.ui.edit_Units.text()
    float_tmp = float(str_tmp)
    self.Zmc.ZAux_Direct_SetUnits(self.axis_Num, float_tmp)#設(shè)置脈沖單量
    # 設(shè)置運(yùn)動(dòng)速度
    str_tmp = self.ui.edit_Speed.text()
    float_tmp = float(str_tmp)
    self.Zmc.ZAux_Direct_SetSpeed(self.axis_Num, float_tmp)#設(shè)置運(yùn)動(dòng)速度
    # 設(shè)置加速度
    str_tmp = self.ui.edit_Accel.text()
    float_tmp = float(str_tmp)
    self.Zmc.ZAux_Direct_SetAccel(self.axis_Num, float_tmp)#設(shè)置加速度
    # 設(shè)置減速度
    str_tmp = self.ui.edit_Decel.text()
    float_tmp = float(str_tmp)
    self.Zmc.ZAux_Direct_SetDecel(self.axis_Num, float_tmp)#設(shè)置減速
    # 設(shè)置S曲線
    str_tmp = self.ui.edit_Sramp.text()
    float_tmp = float(str_tmp)
    self.Zmc.ZAux_Direct_SetSramp(self.axis_Num, float_tmp)# 設(shè)置S曲線
    if 0 == self.mode:
        # 單軸持續(xù)運(yùn)動(dòng)
        self.Zmc.ZAux_Direct_Single_Vmove(self.axis_Num, self.direction)
    elif 1 == self.mode:
        str_tmp = self.ui.edit_Distance.text()
        float_tmp = float(str_tmp)
        # 單軸相對(duì)運(yùn)動(dòng)運(yùn)動(dòng)
        self.Zmc.ZAux_Direct_Single_Move(self.axis_Num, -float_tmp if self.direction == -1 else float_t

3、停止軸運(yùn)動(dòng)。

#停止軸運(yùn)動(dòng)
def on_btn_Stop_clicked(self):
    if self.Zmc.handle.value is None:
        QMessageBox.warning(self.ui, "警告", "未連接控制器")
        return
    #獲取軸運(yùn)動(dòng)狀態(tài)0 –運(yùn)動(dòng)中,-1-未運(yùn)動(dòng)
    isidle=self.Zmc.ZAux_Direct_GetIfIdle(self.axis_Num)[1].value
    if isidle:
        QMessageBox.warning(self.ui, "警告", "已停止")
        return
    #停止單軸運(yùn)動(dòng)
    self.Zmc.ZAux_Direct_Single_Cancel(self.axis_Num, 2)

4、運(yùn)行程序觀察運(yùn)行效果。

運(yùn)行python程序,通過(guò)RTSys軟件觀察運(yùn)行情況。

26.png

完整代碼獲取地址

36.png

本次,正運(yùn)動(dòng)技術(shù)EtherCAT運(yùn)動(dòng)控制器上位機(jī)開(kāi)發(fā)之Python+Qt(一):鏈接與單軸運(yùn)動(dòng),就分享到這里。

更多精彩內(nèi)容請(qǐng)關(guān)注“ 正運(yùn)動(dòng)小助手 ”公眾號(hào),需要相關(guān)開(kāi)發(fā)環(huán)境與例程代碼,請(qǐng)咨詢正運(yùn)動(dòng)技術(shù)銷(xiāo)售工程師:400-089-8936。

本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來(lái)源。

企業(yè)微信截圖_20240321153031.png

正運(yùn)動(dòng)技術(shù)專(zhuān)注于運(yùn)動(dòng)控制技術(shù)研究和通用運(yùn)動(dòng)控制軟硬件產(chǎn)品的研發(fā),是國(guó)家級(jí)高新技術(shù)企業(yè)。正運(yùn)動(dòng)技術(shù)匯集了來(lái)自華為、中興等公司的優(yōu)秀人才,在堅(jiān)持自主創(chuàng)新的同時(shí),積極聯(lián)合各大高校協(xié)同運(yùn)動(dòng)控制基礎(chǔ)技術(shù)的研究,是國(guó)內(nèi)工控領(lǐng)域發(fā)展最快的企業(yè)之一,也是國(guó)內(nèi)少有、完整掌握運(yùn)動(dòng)控制核心技術(shù)和實(shí)時(shí)工控軟件平臺(tái)技術(shù)的企業(yè)。主要業(yè)務(wù)有:運(yùn)動(dòng)控制卡_運(yùn)動(dòng)控制器_EtherCAT運(yùn)動(dòng)控制卡_EtherCAT控制器_運(yùn)動(dòng)控制系統(tǒng)_視覺(jué)控制器__運(yùn)動(dòng)控制PLC_運(yùn)動(dòng)控制_機(jī)器人控制器_視覺(jué)定位_XPCIe/XPCI系列運(yùn)動(dòng)控制卡等等。

版權(quán)所有 中華工控網(wǎng) Copyright?2024 Gkong.com, All Rights Reserved