Error[8]: Undefined offset: 325, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 114
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

EIO16084扩展模块的使用分为如下几步,[+++]接线;总线初始化建立总线通讯连接,初始化中执行扩展资源的映射,分别配置轴资源和IO资源;扩展资源配置完成可通过控制器端访问,扩展轴为脉冲型,设置相关轴参数,发送运动命令即可控制[+++]运动。

[+++][+++] [+++]

EIO16084扩展模块是EtherCAT总线控制器使用的扩展模块,可扩展数字量IO和脉冲轴这两类资源,当控制器本体上资源不够的时候,EtherCAT总线控制器可连接多个EIO扩展模块进行资源扩展,可查看控制器的IO最大扩展点数和最大扩展轴数,支持IO的远程扩展。

b831431e-2b1d-11ed-ba43-dac502259ad0.png

EIO16084扩展模块

每个EIO扩展模块在扩展接线完成后,不需要进行进行二次开发,只需使用指令在EtherCAT主站控制器配置唯一的IO地址和轴地址,配置完成即可访问。

IO地址编号通过总线指令NODE_IO来设置,控制器上程序只需通过IO编号就可以访问到扩展模块上的资源。轴地址的配置使用“AXIS_[+++]DRESS”指令映射绑定轴号,绑定完成通过BASE或AXIS指令指定轴号。

[+++]

(1)支持4轴脉冲轴扩展。 (2)脉冲输出模式:方向/脉冲或双脉冲。 (3)每轴最大输出脉冲频率10MHz。 (4)支持16进+8出IO扩展,每个脉冲轴另外各有2进2出IO可供配置。 (5)脉冲轴以外的输出口最大输出[+++]达300mA,可直接驱动部分电磁阀。 (6)ECAT最快500us的刷新周期。

(7)单[+++]供电,连接主电源即可,无需IO电源。

[+++]

 

[+++] [+++] [+++]数 [+++] [+++] [+++] [+++][+++][+++]

 

EIO系列带轴的扩展模块的使用方法相同,仅是扩展资源数量的区别,EIO16084和EIO24088的使用方法完全相同,EIO1616相比上面两个型号,无需轴映射相关 *** 作。

b87376d0-2b1d-11ed-ba43-dac502259ad0.png

EIO24088扩展模块

[+++][+++] [+++]说明

[+++]

EIO16084带两个EtherCAT总线接口,“EtherCAT IN”和“EtherCAT OUT”,使用标准网线完成接线。

[+++]“EtherCAT IN”连接上一级模块,“EtherCAT OUT”连接下一级模块,IN和OUT口不可混用。

[+++]

通用输入口IN的内部[+++]参考图如下,EIO16084带16个通用输入口,输入口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作,输入口参数参见下表。

b8ea2690-2b1d-11ed-ba43-dac502259ad0.png

通用输入口IN的内部电路参考图

[+++]

[+++] [+++] [+++][+++][+++][+++][+++][+++] 输入[+++] 4.7KΩ [+++][+++]


[+++]

通用输出口OUT的内部电路参考图如下,EIO16084带8个通用输入口,输出口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作(NODE_IO使用一次便可配置好输入和输出),输出口参数参见下表。

b9055622-2b1d-11ed-ba43-dac502259ad0.png

通用输出口OUT的内部电路参考图

[+++]

 

[+++] [+++] [+++] 输出方式 [+++]NPN型,OD输出。 [+++][+++][+++][+++][+++][+++][+++][+++]

 

[+++]

EIO16084的轴接口有4个,采用DB26针脚,针脚定义如下表,轴接口包含差分脉冲输入和差分编码器输入信号,同时还有两路通用输入口(其中一路为报警输入),两路通用输出口(其中一路为驱动使能)。

EIO16084扩展轴时,为总线转脉冲,将脉冲型驱动器接入到EIO16084扩展模块上的脉冲轴接口上。通过总线初始化建立EtherCAT总线控制器和EIO16084扩展模块之间的通讯连接,总线初始化过程中必须包含轴映射,之后参考脉冲型控制器的使用方法 *** 作脉冲驱动器。

b919b7ca-2b1d-11ed-ba43-dac502259ad0.png

 

[+++] [+++] [+++] [+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++]

 

可以通过数据字典配置EIO扩展板直接使能与告警,缺省不使用,需要主控制器来 *** 作。

告警输入、位置到位信号、轴使能、误差清除可以为通用的输入输出,由于驱动能力偏小建议做轴功能IO使用。

“EGND,OVCC电源”是控制器内部输出供伺服IO使用,请勿连接到[+++],不使用时悬空。

[+++] [+++]

EIO16084扩展模块接线规则:EIO16084可接到EtherCAT总线上的任意节点。

EIO16084为总线上的一个设备节点,可接入4个脉冲型驱动器,驱动器按照AXIS 0到AXIS 3的顺序依次编号,并且遵从总线上的驱动器编号规则。

驱动器的使能信号为脉冲接口内的通用输出口,直接通过主控制器的OP指令来使能。或使用SDO指令配置数据字典为自动使能后,主控制器无法直接控制对应的输出口来使能。

[+++]轴扩展模块的使用个数不是无限制的,参考控制器可扩展的最大轴数。

如下图,ZMC416BE运动控制器本体支持连接16个脉冲驱动器,最大扩展轴数为20,故可以通过EtherCAT总线连接一个EIO16084扩展到支持20个脉冲驱动器。

扩展轴映射轴号时注意避开本地脉冲轴,若本地脉冲轴使用了16个,默认对应轴号0-15,则扩展轴上的AXIS0-3(对应下图中驱动器编号0-3)分别手动映射为轴号16-19。

b93f945e-2b1d-11ed-ba43-dac502259ad0.png

如下图,ZMC432运动控制器本体支持连接32个轴(脉冲驱动器+EtherCAT总线驱动器一共32个),控制器本体只有6路脉冲接口,通过一个EIO16084可扩展4路脉冲接口,支持脉冲驱动器和总线驱动器混合使用。

b9628586-2b1d-11ed-ba43-dac502259ad0.png

上图涉及的编号概念如下:总线相关指令参数会用到如下编号。

(1)槽位号(slot)

槽位号是指控制器上总线接口的编号,EtherCAT总线槽位号为0。

(2)设备号(node)

设备号是指一个槽位上连接的所有设备的编号,从0开始,按设备在总线上的连接顺序自动编号,可以通过“NODE_COUNT(slot)”指令查看总线上连接的设备总数。

(3)驱动器编号

控制器会自动识别出槽位上的驱动器,编号从0开始,按驱动器在总线上的连接顺序自动编号。

驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略,映射轴号时将会用到驱动器编号。

[+++][+++] [+++]

EIO16084扩展模块上有两类资源需要映射,轴资源和IO资源。

[+++]

控制器上程序只需通过IO编号就可以访问到扩展模块上的资源,EtherCAT总线扩展模块IO编号通过总线指令NODE_IO来设置,同时配置输入和输出。

IO映射时先查看控制器自身的最大IO编号(包括外部IO接口和脉冲轴内的接口),再使用指令设置。

若扩展的IO与控制器自身IO编号重合,二者将同时起作用,所以IO映射的映射的编号在整个控制系统中均不得重复。

[+++]

NODE_IO(slot,node)=iobase slot:槽位号,0-缺省 node:设备编号,编号从0开始

iobase:映射IO起始编号,设置结果只会是8的倍数

[+++]

 

 

[+++]

 

 

若设备0为EIO16084,按如上语法配置后,扩展模块上的通用输入口IN0-15对应的IO编号依次为32-47,轴接口内的通用输入口编号48-55,其中轴AXIS 0-3的驱动报警输入分别为48-51。通用输出口OUT0-7应的IO编号依次为32-39,轴接口内的通用输出口编号40-47,其中轴AXIS 0-3的驱动使能输出分别为40-43。

b98fdb62-2b1d-11ed-ba43-dac502259ad0.png

[+++]

扩展模块的轴使用前需要使用“AXIS_ADDRESS”指令映射轴号,轴映射也需要注意整个系统的轴号不得重复。EIO系列扩展轴的映射与总线驱动器的轴映射语法相同。

[+++]

AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1

[+++]

[+++]

若第一个节点是EIO16084,EIO16084上连接了驱动器,那么这里的驱动器0是连接在EIO16084上的第一个脉冲驱动器,否则便是EtherCAT总线驱动器。

[+++][+++] [+++]

EIO16084扩展模块需要经过总线初始化之后才能使用,我们这里把一个脉冲型驱动器接到EIO16084扩展模块上的AXIS 0接口上,使用步骤如下。

第一步:执行总线初始化程序(参见下节),初始化过程中识别EIO扩展模块的设备编号和连接的驱动器编号,根据驱动器编号 *** 作轴映射,根据设备号 *** 作扩展模块的IO映射,设置DRIVE_PROFILE和ATYPE。

第二步:初始化成功后,使能EIO16084扩展模块上的脉冲驱动器,同样也是 *** 作脉冲轴接口内的OP信号使能驱动器,由于扩展模块映射的起始编号是32,这里的AXIS 0-AXIS 3口内的使能信号对应通用输出口编号是40-43。在输出口窗口内按下OP(40)或在程序中执行指令OP(40,ON)均可使能AXIS 0的驱动器。

第三步:使能完成设置相关轴参数,再发送运动指令便可驱动电机。

b99e11a0-2b1d-11ed-ba43-dac502259ad0.png

在初始化 *** 作成功后,总线上能识别该扩展模块,可查看扩展模块上的轴接口数,IO映射后可查看输入输出的编号范围。

例如设置起始编号为32,该扩展模块上的输入编号为外部自带的16点+轴接口通用输入8点,一共24点,范围32-55,输出编号为外部自带的8点+轴接口通用输入8点,一共16点,范围32-47。

b98fdb62-2b1d-11ed-ba43-dac502259ad0.png

[+++]

扩展模块上的IO不管有没有使用都需要使用NODE_IO指令映射EIO16084的输入输出编号。扩展模块的DRIVE_PROFILE配置为0,ATYPE设为65,但实际由于是脉冲型驱动器,轴类型并不是65,真实轴类型的配置使用SDO指令配置数据字典6011h设置。 初始化过程中若产生硬限位报警,可在轴参数窗口将硬限位FWD_IN和REV_IN的映射编号指向-1,表示不映射,需要接入限位[+++]时再去修改FWD_IN和REV_IN。 [+++] 通过SDO指令读写数据字典设置,只开放了部分数据字典供设置,更多驱动器参数使用驱动器[+++]修改。 [+++]

 

[+++] [+++] [+++] [+++] [+++] [+++][+++][+++][+++]

 

[+++]

例如:扩展的脉冲轴的真实轴类型设置通过数据字典6011h设置,(参考下表的参数,按轴号依次设置,第一个驱动器设置数据字典6011h+0*800h,第二个驱动器设置6011h+1*800h,以此类推,每个驱动器加800h,其他参数同理)

[+++] [+++] [+++] [+++] [+++] 6011h Atype UNSIGNED8 rw 扩展板轴的类型
0  虚拟轴
1  脉冲方向方式的步进或伺服
2  模拟信号控制方式的伺服
3  正交编码器
4  步进+编码器
5  步进+脉冲方向编码器
6  脉冲方向方式的编码器
7 脉冲方向方式步进或伺服+EZ信号输入 [+++] 6013h Iolevel UNSIGNED32 rw B0-原点电平
B1-限位电平
B8-自动使用使能信号
B9-使用ALM信号告警
B11-B15 原点信号选择 [+++] 6040h Controlword UNSIGNED16 rw 对应主控制器DRIVE_CONTROLWORD
B0- Switch on
B1- Enable voltage
B3 - Enable opera[+++]on
B7- Fault reset 6041h Statusword UNSIGNED16 ro 对应主控制器DRIVE_STATUS
B0 Ready to switch on
B1 Switched on
B2 OperaTIon enabled
B3 Fault
B4 Voltage enabled
B5 Quick stop
B7 Warning
B8 EZ status
B9 Remo[+++]
B10 Target reached
B11 Internal li[+++]t acTIve
B12 - 13 OperaTIon mode specific
B14 EA status
B15 EB status 6060h Modes of operation INTEGER8 rw 6 回零
8 周期定位 [+++][+++]

 

[+++] SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) [+++] SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) [+++]

 

 

global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   [+++] iVender = $41B and iDevice = $1918   then    '正运动16084脉冲扩展轴      SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4)      '设置扩展脉冲轴ATYPE类型,值为4表示脉冲和编码器信号在同一个轴号上      SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0)      '设置扩展脉冲轴INVERT_STEP脉冲输出模式,模式0,脉冲+方向      NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode          '设置16084上IO的起始映射地址   endifend sub

 

 

