视频教程:《运动控制器rtex总线使用入门》
运动控制器rtex总线使用入门
01 准备工作
一、材料准备
1.硬件
a.zmc460n控制器一台,带rtex总线接口。
b.松下rtex伺服驱动器+电机一套。
c.电脑一台。
d.带屏蔽层网线若干。
e.24v直流电源一个。
f.接线端子与连接线若干。
2.软件
a.zdevelop v3.10版本控制器编程软件。
从正运动官网www.zmotion.com.cn下载压缩包,解压后直接运行应用程序,无需安装。
b.松下伺服驱动器上位机调试软件。
从松下官网下载后安装。
二、硬件接线
1.控制器接线
控制器接口的用途参见下图。
a.主电源:将控制器主电源接线端子上的e+24v端子接入24v直流电源正极,将egnd端子接入24v直流电源负极。
b.以太网ethernet端口接线:使用一根网线将控制器的ethernet端口与电脑的以太网口相连。
c.rtex伺服驱动器与控制器接线:rtex总线用于接松下rtex伺服驱动器,rtex的接线方法参见下方的配置图。
rtex总线需要接两根线,tx为发送端、rx为接收端。tx需要连接至rx,rx需要连接至tx,所有的设备连接成一个回路,中间不允许断开。
使用一根网线将控制器的rtex总线的rx端口与伺服驱动器的tx端口相连,使用另一根网线将控制器的rtex总线的tx端口与伺服驱动器的rx端口相连。
配置图
连接多个rtex驱动器时,控制器的tx端口与第一个伺服驱动器的rx端口相连,第一个伺服驱动器的tx端口再连接第二个驱动器的rx端口,以此类推,最后一个驱动器的tx端口连接到控制器的rx端口,构成完整的通讯回路。
设备编号和驱动器编号按连接顺序自动从0开始编号,与ethercat总线编号规则相同。
2.驱动器接线
伺服驱动器与电机和编码器的接线参见驱动器手册,将驱动器接上电源。
02 软件连接方法
一、控制器与电脑网口通讯
控制器与电脑可以通过串口或网口连接,下面以网口连接例展开说明。
先将控制器与电脑用网线连接好,接通控制器的电源,再打开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地址,然后修改本机ip或控制器ip使二者处于同一网段。
二、驱动器软件与驱动器通信
修改驱动器参数先连接驱动器,可选usb线或wlan连接驱动器,这里使用usb线连接电脑与驱动器端的x1端口,给驱动器上电,打开松下驱动器软件panaterm,弹出“选择与驱动器通信”窗口,选择与驱动器通过usb连接后,自动获取到驱动器信息显示在窗口内,点击ok连接成功,就能与驱动器通信,读取驱动器的参数设置,对驱动器参数进行变更。
03 rtex总线驱动器
参数设置
一、驱动器参数修改
rtex修改驱动器参数类似ethercat,一是采用松下驱动器软件修改,二是使用指令修改,drive_read参数读取、drive_write参数写入,在总线开启后再使用指令修改,伺服参数的功能与设置参见松下rtex驱动器手册描述。
语法:drive_read(参数,数据存储到vr的位置)
语法:drive_write(参数,参数值)
参数写法:不同类型的参数读写语法不同
参数分类*256+参数编号(pr7.20=7*256+20)
参数=130,读取钳位的状态,bit0,bit1表示两个通道的状态
参数=$10000+(ssid)读取rtex驱动器系统信息,字符串存储在vrstring
参数=$20000+(报警功能码)+($1000*索引)读取报警信息
参数=$30000+(监视功能码)+($1000*索引)读取监视器信息
指令读写参数示例:
base(0) '选择轴0对应的驱动器
drive_write(7*256+11,6) '写pr7.11参数为6
drive_write(0*256+0,1) '写pr0.00参数为1
drive_read(0*256+0) '读pr0.00参数的值
drive_read(0*256+0) axis(1) '读pr0.00参数的值,axis指定轴号,不指定读取轴0
drive_read($10000+$01) '读取厂商名,不指定存储位置时,直接打印出来
驱动器修改参数示例:
电机的旋转方向可以通过参数pr0.00调整,可选择cw为正方向或选择ccw为正方向。下图选择ccw为正方向,即发送正方向的运动指令时,电机轴旋转方向为逆时针。
参数修改完成之后,电机eep按钮,将修改的参数写入驱动器的eeprom里,给驱动器重新上电参数生效。
电机旋转方向的定义:从负载侧的轴端看,顺时针为cw,逆时针为ccw。
pr0.00参数方向设置参考:
二、电子齿轮比
伺服电机电子齿轮比就是伺服对接收到的控制器脉冲频率进行放大或者缩小,比值大于1就是放大,比值小于1就是缩小,比值等于1时电机接受脉冲数等于控制器发出脉冲数。
电子齿轮比通过pr0.09与pr0.10的比值确定,电子齿轮比=pr0.09/pr0.10。
计算公式:电机接收的实际脉冲数=控制器发送脉冲数*电子齿轮比
例如:控制器发出脉冲10000个,电子齿轮比分子设为1,分母设为2,电子齿轮比为0.5,那么伺服实际运行按照5000个脉冲来进行。控制器发出脉冲10000个,电子齿轮比分子设为2,分母设为1,电子齿轮比为2,那么伺服实际运行按照20000个脉冲来进行。
松下rtex驱动器电子齿轮的比值在1/1000-8000倍的范围内有效,超出此范围驱动器报错。
电机旋转一圈的指令脉冲数通过pr0.08设置,如上图设为10000,表示发送10000个脉冲能使电机旋转一圈。
三、通讯周期
控制器的周期必须与驱动器周期一致才可以成功通讯,控制器周期出厂默认为1ms,通过升级固件修改控制器周期。
rtex总线驱动器的通讯周期目前有2种,0.5ms和1ms,通过设置驱动器参数p7.20和p7.21选择。
注意p7.21参数一定要设置为1,否则无法通讯。
驱动器的周期可以通过指令修改,也可以通过驱动器软件找到上述参数直接修改。
指令读写驱动器通讯周期示例:
'读取通讯周期,读取的数据存储在vr里
drive_read(7*256+20,0) 'pr7.20=7*256+20,rtex通讯周期:3-0.5ms,6-1ms
drive_read(7*256+21,1) 'pr7.21=7*256+21,rtex指令更新周期比:1
'修改通讯周期,修改完写入eeprom,重启生效
drive_write(7*256+20,servo_period/1000*6) 'pr7.20=7*256+20,rtex通讯周期:3-0.5ms,6-1ms
drive_write(7*256+21,1) 'pr7.21=7*256+21,rtex指令更新周期比:1
drive_write(128,1) '写eeprom,修改完成后需要断电
驱动器软件修改通讯周期示例:
连接驱动器软件,在参数窗口,找到参数分类7,修改pr7.20和pr7.21修改驱动器周期。
四、驱动器io映射
驱动器io映射需要先将drive_profile=1,表示带驱动器io映射(drive_profile=0不带驱动器io映射),然后使用drive_io指令设置驱动器io地址,映射的编号范围不要与总线上的其他设备的io编号重复。
映射完成,控制器就能通过映射的驱动器io编号,操作驱动器io电平。不映射无法通过控制器操作驱动器io。
drive_io (轴号)=输入输出io起始编号。
示例:
drive_profile(iaxis) = 1 '带驱动器io映射
drive_io(iaxis) = i_ionum '设定驱动器输入/输出io起始编号
驱动器的io操作,打开参数窗口的参数分类4,对输出输出的进行设定。
五、驱动器轴映射
rtex总线上连接的设备的设备号按照连接顺序从0开始自动编号,驱动器编号也是按连接顺序给驱动器设备自动从0开始编号的,只算总线上的驱动器设备,其他设备是没有驱动器编号的。
rtex总线上连接的驱动器需要使用指令映射驱动器的轴号,使用axis_address 指令映射,映射完成之后才能使用base指令选择驱动器轴号,发送脉冲,控制驱动器所连的电机运行。
轴映射写在总线初始化程序中,总线扫描之后,开启总线之前。
语法:axis_address(轴号)=(槽位号<<16)+驱动器编号+1
单总线控制器的总线槽位号缺省为0,即只支持rtex总线的控制器,rtex从槽位号是0。使用zmc460n时,由于是双总线控制器,ethercat总线槽位号为0,rtex的槽位号为1。轴号为驱动器映射的目标轴号,映射时每个驱动器的轴号不重复,指向空闲轴号即可。
示例:
'单总线rtex槽位号填0,双总线rtex槽位号为1。
axis_address (6)=(1<<16)+0+1 '第一个rtex驱动器,驱动器编号0,绑定为轴6
axis_address (7)=(1<<16)+1+1 '第二个rtex驱动器,驱动器编号1,绑定为轴7
axis_address (8)=(1< 从站节点映射轴/io -> slot_start(启动总线) -> 初始化成功
'*******************************************************************************
global sub rtex_init()
local node_num,temp_axis
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 '遍历扫描到的所有从站节点
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 = dirve_alias '轴号按驱动器设定的拨码分配(一拖多需要特殊处理)
'sub_setnodepara(node_num,temp_axis)
if return = false then
bus_initstatus = 0 '通讯周期不匹配
return
endif
base(temp_axis)
axis_address=(1<<16)+bus_totalaxisnum+1 '映射轴号
atype=50 '设置控制模式 50-位置 51-速度 52-转矩
disable_group(temp_axis) '每轴单独分组
bus_totalaxisnum=bus_totalaxisnum+1 '总轴数+1
next
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 50
'轴使能
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
endif
end sub
'**********************************从站节点特殊参数配置********************************
'通过drive_read/drive_write修改从站参数(具体参数查看驱动器手册)
'******************************************************************************************
global sub sub_setnodepara(inode,iaxis)
base(iaxis)
vr(0) = 0
vr(1) = 0
drive_read(7*256+20,0) '(pr7.20=7*256+20)rtex通讯周期 3-0.5ms 6-1ms
drive_read(7*256+21,1) '(pr7.21=7*256+21)rtex指令更新周期比 1
if (vr(0)/6 *1000 servo_period) or (vr(1) 1) then '判断驱动器周期和控制器周期是否匹配
?总线周期不匹配:,控制周期-,servo_period,轴号-,iaxis,伺服周期-,(vr(0)/6 *1000*vr(1))
'drive_write(7*256+20,servo_period/1000*6) '(pr7.20=7*256+20)rtex通讯周期 3-0.5ms 6-1ms
'drive_write(7*256+21,1) '(pr7.21=7*256+21)rtex指令更新周期比 1
'drive_write(128,1) '写eeprom,修改完成后需要断电
return false
endif
return true
end sub
二、总线状态查看
总线状态查看的前提是初始化操作成功,控制器与驱动器接线正确,否则无法查看以下信息。
1.在菜单栏“控制器”→“控制器状态”窗口查看“槽位1节点”,单总线控制器查看“槽位0节点”。
2.还可以通过在线命令发送?*rtex打印rtex总线上的全部设备信息。
3.在菜单栏“调试”→“总线状态诊断”打开如下窗口查看控制器所有总线槽位接口的设备信息。
实际运行效果参见视频尾部演示部分。
《运动控制器rtex总线使用入门》就讲到这里。更多学习视频及图文详解请关注我们的公众号“正运动小助手”。
本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。
可燃气体报警器设定点为何不是气体爆炸下限
如何才能使用低成本实现非接触式的数据交互
FPGA设计衍生时钟约束和时钟分组约束设置
振动传感器的作用及分类
美国思科完成收购光学芯片制造商Acacia
运动控制器RTEX总线使用入门
虹软开放平台“AI创造营”西安站落幕,深度赋能开发者、助力AI普惠化
如何设计一个小型嵌入式操作系统
基于ISP芯片的机床自动进给数控装置的设计
基于C语言模拟IIC总线来对I2C总线的理解
康佳展出了65英寸Mini LED背光电视,其峰值亮度超过2000nit
新Ubuntu 20.04默认附带Snap版本
如何量化高速ADC转换误差率的频率和幅度
SDRAM,DDR3,DDR2,DDR4,DDR1的区别对比及其特点分析
Arduino/树莓派/单片机/arm区别分析
第八届中国智能产业高峰论坛在成都成功举行
什么是区块链系统思维
iPhone 12大热助力台积电保持领先地位
MS4515DO压力传感器的驱动设计与实现
谷歌第二季营收215亿美元 同比增长超过20%