精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

EtherCAT運動控制器上位機開發之Python+Qt(三):PDO配置與SDO讀寫

正運動技術 ? 來源:正運動技術 ? 作者:正運動技術 ? 2024-08-21 15:56 ? 次閱讀

ZMC408CE控制器硬件介紹

ZMC408CE是正運動推出的一款多軸高性能EtherCAT總線運動控制器,具有EtherCAT、EtherNETRS232CAN和U盤等通訊接口,ZMC系列運動控制器可應用于各種需要脫機或聯機運行的場合。

wKgaombFm8WALm3mAAGPukKpE2k266.png

ZMC408CE支持8軸運動控制,最多可擴展至32軸,支持直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨等功能。

ZMC408CE支持PLC、Basic、HMI組態三種編程方式。PC上位機API編程支持C#C++LabVIEWMatlab、Qt、Linux、VB.Net、Python等接口。

wKgZombFm8mAcVEUAAIdbDC5S-E734.png

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

ZMC408CE支持8個通道的硬件比較輸出、硬件定時器、運動中精準輸出,還支持8通道PWM輸出,對應的輸出口為OUT0-7,支持8個通道同時觸發硬件比較輸出。

更多關于ZMC408CE的詳情介紹,點擊“推薦|8通道PSO的高性能EtherCAT總線運動控制器”查看。

PCIE464M控制卡硬件介紹

PCIE464M是一款基于PCIe的PCI Express的EtherCAT總線運動控制卡,具有多項實時和高精度運動控制控制功能。

wKgaombFm96AU8njAAdjBbymGV4784.png

用戶可直接將PCIE464M嵌入標準PC機實現高性能的EtherCAT運動控制功能,實現高精多軸同步控制,EtherCAT控制周期最小可達100us!

PCIE464M內置多路高速IO輸入輸出,可滿足用戶的多樣化高速IO應用需求,如:高速色標鎖存、高速PWM、多維位置比較輸出PSO、視覺飛拍、速度前瞻、編碼器位置檢測等應用。

wKgaombFm-OAUgzyAAK_WcbMruU268.png

PCIE464M運動控制卡上自帶16進16出,第三方圖像處理工控機或PC無需額外配置IO數據采集卡和PLC,即可實現IPC形態的機器視覺運動控制一體機,簡化硬件架構,節省成本,軟硬件一體化。

更多關于PCIE464M的詳情介紹,點擊“PCIE464M-高速高精,超高速PCIe EthrtCAT實時運動控制卡”查看。

ECI2A18B控制卡硬件介紹

ECI2A18B是正運動推出的一款高性價比10軸脈沖型、模塊化的網絡型運動控制卡,采用優化的網絡通訊協議可以實現實時的運動控制,同時支持多種通信協議,方便與其他工業控制設備連接和集成。安裝配置相對便捷,適合于模塊化和靈活性要求較高的控制系統

wKgaombFm_-AH_F9AAK4PsCNj5w710.png

ECI2A18B控制卡最大可擴展至12脈沖軸,支持8路高速輸入和4路高速輸出,集成豐富的運動控制功能,包含多軸點位運動、電子凸輪,直線插補,圓弧插補,連續插補運動等,滿足多樣化的工業應用需求。

wKgZombFnAOAPMYrAALH_8RZiuM306.png

ECI2A18B運動控制卡可用于電子半導體設備(檢測類設備、組裝類設備、鎖附類設備、焊錫機)、點膠設備和流水線等10軸以內脈沖的高性價比應用場合。

更多關于ECI2A18B的詳情介紹,點擊“【加量不加價】正運動網絡型運動控制卡ECI2618B/ECI2A18B”查看。

一、Python+Qt開發流程

Python+Qt運動控制開發流程參考“EtherCAT運動控制器上位機之Python+Qt(一):鏈接與單軸運動”。

二、相關PC函數介紹

1.PC函數手冊可在光盤資料查看,具體路徑如下

wKgaombFnCWANWIlAAEEUFOeAfA397.png

2.連接控制器。

wKgZombFnDCAbL1KAABJI_u3n0E129.png

3.下載bas文件到控制器。

wKgZombFnDeATF6TAAA40UAiNiQ353.png

4.下載zar文件到控制器。

wKgZombFnD2AB8aFAAA2RLuIHUE013.png

5.SDO寫入

wKgaombFnESAOEeRAABtaILRl8Q849.png

6.SDO讀取

wKgaombFnEuAAnKuAABuCyVjWKc987.png

7.讀取軸類型。

wKgZombFnFKAZcC4AABBQSCu87I143.png

8.設置軸使能。

wKgaombFnFaADKQwAAArtGLOM3o125.png

9.設置脈沖當量。

wKgaombFnFqAZl6uAABkMcvJ0t4520.png

10.單軸持續運動。

wKgZombFnF6AL5zgAAA-MRfLIE8607.png

三、例程演示

1.連接控制器。

#連接控制器, 控制器默認IP是192.168.0.11,此處使用comboBox內輸入的ip
def on_btn_open_clicked(self):
   strtemp = self.ui.comboBox.currentText()
   print("當前的ip是 :", strtemp)
   if self.Zmc.handle.value is not None:
       self.Zmc.ZAux_Close()
       self.time1.stop()
       self.ui.setWindowTitle("單軸運動")
   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()  #刷新函數
       self.time1.start(100)#開啟定時器

2.下載BAS文件到控制器。

#下載BAS文件到控制器
def on_btn_down_bas_clicked(self):  # 下載BAS文件到控制器
   if self.Zmc.handle.value is None:
       QMessageBox.warning(self.ui, "提示", "未連接控制器")
       return
   file_Date = QFileDialog.getOpenFileName(self.ui, "選擇BAS文件", "..", "Files(*.bas)")
   self.file_Name = file_Date[0].replace("/", "")
   print(self.file_Name)
   self.ui.textEdit_file_path.insertPlainText(self.file_Name + "n")
   # 讀取BAS文件中的變量判斷是否有加載BAS文件
   temp = self.Zmc.ZAux_Direct_GetUserVar("BUS_TYPE")[1].value  
   self.Bus_type = float(temp)
   # BAS文件下載到ROM
   ret = self.Zmc.ZAux_BasDown(self.file_Name, 1)  
   if ret != 0:
       QMessageBox.warning(self.ui, "提示", "文件下載失敗!" + "錯誤碼為 :%1 ".format(ret))

3.下載ZAR文件到控制器。

#下載ZAR文件到控制器
def on_btn_down_zar_clicked(self):  # 下載zar件到控制器
   if self.Zmc.handle.value is None:
       QMessageBox.warning(self.ui, "提示", "未連接控制器")
       return
   file_Date = QFileDialog.getOpenFileName(self.ui, "選擇zar文件", "..", "Files(*.zar)")
   self.file_Name = file_Date[0].replace("/", "")
   print(self.file_Name)
   self.ui.textEdit_file_path.insertPlainText(self.file_Name + "n")
   # 讀取zar文件中的變量判斷是否有加載zar文件
   temp = self.Zmc.ZAux_Direct_GetUserVar("BUS_TYPE")[1].value
   self.Bus_type = float(temp)
   # zar文件下載到ROM
   ret = self.Zmc.ZAux_ZarDown(self.file_Name, 1)
   if ret != 0:
       QMessageBox.warning(self.ui, "提示", "zar文件下載失敗!" + "錯誤碼為 :%1 ".format(ret))

4.SDO寫入數據。

