电子说
EIO24088-V2及EIO16084扩展模块配合正运动的主站控制器的使用分为三步。第一步:进行硬件接线;第二步:总线初始化建立EtherCAT通讯连接,初始化中需要对扩展的轴资源和IO资源的进行映射防止与控制器的资源产生冲突;第三步:通过相应指令读写IO及控制电机运动。
今天正运动小助手给大家分享一下EIO24088-V2及EIO16084如何用RTSys进行总线配置和使用。
EIO24088-V2扩展模块硬件介绍
EIO24088-V2总线扩展模块是EtherCAT总线控制器使用的扩展模块,当数字IO、脉冲轴资源不够需要扩展增加的时候,控制器可通过EtherCAT总线连接多个EtherCAT扩展模块进行扩展。控制器可通过映射编号直接访问EIO24088-V2的IO资源和轴资源。
支持8个脉冲轴进行扩展;
支持扩展24路数字量输入和8路数字量输出,每个脉冲轴另外各有1路数字量输入和1路数字量输出可供配置;
脉冲输出模式为方向/脉冲或双脉冲输出;
每轴最大输出脉冲频率10MHz;
脉冲轴以外的输出口最大输出电流达300mA,可直接驱动部分电磁阀。
应用框图如下所示:
EIO16084扩展模块硬件介绍
EIO16084总线扩展模块是EtherCAT总线控制器使用的扩展模块,当数字IO、脉冲轴资源不够需要扩展增加的时候,控制器可通过EtherCAT总线连接多个EtherCAT扩展模块进行扩展。控制器可通过映射编号直接访问EIO16084的IO资源和轴资源。
支持4个脉冲轴扩展;
支持扩展16路数字量输入和8路数字量输出,每个脉冲轴另外各有2路数字量输入和2路数字量输入可供配置;
脉冲输出模式为方向/脉冲或双脉冲;
每轴最大输出脉冲频率10MHz;
脉冲轴以外的输出口最大输出电流达300mA,可直接驱动部分电磁阀。
应用框图如下所示:
一、接口说明
1、EtherCAT总线通讯接口的接线
EIO24088-V2带两个EtherCAT总线接口,接线时注意EtherCAT IN连接主控制器或上级模块,EtherCAT OUT连接下一级扩展板,IN和OUT口不可混用。
2、通用输入口
EIO24088-V2带24个通用输入口,输入口需要先使用NODE_IO指令配置IO地址编号才能通过控制器端操作。通用输入口IN的内部电路参考图如下,输入口参数参见下表。
通用输入口IN的内部电路参考图:
输入口参数说明:
3、通用输出口
EIO24088-V2带8个通用输出口,输出口需要先使用NODE_IO指令配置IO地址编号后才能通过控制器端操作(NODE_IO指令使用一次便可配置好输入和输出)。通用输出口OUT的内部电路参考图如下,输出口参数参见下表。
通用输出口OUT的内部电路参考图:
输出口参数说明:
4、轴接口
EIO24088-V2的轴接口有8个,采用DB26针脚,轴接口包含差分脉冲输入信号和差分编码器输入信号,同时有一路通用输入口和一路通用输出口(EIO16084有两路通用输入口和两路通用输出信号)。
针脚定义说明:
可以通过数据字典中的6013h配置EIO扩展板直接使能与告警,缺省不使用,需要主控制器来操作。
二、总线接线参考
EIO24088-V2扩展模块接线规则:EIO24088-V2可接到EtherCAT总线上的任意节点。
EIO24088-V2为总线上的一个设备节点,可接入8个脉冲型驱动器,驱动器按照AXIS 0到AXIS 7的顺序依次编号,并且遵从总线上的驱动器编号规则,需要进行轴映射。
驱动器的使能信号为脉冲接口内的通用输出口,直接通过主控制器的OP指令来使能,或使用SDO指令配置数据字典6013h中的BIT8为1后为即可自动使能,主控制器无法直接控制对应的输出口来使能,只需WDOG置1及对应轴的AXIS_ENABLE置1即可。
注意:轴扩展模块的使用个数不是无限制的,参考控制器可扩展的最大轴数。
ZMC432-V2本体有6个脉冲轴,通过EtherCAT扩展了节点0、1、2、3四个总线轴,节点4八个总线转脉冲轴。扩展轴上的AXIS0-7(对应下图中驱动器编号4-11)分别手动映射为轴号10-17。控制器、EIO扩展模块和驱动器的接线参考如下图:
涉及的总线相关指令参数概念如下:
1、槽位号(slot)
槽位号是指控制器上总线接口的编号,缺省为0。当控制器上有多个总线接口时,在线命令发送?*SLOT查看。
运动控制器支持单总线时,槽位号为0。
支持双总线时,EtherCAT总线槽位号为0,RTEX总线槽位号为1。
2、设备号(node)
设备号是指一个槽位上连接的所有设备的编号,从0开始,按设备在总线上的连接顺序自动编号,可以通过NODE_COUNT(slot)指令查看总线上连接的设备总数。
3、驱动器编号
控制器会自动识别出槽位上的驱动器,编号从0开始,按驱动器在总线上的连接顺序自动编号。
驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略。
三、扩展资源映射方法
EIO24088-V2或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为EIO24088-V2,按如上语法配置后,起始编号映射为32,该扩展模块上的输入编号为外部自带的24点+轴接口通用输入8点,一共32点,范围32-63,输出编号为外部的8点+轴接口通用输出8点,共16点,范围32-47。
2、轴映射
扩展模块的轴使用前需要使用“AXIS_ADDRESS”指令映射轴号,轴映射也需要注意整个系统的轴号不得重复。EIO系列扩展轴的映射与总线驱动器的轴映射语法相同。轴映射语法:
AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1
示例:
AXIS_ADDRESS(0)=(0< <16)+0+1 'EtherCAT总线上的第一个驱动器,驱动器编号0,绑定为轴0 AXIS_ADDRESS(1)=(0< <16)+1+1 'EtherCAT总线上的第二个驱动器,驱动器编号1,绑定为轴1
若第一个节点是EIO24088-V2,那么这里的驱动器编号0对应连接在EIO24088-V2上的第一个总线转脉冲型驱动器。
四、总线初始化
EIO24088-V2扩展模块需要经过总线初始化之后才能使用,下图为总线初始化流程。
进行总线初始化有两种方式:
⚪ 通过正运动提供的总线初始化脚本进行初始化
⚪ 找到RTSys的工程设置,打开启动轴配置及EtherCAT配置自行配置
先给大家介绍的是第一种通过总线初始化脚本进行总线初始化,此初始化程序可用来初始化EtherCAT驱动器和EtherCAT总线扩展模块,建立通讯连接(通用模板,适用于多种品牌的驱动器),可找正运动厂商提供。
1、在RTSys或ZDevelop中新建一个工程
2、把总线初始化脚本添加至工程
3、设置初始化脚本的任务号
4、设置本地脉冲轴数和起始编号及总线轴的起始编号,不使用本地脉冲轴只使用总线轴可使用默认配置(可根据实际使用情况修改参数),演示时使用了六个本地脉冲轴,ECAT总线连接了一个EIO24088-V2及两个松下的驱动器及一个台达的驱动器。
5、总线初始化模板程序:
'控制器最大轴数 TABLE(0)= SYS_ZFEATURE(0) GLOBAL CONST ControlMaxAxis = TABLE(0) '支持电机个数 TABLE(0)= SYS_ZFEATURE(1) GLOBAL CONST RealAxisMax = TABLE(0) '槽位号,(单总线控制器缺省0,具体查看硬件手册) GLOBAL CONST Bus_Slot = 0 '本地脉冲轴起始编号 GLOBAL CONST LocalAxis_Start = 11 '本地脉冲轴轴数量 GLOBAL CONST LocalAxis_Num = 2 '总线轴起始编号 GLOBAL CONST BusAxis_Start = 0 '总线驱动器起始IOS GLOBAL CONST BusStaraIoNum=128 '总线初始化状态 -1--未进行 0--初始化错误 1--初始化完成 GLOBAL ECAT_InitEnable ECAT_InitEnable = -1 '延迟3秒,等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时 DELAY(3000) '? "总线通讯周期:",SERVO_PERIOD,"us" ECAT_Init() '调用初始化函数 DIM ScanNum '如果没有扫描到在扫描4次 IF ECAT_InitEnable< >1 THEN FOR ScanNum=0 to 3 ECAT_Init() '调用初始化函数 IF ECAT_InitEnable=1 THEN EXIT FOR NEXT ENDIF END '/************************************************************* 'Description: //总线轴初始化 'Input: // 'Input: // 'Input: // 'Output: // ECAT_InitEnable=ON -- >初始化完成标志 'Return: // '*************************************************************/ GLOBAL SUB ECAT_Init() LOCAL NodeSum_Num ,BusAxis_Num ,NodeAxis_Num '设备总数、总线轴总数、每个节点上的电机数 LOCAL Drive_Vender,Drive_Device,Drive_Alias '驱动厂商编号、驱动设备编号、驱动设备拨码ID local i,j ? "总线通讯周期:",SERVO_PERIOD,"us" RAPIDSTOP(2) '初始化还原轴类型 FOR i = 0 TO ControlMaxAxis - 1 AXIS_ADDRESS(i) = 0 AXIS_ENABLE(i) = 0 ATYPE(i) = 0 WAIT IDLE(i) NEXT '本地轴重新映射 FOR i=0 TO LocalAxis_Num -1 AXIS_ADDRESS(LocalAxis_Start+i)= (-1< <16) + i '将本地轴0-- >i映射到轴20-- >20+i ATYPE(LocalAxis_Start+i)=0 '轴类型 NEXT ECAT_InitEnable = -1 SYSTEM_ZSET = SYSTEM_ZSET OR 128 '扫描总线驱动器 FOR i=0 to 3 SLOT_STOP(Bus_Slot) DELAY(200) SLOT_SCAN(Bus_Slot) IF NODE_COUNT(Bus_Slot) THEN EXIT FOR DELAY(1000) NEXT IF RETURN THEN NodeSum_Num = NODE_COUNT(Bus_Slot) ? "总线扫描成功,连接设备数:",NodeSum_Num '总线轴总数,从0开始计数 BusAxis_Num = 0 FOR i = 0 TO NodeSum_Num - 1 NodeAxis_Num = NODE_AXIS_COUNT(Bus_Slot,i) '读取设备电机数 Drive_Vender = NODE_INFO(Bus_Slot,i,0) '读取驱动器厂商 Drive_Device = NODE_INFO(Bus_Slot,i,1) '读取设备编号 Drive_Alias = NODE_INFO(Bus_Slot,i,3) '读取设备拨码ID '轴设置 FOR j = 0 TO NodeAxis_Num - 1 AXIS_ADDRESS(BusAxis_Num+BusAxis_Start) = BusAxis_Num + 1 '映射轴号 ATYPE(BusAxis_Num+BusAxis_Start) = 65 '设置控制模式 65-位置 66-速度 67-转矩 详细参照AXISSTATUS DRIVE_PROFILE(BusAxis_Num+BusAxis_Start) = 0 '驱动器PDO设置,驱动器默认设置-- -1 位置模式--0 速度模式--20+ 力矩模式--30+ DISABLE_GROUP(BusAxis_Num+BusAxis_Start) '每轴单独分组 IF DRIVE_PROFILE(BusAxis_Num+BusAxis_Start)=4 OR DRIVE_PROFILE(BusAxis_Num+BusAxis_Start)=5 THEN '设置总线驱动器的起始IO地址 DRIVE_IO (BusAxis_Num+BusAxis_Start) = BusStaraIoNum+8*(BusAxis_Num+BusAxis_Start) '设置负限位 REV_IN(BusAxis_Num+BusAxis_Start) = DRIVE_IO (BusAxis_Num+BusAxis_Start) INVERT_IN(DRIVE_IO (BusAxis_Num+BusAxis_Start),ON) '设置正限位 FWD_IN(BusAxis_Num+BusAxis_Start) = DRIVE_IO (BusAxis_Num+BusAxis_Start)+1 INVERT_IN(DRIVE_IO (BusAxis_Num+BusAxis_Start)+1,ON) '设置原点 DATUM_IN(BusAxis_Num+BusAxis_Start) = DRIVE_IO (BusAxis_Num+BusAxis_Start)+2 INVERT_IN(DRIVE_IO (BusAxis_Num+BusAxis_Start)+2,ON) ELSEIF DRIVE_PROFILE(BusAxis_Num+BusAxis_Start)< 4 THEN IF REV_IN(BusAxis_Num+BusAxis_Start) >=BusStaraIoNum THEN '取消设置负限位 REV_IN(BusAxis_Num+BusAxis_Start) = -1 ENDIF IF FWD_IN(BusAxis_Num+BusAxis_Start) >=BusStaraIoNum THEN '取消设置正限位 FWD_IN(BusAxis_Num+BusAxis_Start) = -1 ENDIF IF DATUM_IN(BusAxis_Num+BusAxis_Start) >=BusStaraIoNum THEN '取消设置原点 DATUM_IN(BusAxis_Num+BusAxis_Start) = -1 ENDIF ENDIF BusAxis_Num = BusAxis_Num + 1 '总线轴计数+1 NEXT '正运动EIO24088-V2总线转脉冲扩展轴 IF Drive_Vender = $41B AND Drive_Device = $1ab0 THEN local k for k=0 to 7 SDO_WRITE(Bus_Slot,i,$6011+k*$800,0,5,7) '设置扩展脉冲轴ATYPE类型 SDO_WRITE(Bus_Slot,i,$6012+k*$800,0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式 NODE_IO(Bus_Slot,i) = 32 + 32*i '设置24088上IO的起始映射地址 next ENDIF NEXT ? "轴扫描映射完成,连接总线轴数:",BusAxis_Num DELAY(100) SLOT_START(Bus_Slot) WA(3000) ' 延迟3秒,等待驱动器时钟同步,不同驱动器时间不同,具体根据驱动器调整延时 IF RETURN THEN ? "开始清除驱动器报警" FOR i = BusAxis_Start TO BusAxis_Start + BusAxis_Num - 1 BASE(i) DRIVE_CLEAR(0) WA(10) DRIVE_CONTROLWORD(i) = 128 ' 伺服错误清除 WA(10) DRIVE_CONTROLWORD(i)=6 ' 伺服shutdown WA(10) 'DRIVE_CONTROLWORD(i)=7 ' 伺服disable voltage 'WA(10) DRIVE_CONTROLWORD(i)=15 ' 伺服fault reset WA(10) NEXT DELAY(100) ? "控制器报警清除完成" DATUM(0) ' 清除所有轴的错误状态。 DELAY(1000) ?"开始伺服使能" WDOG = 1 FOR i = BusAxis_Start TO BusAxis_Start + BusAxis_Num - 1 AXIS_ENABLE(i) = 1 NEXT ?"伺服使能完成" ECAT_InitEnable = 1 ELSE ?"总线开启失败" ECAT_InitEnable = 0 ENDIF ELSE ?"总线扫描失败" ECAT_InitEnable = 0 ENDIF ENDSUB
参考配置采用控制器依次连接一个EIO24088-V2扩展模块和两个松下及一个台达的EtherCAT总线驱动器,采用以上初始化程序,成功建立通讯连接,控制器状态窗口显示当前扫描连接的节点情况。
总线上的主站为控制器,控制器连接的第一个从站设备为EIO24088-V2扩展模块,第二个、第三个和第四个从站设备为EtherCAT总线驱动器,可使用控制器的本地脉冲轴接口。总线上的驱动设备映射轴号从0开始,EIO24088-V2扩展模块的AXIS 0-7接口上的脉冲驱动器映射为轴号0-7,三个EtherCAT总线驱动器映射为轴号8-10,本地轴从11开始,EIO24088-V2扩展模块的IO编号起始为32。
注意:映射的轴号和IO编号整个控制系统中不得重复,根据具体情况去选择编号。
接下来给大家介绍第二种总线初始化配置的方法,通过RTSys的工程设置自行配置总线初始化脚本。
1、在RTSys中新建一个工程
2、打开EtherCAT配置。在工程视图右键选择工程设置,勾选轴配置及EtherCAT配置
3、扫描出要配置的总线节点
4、自行配置轴号及类型
(1)双击控制器打开控制器配置界面;
(2)选择需要使用的本地脉冲轴数(此演示选择两个本地脉冲轴);
(3)给本地脉冲轴重映射轴号;
(4)选择本地脉冲轴的轴类型,根据使用情况自行选择;
(5)对EtherCAT扫描到的总线轴进行轴号映射;
(6)设置轴类型;
(7)根据使用情况选择65/66/67(不同轴类型所需的PDO列表不同);
(8)点击应用自动生成Startup.bas总线配置文件。
此演示配置了两个本地脉冲轴(轴号重映射成11,12),EIO24088-V2的八个总线转脉冲轴(轴号映射成0-7),两个松下总线伺服驱动器及一个高创总线伺服驱动器(轴号映射成8-10)。
5、进行PDO设置,根据需求选择
(1)选择需要配置的节点(此演示是选择EIO24088-V2);
(2)选择需要配置的轴(八个轴都需要配置);
(3)进行PDO设置(选择0即可);
(4)所有轴都配置完后点击应用保存配置。
在帮助文档中可查询各PDO设置的数据字典详情,根据需求自行选择。
6、把配置好的Startup.bas下载进控制器进行总线初始化
五、通过RTSys测试扩展的资源
1、测试IO资源
在没有IO设备的情况下,我们可以通过OUT和IN端口直接相连判断IO的响应情况,如下图,测试EIO扩展模块的IO配置,将EIO的OUT2(映射编号34)端子连接到EIO24088-V2的IN8(映射编号40)上,操作OP(34)可见输入口40收到信号。
测试IO资源也可通过打开工程设置的EtherCAT配置测试总线扩展模块的IO资源。
(1)打开EIO24088-V2的界面;
(2)打开EIO24088-V2的输入输出口;
(3)将总线扩展EIO24088-V2上的OUT2和IN7相连,把OUT2打开后IN7也被置1说明IO正常。
2、测试脉冲轴
首先将对要测试的脉冲轴进行映射(初始化中已映射不需要),如测试EIO24088-V2的轴1。
AXIS_ADDRESS(7)=(0< <16)+1+1 'EtherCAT总线上的第二个驱动器,驱动器编号1,绑定为轴7
扩展模块的DRIVE_PROFILE配置为0,ATYPE设为65,但由于扩展是总线转脉冲型驱动器,轴类型并不是65,真实轴类型的配置使用SDO指令配置数据字典6011h设置。
SDO指令配置驱动器参数:
例如:扩展的脉冲轴的真实轴类型设置通过数据字典6011h设置,(参考下表的参数,按轴号依次设置,第一个驱动器设置数据字典6011h+0*800h,第二个驱动器设置6011h+1*800h,以此类推,每个驱动器加800h,其他参数同理)。
(1)输入输出:
(2)第一个扩展模块上第一个驱动器:
数据字典读取语法:
SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)
SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)
数据字典写入语法:
SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)
SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)
数据字典读写示例:
读写处于节点0的EIO24088-V2的轴1的轴类型。
SDO_WRITE(0, 0, $6011 + 1 * $800, 0, 5, 7) '设置EIO24088-V2的轴1的轴类型为7 SDO_READ(0, 0, $6011 + 1 * $800, 0, 5, -1) '将轴1的轴类型数据打印出来
确认好轴类型、脉冲模式,测试时先将UNITS(脉冲当量)、SPEED(运行速度)、ACCEL(加速度)、DECEL(减速度)设置小一些保证安全,若设置为自动使能(通过6013H的BIT8设置)检查轴使能(AXIS_ENABLE)是否置1,手动使能则需轴使能(AXIS_ENABLE)及对应轴使能输出口置1。
发送运动指令看电机是否正常运动(看DPOS和MPOS是否变化),后续再根据驱动器移动1mm或转动一圈的脉冲数填入UNITS,此时MOVE(1)即为移动1mm或转动一圈,SPEED的单位为mm/s或r/s。
注意:
如果手动运动时轴不移动但DPOS(指令位置)与MPOS(编码器反馈位置)在变化说明轴有移动但移动距离太短肉眼看不出来,可适当增加UNITS后再移动。
如果出现手动运动时轴只能向一个方向移动则需检查驱动器的轴类型及脉冲模式(通过驱动器手册或其软件知晓)和6011H及6012H中设置的轴类型和脉冲模式是否匹配,检查接线是否松动。
也可通过打开工程设置中的轴配置及EtherCAT配置测试总线扩展模块的总线转脉冲轴。
(1)选择需要测试的轴;
(2)设置合适的轴参数;
(3)自动同步轴参数;
(4)打开轴使能;
(5)通过正向运动或反向运动进行点动测试轴是否正常。
教学视频可点击→8轴/4轴的EtherCAT轴模块EIO24088-V2及EIO16084的使用(一):RTSys总线配置与使用查看。
本次,正运动技术8轴/4轴的EtherCAT轴模块EIO24088-V2及EIO16084的使用(一):RTSys总线配置与使用,就分享到这里。
更多精彩内容请关注“ 正运动小助手 ”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。
正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。正运动技术汇集了来自华为、中兴等公司的优秀人才,在坚持自主创新的同时,积极联合各大高校协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。主要业务有:运动控制卡_运动控制器_EtherCAT运动控制卡_EtherCAT控制器_运动控制系统_视觉控制器__运动控制PLC_运动控制_机器人控制器_视觉定位_XPCIe/XPCI系列运动控制卡等等。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !