技術頻道

娓娓工業(yè)
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 快速入門丨篇八:如何進行運動控制器EtherCAT總線的基礎使用?

快速入門丨篇八:如何進行運動控制器EtherCAT總線的基礎使用?

時間:2020-11-26 09:41:31來源:正運動技術

導語:?

  之前正運動技術與大家分享了,運動控制器的固件升級、ZBasic程序開發(fā)、ZPLC程序開發(fā)、與觸摸屏通訊和輸入/輸出IO的應用、運動控制器數據與存儲的應用以及運動控制器ZCAN總線擴展模塊的使用等。

  今天,我們來講解一下正運動技術運動控制器EtherCAT總線的基礎使用。

  

  教學視頻地址:《快速入門丨篇八:如何進行運動控制器EtherCAT總線的基礎使用?》

  

   1、材料準備與控制器接線參考

  

  材料準備:

  1)電腦1臺,安裝ZDevelop3.01以上版本軟件。

  2)控制器1個。

  3)24V直流電源2個(主電源,IO電源)。

  4)總線驅動器+電機(或步進驅動器+電機)若干。

  5)控制器接線端子若干。

  6)網線若干。

  7)連接線若干。

  8)不同類型擴展模塊多個(擴展模塊接線參考參見下文)。

  

  1.png

   控制器接線參考

   2、擴展模塊的作用

  

  當控制器自身的軸資源、IO資源不夠用時,可采用擴展模塊來擴展,可以擴展脈沖軸、數字量輸入輸出、模擬量輸入輸出這三種類型。只有帶脈沖軸接口的擴展模塊才支持擴展脈沖軸數,總線軸不可擴展。

  擴展模塊按連接方式可分為ZCAN總線擴展模塊和EtherCAT擴展模塊兩類。

  按產品系列劃分,可分為ZCAN擴展模塊,EtherCAT擴展模塊、ZMIO300擴展模塊三大類。

  IO數字量擴展:ZMC控制器4系列及以上的型號IO點數可擴展至4096點。

  AIO模擬量擴展:ZMC控制器4系列及以上的型號AIO點數可擴展至520點。

  軸擴展:只能擴展脈沖軸,鑒于成本和使用方面,不建議使用過多軸擴展板,可選用支持脈沖軸數較多的控制器型號。

  控制器可擴展的IO點數可在硬件手冊或“命令與輸出”窗口輸入?*max打印查看。

  

  2.png

  

   3、EtherCAT總線擴展模塊

  

  EtherCAT總線擴展模塊包含兩個系列:可分為EIO擴展模塊、ZMIO300-ECAT擴展模塊。

  EIO1616MT支持擴展數字量IO,包含16路輸入和16路輸出。

  EIO24088可擴展數字量IO和脈沖軸,支持擴展8個脈沖軸,包含24路輸入和8路輸出。

  ZMIO300-ECAT擴展模塊為立式組合模塊,可擴展數字量IO和模擬量。

  EtherCAT通訊建議采用帶屏蔽層的雙絞線進行網絡數據傳輸。

  

  3.png

  

  EIO1616MT

  

  4.png

  

  EIO24088

  

  5.png

  

  ZMIO300-ECAT+16DO+16DI+4DA+4AD

  

  

  

   1)EIO擴展模塊

  A、EIO擴展模塊使用EtherCAT總線擴展,可選型號如下表:

  

  6.png

  

  EIO1616雙電源供電(除了主電源,IO也需要單獨供電),EIO24088為單電源供電。

  擴展模塊數字量IO接口默認支持NPN型。

  EtherCAT擴展模塊接線只需將各個模塊的EtherCAT口相互連接即可,EIO擴展板帶兩個EtherCAT接口,EtherCAT IN口接主控制器,EtherCAT OUT口接下級擴展板或驅動設備,不可混用。

  B、EIO擴展模塊使用接線

  EIO擴展接線參考如下:

  

  7.png

  

 ZMC432+EIO24088+EIO1616 

  2)ZMIO300-ECAT擴展模塊

  A、ZMIO300-ECAT擴展模塊可搭配子模塊如下表:

  

  8.png

  

  模擬量精度為16位,有NPN和PNP兩種輸入方式可選,數字量輸入輸出口帶信號狀態(tài)指示燈。

  ZMIO300-16DO/ZMIO300-16DOP數字量輸出需要一路電源單獨供電。

  B、ZMIO300-ECAT擴展模塊使用接線

  

  9.png

  

  ZMIO300-ECAT擴展模塊接線參考如下,與EIO擴展模塊接線方法相同。

  EtherCAT IN口與EtherCAT OUT口不可混用。

  

  4、EtherCAT總線使用

  

  EtherCAT總線上連接的電機則需要編寫一段程序來進行使能。使能之后的應用與脈沖電機一致,運動指令都是相同的。初始化程序參見文章末尾。

  初始化過程主要包含以下幾個步驟:

  1、總線掃描SLOT_SCAN (slot)

  2、軸映射AXIS_ADDRESS,擴展模塊IO映射NODE_IO

  3、總線開啟SLOT_START (slot)

  4、清除驅動器錯誤DRIVE_CLEAR(0)

  5、軸使能AXIS_ENABLE(單軸使能),WDOG(總使能)

  初始化成功后,便可以使用運動控制指令控制總線軸運轉。

  擴展的資源必須映射到控制器本地資源才可使用。

  不同的EtherCAT擴展模塊,IO映射、軸映射方法相同。

  IO映射采用NODE_IO指令(數字量)、NODE_AIO指令(模擬量)設置,軸映射采用AXIS_ADDRESS指令映射軸號。

  IO映射時先查看控制器自身的最大IO編號(包括外部IO接口和脈沖軸內的接口),再使用指令設置。

  若擴展的 IO與控制器自身IO編號重合,二者將同時起作用,所以IO映射的映射的編號在整個控制系統(tǒng)中均不得重復。

  

  5、EtherCAT總線相關概念

  

  總線相關指令參數會用到如下編號:

  槽位號(slot)

  槽位號是指控制器上總線接口的編號,缺省為0。當控制器上有多個總線接口,?*SLOT查看槽位號。

  

  10.png

  

  運動控制器支持單總線時,槽位號為0。

  支持雙總線時,EtherCAT總線槽位號為0,RTEX總線槽位號為1。

  設備號(node)

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

  驅動器編號

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

  驅動器編號與設備號不同,只給槽位上的驅動器設備編號,其他設備忽略。

  

  6、IO映射

  

  1)數字量IO

  NODE_IO指令設置設備的數字量IO起始編號,單個設備的輸入輸出的起始編號一樣。必須總線掃描后才能設置。

  

        語法:

        NODE_IO(slot, node)=iobase

           slot:槽位號,0-缺省

           node:設備編號,編號從0開始

           iobase:映射IO起始編號,設置結果只會是8的倍數

        示例:

        SLOT_SCAN(0)         '掃描總線

        IF NODE_COUNT(0)>0 THEN '判斷槽位0上是否有設備

           NODE_IO(0,0)=32   '設置槽位0接口設備0的IO起始編號為32

           ?NODE_IO(0,0)       '打印出設備0的IO起始編號

        ENDIF

  2)模擬量IO

  NODE_AIO指令設置設備的模擬量IO起始編號,單個設備的輸入輸出的起始編號一樣。必須總線掃描后才能讀取。

      NODE_AIO(slot, node[,idir])=Aiobase

          slot:槽位號,0-缺省

             node:設備編號,編號從0開始

          idir:AD/DA選擇 。0-缺省,同時設置AIN、AOUT,讀取時只讀AIN;3-AIN;4-AOUT

      示例:

      SLOT_SCAN(0) '掃描總線

      IF NODE_COUNT(0)>0 THEN '判斷槽位0上是否有設備

          NODE_AIO(0,0,0)=8 '設置槽位0接口設備0的AIN和AOUT起始編號都為8

          ?NODE_AIO(0,0,0) '打印出設備0的AIO起始編號

      ENDIF

  

  7、EtherCAT總線軸映射

  

  總線軸需要進行軸映射操作,采用AXIS_ADDRESS指令映射,操作方法如下:

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

  軸映射寫在總線初始化程序中,總線掃描之后,開啟總線之前。

  示例:

  AXIS_ADDRESS (0)=(0<<16)+0+1 '第一個ECAT驅動器,驅動器編號0,綁定為軸0

  AXIS_ADDRESS (2)=(0<<16)+1+1 '第二個ECAT驅動器,驅動器編號1,綁定為軸2

  AXIS_ADDRESS (1)=(0<<16)+2+1 '第三個ECAT驅動器,驅動器編號2,綁定為軸1

  ATYPE(0)=65 '設置為ECAT軸類型, 65-位置 66-速度 67-轉矩

  ATYPE(1)=65

  ATYPE(2)=65

  

  8、EtherCAT總線狀態(tài)

  

  使用編程軟件成功連接到控制器之后,執(zhí)行總線掃描之后,在線命令欄輸入?*EtherCAT打印出每個NODE節(jié)點的狀態(tài)。

  

  11.png

  

  Slot 0 contain 1 nodes:0槽位口共連接了1個設備

  Lostcount 0-0:丟包數

  Node:設備連接NODE編號

  Status:設備連接狀態(tài),參考NODE_STATUS

  Mainid:廠商ID

  Productid:設備ID

  Axises:設備總軸數

  Alstate:設備OP狀態(tài)

  Node_profile:設備Profile設置

  Bindaxis:映射到控制器的軸號,-1表示未映射

  Drive_profile:設備收發(fā)PDO配置

  Controlword:控制字

  Drive_status:設備當前狀態(tài),參考DRIVE_STATUS

  Drive_mode:設備控制模式

  Target:電機位置

  Encode:編碼器位置

  

  9、EtherCAT擴展模塊參考配置

  

  控制模塊接線完成,使用ZDevelop軟件連接上控制器,運行總線初始化程序,打開“控制器”-“控制器狀態(tài)”窗口,查看槽位0節(jié)點信息,可以看到EtherCAT總線連接的全部設備的信息。

  1)EIO擴展模塊

  控制模塊配置:

  1個ZMC432+1個EIO1616MT。

  EIO1616MT的節(jié)點號為0,擴展的數字量輸入IO編號為1024-1039共16個,擴展的數字量輸出IO編號為1024-1039共16個。

  NODE_IO(0,0)=1024

  

  12.png

  

  2)ZMIO300-ECAT擴展模塊

  控制模塊配置:

  1個ZMC432+1個ZMIO300-ECAT通訊模塊+4個ZMIO300-16DI輸入+2個ZMIO300-16DO輸出+1個ZMIO300-4AD+1個ZMIO300-4DA

  NODE_IO(0,0)=32 'IO映射,起始編號從32開始,擴展了64個輸入和32個輸出

  NODE_AIO(0,0,0)=4 'AIO映射,起始編號從4開始,擴展4個輸入和4個輸出

  

  13.png

  

  10、EtherCAT總線參考配置1

  控制模塊配置:

  1個ZMC432+2個總線驅動器。

  使用ZDevelop軟件連接上控制器,執(zhí)行完總線初始化程序后,打開“控制器”-“控制器狀態(tài)”窗口,可查看槽位0節(jié)點信息,或在線命令欄輸入?*EtherCAT打印出每個NODE節(jié)點的狀態(tài)。

  

  14.png

  

  此時總線上可以掃描到兩個節(jié)點,這兩個節(jié)點均為總線驅動器,每個驅動器各帶一個電機,將節(jié)點0的軸映射到軸6,將節(jié)點1的軸映射到軸7。

  AXIS_ADDRESS(6)= (0<<16)+0+1 '映射軸號

  AXIS_ADDRESS(7)=(0<<16)+1+1

  ATYPE(6)=65 '設置控制模式,65-位置 66-速度 67-轉矩

  ATYPE(7)=65

  在線命令欄輸入?*EtherCAT打印信息如下:

  

  15.png

  

  11、EtherCAT總線參考配置2

  

  控制模塊配置:

  1個ZMC432+1個EIO1616MT+2個總線驅動器。

  使用ZDevelop軟件連接上控制器,執(zhí)行完總線初始化程序后,打開“控制器”-“控制器狀態(tài)”窗口,可查看槽位0節(jié)點信息,或在線命令欄輸入?*EtherCAT打印出每個NODE節(jié)點的狀態(tài)。

  16.png

  此時總線上可以掃描到3個節(jié)點,0節(jié)點為EIO1616MT數字量IO擴展模塊,帶16進16出,IO映射編號范圍為32-47,NODE_IO(0,0)=32

  節(jié)點1和2均為總線驅動器,每個驅動器各帶一個電機,將這兩個軸的軸號分別映射為軸6、軸7。

  在線命令欄輸入?*EtherCAT打印信息如下:

  

  17.png

  

  12、EtherCAT總線初始化程序

  

  此初始化程序為通用版本,以上幾種配置均適用,使用時只需更改個別全局定義的參數即可。

  運動控制模塊根據實際使用情況編寫。

  

        **********ECAT總線初始化主程序***********

        global CONST PUL_AxisStart   = 0    '本地脈沖軸起始軸號

        global CONST PUL_AxisNum   = 0    '本地脈沖軸軸數量

        global CONST Bus_AxisStart   = 6      '總線軸起始軸號

        global CONST Bus_NodeNum   = 1      '總線配置節(jié)點數量,用于判斷實際檢測到的從站數量是否一致

        global  MAX_AXISNUM        '最大軸數

        MAX_AXISNUM = SYS_ZFEATURE(0)   '自動獲取控制器支持的軸數

        global Bus_InitStatus      '總線初始化完成狀態(tài)

        Bus_InitStatus = -1

        global  Bus_TotalAxisnum    '檢查掃描的總軸數

        delay(3000)        '延時3S等待驅動器上電,不同驅動器自身上電時間不同,具體根據驅動器調整延時

        ?"總線通訊周期:",SERVO_PERIOD,"us"

        Ecat_Init()      '初始化ECAT總線 

        while (Bus_InitStatus = 0)

          Ecat_Init()

        wend

        if Bus_InitStatus  = 1 then     '總線初始化是否完成

          main()    '運動控制模塊 

        endif

        END

        '************ECAT總線初始化**********

        '初始流程:  slot_scan(掃描總線) ->   從站節(jié)點映射軸/io  ->  SLOT_START(啟動總線) -> 初始化成功

        '***********************************

        global sub Ecat_Init()

          LOCAL  Node_Num          '節(jié)點設備編號

          LOCAL  Temp_Axis           '當前總線軸的軸號

          LOCAL  Drive_Vender        '當前設備廠商編號

          LOCAL  Drive_Device        '設備編號

          LOCAL  Drive_Alias         '設備撥碼ID

          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    '將掃描的總線總軸數置0

          SLOT_STOP(0)        

          delay(200)

          slot_scan(0)                      '掃描總線

          if return then 

            ?"總線掃描成功","連接從站設備數:"NODE_COUNT(0)

            if NODE_COUNT(0) <> Bus_NodeNum then    '判斷總線檢測數量是否為實際接線數量

              ?""  

              ?"掃描節(jié)點數量與程序配置數量不一致!" ,"配置數量:"Bus_NodeNum,"檢測數量:"NODE_COUNT(0)

              Bus_InitStatus = 0    '初始化失敗。報警提示

              'return

            endif   

            '"開始映射軸號"

            for Node_Num=0 to NODE_COUNT(0)-1            '遍歷掃描到的所有從站節(jié)點

              Drive_Vender = NODE_INFO(0,Node_Num,0)        '讀取設備廠商

              Drive_Device = NODE_INFO(0,Node_Num,1)        '讀取設備編號

              Drive_Alias = NODE_INFO(0,Node_Num,3)        '讀取設備撥碼ID

              if NODE_AXIS_COUNT(0,Node_Num) <> 0  then      '判斷當前節(jié)點是否有電機

                for j=0 to NODE_AXIS_COUNT(0,Node_Num)-1      '根據節(jié)點帶的電機數量循環(huán)配置軸參數(針對一拖多驅動器)

                  Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum    '軸號按NODE順序分配,總線開始軸號+總線掃描軸號

                  'Temp_Axis = Drive_Alias              '軸號按驅動器設定的撥碼分配(一拖多需要特殊處理)          

                  base(Temp_Axis)

                  AXIS_ADDRESS(Temp_Axis)= (0<<16)+ Bus_TotalAxisnum + 1  '映射軸號

                  ATYPE=65    '設置控制模式 65-位置 66-速度 67-轉矩   

                  disable_group(Temp_Axis)                      '每軸單獨分組

                  Bus_TotalAxisnum=Bus_TotalAxisnum+1                  '總軸數+1

                next

              else                            'IO擴展模塊

                Sub_SetNodeIo(Node_Num,Drive_Vender,Drive_Device,1024 + 32*Node_Num)    '映射擴展模塊IO

                ?"擴展IO映射完成"  

              endif

            next

            ?"軸號映射完成","連接總軸數:"Bus_TotalAxisnum

            wa 200

            SLOT_START(0)        '啟動總線

            if return then 

              wdog=1              '使能總開關

              '?"開始清除驅動器錯誤"

              for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1 

                BASE(i)

                DRIVE_CLEAR(0)

                DELAY 50

                '?"驅動器錯誤清除完成"

                datum(0)            '清除控制器軸狀態(tài)錯誤"

                wa 100  

                '"軸使能"

                AXIS_ENABLE=1

              next

              Bus_InitStatus  = 1

              ?"軸使能完成"

              '本地脈沖軸配置

              for i = 0 to PUL_AxisNum - 1

                base(PUL_AxisStart + i)

                AXIS_ADDRESS  = (-1<<16) +  i

                ATYPE = 4

              next

              ?"總線開啟成功"      

            else

              ?"總線開啟失敗"

              Bus_InitStatus = 0

            endif  

          else

            ?"總線掃描失敗"

            Bus_InitStatus = 0

          endif

        end sub

        '********總線IO模塊映射********

        '通過NODE_IO(0,Node_Num)分配模塊IO起始地址,不使用擴展模塊的時候刪掉此段

        '*****************************

        global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)

          if  iVender = $41B then    '正運動IO擴展模塊

            NODE_IO(0,iNode) = i_IoNum

            'NODE_AIO(0,iNode) = 4*(iNode+1)

            ?"IO映射成功"

          endif

        end sub

        

        '**********運動控制模塊********

        '初始化完成后,使用運動控制指令控制ECAT總線軸運動

        '*****************************

        global sub main()

          RAPIDSTOP(2)

          WAIT IDLE

          BASE(6,7)          '選擇總線軸軸號

          ATYPE=65,65       

          UNITS=100,100      '脈沖當量設置

          SPEED=100,100

          ACCEL=1000,1000

          DECEL=1000,1000

          DPOS=0,0

          MPOS=0,0

          TRIGGER              '自動觸發(fā)示波器

          MOVE(100,100)             '先運動100,100位置

          MOVECIRC(200,0,100,0,1)  '半徑100順時針畫半圓,終點坐標(300,100)

        end sub

  正運動技術運動控制器EtherCAT總線的基礎使用就分享到這里,更多精彩內容,請關注我們的公眾號。

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

18.png

標簽:

點贊

分享到:

上一篇:快速入門丨篇七:如何進行運...

下一篇:快速入門丨篇九:如何進行運...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.wangxinlc.cn)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業(yè)自動化與智能制造的全媒體“互聯網+”創(chuàng)新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號