如果扩展模块之后还连接了EtherCAT驱动器,使用时注意总线扫描设备数量的设置,EtherCAT驱动器在初始化程序执行完便使能成功,后续设置轴参数便能运行,注意初始化过程中的DRIVE_PROFILE给EtherCAT驱动器配置合适的PDO列表,需要用到驱动器IO时,还需 *** 作DRIVE_IO映射。

[+++][+++] [+++]

此初始化程序可用来初始化EtherCAT驱动器和EtherCAT总线扩展模块,建立通讯连接(通用模板,适用于多种品牌的驱动器)。

b9e445bc-2b1d-11ed-ba43-dac502259ad0.png

 

 

'*******************************************************ECAT总线初始化global CONST BUS_TYPE = 0      '总线类型。可用于上位机区分当前总线类型global CONST MAX_AXISNUM =32    '最大轴数global CONST Bus_Slot   = 0        '槽位号0(单总线控制器缺省0)global CONST PUL_AxisStart= 0      '本地脉冲轴起始轴号global CONST PUL_AxisNum = 0    '本地脉冲轴轴数量global CONST Bus_AxisStart   = 6      总线轴起始轴号global CONST Bus_NodeNum = 2    '总线配置节点数量,用于判断实际检测到的从站数量是否一致global Bus_InitStatus      '总线初始化完成状态Bus_InitStatus = -1global  Bus_TotalAxisnum    '检查扫描的总轴数delay(3000)        '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时?"总线通讯周期:",SERVO_PERIOD,"us"Ecat_Init()      '初始化ECAT总线 while (Bus_InitStatus = 0)   Ecat_Init()wendend
'****************************************ECAT总线初始化**********************************'初始流程:  slot_s[+++](扫描总线) ->   从站节点映射轴/io  ->  SLOT_START(启动总线) -> 初始化成功'*****************************************************************************************global sub Ecat_Init()   local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias   RA[+++]DSTOP(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    '初始化失败。报警提示         return      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= Bus_TotalAxisnum+1  '映射轴号               ATYPE=65      '设置控制模式 65-位置 66-速度 67-转矩                Sub_SetPdo(Node_Num,Drive_Vender,Drive_Device)    '设定PDO参数               Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j)  '设置特殊总线参数,包含EIO16084的配置                 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         endif      next      ?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum       DELAY 200      SLOT_START(Bus_Slot)        '启动总线      if return then          wdog=1            '使能总开关            '?"开始清除驱动器错误"         for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1             BASE(i)            DRIVE_CLEAR(0)            DELAY 50            '?"驱动器错误清除完成"            datum(0)            '清除控制器轴状态错误"            DELAY 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   endifend sub
'*****************************************手动配置PDO**********************************'部分特殊品牌可能需要手动配置,大部分只需要通过DRIVE_PROFILE设置自动配置相应的POD参数即可'*******************************************************************************************global sub Sub_SetPdo(iNode,iVender,iDevice)   IF iVender = 0 then                    '自定义PDO        SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,0)        '禁用PDO,禁用后才可以修改内容      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,0)      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, 00, 

,5 ,0) 'RxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,400010) '控制字 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,7a0020) '目标位置 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,fe0120) '驱动器IO输入      SDO_WRITE (Bus_Slot, iNode, 00, 

 ,5 ,3)    SDO_WRITE (Bus_Slot, iNode, a00,

,5 ,0) 'TxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,410010) '状态字 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,640020) '反馈位置 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,fd0020) '驱动器IO输出      SDO_WRITE (Bus_Slot, iNode, a00, 

 ,5 ,3)     SDO_WRITE (Bus_Slot, iNode, c12, 1 ,6 ,00) 'RxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c13, 1 ,6 ,a00) TxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,1) '启用PDO DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,1) SDO_WRITE (Bus_Slot, iNode, C32, ,6 ,2) '设置DC同步模式      SDO_WRITE (Bus_Slot, iNode, C33,  ,6 ,2)  DRIVE_PROFILE = -1 '使用驱动缺省PDO配置 elseif iVender = f then DRIVE_PROFILE = 4 else DRIVE_PROFILE = 0 endifend sub '***************************************从站节点特殊参数配置*****************************'通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)'**********************************************************************************************global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   if iVender = B and iDevice = 18   then    '正运动EIO16084脉冲扩展轴 SDO_WRITE(Bus_Slot,iNode,11,Iaxis*0,5,4) '设置扩展脉冲轴ATYPE类型 SDO_WRITE(Bus_Slot,iNode,12,Iaxis*0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式 NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置16084上IO的起始映射地址 elseif iVender = f then '松下驱动器 SDO_WRITE(Bus_Slot,iNode,01,0,4,101) '正限位电平 8181      SDO_WRITE(Bus_Slot,iNode,02,0,4,202)        '负限位电平 8282  SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) SDO_WRITE(Bus_Slot,iNode,92,1,7,10000) '电机一圈脉冲数 SDO_WRITE(Bus_Slot,iNode,7E,0,5,224) '电机方向0-反转224 SDO_WRITE(Bus_Slot,iNode,85,0,7,4290000000) '异常减速度 'SDO_WRITE(Bus_Slot,iNode,10,1,7,766173) '写EPPROM(写EPPROM后驱动器需要重新上电) elseif iVender = 0000 then '汇川驱动器 SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) endifend sub '********************************总线IO模块映射**************************************'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址'******************************************************************************************global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)   if iVender = B and iDevice = 0   then    '正运动EIO1616 NODE_IO(Bus_Slot,iNode) = i_IoNum endifend sub

 

 

参考配置采用控制器依次连接一个EIO16084扩展模块和一个EtherCAT总线驱动器,采用以上初始化程序,成功建立通讯连接,控制器状态窗口显示当前扫描连接的节点情况。

总线上的主站为控制器,控制器连接的第一个从站设备为EIO16084扩展模块,第二个从站设备为EtherCAT总线驱动器,没有使用控制器的本地脉冲轴接口。总线上的驱动设备映射轴号可以从6开始,EIO16084扩展模块的AXIS 0-3接口上的脉冲驱动器映射为轴号6-9,EtherCAT总线驱动器映射为轴号10,EIO16084扩展模块的IO编号起始为32。ba19a39c-2b1d-11ed-ba43-dac502259ad0.png

[+++]映射的轴号和IO编号整个控制系统中不得重复,根据具体情况去选择编号。

ba2ed2f8-2b1d-11ed-ba43-dac502259ad0.png

在没有IO设备的情况下,我们可以通过OUT和IN端口直接相连判断IO的响应情况,如下图,[+++]EIO扩展模块的IO配置,将EIO的OUT2(映射编号34)端子连接到EIO的IN8(映射编号40)上, *** 作OP(34)可见输入口40收到信号。

ba40cae4-2b1d-11ed-ba43-dac502259ad0.png

EtherCAT总线初始化执行后,配置轴参数,发送运动指令便可控制电机运行,或参考下图,通过手动运动窗口,快速检测EtherCAT总线驱动器能否正常运行。

本次,正运动技术EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,就分享到这里。

<===> 编辑:黄飞<===> <===>  <===>)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 326, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 114
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

EIO16084扩展模块的使用分为如下几步,[+++]接线;总线初始化建立总线通讯连接,初始化中执行扩展资源的映射,分别配置轴资源和IO资源;扩展资源配置完成可通过控制器端访问,扩展轴为脉冲型,设置相关轴参数,发送运动命令即可控制[+++]运动。

[+++][+++] [+++]

EIO16084扩展模块是EtherCAT总线控制器使用的扩展模块,可扩展数字量IO和脉冲轴这两类资源,当控制器本体上资源不够的时候,EtherCAT总线控制器可连接多个EIO扩展模块进行资源扩展,可查看控制器的IO最大扩展点数和最大扩展轴数,支持IO的远程扩展。

b831431e-2b1d-11ed-ba43-dac502259ad0.png

EIO16084扩展模块

每个EIO扩展模块在扩展接线完成后,不需要进行进行二次开发,只需使用指令在EtherCAT主站控制器配置唯一的IO地址和轴地址,配置完成即可访问。

IO地址编号通过总线指令NODE_IO来设置,控制器上程序只需通过IO编号就可以访问到扩展模块上的资源。轴地址的配置使用“AXIS_[+++]DRESS”指令映射绑定轴号,绑定完成通过BASE或AXIS指令指定轴号。

[+++]

(1)支持4轴脉冲轴扩展。 (2)脉冲输出模式:方向/脉冲或双脉冲。 (3)每轴最大输出脉冲频率10MHz。 (4)支持16进+8出IO扩展,每个脉冲轴另外各有2进2出IO可供配置。 (5)脉冲轴以外的输出口最大输出[+++]达300mA,可直接驱动部分电磁阀。 (6)ECAT最快500us的刷新周期。

(7)单[+++]供电,连接主电源即可,无需IO电源。

[+++]

 

[+++] [+++] [+++]数 [+++] [+++] [+++] [+++][+++][+++]

 

EIO系列带轴的扩展模块的使用方法相同,仅是扩展资源数量的区别,EIO16084和EIO24088的使用方法完全相同,EIO1616相比上面两个型号,无需轴映射相关 *** 作。

b87376d0-2b1d-11ed-ba43-dac502259ad0.png

EIO24088扩展模块

[+++][+++] [+++]说明

[+++]

EIO16084带两个EtherCAT总线接口,“EtherCAT IN”和“EtherCAT OUT”,使用标准网线完成接线。

[+++]“EtherCAT IN”连接上一级模块,“EtherCAT OUT”连接下一级模块,IN和OUT口不可混用。

[+++]

通用输入口IN的内部[+++]参考图如下,EIO16084带16个通用输入口,输入口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作,输入口参数参见下表。

b8ea2690-2b1d-11ed-ba43-dac502259ad0.png

通用输入口IN的内部电路参考图

[+++]

[+++] [+++] [+++][+++][+++][+++][+++][+++] 输入[+++] 4.7KΩ [+++][+++]


[+++]

通用输出口OUT的内部电路参考图如下,EIO16084带8个通用输入口,输出口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作(NODE_IO使用一次便可配置好输入和输出),输出口参数参见下表。

b9055622-2b1d-11ed-ba43-dac502259ad0.png

通用输出口OUT的内部电路参考图

[+++]

 

[+++] [+++] [+++] 输出方式 [+++]NPN型,OD输出。 [+++][+++][+++][+++][+++][+++][+++][+++]

 

[+++]

EIO16084的轴接口有4个,采用DB26针脚,针脚定义如下表,轴接口包含差分脉冲输入和差分编码器输入信号,同时还有两路通用输入口(其中一路为报警输入),两路通用输出口(其中一路为驱动使能)。

EIO16084扩展轴时,为总线转脉冲,将脉冲型驱动器接入到EIO16084扩展模块上的脉冲轴接口上。通过总线初始化建立EtherCAT总线控制器和EIO16084扩展模块之间的通讯连接,总线初始化过程中必须包含轴映射,之后参考脉冲型控制器的使用方法 *** 作脉冲驱动器。

b919b7ca-2b1d-11ed-ba43-dac502259ad0.png

 

[+++] [+++] [+++] [+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++]

 

可以通过数据字典配置EIO扩展板直接使能与告警,缺省不使用,需要主控制器来 *** 作。

告警输入、位置到位信号、轴使能、误差清除可以为通用的输入输出,由于驱动能力偏小建议做轴功能IO使用。

“EGND,OVCC电源”是控制器内部输出供伺服IO使用,请勿连接到[+++],不使用时悬空。

[+++] [+++]

EIO16084扩展模块接线规则:EIO16084可接到EtherCAT总线上的任意节点。

EIO16084为总线上的一个设备节点,可接入4个脉冲型驱动器,驱动器按照AXIS 0到AXIS 3的顺序依次编号,并且遵从总线上的驱动器编号规则。

驱动器的使能信号为脉冲接口内的通用输出口,直接通过主控制器的OP指令来使能。或使用SDO指令配置数据字典为自动使能后,主控制器无法直接控制对应的输出口来使能。

[+++]轴扩展模块的使用个数不是无限制的,参考控制器可扩展的最大轴数。

如下图,ZMC416BE运动控制器本体支持连接16个脉冲驱动器,最大扩展轴数为20,故可以通过EtherCAT总线连接一个EIO16084扩展到支持20个脉冲驱动器。

扩展轴映射轴号时注意避开本地脉冲轴,若本地脉冲轴使用了16个,默认对应轴号0-15,则扩展轴上的AXIS0-3(对应下图中驱动器编号0-3)分别手动映射为轴号16-19。

b93f945e-2b1d-11ed-ba43-dac502259ad0.png

