Category:EtherCAT:EC SETUP/zh-hans
语言: | English |
---|
Category:EtherCAT:EC SETUP/zh-hans How to Set up EtherCAT.
The front page is EtherCAT
介绍
在开始使用softMC之前,您必须设置EtherCAT主站才能使用从站。
您必须以一定的方式配置系统中的轴,然后以有序的方式调用某些功能和子程序,并确保没有发生错误。
存储库中存在CONFIG.PRG和程序文件EC_SETUP.PRG,并演示以下过程。
CONFIG.PRG通过名称Axes []分配通用轴数组,并将系统中的所有现有轴设置为此数组。
NOTE | |
由于verison 0.4.15.3rc6引入了全局轴数组systemAxis[],并且数组Axes []是多余的,因此从CONFIG.PRG中删除。 |
EC_SETUP.PRG和AX_SETUP.PRG使用此数组自动设置系统。
IMPORTANT | |
保持EtherCAT设置的顺序至关重要。 给定示例中的任何更改都可能导致未定义的行为! |
EC_SETUP.PRG
EC_SETUP.PRG是一个通用脚本。其目的是在启动EtherCAT主站和从站之前对其进行配置,启动主站,并最终运行其他操作来完成EtherCAT启动过程。
EC_SETUP.PRG以易于嵌入代码配置特定运动驱动器和IO模块的方式编写。
本文详细介绍了EtherCAT启动时由EC_SETUP.PRG执行的主要步骤。
驱动器地址
每个EtherCAT从站都有一个地址。 目前该地址严格按照系统physical topology中的从站位置确定; 也就是说,附加到MC的第一个从站被分配到驱动器地址1,链中的第二个从站被分为从站地址2,依此类推。
EtherCAT从站可以是运动驱动器,IO模块或网关。
PRE-OP模式
在主站启动之前,所有从站都处于PRE-OP模式。 在这个阶段,主站被创建,并且系统从从站收集信息,以便创建由主站以设置EtherCAT通信的数据结构。
首先,区分运动驱动器和IO模块。 对于每个从站查询从站的供应商ID和产品代码。 以后可以使用此数据来识别特定产品并为其创建特定配置,如CDHD Configuration example。
numOfSlaves = EC_ETHERCAT_INIT
寻找未知的通用DS402运动驱动器。 如果发现,将其PDO重新映射到所需的最小值。
您可以通过将定义GENERIC_DS402_DRIVE_VENDOR替换为设备的供应商ID来更新以下代码,通过这样来做将其PDO重新映射到所需的最小值以创建同步位置运动:
for drive_addr = 1 to numOfSlaves
if ETSLAVES[drive_addr]->et_slavetype = ECAT_MOTIONSLAVE then
if EC_SLAVES_INFO[drive_addr]->vendor_id = GENERIC_DS402_DRIVE_VENDOR then ' 替换您的产品的供应商ID
call EC_REMAP_MINIMUM_PDOS(drive_addr)
end if
end if
next
检查EtherCAT拓扑接线错误
EtherCAT拓扑结构对接线方向敏感。 每个EtherCAT从站都有一个INPUT连接器和一个OUTPUT连接器。
从EtherCAT主站的OUTPUT"启动"的电缆必须连接到第一个EtherCAT从站的INPUT。 第二根电缆将从第一个从站的OUTPUT"引出"并连接到第二个从站的INPUT,以此类推。
大多数情况下,'接线错误'意味着在拓扑结构中,EtherCAT电缆连接在INPUT和OUTPUT连接器之间混淆。
这种情况导致未定义的行为,甚至导致错误的电机动作,这是一个安全问题。
IMPORTANT | |
如果检测到接线错误,将抛出错误,EC_SETUP.PRG将停止运行 |
retVal = CHECK_TOPOLOGY
创建EtherCAT主站.
call EC_CREATE_MASTER
设置运动周期时间: 4000, 2000, 1000, 500 or 250 [us]
call EC_SET_BUS_CYCLETIME(4000) ' 循环时间为500/250 [us],添加到FWCONFIG:hpetfreq = 2000
从这里EC_SETUP.PRG使用收集的信息来配置从站。'循环'检查从站并试图与它们知道的产品(比如CDHD)相匹配。当发现时,会调用产品特定的功能来在主站中创建数据结构,从而详细说明从站的PDO映射(无论是动态驱动器还是IO模块)。在这里您可以添加自己的代码来配置自己的EtherCAT从站。 只需添加另一种实例来匹配您的设备供应商ID。
您可以使用已经准备好的GENERIC_DS402_DRIVE_VENDOR实例。
将定义的GENERIC_DS402_DRIVE_VENDOR替换为您的设备供应商ID,GENERIC_DS402_DRIVE_PRODUCT_ID替换为设备代码:
Case GENERIC_DS402_DRIVE_VENDOR ' 替换您的供应商ID
if EC_SLAVES_INFO[drive_addr]->product_code = GENERIC_DS402_DRIVE_PRODUCT_ID then ' 替换为您的产品ID
call EC_INSTALL_GENERIC_DRIVE(drive_addr, Counts_Per_Revolution) ' 电机每圈计数
num_Of_Motion_Drives = num_Of_Motion_Drives + 1
end if
如果找到一个Servotronix(STX)CDHD伺服运动驱动器,则调用函数EC_INSTALL_STX_CDHD。 此功能设置驱动器中的某些参数,创建CDHD的PDO映射,并查询驱动器的PNUM和PDEN以允许计算Position Factor.。 对于通用驱动器,使用最小PDO映射和默认值。
用户可以将自己的代码添加到EC_USER_PREOP_CONFIG中,以执行从站处于PREOP模式时必须执行的任何特定配置。 从站配置完成后,主站将启动:
' Create PDOs mapping, set bus cycle time, sync clocks between the master and the slaves,
' raise slaves to OP-Mode and sets master's opmode to operational
call EC_STARTMASTER ' Syncs clocks between the master and the slaves, and sets master's opmode to operational
主站试图将所有从站上升到OP模式。 如果失败,程序将停止并发出错误。 如果成功,EtherCAT通信立即开始,EC_SETUP.PRG启动第二阶段的配置。
OP Mode
一个For循环再次遍历了所有的从站。当遇到运动驱动器时,EC_SETUP.PRG将其驱动器地址附加到轴上,并尝试清除其故障。
同样用户可以将自己的代码添加到EC_USER_SAFEOP_CONFIG和 EC_USER_OP_CONFIG中执行在从站处于“SAFEOP”或“OP”模式时必须发生的任何特定配置。
' SAFEOP state configuration - Add code to EC_USER_SAFEOP_CONFIG(byval drive_addr as long)
retVal = EC_USER_SAFEOP_CONFIG(drive_addr)
' OP state configuration - Add code to EC_USER_OP_CONFIG(byval drive_addr as long)
retVal = EC_USER_OP_CONFIG(drive_addr)
' Assign ECAT bus ID and slave address to an axis
systemAxis(Axis_Attached_To_Drive).busnumber = ECAT_BUSID
systemAxis(Axis_Attached_To_Drive).dadd = drive_addr
' Attempt to clear faults in the drives
Try
call EC_CLEAR_FAULTS(drive_addr)
Catch Else
' if clear faults failed due to PLL Sync Error, wait a little longer and retry
if EC_SDO_READ(drive_addr, 0x603f, 0) = 0x7386 then
printu "PLL Error in drive #. Sleeping 5 seconds and retrying to clear fault";drive_addr
sleep 5000
call EC_CLEAR_FAULTS(drive_addr)
end if
End Try
所有运动驱动器都设置为同步位置模式:
' Set drives to sync position mode
if EC_IS_PDO(Axes[Axis_Attached_To_Drive].dadd, 0x6060, 0) then
call EC_PDO_WRITE(Axes[Axis_Attached_To_Drive].dadd, Modes_Of_Operation_6060h, 0, 8)
else
call EC_SDO_WRITE(Axes[Axis_Attached_To_Drive].dadd, Modes_Of_Operation_6060h, 0, 8, 8)
end if
参见
- EC_ETHERCAT_INIT
- EC_REMAP_MINIMUM_PDOS
- EC_CREATE_MASTER
- EC_SET_BUS_CYCLETIME
- EC_GET_BUS_CYCLETIME
- EC_STARTMASTER
- EC_CLEAR_FAULTS
- EC_SDO_READ
- EC_SDO_WRITE
- EC_PDO_READ
- EC_PDO_WRITE
- EC_IS_PDO
- EC_USER_PREOP_CONFIG
- EC_USER_SAFEOP_CONFIG
- EC_USER_OP_CONFIG
This category currently contains no pages or media.