Category:EtherCAT:EC SETUP/zh-hans

From SoftMC-Wiki
Jump to: navigation, search
语言: 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-Info.svgNOTE
由于verison 0.4.15.3rc6引入了全局轴数组systemAxis[],并且数组Axes []是多余的,因此从CONFIG.PRG中删除。

EC_SETUP.PRG和AX_SETUP.PRG使用此数组自动设置系统。

IMPORTANT.svgIMPORTANT
保持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.svgIMPORTANT
如果检测到接线错误,将抛出错误,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_CONFIGEC_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


参见


This category currently contains no pages or media.