本节主要介绍xplc006e多轴经济型ethercat总线运动控制器控制ethercat总线驱动器的方法,分别介绍硬件接线方法,控制器与ethercat总线驱动器如何通讯,ethercat总线驱动器相关参数的配置,ethercat总线初始化操作,以及初始化成功以后的运动控制。
一、xplc006e功能简介 xplc006e是正运动运动控制器推出的一款多轴经济型ethercat总线运动控制器,xplc系列运动控制器可应用于各种需要脱机或联机运行的场合。
xplc006e自带6个电机轴,最多12轴运动控制(含虚拟轴数),支持12轴直线插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等功能。
xplc006e支持多任务同时运行,同时可以在pc上直接仿真运行,编程方式多种可选,支持zdevelop软件的basic/plc梯形图/hmi组态和常用上位机软件编程。
xplc006e只支持ethercat总线轴,不支持脉冲轴和编码器轴。采用ethercat总线与驱动器通讯,1ms的刷新周期。
xplc006e支持plc、basic、hmi组态三种编程方式。pc上位机api编程支持c#、c++、labview、vb、matlab、qt、linux、.net、imac、python、 ros等接口。
→此款产品有xplc004e、xplc006e、xplc008e三个不同轴数的型号可选。
二、xplc864e功能简介 xplc864e在xplc006e的功能基础上做了升级(即上节介绍的xplc006e的功能都支持),部分资源空间优于xplc006e,使用方法基本一致,不同之处在于xplc864e,硬件支持32点输入、32点输出、2个adc、2个dac,支持脉冲轴和总线轴混合使用,总实轴轴数为8,除了带ethercat接口之外,输出口硬件上可配置为8个轴的脉冲方向信号输出,另带两路编码器输入,可由输入口配置。
xplc864e支持plc、basic、hmi组态三种编程方式。pc上位机api编程支持c#、c++、labview、vb、matlab、qt、linux、.net、imac、python、 ros等接口。
三、通讯接线 1.ethercat总线接线 使用一根网线将xplc006e控制器的“ethercat总线端口”与“伺服驱动器的ethercat总线端口”相连即可。
注意:伺服驱动器的ethercat接口有两个,有些驱动器这两个口可以随意接,有些分为“ethercat in”和“ethercat out”,in口接上一级设备,out口接下一级设备,二者不能混用,要注意连接顺序。
多轴控制时伺服驱动器的ethercat out口再连接下一级驱动设备的ethercat in口,依此类推。
slot槽位编号、node节点编号和驱动器编号规则如上图所示,ethercat总线接口的槽位号默认是0,节点编号按照与控制器的连接先后顺序从0开始依次编号,驱动器编号则是只给带电机设备编号,其他类型设备忽略,也是按连接顺序从0开始编号,这些编号在总线指令中将会用到。
硬件接线完成还需运行总线初始化程序才能与驱动器通讯,初始化模板程序参见下文。
注意:使用ethercat总线扩展模块时,也要执行总线初始化操作,再映射io的编号后才可操作扩展io。
2.控制器与电脑连接 控制器与电脑可以通过串口或网口连接,下面以网口连接例展开说明。
先将控制器与电脑用一根网线连接好,接通控制器的电源,再打开zdevelop编程软件,点击菜单栏“控制器”→“连接”,打开“连接到控制器”窗口。
通过“连接到控制器”窗口,可以快速查看本机ip,对比控制器与电脑是否处于同一网段。
ip地址列表下拉选择时,会自动查找当前局域网可用的控制器ip地址(控制器上电power灯和run灯亮的时候就能查找到该控制器的ip地址)。
同一个网络有多个控制器的时候,ip的下拉列表若没有显示目标控制器的ip地址,可以采取ip扫描来查看当前所有可用的控制器ip地址,扫描完成之后确定关闭此窗口,重新在ip下拉列表选择。
选择正确的ip地址,点击连接之后,连接成功或失败均有信息提示。
控制器出厂的缺省ip地址为192.168.0.11,“连接到控制器”窗口能显示出本机ip地址,请注意设置有线网卡与无线网卡各自的ip。电脑需要设置ip地址与控制器ip处于同一网段才能连接,即四段的前三段要相同,最后一段不同才能通讯。
若控制器与电脑不处于同一网段,则需要修改控制器或电脑其中之一的ip地址,使二者处于同一网段。
若控制器ip地址遗忘,可通过网口连接控制器,再获取控制器ip。
四、ethercat总线驱动器通讯说明 1.通讯周期 使用ethercat伺服驱动器时需要保证控制器与伺服周期一致才可正常通讯使用。
ethercat伺服驱动器一般支持不同周期,通讯周期主要有250us,500us,1ms,2ms,4ms,连接时自动匹配控制器周期,不需要设置,当通讯周期无法自动匹配时,通讯失败,通过修改控制器周期解决(servo_period指令或升级固件修改)。
控制器一般默认为1ms,使用servo_period指令读取控制器周期。伺服周期越小,位置控制越精细,响应速度也更快。
2.驱动器pdo设置 驱动器的pdo是必要的配置,代表着当前驱动器包含的功能。
pdo全名为(process data object),指在ethercat总线网络中周期的进行主站与从站的数据交互的功能,可以看作一个数组空间,每个数组元素存放了不同的功能码,pdo在一个周期中执行这些功能码对应的操作,这些功能码就叫做数据字典,数据字典用4位16进制数来表示。
rxpdo:主站传送数据给从站。
txpdo:从站传送数据给主站。
ethercat总线上控制器为主站,伺服驱动器为从站。
如6040h控制字(用于控制伺服轴的使能、启动、停止、报警、复位等运行状态),每个数据字典index可包含32个子字典sub-index。数据字典的功能和初始值查看驱动器手册的描述。
数据字典的编号及功能是协议本身就确定好的,用户只需按照数据字典的描述设置数据字典的bit位,所有的标准ethercat设备都使用一套数据字典。
松下a6b伺服驱动器的ethercat相关说明内容可查看松下文档《技术资料-ethercat通讯规格篇》。
ethercat初始化过程中必须进行驱动器pdo配置,“drive_profile”指令配置驱动器的pdo列表,目前提供约20几种配置选择,每种配置包含哪些数据字典查看该指令说明确认,如下图,具体内容可以在《zbasic编程手册》中查看。
drive_profile=-1表示驱动器的内置缺省pdo列表,驱动器内置pdo列表包含哪些数据字典需要查看驱动器手册。
drive_profile已有的配置不能满足需求就自定义pdo,采用sdo相关指令操作数据字典配置驱动器需要的pdo。
驱动器的相关参数修改,同样使用sdo指令读写对应的数据字典进行配置或通过驱动器软件修改。sdo指令包含数据字典读取“sdo_read”、“sdo_read_axis”和数据字典写入“sdo_write”、“sdo_write_axis”。
(1)数据字典读取语法
sdo_read (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储table位置)
sdo_read_axis (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储table位置)
(2)数据字典写入语法
sdo_write (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)
sdo_write_axis (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)
自定义pdo的配置方法请咨询正运动的销售工程师或者技术工程师。
3.驱动器参数设置 可使用驱动器软件修改,或控制器端操作sdo指令修改。修改驱动器参数先连接驱动器,可选usb线或wlan连接驱动器,使用usb线连接电脑与驱动器端的x1端口,给驱动器上电。
打开松下驱动器软件panaterm,弹出“选择与驱动器通信”窗口,选择与驱动器通过usb连接后,自动获取到驱动器信息显示在窗口内,点击ok连接成功,就能对驱动器进行设置。
点击菜单栏“显示”→“对象编辑器”,打开如下窗口,找到需要设置的数据字典,在“setting value”一栏直接修改数据字典的内容。
修改完成将参数传送给驱动器,并写入驱动器的eeprom,驱动器再次上电后参数生效。
例:设置units脉冲当量,即设置电机转一圈需要发送多少个脉冲。
speed速度、accel加速度、decel减速度和运动指令等都是以units为基本单位。
如上图,通过数字字典6091h设置电子齿轮比,6091h-01h设置电子齿轮比分子,6091h-02h设置电子齿轮比分母,此时,电子齿轮比=1/1,6092h-01h设为10000表示给电机发10000个脉冲能使电机旋转一圈,对应的脉冲当量units=10000,move(2)表示给电机发送20000个脉冲,此时电机转两圈。
或者使用sdo指令读写数据字典修改参数。修改完成使用驱动器软件读取6092h-01h的值为10000。
示例:
sdo_write(bus_slot,inode,$6091,1,7,1) '电子齿轮比分子sdo_write(bus_slot,inode,$6091,2,7,1) '电子齿轮比分母sdo_write(bus_slot,inode,$6092,1,7,10000) '电机一圈脉冲数 4.驱动器io信号 若要使用驱动器的io口,才会涉及到驱动器的io映射操作,否则忽略。当驱动器产生io报警时,可根据驱动器手册的提示,修改io的设定值。
驱动器自身有输入信号,作用为保护信号,默认使能状态,若不接入外部信号,驱动器就会保护报错,调试阶段可以关闭这些信号方便调试,将输入值设置为0即可,需要使用驱动器io时要对驱动器的io编号映射后才能使用,后续根据实际需求接入实际信号。
点击驱动器软件panaterm主界面的“参数”按钮打开下方窗口,选中要修改的io信号后,在“设定值”一栏修改。
驱动器io映射需要pdo包含数据字典60fdh,然后使用drive_io指令设置驱动器io地址,映射的编号范围不要与总线上的其他设备的io编号重复。
drive_io (轴号)=输入输出io起始编号。
示例:
drive_profile(iaxis) = 5 '设定对应的带io映射的pdo模式drive_io(iaxis) = i_ionum '设定驱动器输入/输出io起始编号 5.参数写入驱动器 可使用驱动器软件修改,或控制器端操作sdo指令修改。
驱动器的数据字典参数或其他的参数设置完成后,先点击“传送”将修改的全部参数传入驱动器,再点击eep,将参数写入驱动器的eeprom,给驱动器重新上电后修改的参数生效,图片上值修改了输入参数,在上图参数一览中可参看多中类别的参数并修改。
6.驱动器轴号映射 ethercat总线驱动电机设备连上控制器之后,驱动器轴号需要使用指令映射绑定。
ethercat总线上连接的设备的设备号按照连接顺序从0开始自动编号,驱动器编号也是按连接顺序给驱动器设备自动从0开始编号的,只算总线上的驱动器设备,其他设备是没有驱动器编号的。
ethercat总线上连接的驱动器需要使用指令映射驱动器的轴号,使用axis_address 指令映射,映射完成之后才能使用base指令选择驱动器轴号,发送脉冲,控制驱动器所连的电机运行。
轴映射写在总线初始化程序中,总线扫描之后,开启总线之前。
语法:axis_address(轴号)=(槽位号<<16)+驱动器编号+1
ethercat总线的槽位号是0。轴号为驱动器映射的目标轴号,映射时每个驱动器的轴号不重复,指向空闲轴号即可。
示例:
axis_address (6)=(0<<16)+0+1 '第一个ecat驱动器,驱动器编号0,绑定为轴6axis_address (7)=(0<<16)+1+1 '第二个ecat驱动器,驱动器编号1,绑定为轴7axis_address (8)=(0< 从站节点映射轴/io -> slot_start(启动总线) -> 初始化成功'****************************************************************************global sub ecat_init()local node_num,temp_axis,drive_vender,drive_device,drive_aliasrapidstop(2)wait idle(0)for i=0 to max_axisnum - 1 '初始化还原轴类型axis_enable(i) = 0atype(i)=0axis_address(i) =0delay(10) '防止所有驱动器全部同时切换使能导致瞬间电流过大nextbus_initstatus = -1slot_stop(bus_slot)delay(200) '延时时间可以按需调整,确保驱动器已上电可以等待ethercat到位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 '初始化失败。报警提示'returnendif'开始映射轴号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) '读取设备拨码idif 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(temp_axis)= (bus_slot<<16)+ bus_totalaxisnum + 1 '映射轴号atype=65 '设置控制模式 65-位置 66-速度 67-转矩drive_profile=-1 '配置为驱动器内置pdo列表,可改为1,-1,等参数 '配置为驱动器内置pdo列表' sub_setdriverio(drive_vender,temp_axis,128 + 32*temp_axis) '映射驱动器io io映射到控制器io32-以后每个驱动器间隔32点' sub_setnodepara(node_num,drive_vender,drive_device,j) '设置特殊总线参数disable_group(temp_axis) '每轴单独分组bus_totalaxisnum=bus_totalaxisnum+1 '总轴数+1nextelse 'io扩展模块sub_setnodeio(node_num,drive_vender,drive_device,1024 + 32*node_num) '映射扩展模块ioendifnext?轴号映射完成,连接总轴数:bus_totalaxisnumdelay(200)slot_start(bus_slot) '启动总线if return then'?开始清除驱动器错误for i= bus_axisstart to bus_axisstart + bus_totalaxisnum - 1base(i)drive_clear(0)delay 50'?驱动器错误清除完成datum(0) '清除控制器轴状态错误wa 100wdog=1 '使能总开关'轴使能axis_enable=1nextbus_initstatus = 1?轴使能完成'本地脉冲轴配置for i = 0 to pul_axisnum - 1base(pul_axisstart + i)axis_address = (-1<<16) + iatype = 4next?总线开启成功else?总线开启失败bus_initstatus = 0endifelse?总线扫描失败bus_initstatus = 0endifend sub (2)驱动器io映射(需要使用驱动器io时才映射,否则不用映射)
' ************************总线驱动io映射**************************************'通过drive_io指令映射驱动器对象字典中60fd,60fe输入输出状态,要设置正确的drive_profilee或者pod后才可以正常映射'drive_profile模式包含60fd/60fe'iaxis - 轴号 ivender - 驱动器类型 i_ionum - 输入输出起始编号' **************************************************************************global sub sub_setdriverio(ivender,iaxis,i_ionum)if ivender = $66f then '松下驱动器drive_profile(iaxis) = 5 '设定对应的带io映射的pdo模式drive_io(iaxis) = i_ionumrev_in(iaxis) = i_ionum '负限位应60fd bit0fwd_in(iaxis) = i_ionum + 1 '正限位先对应60fd bit1datum_in(iaxis) = i_ionum + 2 '原点先对应60fd bit2invert_in(i_ionum,on) '特殊信号有效电平反转invert_in(i_ionum + 1,on)invert_in(i_ionum + 2,on)endifend sub (3)扩展模块io映射(连接了扩展模块才设置)
' ***********************总线io扩展模块映射**************************************'通过node_io(bus_slot,node_num)分配模块io起始地址' *******************************************************************************global sub sub_setnodeio(inode,ivender,idevice,i_ionum)if ivender = $41b and idevice = $130 then '正运动eio1616mtnode_io(bus_slot,inode) = i_ionumendifend sub (4)特殊参数配置
' ********************************从站节点特殊参数配置********************************'通过sdo方式修改对应对象字典的值修改从站参数(具体对象字典查看驱动器手册)' ******************************************************************************************************global sub sub_setnodepara(inode,ivender,idevice,iaxis)if ivender = $41b and idevice = $1ab0 then '正运动24088脉冲扩展轴sdo_write(bus_slot,inode,$6011+iaxis*$800,0,5,4) '设置扩展脉冲轴atype类型sdo_write(bus_slot,inode,$6012+iaxis*$800,0,6,0) '设置扩展脉冲轴invert_step脉冲输出模式node_io(bus_slot,inode) = 32 + 32*inode '设置240808上io的起始映射地址elseif ivender = $66f then '松下驱动器sdo_write(bus_slot,inode,$3741,0,3,0) '以拨码为idsdo_write(bus_slot,inode,$3401,0,4,$10101) '正限位电平 $818181sdo_write(bus_slot,inode,$3402,0,4,$20202) '负限位电平 $828282sdo_write(bus_slot,inode,$6091,1,7,1) '电子齿轮比分子sdo_write(bus_slot,inode,$6091,2,7,1) '电子齿轮比分母sdo_write(bus_slot,inode,$6092,1,7,10000) '电机一圈脉冲数sdo_write(bus_slot,inode,$607e,0,5,0) '电机正转0 反转224sdo_write(bus_slot,inode,$6085,0,7,4290000000) '异常减速度'sdo_write(bus_slot,inode,$1010,1,7,$65766173) '写epprom(写epprom后驱动器需要重新上电)'?写eppr0m ok 请断电重启endifend sub ethercat初始化成功后会打印信息提示,如下。若初始化失败也会打印信息提示。
3.总线节点状态查看 ethercat总线上连接的设备信息有如下三种查看方法。查看总线状态的前提是初始化操作成功,否则无法查看。
(1)在菜单栏“控制器”→“控制器状态”窗口查看“槽位0节点”。
(2)在菜单栏“调试”→“总线状态诊断”打开如下窗口查看控制器总线槽位接口的设备信息。
(3)还可以通过在线命令发送“?*ethercat”打印ethercat总线上的全部设备信息。
4. ethercat总线驱动器控制效果 初始化成功后,将各个总线轴依此回零,配置好轴参数之后,就可以使用指令让总线轴按需求动作。
在程序中写入运动指令、在线命令发送运动指令或使用“手动运动”窗口控制电机运行。
示波器采集轴参数波形:
使用“手动运动”功能快速手动操作电机运动,运动前先设置左侧轴参数。
5.ethercat总线初始化演示
本次,正运动技术经济型ethercat运动控制器(十):ethercat总线快速入门,就分享到这里。
美光科技发布2020财年第二财季财报 疫情或带动DRAM平均售价
还没搜就刷到了?
光导纤维导光的基本原理
FreeRTOS代码剖析之1:内存管理Heap
《环球时报》对话倪祖根:企业发展要内外兼修,创业者应以身作则
EtherCAT总线快速入门
关于AI框架中图层IR的分析
“全大核魔法”炼成!天玑9300安兔兔跑分超205万顶破天花板了!
以市场为导向,西井科技在港口无人驾驶商业化落地中领先
什么是浪涌保护器的接地导通?
一款新型声光控LED节能灯系统的设计方案
2020年智能电视机大屏运营将有望迎来新的高点
亚信推出最新AxRobot EtherCAT七轴助力控制机器手臂解决方案
全液压转向器原理
使用钽电容时有什么注意事项
无人驾驶汽车未尘埃落地 飞行汽车已跃跃欲试
谷歌用1.7亿美元摆平YouTube非法收集儿童的个人信息
BMC模具制品打孔和毛边设计方案的介绍
焊道的类型有哪些
VRLA蓄电池的特点及在光伏离网发电系统中的解决方案