运动控制器RTEX总线使用入门

供稿:深圳市正运动技术有限公司

  • 关键词:正运动技术,运动控制器,RTEX总线
  • 摘要:运动控制器RTEX总线使用入门


01准备工作


一、材料准备

1.硬件


A.ZMC460N控制器一台,带RTEX总线接口。


B.松下RTEX伺服驱动器+电机一套。


C.电脑一台。


D.带屏蔽层网线若干。


E.24V直流电源一个。


F.接线端子与连接线若干。


2.软件


A.ZDevelop V3.10版本控制器编程软件。


从正运动官网www.zmotion.com.cn下载压缩包,解压后直接运行应用程序,无需安装。


B.松下伺服驱动器上位机调试软件。


从松下官网下载后安装。


image.png


二、硬件接线

1.控制器接线

控制器接口的用途参见下图。


image.png


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端口相连。


image.png


连接多个RTEX驱动器时,控制器的TX端口与第一个伺服驱动器的RX端口相连,第一个伺服驱动器的TX端口再连接第二个驱动器的RX端口,以此类推,最后一个驱动器的TX端口连接到控制器的RX端口,构成完整的通讯回路。


设备编号和驱动器编号按连接顺序自动从0开始编号,与EtherCAT总线编号规则相同。


2.驱动器接线


伺服驱动器与电机和编码器的接线参见驱动器手册,将驱动器接上电源。


02软件连接方法


一、控制器与电脑网口通讯

控制器与电脑可以通过串口或网口连接,下面以网口连接例展开说明。


先将控制器与电脑用网线连接好,接通控制器的电源,再打开ZDevelop编程软件,点击菜单栏“控制器”→“连接”,打开“连接到控制器”窗口。


image.png


通过“连接到控制器”窗口,可以快速查看本机IP,对比控制器与电脑是否处于同一网段。


IP地址列表下拉选择时,会自动查找当前局域网可用的控制器IP地址(控制器上电POWER灯和RUN灯亮的时候就能查找到该控制器的IP地址)。


同一个网络有多个控制器的时候,IP的下拉列表若没有显示目标控制器的IP地址,可以采取IP扫描来查看当前所有可用的控制器IP地址,扫描完成之后确定关闭此窗口,重新在IP下拉列表选择。


image.png


选择正确的IP地址,点击连接之后,编程软件与控制器连接成功,在线命令与输出窗口打印信息提示。




控制器出厂的缺省IP地址为192.168.0.11,“连接到控制器”窗口能显示出本机IP地址,请注意设置有线网卡与无线网卡各自的IP。电脑需要设置IP地址与控制器IP处于同一网段才能连接,即四段的前三段要相同,最后一段不同才能通讯。


若控制器与电脑不处于同一网段,则需要修改控制器或电脑其中之一的IP地址,使二者处于同一网段。


修改控制器IP地址需要先使用串口连接控制器,获取控制器IP地址,然后修改本机IP或控制器IP使二者处于同一网段。


二、驱动器软件与驱动器通信

修改驱动器参数先连接驱动器,可选USB线或WLAN连接驱动器,这里使用USB线连接电脑与驱动器端的X1端口,给驱动器上电,打开松下驱动器软件PANATERM,弹出“选择与驱动器通信”窗口,选择与驱动器通过USB连接后,自动获取到驱动器信息显示在窗口内,点击OK连接成功,就能与驱动器通信,读取驱动器的参数设置,对驱动器参数进行变更。


image.png


03RTEX总线驱动器

参数设置


一、驱动器参数修改

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)    '读取厂商名,不指定存储位置时,直接打印出来


image.png


驱动器修改参数示例:


电机的旋转方向可以通过参数Pr0.00调整,可选择CW为正方向或选择CCW为正方向。下图选择CCW为正方向,即发送正方向的运动指令时,电机轴旋转方向为逆时针。


参数修改完成之后,电机EEP按钮,将修改的参数写入驱动器的EEPROM里,给驱动器重新上电参数生效。


image.png


电机旋转方向的定义:从负载侧的轴端看,顺时针为CW,逆时针为CCW。


image.png


PR0.00参数方向设置参考:


image.png


二、电子齿轮比

伺服电机电子齿轮比就是伺服对接收到的控制器脉冲频率进行放大或者缩小,比值大于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倍的范围内有效,超出此范围驱动器报错。


image.png


电机旋转一圈的指令脉冲数通过Pr0.08设置,如上图设为10000,表示发送10000个脉冲能使电机旋转一圈。

三、通讯周期

控制器的周期必须与驱动器周期一致才可以成功通讯,控制器周期出厂默认为1ms,通过升级固件修改控制器周期。


Rtex总线驱动器的通讯周期目前有2种,0.5ms和1ms,通过设置驱动器参数P7.20和P7.21选择。


image.png


注意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修改驱动器周期。


image.png


四、驱动器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,对输出输出的进行设定。


image.png


五、驱动器轴映射

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<<16)+2+1  '第三个RTEX驱动器,驱动器编号2,绑定为轴8


ATYPE(6)=50              '设置为RTEX轴类型,50-位置 51-速度 52-转矩


ATYPE(7)=50


ATYPE(8)=50


六、驱动器控制模式

RTEX总线的控制模式有三种,使用ATYPE指令设置,ATYPE=50位置模式,ATYPE=51速度模式,ATYPE=52力矩模式。

image.png


RTEX周期力矩模式,需RTEX控制器请先关闭驱动器2自由度控制模式,并设置设置速度限制。


位置模式采用运动指令控制轴运动,速度和力矩模式采用DAC指令控制轴运动,速度与力矩模式下切换其他模式的时候先将DAC置0,再修改ATYPE的值,防止发生事故。 


控制模式由参数Pr0.01设定,选择0半闭环控制,此时可以使用ATYPE指令切换控制器的控制模式,例如位置、速度和力矩模式。

image.png


1.ATYPE=50位置模式


设置好轴参数,使用运动控制器指令控制电机运行。


image.png


2.ATYPE=51速度模式


速度模式下使用DAC指令设置电机的运行速度,并持续运行,此模式下不能使用运动指令,故无需设置轴参数,将DAC=0停止运行。


速度模式下若要切换模式,为防止事故,先将DAC置0后再使用ATYPE指令切换。

image.png


RTEX速度模式下,通过参数Pr7.25设定速度单位,值为0对应单位:r/min,值为1对应单位:指令单位/s。


image.png


速度模式使用DRIVE_READ读取速度的单位,如下图值为0,此时单位是r/min。DRIVE_READ读取不填参数保存地址时直接打印出来。

image.png


3.ATYPE=52力矩模式


修改ATYPE切换到力矩模式之前,请先将驱动器参数Pr6.47的第一位置为0,关闭2自由度控制模式。


再通过参数Pr3.17设置速度限制,如下图(参照松下Rtex手册)。Pr3.17(速度限制选择)的设定值是0时,通过Pr3.21设置速度限制,设定值是1时,可以通过SL_SW切换转矩控制时的速度限制值。


image.png


image.png


DRIVE_WRITE指令设置参考:按轴号依次设置


DRIVE_WRITE(6*256+47,0) AXIS(0)  'Pr6.47设为0,关闭2自由度控制模式


DRIVE_WRITE(3*256+17,0) AXIS(0)  'Pr3.17速度限制选择设为0,通过Pr3.21设置速度限制


DRIVE_WRITE(3*256+21,5000) AXIS(0) 'Pr3.21速度限制设为5000


DRIVE_READ指令读取驱动器设置情况:


image.png


将所有参与运动的轴均按照以上参数设置完成,就可以切换力矩模式,使用DAC指令发送力矩控制电机持续运行,此模式下不能使用运动指令,故无需设置轴参数,将DAC=0停止运行。


力矩模式下若要切换模式,为防止事故,先将DAC置0后再使用ATYPE指令切换。 


image.png


七、驱动器回零

RTEX总线可使用控制器提供的回零方式DATUM(mode),mode模式值选择查看ZBasic编程手册的DATUM指令。RTEX总线也可以使用驱动器本身的回零模式。


驱动器本身回零使用DATUM(21,mode2)指令,mode2模式值要查驱动器手册,mode2填入对应驱动器回零模式值,见下表松下驱动器提供的回零模式,注意此时的原点限位等信号要接在驱动器上,并使用指令设置这些特殊信号对应的IO口,所以要使用驱动器回零时需要对驱动器的IO进行映射。


语法:DATUM(21,$11)    '按驱动器当前回零模式开始回零


RTEX总线驱动器回零模式

image.png


八、驱动器报警

观察驱动器上LED面板上是否有报错信息,报错会显示错误码,根据驱动器手册排查错误,修正后将报警清零。


image.png


若控制器连接了ZDevelop软件,驱动器报错时,AXISSTATUS轴状态提示错误信息。


打开驱动器软件的报警窗口,也能看当前驱动器是否有警报,或查询历史警报。


image.png


04RTEX总线

初始化程序


一、初始化程序

RTEX总线上连接的电机需要编写一段RTEX总线初始化程序来进行使能。使能之后的应用与脉冲电机一致,运动指令都是相同的。


初始化程序一般过程:


1.使用SLOT_SCAN扫描设备,判断RETURN是否正确,未连接设备时会报错。


2.通过NODE_INFO/ NODE_AXIS_COUNT等对设备类型、信息等进行判断。


3.依次设置AIXS_ADDRESS,ATYPE,DRIVE_PROFILE,DRIVE_IO等。


4.SLOT_START启动设备。


5.建立连接后主站和从站即可进行周期性数据交换。


RTEX初始化程序与EtherCAT总线初始化类似,初始化参考程序如下:


'***************************RTEX总线初始化

global CONST MAX_AXISNUM =60        '最大轴数

global CONST Bus_Slot  = 1          '槽位号0(单总线控制器缺省0)

global CONST PUL_AxisStart   = 0    '本地脉冲轴起始轴号

global CONST PUL_AxisNum   = 0      '本地脉冲轴轴数量

global CONST Bus_AxisStart   = 0    '总线轴起始轴号

global CONST Bus_NodeNum   = 2      '总线配置节点数量,用于判断实际检测到的从站数量是否一致


global Bus_InitStatus      '总线初始化完成状态

Bus_InitStatus = -1

global  Bus_TotalAxisnum   '检查扫描的总轴数


delay(3000)                '延时3S等待驱动器上电,具体根据驱动器调整延时


?"总线通讯周期:",SERVO_PERIOD,"us"

Rtex_Init()                  '初始化RTEX总线 


while (Bus_InitStatus = 0)    '重新初始化

  Rtex_Init()

wend


end

'*******************************RTEX总线初始化********************************

'初始流程:  slot_scan(扫描总线) ->   从站节点映射轴/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节点”。

image.png


2.还可以通过在线命令发送?*RTEX打印RTEX总线上的全部设备信息。


image.png


3.在菜单栏“调试”→“总线状态诊断”打开如下窗口查看控制器所有总线槽位接口的设备信息。


image.png


实际运行效果参见视频尾部演示部分。


《运动控制器RTEX总线使用入门》就讲到这里。更多学习视频及图文详解请关注我们的公众号“正运动小助手”。


本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

发布时间:2021年8月3日 13:40  人气:   审核编辑(王静 )
更多内容请访问(深圳市正运动技术有限公司
相关链接

我有需求