如下图,ZMC432运动控制器本体支持连接32个轴(脉冲驱动器+EtherCAT总线驱动器一共32个),控制器本体只有6路脉冲接口,通过一个EIO16084可扩展4路脉冲接口,支持脉冲驱动器和总线驱动器混合使用。

b9628586-2b1d-11ed-ba43-dac502259ad0.png

上图涉及的编号概念如下:总线相关指令参数会用到如下编号。

(1)槽位号(slot)

槽位号是指控制器上总线接口的编号,EtherCAT总线槽位号为0。

(2)设备号(node)

设备号是指一个槽位上连接的所有设备的编号,从0开始,按设备在总线上的连接顺序自动编号,可以通过“NODE_COUNT(slot)”指令查看总线上连接的设备总数。

(3)驱动器编号

控制器会自动识别出槽位上的驱动器,编号从0开始,按驱动器在总线上的连接顺序自动编号。

驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略,映射轴号时将会用到驱动器编号。

[+++][+++] [+++]

EIO16084扩展模块上有两类资源需要映射,轴资源和IO资源。

[+++]

控制器上程序只需通过IO编号就可以访问到扩展模块上的资源,EtherCAT总线扩展模块IO编号通过总线指令NODE_IO来设置,同时配置输入和输出。

IO映射时先查看控制器自身的最大IO编号(包括外部IO接口和脉冲轴内的接口),再使用指令设置。

若扩展的IO与控制器自身IO编号重合,二者将同时起作用,所以IO映射的映射的编号在整个控制系统中均不得重复。

[+++]

NODE_IO(slot,node)=iobase slot:槽位号,0-缺省 node:设备编号,编号从0开始

iobase:映射IO起始编号,设置结果只会是8的倍数

[+++]

 

 

[+++]

 

 

若设备0为EIO16084,按如上语法配置后,扩展模块上的通用输入口IN0-15对应的IO编号依次为32-47,轴接口内的通用输入口编号48-55,其中轴AXIS 0-3的驱动报警输入分别为48-51。通用输出口OUT0-7应的IO编号依次为32-39,轴接口内的通用输出口编号40-47,其中轴AXIS 0-3的驱动使能输出分别为40-43。

b98fdb62-2b1d-11ed-ba43-dac502259ad0.png

[+++]

扩展模块的轴使用前需要使用“AXIS_ADDRESS”指令映射轴号,轴映射也需要注意整个系统的轴号不得重复。EIO系列扩展轴的映射与总线驱动器的轴映射语法相同。

[+++]

AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1

[+++]

[+++]

若第一个节点是EIO16084,EIO16084上连接了驱动器,那么这里的驱动器0是连接在EIO16084上的第一个脉冲驱动器,否则便是EtherCAT总线驱动器。

[+++][+++] [+++]

EIO16084扩展模块需要经过总线初始化之后才能使用,我们这里把一个脉冲型驱动器接到EIO16084扩展模块上的AXIS 0接口上,使用步骤如下。

第一步:执行总线初始化程序(参见下节),初始化过程中识别EIO扩展模块的设备编号和连接的驱动器编号,根据驱动器编号 *** 作轴映射,根据设备号 *** 作扩展模块的IO映射,设置DRIVE_PROFILE和ATYPE。

第二步:初始化成功后,使能EIO16084扩展模块上的脉冲驱动器,同样也是 *** 作脉冲轴接口内的OP信号使能驱动器,由于扩展模块映射的起始编号是32,这里的AXIS 0-AXIS 3口内的使能信号对应通用输出口编号是40-43。在输出口窗口内按下OP(40)或在程序中执行指令OP(40,ON)均可使能AXIS 0的驱动器。

第三步:使能完成设置相关轴参数,再发送运动指令便可驱动电机。

b99e11a0-2b1d-11ed-ba43-dac502259ad0.png

在初始化 *** 作成功后,总线上能识别该扩展模块,可查看扩展模块上的轴接口数,IO映射后可查看输入输出的编号范围。

例如设置起始编号为32,该扩展模块上的输入编号为外部自带的16点+轴接口通用输入8点,一共24点,范围32-55,输出编号为外部自带的8点+轴接口通用输入8点,一共16点,范围32-47。

b98fdb62-2b1d-11ed-ba43-dac502259ad0.png

[+++]

扩展模块上的IO不管有没有使用都需要使用NODE_IO指令映射EIO16084的输入输出编号。扩展模块的DRIVE_PROFILE配置为0,ATYPE设为65,但实际由于是脉冲型驱动器,轴类型并不是65,真实轴类型的配置使用SDO指令配置数据字典6011h设置。 初始化过程中若产生硬限位报警,可在轴参数窗口将硬限位FWD_IN和REV_IN的映射编号指向-1,表示不映射,需要接入限位[+++]时再去修改FWD_IN和REV_IN。 [+++] 通过SDO指令读写数据字典设置,只开放了部分数据字典供设置,更多驱动器参数使用驱动器[+++]修改。 [+++]

 

[+++] [+++] [+++] [+++] [+++] [+++][+++][+++][+++]

 

[+++]

例如:扩展的脉冲轴的真实轴类型设置通过数据字典6011h设置,(参考下表的参数,按轴号依次设置,第一个驱动器设置数据字典6011h+0*800h,第二个驱动器设置6011h+1*800h,以此类推,每个驱动器加800h,其他参数同理)

[+++] [+++] [+++] [+++] [+++] 6011h Atype UNSIGNED8 rw 扩展板轴的类型
0  虚拟轴
1  脉冲方向方式的步进或伺服
2  模拟信号控制方式的伺服
3  正交编码器
4  步进+编码器
5  步进+脉冲方向编码器
6  脉冲方向方式的编码器
7 脉冲方向方式步进或伺服+EZ信号输入 [+++] 6013h Iolevel UNSIGNED32 rw B0-原点电平
B1-限位电平
B8-自动使用使能信号
B9-使用ALM信号告警
B11-B15 原点信号选择 [+++] 6040h Controlword UNSIGNED16 rw 对应主控制器DRIVE_CONTROLWORD
B0- Switch on
B1- Enable voltage
B3 - Enable opera[+++]on
B7- Fault reset 6041h Statusword UNSIGNED16 ro 对应主控制器DRIVE_STATUS
B0 Ready to switch on
B1 Switched on
B2 OperaTIon enabled
B3 Fault
B4 Voltage enabled
B5 Quick stop
B7 Warning
B8 EZ status
B9 Remo[+++]
B10 Target reached
B11 Internal li[+++]t acTIve
B12 - 13 OperaTIon mode specific
B14 EA status
B15 EB status 6060h Modes of operation INTEGER8 rw 6 回零
8 周期定位 [+++][+++]

 

[+++] SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) [+++] SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) [+++]

 

 

global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   [+++] iVender = $41B and iDevice = $1918   then    '正运动16084脉冲扩展轴      SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4)      '设置扩展脉冲轴ATYPE类型,值为4表示脉冲和编码器信号在同一个轴号上      SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0)      '设置扩展脉冲轴INVERT_STEP脉冲输出模式,模式0,脉冲+方向      NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode          '设置16084上IO的起始映射地址   endifend sub

 

 

如果扩展模块之后还连接了EtherCAT驱动器,使用时注意总线扫描设备数量的设置,EtherCAT驱动器在初始化程序执行完便使能成功,后续设置轴参数便能运行,注意初始化过程中的DRIVE_PROFILE给EtherCAT驱动器配置合适的PDO列表,需要用到驱动器IO时,还需 *** 作DRIVE_IO映射。

[+++][+++] [+++]

此初始化程序可用来初始化EtherCAT驱动器和EtherCAT总线扩展模块,建立通讯连接(通用模板,适用于多种品牌的驱动器)。

b9e445bc-2b1d-11ed-ba43-dac502259ad0.png

 

 

'*******************************************************ECAT总线初始化global CONST BUS_TYPE = 0      '总线类型。可用于上位机区分当前总线类型global CONST MAX_AXISNUM =32    '最大轴数global CONST Bus_Slot   = 0        '槽位号0(单总线控制器缺省0)global CONST PUL_AxisStart= 0      '本地脉冲轴起始轴号global CONST PUL_AxisNum = 0    '本地脉冲轴轴数量global CONST Bus_AxisStart   = 6      总线轴起始轴号global CONST Bus_NodeNum = 2    '总线配置节点数量,用于判断实际检测到的从站数量是否一致global Bus_InitStatus      '总线初始化完成状态Bus_InitStatus = -1global  Bus_TotalAxisnum    '检查扫描的总轴数delay(3000)        '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时?"总线通讯周期:",SERVO_PERIOD,"us"Ecat_Init()      '初始化ECAT总线 while (Bus_InitStatus = 0)   Ecat_Init()wendend
'****************************************ECAT总线初始化**********************************'初始流程:  slot_s[+++](扫描总线) ->   从站节点映射轴/io  ->  SLOT_START(启动总线) -> 初始化成功'*****************************************************************************************global sub Ecat_Init()   local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias   RA[+++]DSTOP(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    '初始化失败。报警提示         return      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= Bus_TotalAxisnum+1  '映射轴号               ATYPE=65      '设置控制模式 65-位置 66-速度 67-转矩                Sub_SetPdo(Node_Num,Drive_Vender,Drive_Device)    '设定PDO参数               Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j)  '设置特殊总线参数,包含EIO16084的配置                 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         endif      next      ?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum       DELAY 200      SLOT_START(Bus_Slot)        '启动总线      if return then          wdog=1            '使能总开关            '?"开始清除驱动器错误"         for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1             BASE(i)            DRIVE_CLEAR(0)            DELAY 50            '?"驱动器错误清除完成"            datum(0)            '清除控制器轴状态错误"            DELAY 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   endifend sub
'*****************************************手动配置PDO**********************************'部分特殊品牌可能需要手动配置,大部分只需要通过DRIVE_PROFILE设置自动配置相应的POD参数即可'*******************************************************************************************global sub Sub_SetPdo(iNode,iVender,iDevice)   IF iVender = 0 then                    '自定义PDO        SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,0)        '禁用PDO,禁用后才可以修改内容      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,0)      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, 00, 

,5 ,0) 'RxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,400010) '控制字 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,7a0020) '目标位置 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,fe0120) '驱动器IO输入      SDO_WRITE (Bus_Slot, iNode, 00, 

 ,5 ,3)    SDO_WRITE (Bus_Slot, iNode, a00,

,5 ,0) 'TxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,410010) '状态字 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,640020) '反馈位置 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,fd0020) '驱动器IO输出      SDO_WRITE (Bus_Slot, iNode, a00, 

 ,5 ,3)     SDO_WRITE (Bus_Slot, iNode, c12, 1 ,6 ,00) 'RxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c13, 1 ,6 ,a00) TxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,1) '启用PDO DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,1) SDO_WRITE (Bus_Slot, iNode, C32, ,6 ,2) '设置DC同步模式      SDO_WRITE (Bus_Slot, iNode, C33,  ,6 ,2)  DRIVE_PROFILE = -1 '使用驱动缺省PDO配置 elseif iVender = f then DRIVE_PROFILE = 4 else DRIVE_PROFILE = 0 endifend sub '***************************************从站节点特殊参数配置*****************************'通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)'**********************************************************************************************global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   if iVender = B and iDevice = 18   then    '正运动EIO16084脉冲扩展轴 SDO_WRITE(Bus_Slot,iNode,11,Iaxis*0,5,4) '设置扩展脉冲轴ATYPE类型 SDO_WRITE(Bus_Slot,iNode,12,Iaxis*0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式 NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置16084上IO的起始映射地址 elseif iVender = f then '松下驱动器 SDO_WRITE(Bus_Slot,iNode,01,0,4,101) '正限位电平 8181      SDO_WRITE(Bus_Slot,iNode,02,0,4,202)        '负限位电平 8282  SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) SDO_WRITE(Bus_Slot,iNode,92,1,7,10000) '电机一圈脉冲数 SDO_WRITE(Bus_Slot,iNode,7E,0,5,224) '电机方向0-反转224 SDO_WRITE(Bus_Slot,iNode,85,0,7,4290000000) '异常减速度 'SDO_WRITE(Bus_Slot,iNode,10,1,7,766173) '写EPPROM(写EPPROM后驱动器需要重新上电) elseif iVender = 0000 then '汇川驱动器 SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) endifend sub '********************************总线IO模块映射**************************************'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址'******************************************************************************************global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)   if iVender = B and iDevice = 0   then    '正运动EIO1616 NODE_IO(Bus_Slot,iNode) = i_IoNum endifend sub

 

 

参考配置采用控制器依次连接一个EIO16084扩展模块和一个EtherCAT总线驱动器,采用以上初始化程序,成功建立通讯连接,控制器状态窗口显示当前扫描连接的节点情况。

