基于 EtherCAT的Simulink-Realtime松下伺服调试

概要

近期实验接触到松下A6家族的伺服电机控制器,经过一段时间的调试终于能够通过EtherCAT进行simulink-realtime的实时在线控制。调试过程不易,在此将调试思路以及调试方法进行一个总结,权当备忘。

关于松下A6伺服驱动

松下MBDLN25BE这款伺服驱动器是一款支持EtherCAT的总线伺服驱动器,能够进行位置控制、力矩控制以及速度控制。自带串口通信可以与上位机调试软件PANATERM进行基础的参数设置以及试运行功能。驱动自带多重安全防护、可以有效地避免意外操作对驱动器带来的损坏。

关于TwinCAT

TwinCAT3是倍福公司推出的一款EhterCAT配置工具,该软件可以在倍福公司官网直接下载TwinCAT3.利用这款软件可以配置倍福的板卡,生成simulink可以识别的ENI文件。如果没有倍福的板卡,使用其他的板卡也是可以使用TwinCAT3进行配置的。建议在安TwinCAT3之前先安装VisualStudio 2016。因为我们后期进行的EtherCAT配置都是基于VS环境下的,同时VS的版本不能太高,否则可能在运行Realtime编译的时候产生错误,提示找不到解释器

硬件环境的搭建

主机:Intel网卡,CPU
从机:双网卡:
伺服驱动:松下MBDLN25BE
电机:松下电机
主机通过ethercat连接从机,从机通过ethercat连接控制器。

TwinCAT的基础配置

在这里我们使用TwinCAT3来对我们的伺服驱EtherCat进行基础配置。需要注意的是与其他的很多教程不同,因为我们不是采用了专门的数据控制器(MATLAB新版本只支持SpeedGoat的IO模块因此最好采用低版本的MATLAB)在主机上我们不能扫描到从机的设备,因此我们使用从机进行驱动器的EtherCAT配置。在此之前我们需要设置主机和从机的网卡IP地址在一个网段,例如我在这里的配置:主机网卡192.168.10.1从机连接主机网卡192.168.10.3从机连接伺服网卡192.168.10.2

先将你的驱动的ESI文件拷贝到C:\TwinCAT\3.1\Config\Io\EtherCAT目录,
打开Twincat3新建一个project,点击如图所示的选项
在这里插入图片描述
创建成功后点击如图所示选项,会弹出一个网卡设备列表,选择与驱动器连接的网卡驱动进行安装即可。
在这里插入图片描述
安装完成后打开解决方案管理器,点击device,右键scan。如果可以扫描成功,就会弹出询问你是否添加box的对话框,点击是,然后会弹出模式选择对话框,选择NC模式。不启动freerun。添加成功后界面显示如下
在这里插入图片描述
此时可以进行设备的基础配置,我们点击MOTION选择我们控制的axis
在这里插入图片描述
如上图所示点击编码器设置,可以设置我们的电机精度以及螺距。之后点击other,可以设置为位置控制模式。
在这里插入图片描述
再点击Ctrl选项,设置位置 观测为false,否则开机会导致位置过大启动保护
在这里插入图片描述
完成上述设置后,可以电机如图按钮进行在线运行,这是一个测试步骤以验证你上述的配置是否是成功的。在这里插入图片描述
开始运行后双击Axis1,点开online选项卡就可以对电机进行实时的控制。
但是我们的配置并没有到这里就结束,我们还需要进行与sinmulink相关的配置;点击SYSTEM,选择tasks右键新建一个task,记得选择第二项,然后OK.
在这里插入图片描述
点击新建的task,选择inputs和outputs右键添加新项,然后再新建立的 项目双击点击linked to,这一步是为了把变量与我们的电机进行关联
在这里插入图片描述
之后双击新建的task,修改我们的一个控制频率。这里建议设置为1ms
在这里插入图片描述
然后依次点击MOTION下面的SAF以及SVB进行同样的设置。把他们的 频率设置为一致的。随后点击devices选择EterCAT选项就可以导出xml文件。
在这里插入图片描述

从机的搭建配置

首先下载一款DOS操作系统,使用一张容量不超过4GB的U盘,格式化为FAT32格式,使用写盘工具进行启动盘的制作。
启动盘制作完成后,将从机电脑BIOS设置为legacy引导 ,开启这一引导之前需要关闭secure boot选项。并且在bootlist中设置U盘为第一启动。
设置完成后插入U盘,开机系统将会自动进入DOS操作系统,进入成功后电脑将会显示当前的DOS信息。
在这里插入图片描述

上述DOS系统搭建完成后将U盘插入主机,启动matlab,在simulink下打开realtime-tools,进入从机配置环节。我们选中Target1,配置其IP地址以及子网掩码如图。
由于我们从机采用的是pci的网卡,所以第二项选择为pci,设备类型为auto。最后生成文件到移动设备。
在这里插入图片描述
拔出U盘后插入从机启动DOS系统,会自动出现MATLAB的relatime界面。如图,上面会提示当前使用的pci总线编号。请添加图片描述

simulink实时仿真

到上面我们的环境就算是真正搭建完成了,接下来在simulink中加入EtherCAT Init模块,双击选择我们生成的ENI文件,注意这里的pcibus并不是从机上matlab显示的总线号。而是我们从机连接驱动器的网卡总线号,这个可以通过从机的设备管理进行查询。如果输入的是matlab提示的总线号,那么运行时将会报错。
在这里插入图片描述
完成后点击下图所示按钮,选择模式为External,此时控制栏会发生变化。
在这里插入图片描述
设置我们的仿真参数如图,步长设置为1ms与我们的从机对应。将目标文件改为实时仿真文件。
在这里插入图片描述
在这里插入图片描述
完成后点击编译按钮download到我们的从机,点击连接,运行。如果没有报错就可以加入PDO模块进行数据的读写以及电机控制啦!

在这里插入图片描述

总结

搭建仿真平台的过程最需要注意的就是硬件和软件的支持问题,目前发现的华硕玩家国度的主板并不支持使用rufus制作的DOS操作系统,所以尽量选择老一些的主板。同时matlab版本不能太高,matlab2021已经不支持speedgoat以外的硬件环境了。同时选择合适版本的vs环境也非常重要,TwinCAT不能支持太高版本的vs,同时matlab 2019也不支持VisualStudio 2020,否则在realtime编译的时候会报错,提示版本不支持。

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例程序,演示如何在 IGH EtherCAT 控制器上使用松下伺服驱动器: ```csharp using System; using IGH.Communication; using IGH.EtherCAT; using IGH.EtherCAT.Common; using IGH.EtherCAT.Protocol; using IGH.EtherCAT.Protocol.Commands; using IGH.EtherCAT.Protocol.Types; namespace PanasonicServoExample { class Program { static void Main(string[] args) { // 创建一个 IGH EtherCAT 控制器实例 var controller = new EtherCATController(); // 打开 EtherCAT 总线 controller.Open(); // 获取松下伺服驱动器的 PDO 配置 var pdoConfig = controller.GetPDOConfiguration(0x607B); // 配置松下伺服驱动器的 PDO 映射 pdoConfig.MapObject(0x6040, 0, 2); // 控制字 pdoConfig.MapObject(0x607A, 0, 2); // 目标位置 pdoConfig.MapObject(0x6060, 0, 1); // 状态字 // 启用 PDO 映射 pdoConfig.EnableMapping(); // 获取松下伺服驱动器的状态字变量 var statusWord = pdoConfig.GetObject<UInt16Object>(0x6041, 0, 2); // 获取松下伺服驱动器的目标位置变量 var targetPosition = pdoConfig.GetObject<Int32Object>(0x607A, 0, 4); // 获取松下伺服驱动器的控制字变量 var controlWord = pdoConfig.GetObject<UInt16Object>(0x6040, 0, 2); // 设置松下伺服驱动器的控制字 controlWord.Value = 0x0006; // 设置为 "Enable Operation" 模式 // 启动 EtherCAT 通信 controller.Start(); // 等待 EtherCAT 通信启动完成 controller.WaitForStart(); // 控制松下伺服驱动器运动到指定位置 targetPosition.Value = 10000; // 设置目标位置为 10000 controlWord.Value = 0x001F; // 设置为 "Move To Target Position" 模式 // 等待松下伺服驱动器到达目标位置 while ((statusWord.Value & 0x6041) != 0x6041) { } // 停止 EtherCAT 通信 controller.Stop(); // 关闭 EtherCAT 总线 controller.Close(); } } } ``` 需要注意的是,以上示例程序仅用于演示目的,实际应用中需要根据具体情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值