#SDO寫入數據
def on_btn_Ecat_write_clicked(self):  # ETHERCAT寫
   if self.Zmc.handle.value is None:
       QMessageBox.warning(self.ui, "提示", "未連接控制器")
       return
   #節點編號
   m_sdo_node1 = int(self.ui.edit_node_1.text())
   # 對象字典編號
   m_sdo_index1 = int(self.ui.edit_dir_1.text())
   # 對象字典子編號
   m_sdo_sub1 = int(self.ui.edit_sub_node_1.text())
   # 數據類型
   m_sdo_type1 = self.ui.comboBox_type_1.currentIndex() + 1
   #寫入數據字典值的數據值 
   m_sdo_data1 = int(self.ui.edit_date_1.text())
   if self.Bus_type == 0:
       #SDO寫入
       ret = self.Zmc.ZAux_BusCmd_SDOWrite(0, m_sdo_node1, m_sdo_index1, m_sdo_sub1, m_sdo_type1, m_sdo_data1)
       if ret != 0:
           QMessageBox.warning(self.ui, "提示", "寫入失敗")
           return
   else:
       QMessageBox.warning(self.ui, "提示", "非ETHERCAT模塊")
       return

5.SDO讀取數據。

#SDO讀取數據
def on_btn_Ecat_read_clicked(self):  # ETHERCAT讀取
   if self.Zmc.handle.value is None:
       QMessageBox.warning(self.ui, "提示", "未連接控制器")
       return
   #節點編號
   m_sdo_node2 = int(self.ui.edit_node_2.text())
   #對象字典編號
   m_sdo_index2 = int(self.ui.edit_dir_2.text())
   #對象字典子編號
   m_sdo_sub2 = int(self.ui.edit_sub_node_2.text())
   #數據類型
   m_sdo_type2 = self.ui.comboBox_type_2.currentIndex() + 1
   m_sdo_data2 = ctypes.c_int(0)
   print(self.Bus_type)
   if self.Bus_type == 0:
       #通過設備號和槽位號進行 SDO 讀取。
       ret = self.Zmc.ZAux_BusCmd_SDORead(0, m_sdo_node2, m_sdo_index2, m_sdo_sub2, m_sdo_type2)
       #讀取的數據值
       m_sdo_data2 = int(ret[1].value)
       if ret != 0:
           QMessageBox.warning(self.ui, "提示", "讀取失敗")
           return
       self.ui.edit_date_2.setText(str(m_sdo_data2))
   else:
       QMessageBox.warning(self.ui, "提示", "非ETHERCAT模塊")
       return

四、運行效果

運行python程序,通過RTSys軟件觀察運行情況。

wKgZombFnOGAULjMAAJ_OWh793c277.png

通過驅動器軟件查看sdo讀寫情況(對象字典為10進制數據):此處以雷賽驅動為例讀寫驅動器SDO。

1.SDO_READ讀取驅動器SDO參數,比如先在驅動器軟件設置單圈脈沖數量為5000后,通過SDO_READ讀取驅動器單圈脈沖數。

wKgaombFnOWAD2M9AAP5wUxB_cg210.png

2.SDO_WRITE寫入驅動器SDO參數,比如使用SDO_WRITE寫入單圈脈沖數量為10000后,通過驅動器軟件查看修改結果。

wKgZombFnOiAVgL_AAP0bvXAKN4329.png

五、總線初始化bas文件

總線初始化BAS文件下載到控制器ROM里面掉電保存。

1.EtherCAT總線擴展接線

每個EIO擴展模塊在擴展接線完成后,不需要進行進行二次開發,只需手動在EtherCAT主站控制器配置擴展模塊唯一的IO地址和軸地址,配置完成即可訪問。

IO地址編號通過總線指令NODE_IO來設置,控制器上程序只需通過IO編號就可以訪問到擴展模塊上的資源。軸地址的配置使用AXIS_ADDRESS指令映射綁定軸號,綁定完成通過BASE或AXIS指令指定軸號。

接線時注意EtherCAT IN連接上一級模塊,EtherCAT OUT連接下一級模塊,IN和OUT口不可混用。