总线上的主站为控制器,控制器连接的第一个从站设备为EIO16084扩展模块,第二个从站设备为EtherCAT总线驱动器,没有使用控制器的本地脉冲轴接口。总线上的驱动设备映射轴号可以从6开始,EIO16084扩展模块的AXIS 0-3接口上的脉冲驱动器映射为轴号6-9,EtherCAT总线驱动器映射为轴号10,EIO16084扩展模块的IO编号起始为32。ba19a39c-2b1d-11ed-ba43-dac502259ad0.png

[+++]映射的轴号和IO编号整个控制系统中不得重复,根据具体情况去选择编号。

ba2ed2f8-2b1d-11ed-ba43-dac502259ad0.png

在没有IO设备的情况下,我们可以通过OUT和IN端口直接相连判断IO的响应情况,如下图,[+++]EIO扩展模块的IO配置,将EIO的OUT2(映射编号34)端子连接到EIO的IN8(映射编号40)上, *** 作OP(34)可见输入口40收到信号。

ba40cae4-2b1d-11ed-ba43-dac502259ad0.png

EtherCAT总线初始化执行后,配置轴参数,发送运动指令便可控制电机运行,或参考下图,通过手动运动窗口,快速检测EtherCAT总线驱动器能否正常运行。

本次,正运动技术EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,就分享到这里。

编辑:黄飞<===> <===>  <===>)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 327, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 114
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

EIO16084扩展模块的使用分为如下几步,[+++]接线;总线初始化建立总线通讯连接,初始化中执行扩展资源的映射,分别配置轴资源和IO资源;扩展资源配置完成可通过控制器端访问,扩展轴为脉冲型,设置相关轴参数,发送运动命令即可控制[+++]运动。

[+++][+++] [+++]

EIO16084扩展模块是EtherCAT总线控制器使用的扩展模块,可扩展数字量IO和脉冲轴这两类资源,当控制器本体上资源不够的时候,EtherCAT总线控制器可连接多个EIO扩展模块进行资源扩展,可查看控制器的IO最大扩展点数和最大扩展轴数,支持IO的远程扩展。

b831431e-2b1d-11ed-ba43-dac502259ad0.png

EIO16084扩展模块

每个EIO扩展模块在扩展接线完成后,不需要进行进行二次开发,只需使用指令在EtherCAT主站控制器配置唯一的IO地址和轴地址,配置完成即可访问。

IO地址编号通过总线指令NODE_IO来设置,控制器上程序只需通过IO编号就可以访问到扩展模块上的资源。轴地址的配置使用“AXIS_[+++]DRESS”指令映射绑定轴号,绑定完成通过BASE或AXIS指令指定轴号。

[+++]

(1)支持4轴脉冲轴扩展。 (2)脉冲输出模式:方向/脉冲或双脉冲。 (3)每轴最大输出脉冲频率10MHz。 (4)支持16进+8出IO扩展,每个脉冲轴另外各有2进2出IO可供配置。 (5)脉冲轴以外的输出口最大输出[+++]达300mA,可直接驱动部分电磁阀。 (6)ECAT最快500us的刷新周期。

(7)单[+++]供电,连接主电源即可,无需IO电源。

[+++]

 

[+++] [+++] [+++]数 [+++] [+++] [+++] [+++][+++][+++]

 

EIO系列带轴的扩展模块的使用方法相同,仅是扩展资源数量的区别,EIO16084和EIO24088的使用方法完全相同,EIO1616相比上面两个型号,无需轴映射相关 *** 作。

b87376d0-2b1d-11ed-ba43-dac502259ad0.png

EIO24088扩展模块

[+++][+++] [+++]说明

[+++]

EIO16084带两个EtherCAT总线接口,“EtherCAT IN”和“EtherCAT OUT”,使用标准网线完成接线。

[+++]“EtherCAT IN”连接上一级模块,“EtherCAT OUT”连接下一级模块,IN和OUT口不可混用。

[+++]

通用输入口IN的内部[+++]参考图如下,EIO16084带16个通用输入口,输入口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作,输入口参数参见下表。

b8ea2690-2b1d-11ed-ba43-dac502259ad0.png

通用输入口IN的内部电路参考图

[+++]

[+++] [+++] [+++][+++][+++][+++][+++][+++] 输入[+++] 4.7KΩ [+++][+++]


[+++]

通用输出口OUT的内部电路参考图如下,EIO16084带8个通用输入口,输出口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作(NODE_IO使用一次便可配置好输入和输出),输出口参数参见下表。

b9055622-2b1d-11ed-ba43-dac502259ad0.png

通用输出口OUT的内部电路参考图

[+++]

 

[+++] [+++] [+++] 输出方式 [+++]NPN型,OD输出。 [+++][+++][+++][+++][+++][+++][+++][+++]

 

[+++]

EIO16084的轴接口有4个,采用DB26针脚,针脚定义如下表,轴接口包含差分脉冲输入和差分编码器输入信号,同时还有两路通用输入口(其中一路为报警输入),两路通用输出口(其中一路为驱动使能)。

EIO16084扩展轴时,为总线转脉冲,将脉冲型驱动器接入到EIO16084扩展模块上的脉冲轴接口上。通过总线初始化建立EtherCAT总线控制器和EIO16084扩展模块之间的通讯连接,总线初始化过程中必须包含轴映射,之后参考脉冲型控制器的使用方法 *** 作脉冲驱动器。

b919b7ca-2b1d-11ed-ba43-dac502259ad0.png

 

[+++] [+++] [+++] [+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++]

 

可以通过数据字典配置EIO扩展板直接使能与告警,缺省不使用,需要主控制器来 *** 作。

告警输入、位置到位信号、轴使能、误差清除可以为通用的输入输出,由于驱动能力偏小建议做轴功能IO使用。

“EGND,OVCC电源”是控制器内部输出供伺服IO使用,请勿连接到[+++],不使用时悬空。

[+++] [+++]

EIO16084扩展模块接线规则:EIO16084可接到EtherCAT总线上的任意节点。

EIO16084为总线上的一个设备节点,可接入4个脉冲型驱动器,驱动器按照AXIS 0到AXIS 3的顺序依次编号,并且遵从总线上的驱动器编号规则。

驱动器的使能信号为脉冲接口内的通用输出口,直接通过主控制器的OP指令来使能。或使用SDO指令配置数据字典为自动使能后,主控制器无法直接控制对应的输出口来使能。

[+++]轴扩展模块的使用个数不是无限制的,参考控制器可扩展的最大轴数。

如下图,ZMC416BE运动控制器本体支持连接16个脉冲驱动器,最大扩展轴数为20,故可以通过EtherCAT总线连接一个EIO16084扩展到支持20个脉冲驱动器。

扩展轴映射轴号时注意避开本地脉冲轴,若本地脉冲轴使用了16个,默认对应轴号0-15,则扩展轴上的AXIS0-3(对应下图中驱动器编号0-3)分别手动映射为轴号16-19。

b93f945e-2b1d-11ed-ba43-dac502259ad0.png

如下图,ZMC432运动控制器本体支持连接32个轴(脉冲驱动器+EtherCAT总线驱动器一共32个),控制器本体只有6路脉冲接口,通过一个EIO16084可扩展4路脉冲接口,支持脉冲驱动器和总线驱动器混合使用。

b9628586-2b1d-11ed-ba43-dac502259ad0.png

上图涉及的编号概念如下:总线相关指令参数会用到如下编号。

(1)槽位号(slot)

槽位号是指控制器上总线接口的编号,EtherCAT总线槽位号为0。

(2)设备号(node)

设备号是指一个槽位上连接的所有设备的编号,从0开始,按设备在总线上的连接顺序自动编号,可以通过“NODE_COUNT(slot)”指令查看总线上连接的设备总数。

(3)驱动器编号

控制器会自动识别出槽位上的驱动器,编号从0开始,按驱动器在总线上的连接顺序自动编号。

驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略,映射轴号时将会用到驱动器编号。

[+++][+++] [+++]

EIO16084扩展模块上有两类资源需要映射,轴资源和IO资源。

[+++]

控制器上程序只需通过IO编号就可以访问到扩展模块上的资源,EtherCAT总线扩展模块IO编号通过总线指令NODE_IO来设置,同时配置输入和输出。

IO映射时先查看控制器自身的最大IO编号(包括外部IO接口和脉冲轴内的接口),再使用指令设置。

若扩展的IO与控制器自身IO编号重合,二者将同时起作用,所以IO映射的映射的编号在整个控制系统中均不得重复。

[+++]

NODE_IO(slot,node)=iobase slot:槽位号,0-缺省 node:设备编号,编号从0开始

iobase:映射IO起始编号,设置结果只会是8的倍数

[+++]

 

 

[+++]

 

 

若设备0为EIO16084,按如上语法配置后,扩展模块上的通用输入口IN0-15对应的IO编号依次为32-47,轴接口内的通用输入口编号48-55,其中轴AXIS 0-3的驱动报警输入分别为48-51。通用输出口OUT0-7应的IO编号依次为32-39,轴接口内的通用输出口编号40-47,其中轴AXIS 0-3的驱动使能输出分别为40-43。

b98fdb62-2b1d-11ed-ba43-dac502259ad0.png

[+++]

扩展模块的轴使用前需要使用“AXIS_ADDRESS”指令映射轴号,轴映射也需要注意整个系统的轴号不得重复。EIO系列扩展轴的映射与总线驱动器的轴映射语法相同。

[+++]

AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1

[+++]

[+++]

若第一个节点是EIO16084,EIO16084上连接了驱动器,那么这里的驱动器0是连接在EIO16084上的第一个脉冲驱动器,否则便是EtherCAT总线驱动器。

[+++][+++] [+++]

EIO16084扩展模块需要经过总线初始化之后才能使用,我们这里把一个脉冲型驱动器接到EIO16084扩展模块上的AXIS 0接口上,使用步骤如下。

第一步:执行总线初始化程序(参见下节),初始化过程中识别EIO扩展模块的设备编号和连接的驱动器编号,根据驱动器编号 *** 作轴映射,根据设备号 *** 作扩展模块的IO映射,设置DRIVE_PROFILE和ATYPE。

第二步:初始化成功后,使能EIO16084扩展模块上的脉冲驱动器,同样也是 *** 作脉冲轴接口内的OP信号使能驱动器,由于扩展模块映射的起始编号是32,这里的AXIS 0-AXIS 3口内的使能信号对应通用输出口编号是40-43。在输出口窗口内按下OP(40)或在程序中执行指令OP(40,ON)均可使能AXIS 0的驱动器。

第三步:使能完成设置相关轴参数,再发送运动指令便可驱动电机。

b99e11a0-2b1d-11ed-ba43-dac502259ad0.png

在初始化 *** 作成功后,总线上能识别该扩展模块,可查看扩展模块上的轴接口数,IO映射后可查看输入输出的编号范围。

例如设置起始编号为32,该扩展模块上的输入编号为外部自带的16点+轴接口通用输入8点,一共24点,范围32-55,输出编号为外部自带的8点+轴接口通用输入8点,一共16点,范围32-47。

b98fdb62-2b1d-11ed-ba43-dac502259ad0.png

[+++]

扩展模块上的IO不管有没有使用都需要使用NODE_IO指令映射EIO16084的输入输出编号。扩展模块的DRIVE_PROFILE配置为0,ATYPE设为65,但实际由于是脉冲型驱动器,轴类型并不是65,真实轴类型的配置使用SDO指令配置数据字典6011h设置。 初始化过程中若产生硬限位报警,可在轴参数窗口将硬限位FWD_IN和REV_IN的映射编号指向-1,表示不映射,需要接入限位[+++]时再去修改FWD_IN和REV_IN。 [+++] 通过SDO指令读写数据字典设置,只开放了部分数据字典供设置,更多驱动器参数使用驱动器[+++]修改。 [+++]

 

[+++] [+++] [+++] [+++] [+++] [+++][+++][+++][+++]

 

[+++]

例如:扩展的脉冲轴的真实轴类型设置通过数据字典6011h设置,(参考下表的参数,按轴号依次设置,第一个驱动器设置数据字典6011h+0*800h,第二个驱动器设置6011h+1*800h,以此类推,每个驱动器加800h,其他参数同理)

