發布日期:2022-04-25 點擊率:453 品牌:組態王_Kingview
1、材料準備與控制器接線參考
材料準備:
1)電腦1臺,安裝ZDevelop3.01以上版本軟件。
2)控制器1個。
3)24V直流電源2個(主電源,IO電源)。
4)總線驅動器+電機(或步進驅動器+電機)若干。
5)控制器接線端子若干。
6)網線若干。
7)連接線若干。
8)不同類型擴展模塊多個(擴展模塊接線參考參見下文)。
2、擴展模塊的作用
當控制器自身的軸資源、IO資源不夠用時,可采用擴展模塊來擴展,可以擴展脈沖軸、數字量輸入輸出、模擬量輸入輸出這三種類型。只有帶脈沖軸接口的擴展模塊才支持擴展脈沖軸數,總線軸不可擴展。
擴展模塊按連接方式可分為ZCAN總線擴展模塊和EtherCAT擴展模塊兩類。
按產品系列劃分,可分為ZCAN擴展模塊,EtherCAT擴展模塊、ZMIO300擴展模塊三大類。
IO數字量擴展:ZMC控制器4系列及以上的型號IO點數可擴展至4096點。
AIO模擬量擴展:ZMC控制器4系列及以上的型號AIO點數可擴展至520點。
軸擴展:只能擴展脈沖軸,鑒于成本和使用方面,不建議使用過多軸擴展板,可選用支持脈沖軸數較多的控制器型號。
控制器可擴展的IO點數可在硬件手冊或“命令與輸出”窗口輸入?*max打印查看。
3、EtherCAT總線擴展模塊
EtherCAT總線擴展模塊包含兩個系列:可分為EIO擴展模塊、ZMIO300-ECAT擴展模塊。
EIO1616MT支持擴展數字量IO,包含16路輸入和16路輸出。
EIO24088可擴展數字量IO和脈沖軸,支持擴展8個脈沖軸,包含24路輸入和8路輸出。
ZMIO300-ECAT擴展模塊為立式組合模塊,可擴展數字量IO和模擬量。
EtherCAT通訊建議采用帶屏蔽層的雙絞線進行網絡數據傳輸。
1)EIO擴展模塊
A、EIO擴展模塊使用EtherCAT總線擴展,可選型號如下表:
EIO1616雙電源供電(除了主電源,IO也需要單獨供電),EIO24088為單電源供電。
擴展模塊數字量IO接口默認支持NPN型。
EtherCAT擴展模塊接線只需將各個模塊的EtherCAT口相互連接即可,EIO擴展板帶兩個EtherCAT接口,EtherCAT IN口接主控制器,EtherCAT OUT口接下級擴展板或驅動設備,不可混用。
B、EIO擴展模塊使用接線
EIO擴展接線參考如下:
2)ZMIO300-ECAT擴展模塊
A、ZMIO300-ECAT擴展模塊可搭配子模塊如下表:
模擬量精度為16位,有NPN和PNP兩種輸入方式可選,數字量輸入輸出口帶信號狀態指示燈。
ZMIO300-16DO/ZMIO300-16DOP數字量輸出需要一路電源單獨供電。
B、ZMIO300-ECAT擴展模塊使用接線
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映射的映射的編號在整個控制系統中均不得重復。
5、EtherCAT總線相關概念
總線相關指令參數會用到如下編號:
槽位號(slot)
槽位號是指控制器上總線接口的編號,缺省為0。當控制器上有多個總線接口,?*SLOT查看槽位號。
運動控制器支持單總線時,槽位號為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總線狀態
使用編程軟件成功連接到控制器之后,執行總線掃描之后,在線命令欄輸入?*EtherCAT打印出每個NODE節點的狀態。
Slot 0 contain 1 nodes:0槽位口共連接了1個設備
Lostcount 0-0:丟包數
Node:設備連接NODE編號
Status:設備連接狀態,參考NODE_STATUS
Mainid:廠商ID
Productid:設備ID
Axises:設備總軸數
Alstate:設備OP狀態
Node_profile:設備Profile設置
Bindaxis:映射到控制器的軸號,-1表示未映射
Drive_profile:設備收發PDO配置
Controlword:控制字
Drive_status:設備當前狀態,參考DRIVE_STATUS
Drive_mode:設備控制模式
Target:電機位置
Encode:編碼器位置
9、EtherCAT擴展模塊參考配置
控制模塊接線完成,使用ZDevelop軟件連接上控制器,運行總線初始化程序,打開“控制器”-“控制器狀態”窗口,查看槽位0節點信息,可以看到EtherCAT總線連接的全部設備的信息。
1)EIO擴展模塊
控制模塊配置:
1個ZMC432+1個EIO1616MT。
EIO1616MT的節點號為0,擴展的數字量輸入IO編號為1024-1039共16個,擴展的數字量輸出IO編號為1024-1039共16個。
NODE_IO(0,0)=1024
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個輸出
10、EtherCAT總線參考配置1
控制模塊配置:
1個ZMC432+2個總線驅動器。
使用ZDevelop軟件連接上控制器,執行完總線初始化程序后,打開“控制器”-“控制器狀態”窗口,可查看槽位0節點信息,或在線命令欄輸入?*EtherCAT打印出每個NODE節點的狀態。
此時總線上可以掃描到兩個節點,這兩個節點均為總線驅動器,每個驅動器各帶一個電機,將節點0的軸映射到軸6,將節點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打印信息如下:
11、EtherCAT總線參考配置2
控制模塊配置:
1個ZMC432+1個EIO1616MT+2個總線驅動器。
使用ZDevelop軟件連接上控制器,執行完總線初始化程序后,打開“控制器”-“控制器狀態”窗口,可查看槽位0節點信息,或在線命令欄輸入?*EtherCAT打印出每個NODE節點的狀態。
此時總線上可以掃描到3個節點,0節點為EIO1616MT數字量IO擴展模塊,帶16進16出,IO映射編號范圍為32-47,NODE_IO(0,0)=32
節點1和2均為總線驅動器,每個驅動器各帶一個電機,將這兩個軸的軸號分別映射為軸6、軸7。
在線命令欄輸入?*EtherCAT打印信息如下:
12、EtherCAT總線初始化程序
此初始化程序為通用版本,以上幾種配置均適用,使用時只需更改個別全局定義的參數即可。
運動控制模塊根據實際使用情況編寫。
'**********ECAT總線初始化主程序***********
global ConST PUL_AxisStart = 0 '本地脈沖軸起始軸號
global ConST PUL_AxisNum = 0 '本地脈沖軸軸數量
global ConST Bus_AxisStart = 6 '總線軸起始軸號
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
if Bus_InitStatus = 1 then ' 總線初始化是否完成
main() '運動控制模塊
endif
END
'************ECAT總線初始化**********
'初始流程: slot_scan(掃描總線) -> 從站節點映射軸/io -> SLOT_START(啟動總線) -> 初始化成功
'***********************************
global sub Ecat_Init()
LOCAL Node_Num '節點設備編號
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 '判斷總線檢測數量是否為實際接線數量
?""
?"掃描節點數量與程序配置數量不一致!" ,"配置數量:"Bus_NodeNum,"檢測數量:"NODE_COUNT(0)
Bus_InitStatus = 0 '初始化失敗。報警提示
'return
endif
'"開始映射軸號"
for Node_Num=0 to NODE_COUNT(0)-1 '遍歷掃描到的所有從站節點
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 '判斷當前節點是否有電機
for j=0 to NODE_AXIS_COUNT(0,Node_Num)-1 '根據節點帶的電機數量循環配置軸參數(針對一拖多驅動器)
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) '清除控制器軸狀態錯誤"
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 '自動觸發示波器
MOVE(100,100) '先運動100,100位置
MOVECIRC(200,0,100,0,1) '半徑100順時針畫半圓,終點坐標(300,100)
end sub
下一篇: PLC、DCS、FCS三大控
上一篇: 機器視覺運動控制一體