wKgZombFnPuAInegAAJX-a3bmtg511.pngEIO擴展模塊接線參考

上圖涉及的編號概念如下;總線相關指令參數會用到如下編號:

1)槽位號(slot):

槽位號是指控制器上總線接口的編號,EtherCAT總線槽位號為0。

2)設備號(node):

設備號是指一個槽位上連接的所有設備的編號,從0開始,按設備在總線上的連接順序自動編號,可以通過NODE_COUNT(slot)指令查看總線上連接的設備總數。

3)驅動器編號:

控制器會自動識別出槽位上的驅動器,編號從0開始,按驅動器在總線上的連接順序自動編號。

驅動器編號與設備號不同,只給槽位上的驅動器設備編號,其他設備忽略,映射軸號時將會用到驅動器編號。

2.EtherCAT總線擴展資源映射

1)IO映射

控制器上程序只需通過IO編號就可以訪問到擴展模塊上的資源,EtherCAT總線擴展模塊IO編號通過總線指令NODE_IO來設置,同時配置輸入和輸出。IO映射時先查看控制器自身的最大IO編號(包括外部IO接口和脈沖軸內的接口),再使用指令設置。若擴展的IO與控制器自身IO編號重合,二者將同時起作用,所以IO映射的映射的編號在整個控制系統中均不得重復。

IO映射語法:

NODE_IO(slot,node)=iobaseslot:槽位號,0-缺省node:設備編號,編號從0開始iobase:映射IO起始編號,設置結果只會是8的倍數

2)軸映射

擴展模塊的軸使用前需要使用AXIS_ADDRESS指令映射軸號,軸映射也需要注意整個系統的軸號不得重復。EIO系列擴展軸的映射與總線驅動器的軸映射語法相同。

軸映射語法:

AXIS_ADDRESS(軸號)=(槽位號<<16)+驅動器編號+1

3.總線初始化BAS程序

'********************************ECAT總線初始化***********************
global CONST BUS_TYPE = 0         '總線類型。可用于上位機區分當前總線類型
global CONST Bus_Slot  = 0        '槽位號0(單總線控制器缺省0)
global CONST PUL_AxisStart   = 0    '本地脈沖軸起始軸號
global CONST PUL_AxisNum   = 0    '本地脈沖軸軸數量
global CONST Bus_AxisStart   = 0      '總線軸起始軸號
global CONST Bus_NodeNum   = 1      '總線配置節點數量,用于判斷實際檢測到的從站數量是否一致
global  MAX_AXISNUM        '最大軸數
MAX_AXISNUM = SYS_ZFEATURE(0)
global Bus_InitStatus      '總線初始化完成狀態
Bus_InitStatus = -1
global  Bus_TotalAxisnum    '檢查掃描的總軸數
delay(3000)        '延時3S等待驅動器上電,不同驅動器自身上電時間不同,具體根據驅動器調整延時
?"總線通訊周期:",SERVO_PERIOD,"us"
Ecat_Init()      '初始化ECAT總線 
while (Bus_InitStatus = 0)
   Ecat_Init()