[+++] [+++] [+++] [+++] [+++] 6011h Atype UNSIGNED8 rw 扩展板轴的类型
0  虚拟轴
1  脉冲方向方式的步进或伺服
2  模拟信号控制方式的伺服
3  正交编码器
4  步进+编码器
5  步进+脉冲方向编码器
6  脉冲方向方式的编码器
7 脉冲方向方式步进或伺服+EZ信号输入 [+++] 6013h Iolevel UNSIGNED32 rw B0-原点电平
B1-限位电平
B8-自动使用使能信号
B9-使用ALM信号告警
B11-B15 原点信号选择 [+++] 6040h Controlword UNSIGNED16 rw 对应主控制器DRIVE_CONTROLWORD
B0- Switch on
B1- Enable voltage
B3 - Enable opera[+++]on
B7- Fault reset 6041h Statusword UNSIGNED16 ro 对应主控制器DRIVE_STATUS
B0 Ready to switch on
B1 Switched on
B2 OperaTIon enabled
B3 Fault
B4 Voltage enabled
B5 Quick stop
B7 Warning
B8 EZ status
B9 Remo[+++]
B10 Target reached
B11 Internal li[+++]t acTIve
B12 - 13 OperaTIon mode specific
B14 EA status
B15 EB status 6060h Modes of operation INTEGER8 rw 6 回零
8 周期定位 [+++][+++]

 

[+++] SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) [+++] SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) [+++]

 

 

global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   [+++] iVender = $41B and iDevice = $1918   then    '正运动16084脉冲扩展轴      SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4)      '设置扩展脉冲轴ATYPE类型,值为4表示脉冲和编码器信号在同一个轴号上      SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0)      '设置扩展脉冲轴INVERT_STEP脉冲输出模式,模式0,脉冲+方向      NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode          '设置16084上IO的起始映射地址   endifend sub

 

 

如果扩展模块之后还连接了EtherCAT驱动器,使用时注意总线扫描设备数量的设置,EtherCAT驱动器在初始化程序执行完便使能成功,后续设置轴参数便能运行,注意初始化过程中的DRIVE_PROFILE给EtherCAT驱动器配置合适的PDO列表,需要用到驱动器IO时,还需 *** 作DRIVE_IO映射。

[+++][+++] [+++]

此初始化程序可用来初始化EtherCAT驱动器和EtherCAT总线扩展模块,建立通讯连接(通用模板,适用于多种品牌的驱动器)。

b9e445bc-2b1d-11ed-ba43-dac502259ad0.png

 

 

'*******************************************************ECAT总线初始化global CONST BUS_TYPE = 0      '总线类型。可用于上位机区分当前总线类型global CONST MAX_AXISNUM =32    '最大轴数global CONST Bus_Slot   = 0        '槽位号0(单总线控制器缺省0)global CONST PUL_AxisStart= 0      '本地脉冲轴起始轴号global CONST PUL_AxisNum = 0    '本地脉冲轴轴数量global CONST Bus_AxisStart   = 6      总线轴起始轴号global CONST Bus_NodeNum = 2    '总线配置节点数量,用于判断实际检测到的从站数量是否一致global Bus_InitStatus      '总线初始化完成状态Bus_InitStatus = -1global  Bus_TotalAxisnum    '检查扫描的总轴数delay(3000)        '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时?"总线通讯周期:",SERVO_PERIOD,"us"Ecat_Init()      '初始化ECAT总线 while (Bus_InitStatus = 0)   Ecat_Init()wendend
'****************************************ECAT总线初始化**********************************'初始流程:  slot_s[+++](扫描总线) ->   从站节点映射轴/io  ->  SLOT_START(启动总线) -> 初始化成功'*****************************************************************************************global sub Ecat_Init()   local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias   RA[+++]DSTOP(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    '初始化失败。报警提示         return      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= Bus_TotalAxisnum+1  '映射轴号               ATYPE=65      '设置控制模式 65-位置 66-速度 67-转矩                Sub_SetPdo(Node_Num,Drive_Vender,Drive_Device)    '设定PDO参数               Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j)  '设置特殊总线参数,包含EIO16084的配置                 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         endif      next      ?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum       DELAY 200      SLOT_START(Bus_Slot)        '启动总线      if return then          wdog=1            '使能总开关            '?"开始清除驱动器错误"         for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1             BASE(i)            DRIVE_CLEAR(0)            DELAY 50            '?"驱动器错误清除完成"            datum(0)            '清除控制器轴状态错误"            DELAY 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   endifend sub
'*****************************************手动配置PDO**********************************'部分特殊品牌可能需要手动配置,大部分只需要通过DRIVE_PROFILE设置自动配置相应的POD参数即可'*******************************************************************************************global sub Sub_SetPdo(iNode,iVender,iDevice)   IF iVender = 0 then                    '自定义PDO        SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,0)        '禁用PDO,禁用后才可以修改内容      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,0)      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, 00, 

,5 ,0) 'RxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,400010) '控制字 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,7a0020) '目标位置 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,fe0120) '驱动器IO输入      SDO_WRITE (Bus_Slot, iNode, 00, 

 ,5 ,3)    SDO_WRITE (Bus_Slot, iNode, a00,

,5 ,0) 'TxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,410010) '状态字 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,640020) '反馈位置 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,fd0020) '驱动器IO输出      SDO_WRITE (Bus_Slot, iNode, a00, 

 ,5 ,3)     SDO_WRITE (Bus_Slot, iNode, c12, 1 ,6 ,00) 'RxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c13, 1 ,6 ,a00) TxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,1) '启用PDO DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,1) SDO_WRITE (Bus_Slot, iNode, C32, ,6 ,2) '设置DC同步模式      SDO_WRITE (Bus_Slot, iNode, C33,  ,6 ,2)  DRIVE_PROFILE = -1 '使用驱动缺省PDO配置 elseif iVender = f then DRIVE_PROFILE = 4 else DRIVE_PROFILE = 0 endifend sub '***************************************从站节点特殊参数配置*****************************'通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)'**********************************************************************************************global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   if iVender = B and iDevice = 18   then    '正运动EIO16084脉冲扩展轴 SDO_WRITE(Bus_Slot,iNode,11,Iaxis*0,5,4) '设置扩展脉冲轴ATYPE类型 SDO_WRITE(Bus_Slot,iNode,12,Iaxis*0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式 NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置16084上IO的起始映射地址 elseif iVender = f then '松下驱动器 SDO_WRITE(Bus_Slot,iNode,01,0,4,101) '正限位电平 8181      SDO_WRITE(Bus_Slot,iNode,02,0,4,202)        '负限位电平 8282  SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) SDO_WRITE(Bus_Slot,iNode,92,1,7,10000) '电机一圈脉冲数 SDO_WRITE(Bus_Slot,iNode,7E,0,5,224) '电机方向0-反转224 SDO_WRITE(Bus_Slot,iNode,85,0,7,4290000000) '异常减速度 'SDO_WRITE(Bus_Slot,iNode,10,1,7,766173) '写EPPROM(写EPPROM后驱动器需要重新上电) elseif iVender = 0000 then '汇川驱动器 SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) endifend sub '********************************总线IO模块映射**************************************'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址'******************************************************************************************global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)   if iVender = B and iDevice = 0   then    '正运动EIO1616 NODE_IO(Bus_Slot,iNode) = i_IoNum endifend sub

 

 

参考配置采用控制器依次连接一个EIO16084扩展模块和一个EtherCAT总线驱动器,采用以上初始化程序,成功建立通讯连接,控制器状态窗口显示当前扫描连接的节点情况。

总线上的主站为控制器,控制器连接的第一个从站设备为EIO16084扩展模块,第二个从站设备为EtherCAT总线驱动器,没有使用控制器的本地脉冲轴接口。总线上的驱动设备映射轴号可以从6开始,EIO16084扩展模块的AXIS 0-3接口上的脉冲驱动器映射为轴号6-9,EtherCAT总线驱动器映射为轴号10,EIO16084扩展模块的IO编号起始为32。ba19a39c-2b1d-11ed-ba43-dac502259ad0.png

[+++]映射的轴号和IO编号整个控制系统中不得重复,根据具体情况去选择编号。

ba2ed2f8-2b1d-11ed-ba43-dac502259ad0.png

在没有IO设备的情况下,我们可以通过OUT和IN端口直接相连判断IO的响应情况,如下图,[+++]EIO扩展模块的IO配置,将EIO的OUT2(映射编号34)端子连接到EIO的IN8(映射编号40)上, *** 作OP(34)可见输入口40收到信号。

ba40cae4-2b1d-11ed-ba43-dac502259ad0.png

EtherCAT总线初始化执行后,配置轴参数,发送运动指令便可控制电机运行,或参考下图,通过手动运动窗口,快速检测EtherCAT总线驱动器能否正常运行。

本次,正运动技术EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,就分享到这里。

编辑:黄飞 <===>  <===>)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 328, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 114
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

EIO16084扩展模块的使用分为如下几步,[+++]接线;总线初始化建立总线通讯连接,初始化中执行扩展资源的映射,分别配置轴资源和IO资源;扩展资源配置完成可通过控制器端访问,扩展轴为脉冲型,设置相关轴参数,发送运动命令即可控制[+++]运动。

[+++][+++] [+++]

EIO16084扩展模块是EtherCAT总线控制器使用的扩展模块,可扩展数字量IO和脉冲轴这两类资源,当控制器本体上资源不够的时候,EtherCAT总线控制器可连接多个EIO扩展模块进行资源扩展,可查看控制器的IO最大扩展点数和最大扩展轴数,支持IO的远程扩展。

b831431e-2b1d-11ed-ba43-dac502259ad0.png

EIO16084扩展模块

每个EIO扩展模块在扩展接线完成后,不需要进行进行二次开发,只需使用指令在EtherCAT主站控制器配置唯一的IO地址和轴地址,配置完成即可访问。

IO地址编号通过总线指令NODE_IO来设置,控制器上程序只需通过IO编号就可以访问到扩展模块上的资源。轴地址的配置使用“AXIS_[+++]DRESS”指令映射绑定轴号,绑定完成通过BASE或AXIS指令指定轴号。

[+++]

(1)支持4轴脉冲轴扩展。 (2)脉冲输出模式:方向/脉冲或双脉冲。 (3)每轴最大输出脉冲频率10MHz。 (4)支持16进+8出IO扩展,每个脉冲轴另外各有2进2出IO可供配置。 (5)脉冲轴以外的输出口最大输出[+++]达300mA,可直接驱动部分电磁阀。 (6)ECAT最快500us的刷新周期。

(7)单[+++]供电,连接主电源即可,无需IO电源。

[+++]

 

[+++] [+++] [+++]数 [+++] [+++] [+++] [+++][+++][+++]

 

EIO系列带轴的扩展模块的使用方法相同,仅是扩展资源数量的区别,EIO16084和EIO24088的使用方法完全相同,EIO1616相比上面两个型号,无需轴映射相关 *** 作。

b87376d0-2b1d-11ed-ba43-dac502259ad0.png

EIO24088扩展模块

[+++][+++] [+++]说明

[+++]

EIO16084带两个EtherCAT总线接口,“EtherCAT IN”和“EtherCAT OUT”,使用标准网线完成接线。

[+++]“EtherCAT IN”连接上一级模块,“EtherCAT OUT”连接下一级模块,IN和OUT口不可混用。

[+++]

通用输入口IN的内部[+++]参考图如下,EIO16084带16个通用输入口,输入口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作,输入口参数参见下表。

b8ea2690-2b1d-11ed-ba43-dac502259ad0.png

通用输入口IN的内部电路参考图

[+++]

[+++] [+++] [+++][+++][+++][+++][+++][+++] 输入[+++] 4.7KΩ [+++][+++]


[+++]

通用输出口OUT的内部电路参考图如下,EIO16084带8个通用输入口,输出口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作(NODE_IO使用一次便可配置好输入和输出),输出口参数参见下表。

b9055622-2b1d-11ed-ba43-dac502259ad0.png

通用输出口OUT的内部电路参考图

[+++]

 

[+++] [+++] [+++] 输出方式 [+++]NPN型,OD输出。 [+++][+++][+++][+++][+++][+++][+++][+++]

 

[+++]

EIO16084的轴接口有4个,采用DB26针脚,针脚定义如下表,轴接口包含差分脉冲输入和差分编码器输入信号,同时还有两路通用输入口(其中一路为报警输入),两路通用输出口(其中一路为驱动使能)。

EIO16084扩展轴时,为总线转脉冲,将脉冲型驱动器接入到EIO16084扩展模块上的脉冲轴接口上。通过总线初始化建立EtherCAT总线控制器和EIO16084扩展模块之间的通讯连接,总线初始化过程中必须包含轴映射,之后参考脉冲型控制器的使用方法 *** 作脉冲驱动器。

b919b7ca-2b1d-11ed-ba43-dac502259ad0.png

 

[+++] [+++] [+++] [+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++][+++]

 

可以通过数据字典配置EIO扩展板直接使能与告警,缺省不使用,需要主控制器来 *** 作。

告警输入、位置到位信号、轴使能、误差清除可以为通用的输入输出,由于驱动能力偏小建议做轴功能IO使用。

“EGND,OVCC电源”是控制器内部输出供伺服IO使用,请勿连接到[+++],不使用时悬空。

[+++] [+++]

EIO16084扩展模块接线规则:EIO16084可接到EtherCAT总线上的任意节点。

EIO16084为总线上的一个设备节点,可接入4个脉冲型驱动器,驱动器按照AXIS 0到AXIS 3的顺序依次编号,并且遵从总线上的驱动器编号规则。

驱动器的使能信号为脉冲接口内的通用输出口,直接通过主控制器的OP指令来使能。或使用SDO指令配置数据字典为自动使能后,主控制器无法直接控制对应的输出口来使能。

[+++]轴扩展模块的使用个数不是无限制的,参考控制器可扩展的最大轴数。

如下图,ZMC416BE运动控制器本体支持连接16个脉冲驱动器,最大扩展轴数为20,故可以通过EtherCAT总线连接一个EIO16084扩展到支持20个脉冲驱动器。

扩展轴映射轴号时注意避开本地脉冲轴,若本地脉冲轴使用了16个,默认对应轴号0-15,则扩展轴上的AXIS0-3(对应下图中驱动器编号0-3)分别手动映射为轴号16-19。

b93f945e-2b1d-11ed-ba43-dac502259ad0.png

如下图,ZMC432运动控制器本体支持连接32个轴(脉冲驱动器+EtherCAT总线驱动器一共32个),控制器本体只有6路脉冲接口,通过一个EIO16084可扩展4路脉冲接口,支持脉冲驱动器和总线驱动器混合使用。

b9628586-2b1d-11ed-ba43-dac502259ad0.png

上图涉及的编号概念如下:总线相关指令参数会用到如下编号。

(1)槽位号(slot)

槽位号是指控制器上总线接口的编号,EtherCAT总线槽位号为0。

(2)设备号(node)

设备号是指一个槽位上连接的所有设备的编号,从0开始,按设备在总线上的连接顺序自动编号,可以通过“NODE_COUNT(slot)”指令查看总线上连接的设备总数。

(3)驱动器编号

控制器会自动识别出槽位上的驱动器,编号从0开始,按驱动器在总线上的连接顺序自动编号。

驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略,映射轴号时将会用到驱动器编号。

[+++][+++] [+++]

EIO16084扩展模块上有两类资源需要映射,轴资源和IO资源。

[+++]

控制器上程序只需通过IO编号就可以访问到扩展模块上的资源,EtherCAT总线扩展模块IO编号通过总线指令NODE_IO来设置,同时配置输入和输出。

IO映射时先查看控制器自身的最大IO编号(包括外部IO接口和脉冲轴内的接口),再使用指令设置。

若扩展的IO与控制器自身IO编号重合,二者将同时起作用,所以IO映射的映射的编号在整个控制系统中均不得重复。

[+++]

NODE_IO(slot,node)=iobase slot:槽位号,0-缺省 node:设备编号,编号从0开始

iobase:映射IO起始编号,设置结果只会是8的倍数

[+++]

 

 

[+++]

 

 

若设备0为EIO16084,按如上语法配置后,扩展模块上的通用输入口IN0-15对应的IO编号依次为32-47,轴接口内的通用输入口编号48-55,其中轴AXIS 0-3的驱动报警输入分别为48-51。通用输出口OUT0-7应的IO编号依次为32-39,轴接口内的通用输出口编号40-47,其中轴AXIS 0-3的驱动使能输出分别为40-43。

b98fdb62-2b1d-11ed-ba43-dac502259ad0.png

[+++]

扩展模块的轴使用前需要使用“AXIS_ADDRESS”指令映射轴号,轴映射也需要注意整个系统的轴号不得重复。EIO系列扩展轴的映射与总线驱动器的轴映射语法相同。

[+++]

AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1

[+++]

[+++]

若第一个节点是EIO16084,EIO16084上连接了驱动器,那么这里的驱动器0是连接在EIO16084上的第一个脉冲驱动器,否则便是EtherCAT总线驱动器。

[+++][+++] [+++]

EIO16084扩展模块需要经过总线初始化之后才能使用,我们这里把一个脉冲型驱动器接到EIO16084扩展模块上的AXIS 0接口上,使用步骤如下。

第一步:执行总线初始化程序(参见下节),初始化过程中识别EIO扩展模块的设备编号和连接的驱动器编号,根据驱动器编号 *** 作轴映射,根据设备号 *** 作扩展模块的IO映射,设置DRIVE_PROFILE和ATYPE。

第二步:初始化成功后,使能EIO16084扩展模块上的脉冲驱动器,同样也是 *** 作脉冲轴接口内的OP信号使能驱动器,由于扩展模块映射的起始编号是32,这里的AXIS 0-AXIS 3口内的使能信号对应通用输出口编号是40-43。在输出口窗口内按下OP(40)或在程序中执行指令OP(40,ON)均可使能AXIS 0的驱动器。

第三步:使能完成设置相关轴参数,再发送运动指令便可驱动电机。

b99e11a0-2b1d-11ed-ba43-dac502259ad0.png

在初始化 *** 作成功后,总线上能识别该扩展模块,可查看扩展模块上的轴接口数,IO映射后可查看输入输出的编号范围。

例如设置起始编号为32,该扩展模块上的输入编号为外部自带的16点+轴接口通用输入8点,一共24点,范围32-55,输出编号为外部自带的8点+轴接口通用输入8点,一共16点,范围32-47。

b98fdb62-2b1d-11ed-ba43-dac502259ad0.png

[+++]

扩展模块上的IO不管有没有使用都需要使用NODE_IO指令映射EIO16084的输入输出编号。扩展模块的DRIVE_PROFILE配置为0,ATYPE设为65,但实际由于是脉冲型驱动器,轴类型并不是65,真实轴类型的配置使用SDO指令配置数据字典6011h设置。 初始化过程中若产生硬限位报警,可在轴参数窗口将硬限位FWD_IN和REV_IN的映射编号指向-1,表示不映射,需要接入限位[+++]时再去修改FWD_IN和REV_IN。 [+++] 通过SDO指令读写数据字典设置,只开放了部分数据字典供设置,更多驱动器参数使用驱动器[+++]修改。 [+++]

 

[+++] [+++] [+++] [+++] [+++] [+++][+++][+++][+++]

 

[+++]

例如:扩展的脉冲轴的真实轴类型设置通过数据字典6011h设置,(参考下表的参数,按轴号依次设置,第一个驱动器设置数据字典6011h+0*800h,第二个驱动器设置6011h+1*800h,以此类推,每个驱动器加800h,其他参数同理)

[+++] [+++] [+++] [+++] [+++] 6011h Atype UNSIGNED8 rw 扩展板轴的类型
0  虚拟轴
1  脉冲方向方式的步进或伺服
2  模拟信号控制方式的伺服
3  正交编码器
4  步进+编码器
5  步进+脉冲方向编码器
6  脉冲方向方式的编码器
7 脉冲方向方式步进或伺服+EZ信号输入 [+++] 6013h Iolevel UNSIGNED32 rw B0-原点电平
B1-限位电平
B8-自动使用使能信号
B9-使用ALM信号告警
B11-B15 原点信号选择 [+++] 6040h Controlword UNSIGNED16 rw 对应主控制器DRIVE_CONTROLWORD
B0- Switch on
B1- Enable voltage
B3 - Enable opera[+++]on
B7- Fault reset 6041h Statusword UNSIGNED16 ro 对应主控制器DRIVE_STATUS
B0 Ready to switch on
B1 Switched on
B2 OperaTIon enabled
B3 Fault
B4 Voltage enabled
B5 Quick stop
B7 Warning
B8 EZ status
B9 Remo[+++]
B10 Target reached
B11 Internal li[+++]t acTIve
B12 - 13 OperaTIon mode specific
B14 EA status
B15 EB status 6060h Modes of operation INTEGER8 rw 6 回零
8 周期定位 [+++][+++]

 

[+++] SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) [+++] SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) [+++]

 

 

global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   [+++] iVender = $41B and iDevice = $1918   then    '正运动16084脉冲扩展轴      SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4)      '设置扩展脉冲轴ATYPE类型,值为4表示脉冲和编码器信号在同一个轴号上      SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0)      '设置扩展脉冲轴INVERT_STEP脉冲输出模式,模式0,脉冲+方向      NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode          '设置16084上IO的起始映射地址   endifend sub

 

 

如果扩展模块之后还连接了EtherCAT驱动器,使用时注意总线扫描设备数量的设置,EtherCAT驱动器在初始化程序执行完便使能成功,后续设置轴参数便能运行,注意初始化过程中的DRIVE_PROFILE给EtherCAT驱动器配置合适的PDO列表,需要用到驱动器IO时,还需 *** 作DRIVE_IO映射。

[+++][+++] [+++]

此初始化程序可用来初始化EtherCAT驱动器和EtherCAT总线扩展模块,建立通讯连接(通用模板,适用于多种品牌的驱动器)。

b9e445bc-2b1d-11ed-ba43-dac502259ad0.png

 

 

'*******************************************************ECAT总线初始化global CONST BUS_TYPE = 0      '总线类型。可用于上位机区分当前总线类型global CONST MAX_AXISNUM =32    '最大轴数global CONST Bus_Slot   = 0        '槽位号0(单总线控制器缺省0)global CONST PUL_AxisStart= 0      '本地脉冲轴起始轴号global CONST PUL_AxisNum = 0    '本地脉冲轴轴数量global CONST Bus_AxisStart   = 6      总线轴起始轴号global CONST Bus_NodeNum = 2    '总线配置节点数量,用于判断实际检测到的从站数量是否一致global Bus_InitStatus      '总线初始化完成状态Bus_InitStatus = -1global  Bus_TotalAxisnum    '检查扫描的总轴数delay(3000)        '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时?"总线通讯周期:",SERVO_PERIOD,"us"Ecat_Init()      '初始化ECAT总线 while (Bus_InitStatus = 0)   Ecat_Init()wendend
'****************************************ECAT总线初始化**********************************'初始流程:  slot_s[+++](扫描总线) ->   从站节点映射轴/io  ->  SLOT_START(启动总线) -> 初始化成功'*****************************************************************************************global sub Ecat_Init()   local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias   RA[+++]DSTOP(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    '初始化失败。报警提示         return      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= Bus_TotalAxisnum+1  '映射轴号               ATYPE=65      '设置控制模式 65-位置 66-速度 67-转矩                Sub_SetPdo(Node_Num,Drive_Vender,Drive_Device)    '设定PDO参数               Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j)  '设置特殊总线参数,包含EIO16084的配置                 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         endif      next      ?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum       DELAY 200      SLOT_START(Bus_Slot)        '启动总线      if return then          wdog=1            '使能总开关            '?"开始清除驱动器错误"         for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1             BASE(i)            DRIVE_CLEAR(0)            DELAY 50            '?"驱动器错误清除完成"            datum(0)            '清除控制器轴状态错误"            DELAY 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   endifend sub
'*****************************************手动配置PDO**********************************'部分特殊品牌可能需要手动配置,大部分只需要通过DRIVE_PROFILE设置自动配置相应的POD参数即可'*******************************************************************************************global sub Sub_SetPdo(iNode,iVender,iDevice)   IF iVender = 0 then                    '自定义PDO        SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,0)        '禁用PDO,禁用后才可以修改内容      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,0)      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, 00, 

,5 ,0) 'RxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,400010) '控制字 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,7a0020) '目标位置 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,fe0120) '驱动器IO输入      SDO_WRITE (Bus_Slot, iNode, 00, 

 ,5 ,3)    SDO_WRITE (Bus_Slot, iNode, a00,

,5 ,0) 'TxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,410010) '状态字 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,640020) '反馈位置 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,fd0020) '驱动器IO输出      SDO_WRITE (Bus_Slot, iNode, a00, 

 ,5 ,3)     SDO_WRITE (Bus_Slot, iNode, c12, 1 ,6 ,00) 'RxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c13, 1 ,6 ,a00) TxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,1) '启用PDO DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,1) SDO_WRITE (Bus_Slot, iNode, C32, ,6 ,2) '设置DC同步模式      SDO_WRITE (Bus_Slot, iNode, C33,  ,6 ,2)  DRIVE_PROFILE = -1 '使用驱动缺省PDO配置 elseif iVender = f then DRIVE_PROFILE = 4 else DRIVE_PROFILE = 0 endifend sub '***************************************从站节点特殊参数配置*****************************'通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)'**********************************************************************************************global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   if iVender = B and iDevice = 18   then    '正运动EIO16084脉冲扩展轴 SDO_WRITE(Bus_Slot,iNode,11,Iaxis*0,5,4) '设置扩展脉冲轴ATYPE类型 SDO_WRITE(Bus_Slot,iNode,12,Iaxis*0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式 NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置16084上IO的起始映射地址 elseif iVender = f then '松下驱动器 SDO_WRITE(Bus_Slot,iNode,01,0,4,101) '正限位电平 8181      SDO_WRITE(Bus_Slot,iNode,02,0,4,202)        '负限位电平 8282  SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) SDO_WRITE(Bus_Slot,iNode,92,1,7,10000) '电机一圈脉冲数 SDO_WRITE(Bus_Slot,iNode,7E,0,5,224) '电机方向0-反转224 SDO_WRITE(Bus_Slot,iNode,85,0,7,4290000000) '异常减速度 'SDO_WRITE(Bus_Slot,iNode,10,1,7,766173) '写EPPROM(写EPPROM后驱动器需要重新上电) elseif iVender = 0000 then '汇川驱动器 SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) endifend sub '********************************总线IO模块映射**************************************'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址'******************************************************************************************global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)   if iVender = B and iDevice = 0   then    '正运动EIO1616 NODE_IO(Bus_Slot,iNode) = i_IoNum endifend sub

 

 