wend
'*****************ECAT總線初始********************************************************************
'初始流程:  slot_scan(掃描總線) ->   從站節點映射軸/io  ->  SLOT_START(啟動總線) -> 初始化成功
'**************************************************************************************************
global sub Ecat_Init()
   local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias
   RAPIDSTOP(2)
   for i=0 to MAX_AXISNUM - 1        '初始化還原軸類型          
       AXIS_ENABLE(i) = 0
       atype(i)=0  
       AXIS_ADDRESS(i) =0
       DELAY(10)            '防止所有驅動器全部同時切換使能導致瞬間電流過大
   next
   Bus_InitStatus = -1
   Bus_TotalAxisnum = 0  
   SLOT_STOP(Bus_Slot)        
   delay(200)
   slot_scan(Bus_Slot)        '掃描總線
   if return then 
       ?"總線掃描成功","連接從站設備數:"NODE_COUNT(Bus_Slot)
       if NODE_COUNT(Bus_Slot)  Bus_NodeNum then    '判斷總線檢測數量是否為實際接線數量
           ?"掃描節點數量與程序配置數量不一致!" ,"配置數量:"Bus_NodeNum,"檢測數量:"NODE_COUNT(Bus_Slot)
           Bus_InitStatus = 0    '初始化失敗。報警提示
       endif   
       '"開始映射軸號"
       for Node_Num=0 to NODE_COUNT(Bus_Slot)-1            '遍歷掃描到的所有從站節點
           Drive_Vender = NODE_INFO(Bus_Slot,Node_Num,0)        '讀取驅動器廠商
           Drive_Device = NODE_INFO(Bus_Slot,Node_Num,1)        '讀取設備編號
           Drive_Alias = NODE_INFO(Bus_Slot,Node_Num,3)          '讀取設備撥碼ID
           if NODE_AXIS_COUNT(Bus_Slot,Node_Num)  0  then        '判斷當前節點是否有電機
               '根據節點帶的電機數量循環配置軸參數(針對一拖多驅動器)
               for j=0 to NODE_AXIS_COUNT(Bus_Slot,Node_Num)-1      
                   Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum    '軸號按NODE順序分配
                   'Temp_Axis = Drive_Alias    '軸號按驅動器設定的撥碼分配(一拖多需要特殊處理)          
                   base(Temp_Axis)
                   AXIS_ADDRESS(Temp_Axis)= (Bus_Slot

4.BAS總線初始化關鍵函數

1)SLOT_SCAN -- 總線掃描

wKgZombFnUeAevhsAAA37cBYVkg190.png

2)AXIS_ADDRESS -- 軸地址設置

wKgaombFnU2AQJPVAADuKY63qlM728.png

3)DRIVE_PROFILE -- 驅動器PDO設置

wKgZombFnVaABjY9AAFAYU53iL8508.png

4)SDO_READ -- 數據字典讀取

wKgaombFnV6AD9bMAABjxem_chM962.png

5)SDO_WRITE -- 數據字典寫入

wKgZombFnWWAPWJXAABgcqRpf8k106.png

本次,正運動技術EtherCAT運動控制器上位機開發之Python+Qt(三):PDO配置與SDO讀寫,就分享到這里。

更多精彩內容請關注“正運動小助手”公眾號,需要相關開發環境與例程代碼,請咨詢正運動技術銷售工程師

本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 運動控制器
    +關注

    關注

    2

    文章

    382

    瀏覽量

    24537
  • python
    +關注

    關注

    53

    文章

    4753

    瀏覽量

    84081
  • ethercat
    +關注

    關注

    18

    文章

    610

    瀏覽量

    38343
  • PDO
    PDO
    +關注

    關注

    0

    文章

    8

    瀏覽量

    4288
  • 正運動技術
    +關注

    關注

    0

    文章

    90

    瀏覽量

    182