参考配置采用控制器依次连接一个EIO16084扩展模块和一个EtherCAT总线驱动器,采用以上初始化程序,成功建立通讯连接,控制器状态窗口显示当前扫描连接的节点情况。

总线上的主站为控制器,控制器连接的第一个从站设备为EIO16084扩展模块,第二个从站设备为EtherCAT总线驱动器,没有使用控制器的本地脉冲轴接口。总线上的驱动设备映射轴号可以从6开始,EIO16084扩展模块的AXIS 0-3接口上的脉冲驱动器映射为轴号6-9,EtherCAT总线驱动器映射为轴号10,EIO16084扩展模块的IO编号起始为32。ba19a39c-2b1d-11ed-ba43-dac502259ad0.png

[+++]映射的轴号和IO编号整个控制系统中不得重复,根据具体情况去选择编号。

ba2ed2f8-2b1d-11ed-ba43-dac502259ad0.png

在没有IO设备的情况下,我们可以通过OUT和IN端口直接相连判断IO的响应情况,如下图,[+++]EIO扩展模块的IO配置,将EIO的OUT2(映射编号34)端子连接到EIO的IN8(映射编号40)上, *** 作OP(34)可见输入口40收到信号。

ba40cae4-2b1d-11ed-ba43-dac502259ad0.png

EtherCAT总线初始化执行后,配置轴参数,发送运动指令便可控制电机运行,或参考下图,通过手动运动窗口,快速检测EtherCAT总线驱动器能否正常运行。

本次,正运动技术EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,就分享到这里。

编辑:黄飞  <===>)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
EtherCAT轴扩展模块EIO16084在运动控制系统中的应用_技术_内存溢出

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,第1张

EIO16084扩展模块的使用分为如下几步,硬件接线;总线初始化建立总线通讯连接,初始化中执行扩展资源的映射,分别配置轴资源和IO资源;扩展资源配置完成可通过控制器端访问,扩展轴为脉冲型,设置相关轴参数,发送运动命令即可控制电机运动。

01 产品简介

EIO16084扩展模块是EtherCAT总线控制器使用的扩展模块,可扩展数字量IO和脉冲轴这两类资源,当控制器本体上资源不够的时候,EtherCAT总线控制器可连接多个EIO扩展模块进行资源扩展,可查看控制器的IO最大扩展点数和最大扩展轴数,支持IO的远程扩展。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b831431e-2b1d-11ed-ba43-dac502259ad0.png,第2张

EIO16084扩展模块

每个EIO扩展模块在扩展接线完成后,不需要进行进行二次开发,只需使用指令在EtherCAT主站控制器配置唯一的IO地址和轴地址,配置完成即可访问。

IO地址编号通过总线指令NODE_IO来设置,控制器上程序只需通过IO编号就可以访问到扩展模块上的资源。轴地址的配置使用“AXIS_ADDRESS”指令映射绑定轴号,绑定完成通过BASE或AXIS指令指定轴号。

EIO16084扩展模块功能特点:

(1)支持4轴脉冲轴扩展。 (2)脉冲输出模式:方向/脉冲或双脉冲。 (3)每轴最大输出脉冲频率10MHz。 (4)支持16进+8出IO扩展,每个脉冲轴另外各有2进2出IO可供配置。 (5)脉冲轴以外的输出口最大输出电流达300mA,可直接驱动部分电磁阀。 (6)ECAT最快500us的刷新周期。

(7)单电源供电,连接主电源即可,无需IO电源。

此系列产品选型指南:

 

产品型号 电机轴数 编码器 总轴数 内部输入/输出口 ECAT IN/ECAT OUT EIO1616 - - - 16/16 1/1 EIO16084 4 4 4 16/8 1/1 EIO24088 8 8 8 24/8 1/1

 

EIO系列带轴的扩展模块的使用方法相同,仅是扩展资源数量的区别,EIO16084和EIO24088的使用方法完全相同,EIO1616相比上面两个型号,无需轴映射相关 *** 作。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b87376d0-2b1d-11ed-ba43-dac502259ad0.png,第3张

EIO24088扩展模块

02 接口说明

1.总线接口

EIO16084带两个EtherCAT总线接口,“EtherCAT IN”和“EtherCAT OUT”,使用标准网线完成接线。

接线时注意:“EtherCAT IN”连接上一级模块,“EtherCAT OUT”连接下一级模块,IN和OUT口不可混用。

2.通用输入口

通用输入口IN的内部电路参考图如下,EIO16084带16个通用输入口,输入口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作,输入口参数参见下表。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b8ea2690-2b1d-11ed-ba43-dac502259ad0.png,第4张

通用输入口IN的内部电路参考图

输入口参数说明:

项目 规格 通道数 16(IN0-IN15) 输入方式 NPN型 输入电压等级 DC24V 输入电流(典型值) 4.8mA 输入开通电压 <14.5V 输入最小电流 1.8mA 输入阻抗 4.7KΩ 隔离方式 光电隔离 输入频率 <5kHz


3.通用输出口

通用输出口OUT的内部电路参考图如下,EIO16084带8个通用输入口,输出口需要NODE_IO配置IO地址编号才能通过控制器端 *** 作(NODE_IO使用一次便可配置好输入和输出),输出口参数参见下表。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b9055622-2b1d-11ed-ba43-dac502259ad0.png,第5张

通用输出口OUT的内部电路参考图

输入口参数说明:

 

项目 规格 通道数 8(OUT0-OUT7) 输出方式 晶体管NPN型,OD输出。 输出电压等级 负载电源≤36V 最大输出电流 300mA 关闭时最大漏电流 25μA 导通响应时间 12μs 关闭响应时间 80μs 隔离方式 光电隔离 过流保护 支持,动作电流600mA 输出频率 <8kHz

 

4.轴接口

EIO16084的轴接口有4个,采用DB26针脚,针脚定义如下表,轴接口包含差分脉冲输入和差分编码器输入信号,同时还有两路通用输入口(其中一路为报警输入),两路通用输出口(其中一路为驱动使能)。

EIO16084扩展轴时,为总线转脉冲,将脉冲型驱动器接入到EIO16084扩展模块上的脉冲轴接口上。通过总线初始化建立EtherCAT总线控制器和EIO16084扩展模块之间的通讯连接,总线初始化过程中必须包含轴映射,之后参考脉冲型控制器的使用方法 *** 作脉冲驱动器。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b919b7ca-2b1d-11ed-ba43-dac502259ad0.png,第6张

 

针脚号 信号 说明 1 EGND 外部电源地 2 IN16-19/ALM 通用输入,建议做驱动报警 3 OUT8-11/ENABLE 通用输出,建议驱动使能 4 EA- 编码器输入 5 EB- 编码器输入 6 EZ- 编码器输入 7 +5V 内部5V电源输出 8 备用 备用 9 DIR+ 伺服或步进方向输出 10 GND 内部电源地 11 PUL- 伺服或步进脉冲输出 12 备用 备用 13 GND 内部电源地 14 OVCC E24V输出(建议仅供伺服IO ) 15 OUT12-15/CLR 通用输出,建议驱动报警清除 16 IN20-23/INP 通用输入,建议做到位信号 17 EA+ 编码器输入 18 EB+ 编码器输入 19 EZ+ 编码器输入 20 GND 内部电源地 21 GND 内部电源地 22 DIR- 伺服或步进方向输出 23 PUL+ 伺服或步进脉冲输出 24 GND 内部电源地 25 备用 备用 26 备用 备用

 

可以通过数据字典配置EIO扩展板直接使能与告警,缺省不使用,需要主控制器来 *** 作。

告警输入、位置到位信号、轴使能、误差清除可以为通用的输入输出,由于驱动能力偏小建议做轴功能IO使用。

“EGND,OVCC电源”是控制器内部输出供伺服IO使用,请勿连接到开关电源,不使用时悬空。

03 接线参考

EIO16084扩展模块接线规则:EIO16084可接到EtherCAT总线上的任意节点。

EIO16084为总线上的一个设备节点,可接入4个脉冲型驱动器,驱动器按照AXIS 0到AXIS 3的顺序依次编号,并且遵从总线上的驱动器编号规则。

驱动器的使能信号为脉冲接口内的通用输出口,直接通过主控制器的OP指令来使能。或使用SDO指令配置数据字典为自动使能后,主控制器无法直接控制对应的输出口来使能。

注意:轴扩展模块的使用个数不是无限制的,参考控制器可扩展的最大轴数。

如下图,ZMC416BE运动控制器本体支持连接16个脉冲驱动器,最大扩展轴数为20,故可以通过EtherCAT总线连接一个EIO16084扩展到支持20个脉冲驱动器。

扩展轴映射轴号时注意避开本地脉冲轴,若本地脉冲轴使用了16个,默认对应轴号0-15,则扩展轴上的AXIS0-3(对应下图中驱动器编号0-3)分别手动映射为轴号16-19。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b93f945e-2b1d-11ed-ba43-dac502259ad0.png,第7张

如下图,ZMC432运动控制器本体支持连接32个轴(脉冲驱动器+EtherCAT总线驱动器一共32个),控制器本体只有6路脉冲接口,通过一个EIO16084可扩展4路脉冲接口,支持脉冲驱动器和总线驱动器混合使用。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b9628586-2b1d-11ed-ba43-dac502259ad0.png,第8张

上图涉及的编号概念如下:总线相关指令参数会用到如下编号。

(1)槽位号(slot)

槽位号是指控制器上总线接口的编号,EtherCAT总线槽位号为0。

(2)设备号(node)

设备号是指一个槽位上连接的所有设备的编号,从0开始,按设备在总线上的连接顺序自动编号,可以通过“NODE_COUNT(slot)”指令查看总线上连接的设备总数。

(3)驱动器编号

控制器会自动识别出槽位上的驱动器,编号从0开始,按驱动器在总线上的连接顺序自动编号。

驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略,映射轴号时将会用到驱动器编号。

04 扩展资源映射方法

EIO16084扩展模块上有两类资源需要映射,轴资源和IO资源。

1.IO映射

控制器上程序只需通过IO编号就可以访问到扩展模块上的资源,EtherCAT总线扩展模块IO编号通过总线指令NODE_IO来设置,同时配置输入和输出。

IO映射时先查看控制器自身的最大IO编号(包括外部IO接口和脉冲轴内的接口),再使用指令设置。

若扩展的IO与控制器自身IO编号重合,二者将同时起作用,所以IO映射的映射的编号在整个控制系统中均不得重复。

IO映射语法:

NODE_IO(slot,node)=iobase slot:槽位号,0-缺省 node:设备编号,编号从0开始

iobase:映射IO起始编号,设置结果只会是8的倍数

示例:

 

 

NODE_IO(0,0)=32 '设置槽位0接口设备0的IO起始编号为32

 

 

若设备0为EIO16084,按如上语法配置后,扩展模块上的通用输入口IN0-15对应的IO编号依次为32-47,轴接口内的通用输入口编号48-55,其中轴AXIS 0-3的驱动报警输入分别为48-51。通用输出口OUT0-7应的IO编号依次为32-39,轴接口内的通用输出口编号40-47,其中轴AXIS 0-3的驱动使能输出分别为40-43。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b98fdb62-2b1d-11ed-ba43-dac502259ad0.png,第9张

2.轴映射

扩展模块的轴使用前需要使用“AXIS_ADDRESS”指令映射轴号,轴映射也需要注意整个系统的轴号不得重复。EIO系列扩展轴的映射与总线驱动器的轴映射语法相同。

轴映射语法:

AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1

示例:

AXIS_ADDRESS(0)=(0<<16)+0+1 'EtherCAT总线上的第一个驱动器,驱动器编号0,绑定为轴0AXIS_ADDRESS(1)=(0<<16)+1+1 'EtherCAT总线上的第二个驱动器,驱动器编号1,绑定为轴1

若第一个节点是EIO16084,EIO16084上连接了驱动器,那么这里的驱动器0是连接在EIO16084上的第一个脉冲驱动器,否则便是EtherCAT总线驱动器。

05 拓展脉冲轴的使用方法

EIO16084扩展模块需要经过总线初始化之后才能使用,我们这里把一个脉冲型驱动器接到EIO16084扩展模块上的AXIS 0接口上,使用步骤如下。

第一步:执行总线初始化程序(参见下节),初始化过程中识别EIO扩展模块的设备编号和连接的驱动器编号,根据驱动器编号 *** 作轴映射,根据设备号 *** 作扩展模块的IO映射,设置DRIVE_PROFILE和ATYPE。

第二步:初始化成功后,使能EIO16084扩展模块上的脉冲驱动器,同样也是 *** 作脉冲轴接口内的OP信号使能驱动器,由于扩展模块映射的起始编号是32,这里的AXIS 0-AXIS 3口内的使能信号对应通用输出口编号是40-43。在输出口窗口内按下OP(40)或在程序中执行指令OP(40,ON)均可使能AXIS 0的驱动器。

第三步:使能完成设置相关轴参数,再发送运动指令便可驱动电机。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b99e11a0-2b1d-11ed-ba43-dac502259ad0.png,第10张

在初始化 *** 作成功后,总线上能识别该扩展模块,可查看扩展模块上的轴接口数,IO映射后可查看输入输出的编号范围。

例如设置起始编号为32,该扩展模块上的输入编号为外部自带的16点+轴接口通用输入8点,一共24点,范围32-55,输出编号为外部自带的8点+轴接口通用输入8点,一共16点,范围32-47。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b98fdb62-2b1d-11ed-ba43-dac502259ad0.png,第9张

EIO16084使用注意事项:

扩展模块上的IO不管有没有使用都需要使用NODE_IO指令映射EIO16084的输入输出编号。扩展模块的DRIVE_PROFILE配置为0,ATYPE设为65,但实际由于是脉冲型驱动器,轴类型并不是65,真实轴类型的配置使用SDO指令配置数据字典6011h设置。 初始化过程中若产生硬限位报警,可在轴参数窗口将硬限位FWD_IN和REV_IN的映射编号指向-1,表示不映射,需要接入限位开关时再去修改FWD_IN和REV_IN。 EIO16084扩展模块设置: 通过SDO指令读写数据字典设置,只开放了部分数据字典供设置,更多驱动器参数使用驱动器软件修改。 SDO指令配置输入输出:

 

编号 描述 类型 读写 其它说明 6000h input ARRAY U8 RO 1-闭合 6200h Output ARRAY U8 RW 1-打开 6206h 异常输出模式 ARRAY U8 RW 1-使用异常输出 6207h 异常输出使用状态 ARRAY U8 RW /

 

SDO指令配置驱动器参数:

例如:扩展的脉冲轴的真实轴类型设置通过数据字典6011h设置,(参考下表的参数,按轴号依次设置,第一个驱动器设置数据字典6011h+0*800h,第二个驱动器设置6011h+1*800h,以此类推,每个驱动器加800h,其他参数同理)

编号 描述 类型 读写 其它说明 6011h Atype UNSIGNED8 rw 扩展板轴的类型
0  虚拟轴
1  脉冲方向方式的步进或伺服
2  模拟信号控制方式的伺服
3  正交编码器
4  步进+编码器
5  步进+脉冲方向编码器
6  脉冲方向方式的编码器
7 脉冲方向方式步进或伺服+EZ信号输入 6012h Invert_Step UNSIGNED16 rw 参见控制器说明书Invert_Step 6013h Iolevel UNSIGNED32 rw B0-原点电平
B1-限位电平
B8-自动使用使能信号
B9-使用ALM信号告警
B11-B15 原点信号选择 6014h Axisstatus UNSIGNED32 ro 参见控制器说明书AXISSTATUS 6040h Controlword UNSIGNED16 rw 对应主控制器DRIVE_CONTROLWORD
B0- Switch on
B1- Enable voltage
B3 - Enable operaTIon
B7- Fault reset 6041h Statusword UNSIGNED16 ro 对应主控制器DRIVE_STATUS
B0 Ready to switch on
B1 Switched on
B2 OperaTIon enabled
B3 Fault
B4 Voltage enabled
B5 Quick stop
B7 Warning
B8 EZ status
B9 Remote
B10 Target reached
B11 Internal limit acTIve
B12 - 13 OperaTIon mode specific
B14 EA status
B15 EB status 6060h Modes of operation INTEGER8 rw 6 回零
8 周期定位 607Eh 极性 INTEGER8 rw 1 反向, 0-正常方向 60fDh 驱动器输入兼容 UNSIGNED32 rw /

 

数据字典读取语法: SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置) 数据字典写入语法: SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值) 数据字典读写示例:

 

 

global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   if iVender = $41B and iDevice = $1918   then    '正运动16084脉冲扩展轴      SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4)      '设置扩展脉冲轴ATYPE类型,值为4表示脉冲和编码器信号在同一个轴号上      SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0)      '设置扩展脉冲轴INVERT_STEP脉冲输出模式,模式0,脉冲+方向      NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode          '设置16084上IO的起始映射地址   endifend sub

 

 

如果扩展模块之后还连接了EtherCAT驱动器,使用时注意总线扫描设备数量的设置,EtherCAT驱动器在初始化程序执行完便使能成功,后续设置轴参数便能运行,注意初始化过程中的DRIVE_PROFILE给EtherCAT驱动器配置合适的PDO列表,需要用到驱动器IO时,还需 *** 作DRIVE_IO映射。

06 总线初始化

此初始化程序可用来初始化EtherCAT驱动器和EtherCAT总线扩展模块,建立通讯连接(通用模板,适用于多种品牌的驱动器)。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,b9e445bc-2b1d-11ed-ba43-dac502259ad0.png,第12张

 

 

'*******************************************************ECAT总线初始化global CONST BUS_TYPE = 0      '总线类型。可用于上位机区分当前总线类型global CONST MAX_AXISNUM =32    '最大轴数global CONST Bus_Slot   = 0        '槽位号0(单总线控制器缺省0)global CONST PUL_AxisStart= 0      '本地脉冲轴起始轴号global CONST PUL_AxisNum = 0    '本地脉冲轴轴数量global CONST Bus_AxisStart   = 6      总线轴起始轴号global CONST Bus_NodeNum = 2    '总线配置节点数量,用于判断实际检测到的从站数量是否一致global Bus_InitStatus      '总线初始化完成状态Bus_InitStatus = -1global  Bus_TotalAxisnum    '检查扫描的总轴数delay(3000)        '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时?"总线通讯周期:",SERVO_PERIOD,"us"Ecat_Init()      '初始化ECAT总线 while (Bus_InitStatus = 0)   Ecat_Init()wendend
'****************************************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    '初始化失败。报警提示         return      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= Bus_TotalAxisnum+1  '映射轴号               ATYPE=65      '设置控制模式 65-位置 66-速度 67-转矩                Sub_SetPdo(Node_Num,Drive_Vender,Drive_Device)    '设定PDO参数               Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j)  '设置特殊总线参数,包含EIO16084的配置                 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         endif      next      ?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum       DELAY 200      SLOT_START(Bus_Slot)        '启动总线      if return then          wdog=1            '使能总开关            '?"开始清除驱动器错误"         for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1             BASE(i)            DRIVE_CLEAR(0)            DELAY 50            '?"驱动器错误清除完成"            datum(0)            '清除控制器轴状态错误"            DELAY 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   endifend sub
'*****************************************手动配置PDO**********************************'部分特殊品牌可能需要手动配置,大部分只需要通过DRIVE_PROFILE设置自动配置相应的POD参数即可'*******************************************************************************************global sub Sub_SetPdo(iNode,iVender,iDevice)   IF iVender = 0 then                    '自定义PDO        SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,0)        '禁用PDO,禁用后才可以修改内容      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,0)      DELAY(50)      SDO_WRITE (Bus_Slot, iNode, 00, 

,5 ,0) 'RxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,400010) '控制字 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,7a0020) '目标位置 SDO_WRITE (Bus_Slot, iNode, 00, ,7 ,fe0120) '驱动器IO输入      SDO_WRITE (Bus_Slot, iNode, 00, 

 ,5 ,3)    SDO_WRITE (Bus_Slot, iNode, a00,

,5 ,0) 'TxPDO配置对应参数 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,410010) '状态字 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,640020) '反馈位置 SDO_WRITE (Bus_Slot, iNode, a00, ,7 ,fd0020) '驱动器IO输出      SDO_WRITE (Bus_Slot, iNode, a00, 

 ,5 ,3)     SDO_WRITE (Bus_Slot, iNode, c12, 1 ,6 ,00) 'RxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c13, 1 ,6 ,a00) TxPDO分配对象 DELAY(50) SDO_WRITE (Bus_Slot, iNode, c12, 0 ,5 ,1) '启用PDO DELAY(50)      SDO_WRITE (Bus_Slot, iNode, c13, 0 ,5 ,1) SDO_WRITE (Bus_Slot, iNode, C32, ,6 ,2) '设置DC同步模式      SDO_WRITE (Bus_Slot, iNode, C33,  ,6 ,2)  DRIVE_PROFILE = -1 '使用驱动缺省PDO配置 elseif iVender = f then DRIVE_PROFILE = 4 else DRIVE_PROFILE = 0 endifend sub '***************************************从站节点特殊参数配置*****************************'通过SDO方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)'**********************************************************************************************global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)   if iVender = B and iDevice = 18   then    '正运动EIO16084脉冲扩展轴 SDO_WRITE(Bus_Slot,iNode,11,Iaxis*0,5,4) '设置扩展脉冲轴ATYPE类型 SDO_WRITE(Bus_Slot,iNode,12,Iaxis*0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式 NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置16084上IO的起始映射地址 elseif iVender = f then '松下驱动器 SDO_WRITE(Bus_Slot,iNode,01,0,4,101) '正限位电平 8181      SDO_WRITE(Bus_Slot,iNode,02,0,4,202)        '负限位电平 8282  SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) SDO_WRITE(Bus_Slot,iNode,92,1,7,10000) '电机一圈脉冲数 SDO_WRITE(Bus_Slot,iNode,7E,0,5,224) '电机方向0-反转224 SDO_WRITE(Bus_Slot,iNode,85,0,7,4290000000) '异常减速度 'SDO_WRITE(Bus_Slot,iNode,10,1,7,766173) '写EPPROM(写EPPROM后驱动器需要重新上电) elseif iVender = 0000 then '汇川驱动器 SDO_WRITE(Bus_Slot,iNode,91,1,7,1) '齿轮比 SDO_WRITE(Bus_Slot,iNode,91,2,7,1) endifend sub '********************************总线IO模块映射**************************************'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址'******************************************************************************************global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)   if iVender = B and iDevice = 0   then    '正运动EIO1616 NODE_IO(Bus_Slot,iNode) = i_IoNum endifend sub

 

 

参考配置采用控制器依次连接一个EIO16084扩展模块和一个EtherCAT总线驱动器,采用以上初始化程序,成功建立通讯连接,控制器状态窗口显示当前扫描连接的节点情况。

总线上的主站为控制器,控制器连接的第一个从站设备为EIO16084扩展模块,第二个从站设备为EtherCAT总线驱动器,没有使用控制器的本地脉冲轴接口。总线上的驱动设备映射轴号可以从6开始,EIO16084扩展模块的AXIS 0-3接口上的脉冲驱动器映射为轴号6-9,EtherCAT总线驱动器映射为轴号10,EIO16084扩展模块的IO编号起始为32。EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,ba19a39c-2b1d-11ed-ba43-dac502259ad0.png,第13张

注意:映射的轴号和IO编号整个控制系统中不得重复,根据具体情况去选择编号。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,ba2ed2f8-2b1d-11ed-ba43-dac502259ad0.png,第14张

在没有IO设备的情况下,我们可以通过OUT和IN端口直接相连判断IO的响应情况,如下图,测试EIO扩展模块的IO配置,将EIO的OUT2(映射编号34)端子连接到EIO的IN8(映射编号40)上, *** 作OP(34)可见输入口40收到信号。

EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,ba40cae4-2b1d-11ed-ba43-dac502259ad0.png,第15张

EtherCAT总线初始化执行后,配置轴参数,发送运动指令便可控制电机运行,或参考下图,通过手动运动窗口,快速检测EtherCAT总线驱动器能否正常运行。

本次,正运动技术EtherCAT轴扩展模块EIO16084在运动控制系统中的应用,就分享到这里。

编辑:黄飞  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2999578.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-26
下一篇 2022-09-26

发表评论

登录后才能评论

评论列表(0条)

保存