收藏 人收藏

    評論

    相關推薦

    運動技術運動控制器EtherCAT總線快速入門

      之前正運動技術與大家分享了,運動控制器的固件升級、ZBasic 程序開發、ZPLC 程序開發、與觸摸屏通訊和輸入/輸出IO 的應用、
    發表于 09-07 06:59

    運動技術運動控制器EtherCAT總線的基礎使用

    EtherCAT總線擴展模塊包含哪些?怎樣去使用正運動技術運動控制器EtherCAT總線?
    發表于 09-27 08:34

    EtherCAT總線運動控制的優勢主要體現在哪?

    自由切換;f、方便上位遠程診斷與遠程維護電氣系統,預測性維護也更方便。5、沒有實際的運動控制器也能仿真與調試運動
    發表于 02-20 10:20

    經濟型EtherCAT運動控制器EtherCAT總線快速入門

    的相關參數修改,同樣使用SDO指令讀寫對應的數據字典進行配置或通過驅動軟件修改。SDO指令包含數據字典讀取“
    發表于 05-11 09:49

    EtherCAT運動控制器進行自定義API封裝例程

    、Flash/文件讀寫 更多API接口詳情可以參考“ZMotion PC函數庫編程手冊 V2.1.1”。 如果想了解更多內容,請點擊《全國產EtherCAT運動控制邊緣
    發表于 10-26 15:11

    EtherCAT總線運動控制的優勢主要體現在哪?

    )/CSV(周期速度)/CST(周期轉矩)可以自由切換; f、方便上位遠程診斷與遠程維護電氣系統,預測性維護也更方便。 5、沒有實際的運動控制器也能仿真與調試
    發表于 12-13 11:37

    全國產EtherCAT運動控制邊緣控制器(五):IO配置與回零運動Python+Qt開發

    Python+QT開發環境的配置以及單軸回零運動的實現效果。
    的頭像 發表于 10-20 10:08 ?493次閱讀
    全國產<b class='flag-5'>EtherCAT</b><b class='flag-5'>運動</b><b class='flag-5'>控制</b>邊緣<b class='flag-5'>控制器</b>(五):IO<b class='flag-5'>配置</b>與回零<b class='flag-5'>運動</b>的<b class='flag-5'>Python+Qt</b><b class='flag-5'>開發</b>

    全國產EtherCAT運動控制邊緣控制器(五):IO配置與回零運動Python+Qt開發

    全國產EtherCAT運動控制邊緣控制器ZMC432H是正運動的一款軟硬件全國產自主可控,運動
    的頭像 發表于 10-22 10:51 ?748次閱讀
    全國產<b class='flag-5'>EtherCAT</b><b class='flag-5'>運動</b><b class='flag-5'>控制</b>邊緣<b class='flag-5'>控制器</b>(五):IO<b class='flag-5'>配置</b>與回零<b class='flag-5'>運動</b>的<b class='flag-5'>Python+Qt</b><b class='flag-5'>開發</b>

    全國產EtherCAT運動控制邊緣控制器(六):RtBasic文件下載與連續軌跡加工的Python+Qt開發

    今天,正運動小助手給大家分享一下全國產EtherCAT運動控制邊緣控制器ZMC432H如何使用Pytho
    的頭像 發表于 11-02 16:45 ?464次閱讀
    全國產<b class='flag-5'>EtherCAT</b><b class='flag-5'>運動</b><b class='flag-5'>控制</b>邊緣<b class='flag-5'>控制器</b>(六):RtBasic文件下載與連續軌跡加工的<b class='flag-5'>Python+Qt</b><b class='flag-5'>開發</b>

    全國產EtherCAT運動控制邊緣控制器ZMC432H如何使用Python+QT實現連續軌跡加工

    今天,正運動小助手給大家分享一下全國產EtherCAT運動控制邊緣控制器ZMC432H如何使用Pytho
    的頭像 發表于 11-06 16:03 ?700次閱讀
    全國產<b class='flag-5'>EtherCAT</b><b class='flag-5'>運動</b><b class='flag-5'>控制</b>邊緣<b class='flag-5'>控制器</b>ZMC432H如何使用<b class='flag-5'>Python+QT</b>實現連續軌跡加工

    EtherCAT運動控制器上位Python+Qt(一):鏈接與單軸運動

    PC上位Python+Qt混合編程,助力智能制造高效開發
    的頭像 發表于 07-31 09:43 ?197次閱讀
    <b class='flag-5'>EtherCAT</b><b class='flag-5'>運動</b><b class='flag-5'>控制器</b><b class='flag-5'>上位</b><b class='flag-5'>機</b><b class='flag-5'>之</b><b class='flag-5'>Python+Qt</b>(一):鏈接與單軸<b class='flag-5'>運動</b>