新闻详情

新闻详情

首页 / 资讯中心 / 详情

RK3588上CODESYS与EtherCAT多轴控制实战指南

发布时间:2026/9/28 12:40:04来源:尧图网络
RK3588上CODESYS与EtherCAT多轴控制实战指南
1. 为什么要在RK3588上折腾CODESYS加EtherCAT1.1 这套组合到底解决什么问题先说结论RK3588这颗芯片做工业控制器性价比高得离谱。八核A76A55架构主频能跑到2.4GHz自带NPU和丰富的外设接口价格却只有传统工控主板的三分之一甚至更低。而CODESYS是工业自动化领域里少数几个真正把IEC 61131-3标准吃透的软PLC运行时支持IL、LD、FBD、SFC、ST、CFC六种编程语言还能直接跑EtherCAT主站协议栈。把这两者捏在一起你得到的就是一台成本可控、性能过剩、开发灵活的多轴运动控制器。我最初接触这个方案是因为一个六轴机械臂项目。客户预算卡得很死传统方案用倍福或者汇川的PLC光控制器就要大几千加上EtherCAT伺服驱动器整套下来成本压不住。后来发现RK3588开发板跑Linux再装CODESYS Runtime配合EtherCAT主站完全能替代大部分中低端PLC的场景。实测下来控制周期做到1ms甚至500μs都没问题带8个伺服轴同步运行CPU占用率还不到30%。这套方案适合谁我总结了几类人一是做非标自动化设备的小团队预算有限但需要多轴联动二是搞机器人控制的开发者想用软PLC替代传统的运动控制卡三是工控领域的学生或者爱好者想低成本搭建一套EtherCAT实验平台。如果你属于以上任何一类这篇内容应该能帮你省下不少试错时间。1.2 整体方案架构长什么样整个系统的架构其实不复杂我画不了图但可以用文字描述清楚。最底层是RK3588开发板跑的是望获Linux或者Ubuntu 22.04 for Rockchip。操作系统之上你需要装两个核心组件一个是CODESYS Runtime for Linux ARM64这是软PLC的运行环境另一个是EtherCAT主站协议栈CODESYS自带EtherCAT Master但需要内核层面的支持。再往上就是你的PLC程序了用CODESYS Development System在Windows上写好编译后下载到RK3588的Runtime里运行。EtherCAT从站这边可以是汇川的伺服驱动器、倍福的IO模块或者任何支持EtherCAT协议的设备。整个通信链路是CODESYS Runtime通过网口发送EtherCAT帧经过从站设备再返回形成一个闭环。这里有个关键点RK3588通常有两个千兆网口我建议把其中一个专门分配给EtherCAT用另一个用来做调试和远程访问。EtherCAT对实时性要求高如果和SSH、VNC这些流量混在一起抖动会很明显。我试过用同一个网口跑EtherCAT和NFS结果控制周期直接从1ms抖到3ms伺服电机都能听出异响。1.3 为什么选望获Linux而不是标准Ubuntu望获Linux是瑞芯微官方支持的发行版内核版本通常是5.10或者6.1已经打好了RK3588的各种驱动补丁包括GPU、VPU、NPU、网口、USB这些。你如果自己移植标准Ubuntu 22.04光调网口和PCIe就得花好几天。望获Linux的好处是开箱即用烧录完镜像网口、串口、HDMI都能正常工作省去了大量底层调试时间。但望获Linux也有坑。它的内核默认配置里有些实时性相关的选项没开比如PREEMPT_RT补丁、高精度定时器、CPU隔离这些。如果你直接跑CODESYS控制周期可能会不稳定。我的做法是重新编译内核把CONFIG_PREEMPT_RT打开再把EtherCAT需要的网卡驱动编进去。具体步骤后面会详细说。另外望获Linux的根文件系统比较精简很多开发工具没装。你需要自己装gcc、make、cmake、git这些基础工具还有CODESYS Runtime依赖的一些库比如libssl、libcurl、libsqlite3。这些依赖如果漏了Runtime启动时会报错但错误信息不一定直观得看系统日志才能定位。2. 环境准备与系统烧录的实操细节2.1 硬件选型与配件清单RK3588开发板市面上有好几款我手头用的是香橙派5 Plus和触觉智能的RK3588核心板。两者都能跑但细节有差异。香橙派5 Plus的网口是RTL8211FEtherCAT主站驱动支持比较好触觉智能的板子用的是裕太微的PHY需要额外打补丁。如果你还没买板子建议优先选网口芯片是RTL8211或者Intel I210的型号EtherCAT兼容性最好。配件方面你需要准备这些东西一张32GB以上的高速TF卡或者eMMC模块用来烧系统一个USB转TTL串口模块调试内核启动用一根千兆网线连接EtherCAT从站如果从站是汇川的伺服还需要准备对应的EtherCAT线缆通常是RJ45转M8或者直接RJ45。电源建议用12V/3A以上的DC电源RK3588满载功耗能到10W左右电源不够会掉电重启。注意EtherCAT对网线质量很敏感。我踩过一次坑用了一根便宜的扁平网线结果从站老是掉线换屏蔽双绞线后问题消失。别省这个钱。2.2 系统镜像烧录与首次启动望获Linux的镜像可以从瑞芯微的开发者社区下载文件名通常类似rockchip_linux_release_v1.0_20240101.img。烧录工具用RKDevTool或者balenaEtcher都行。我习惯用RKDevTool因为它支持分区烧录可以只更新内核或者根文件系统不用每次都全量烧。烧录步骤先把开发板拨到Maskrom模式通常是按住Recovery键再上电。然后用USB Type-C线连接板子和电脑RKDevTool会识别到设备。选择对应的镜像文件点击“执行”开始烧录。整个过程大概3到5分钟烧完后板子会自动重启。首次启动时用串口模块连接板子的调试串口波特率1500000。你会看到U-Boot的启动日志然后是内核启动信息。如果卡在某个地方不动了大概率是镜像和板子不匹配或者DDR配置有问题。这时候需要换镜像或者检查板子的DDR型号。启动进入系统后默认用户名和密码通常是root和root或者linaro和linaro。登录后第一件事是改密码然后检查网络。用ip addr看看网口有没有识别到用ethtool eth0查看网口速率是不是1000Mbps。如果显示100Mbps检查网线是不是只接了四根线。2.3 内核重新编译与实时性补丁前面说了望获Linux默认内核的实时性不够。你需要重新编译内核打开PREEMPT_RT和EtherCAT相关的配置。具体步骤首先从瑞芯微的GitHub仓库克隆内核源码分支选develop-5.10或者develop-6.1。然后安装交叉编译工具链通常是gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu。设置环境变量CROSS_COMPILE和ARCH。接下来用make rockchip_linux_defconfig生成默认配置然后make menuconfig进入配置界面。需要打开的选项包括General setup-Preemption Model-Fully Preemptible Kernel (Real-Time)Device Drivers-Network device support-Ethernet driver support- 确保RTL8211或者I210的驱动是*编译进内核不是模块Kernel Features-Timer frequency-1000HzCPU Power Management-CPU Idle- 关闭CPU idle PM support避免CPU进入低功耗状态影响实时性配置完后用make -j8编译内核生成Image和rk3588s-xxx.dtb。然后把这两个文件拷贝到开发板的/boot分区重启即可。实操心得编译内核时如果报错说某个头文件找不到大概率是交叉编译工具链的版本不对。瑞芯微的内核对GCC版本比较挑剔建议用官方推荐的10.3版本别用太新的。3. CODESYS Runtime的安装与配置3.1 下载与安装CODESYS RuntimeCODESYS Runtime for Linux ARM64的安装包需要从CODESYS官网下载文件名类似CODESYSControl_User_arm64_4.7.0.0.deb。注意你需要注册一个CODESYS账号然后选择“CODESYS Control for Linux ARM64 SL”这个版本。SL是Single License免费版有2小时的运行限制但功能完整适合评估和开发。正式部署需要买License。下载后把deb包拷贝到RK3588上用dpkg -i安装。安装过程中会提示缺少依赖用apt-get install -f自动补齐。安装完成后CODESYS Runtime的服务会自动启动你可以用systemctl status codesyscontrol查看状态。如果服务启动失败先看日志journalctl -u codesyscontrol -n 50。常见的错误包括缺少libssl.so.1.1Ubuntu 22.04默认是3.0需要手动装1.1、缺少libffi.so.7、或者/etc/CODESYSControl.cfg配置文件权限不对。3.2 配置CODESYS Runtime的网络与EtherCATCODESYS Runtime的配置文件在/etc/CODESYSControl.cfg。你需要修改几个关键参数[SysSocket] Adapter.0.Nameeth0 Adapter.0.Enable1 [CmpEtherCAT] Master.0.NameEtherCAT_Master Master.0.NetworkAdaptereth0 Master.0.CycleTime1000Adapter.0.Name指定EtherCAT用的网口我建议用eth0或者eth1具体看你的板子。CycleTime是EtherCAT的循环周期单位是微秒1000就是1ms。如果你带轴少可以设成500但需要内核实时性足够好。改完配置后重启CODESYS服务systemctl restart codesyscontrol。然后用dmesg | grep EtherCAT看看有没有加载EtherCAT驱动。如果看到EtherCAT master initialized之类的信息说明配置成功。3.3 在CODESYS IDE里添加EtherCAT主站设备打开Windows上的CODESYS Development System新建一个标准工程。在设备树里右键点击Device选择Add Device然后找到EtherCAT Master添加进来。接着配置主站的网口选择你RK3588上对应的网口名称。然后添加从站设备。如果你用的是汇川的伺服需要在设备仓库里安装汇川的ESI文件XML格式。安装方法是Tools-Device Repository-Install选择XML文件。安装后在EtherCAT Master下面右键Add Device就能看到汇川的伺服型号了。添加完从站后需要配置PDO映射。汇川伺服的默认PDO通常包括控制字、状态字、目标位置、实际位置、目标速度、实际速度这些。你根据实际需求勾选别全选否则PDO数据量太大会影响通信周期。注意ESI文件的版本要和伺服固件版本匹配。我遇到过ESI文件太旧导致PDO配置对不上伺服报错。去汇川官网下载最新的ESI文件别用光盘里带的。4. EtherCAT多轴控制的实现与调试4.1 多轴同步的PDO配置与DC同步EtherCAT多轴控制的核心是分布式时钟DC同步。所有从站设备需要基于同一个时钟基准运行否则轴与轴之间会有相位差。在CODESYS里你需要在EtherCAT Master的配置里打开Distributed Clocks然后设置同步周期通常和EtherCAT循环周期一致。每个从站的DC配置里需要设置Sync0 Cycle Time和Sync1 Cycle Time。对于伺服驱动通常只用Sync0周期设成1ms。然后勾选Enable DC让从站使用主站的时钟。PDO映射方面我建议把每个轴的控制字、状态字、目标位置、实际位置、目标速度、实际速度、模式选择这些映射到过程数据里。汇川伺服的PDO长度通常是16字节输入、16字节输出8个轴就是128字节输入、128字节输出1ms周期下带宽完全够用。4.2 PLC程序里的多轴运动控制逻辑在CODESYS里写多轴控制程序我习惯用ST语言因为逻辑清晰容易维护。核心逻辑是每个轴用一个AXIS_REF变量然后调用MC_Power、MC_MoveAbsolute、MC_MoveRelative这些运动控制功能块。举个例子控制一个轴从当前位置移动到绝对位置1000VAR Axis1: AXIS_REF; Power1: MC_Power; MoveAbs1: MC_MoveAbsolute; TargetPos: LREAL : 1000; Execute: BOOL; END_VAR Power1(Axis:Axis1, Enable:TRUE, bRegulatorOn:TRUE, bDriveStart:TRUE); MoveAbs1(Axis:Axis1, Execute:Execute, Position:TargetPos, Velocity:500, Acceleration:1000, Deceleration:1000);多轴联动的话可以用MC_MoveLinearAbsolute或者MC_MoveCircularAbsolute但需要先建立轴组Axis Group。轴组的配置在CODESYS的Motion库里有详细说明这里不展开。实操心得调试多轴时先把每个轴单独调通再搞联动。我一开始就上六轴联动结果一个轴的方向反了整个机械臂撞到限位差点把伺服烧了。后来学乖了每个轴先点动测试确认方向和限位都正常再跑联动程序。4.3 用示波器验证EtherCAT通信质量EtherCAT通信质量好不好光看程序跑得顺不顺不够得用示波器抓波形。你把示波器探头接到EtherCAT的差分信号线上看眼图。正常的EtherCAT信号上升沿和下降沿都很陡过冲小抖动在纳秒级。如果波形畸变严重或者抖动超过100ns说明网线或者PHY有问题。我手头没有高端示波器就用了一个便宜的逻辑分析仪抓EtherCAT帧的间隔。正常情况下帧间隔应该非常稳定抖动在几微秒以内。如果间隔忽大忽小说明CPU被其他任务抢占了需要检查内核的实时性配置。另外CODESYS Runtime自带一个EtherCAT诊断工具可以在IDE里查看从站的通信状态、错误计数、DC偏差这些。如果某个从站的错误计数一直涨说明那个从站的通信有问题优先检查网线和从站配置。5. 常见问题与排查技巧实录5.1 CODESYS Runtime启动失败怎么办这是最常见的问题表现是systemctl status codesyscontrol显示failed或者服务启动了但IDE连不上。排查思路如下先看日志journalctl -u codesyscontrol -n 100。如果看到error while loading shared libraries: libssl.so.1.1说明缺库。Ubuntu 22.04默认是OpenSSL 3.0你需要手动装1.1版本wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_arm64.deb然后dpkg -i安装。如果日志显示Cannot open /etc/CODESYSControl.cfg检查文件权限应该是root:root权限644。如果显示Network adapter not found检查配置文件里的网口名称是不是和系统里的一致用ip addr确认。还有一种情况是服务启动了但IDE扫描不到设备。这时候检查防火墙ufw status如果开了把CODESYS用的端口放行通常是1217和11740。或者直接关掉防火墙ufw disable。5.2 EtherCAT从站不亮灯或者掉线从站不亮灯先检查物理连接网线插好了吗从站供电了吗EtherCAT的IN和OUT口别插反了。如果物理连接没问题用ethercat master命令需要装EtherCAT工具包查看主站状态。如果显示Link down说明网口没起来检查ethtool eth0的Link detected是不是yes。从站掉线的话看CODESYS IDE里的诊断信息。如果某个从站的Working Counter不增加说明PDO数据没交换成功。这时候检查PDO映射对不对从站的ESI文件版本和固件版本是否匹配。我遇到过汇川伺服固件是2.0但ESI文件是1.0PDO配置对不上从站一直报错。换了ESI文件后正常。避坑技巧EtherCAT从站的地址拨码开关别设成00是默认地址多个从站会冲突。我习惯从1开始编每个从站一个唯一地址。5.3 控制周期抖动大伺服有异响控制周期抖动大通常是CPU实时性不够。排查步骤先用cyclictest测一下系统的实时延迟。命令是cyclictest -m -p 80 -n -i 1000 -l 10000看Max Latency是多少。如果超过100μs说明实时性不达标。优化方法一是把CODESYS Runtime的进程优先级调到最高用chrt -f 99启动二是把EtherCAT中断绑定到独立的CPU核心用taskset或者irqaffinity三是关闭内核的CPU idle和CPU frequency scaling让CPU一直跑在最高频率。如果伺服有异响先看EtherCAT的DC偏差。在CODESYS IDE里每个从站的DC偏差应该小于1μs。如果偏差大检查DC配置确保所有从站都启用了DC并且Sync0周期一致。另外伺服的位置环增益别设太高否则容易振荡。5.4 常见问题速查表问题现象可能原因排查方法解决方案Runtime启动失败缺libssl1.1看journalctl日志手动安装libssl1.1IDE扫描不到设备防火墙拦截ufw status放行1217和11740端口从站不亮灯网线或供电问题检查物理连接换网线检查供电从站掉线PDO映射错误看Working Counter检查ESI文件和PDO配置控制周期抖动CPU实时性不足cyclictest测延迟调优先级绑核关idle伺服异响DC偏差大看DC诊断检查DC配置和增益6. 性能优化与进阶玩法6.1 把EtherCAT周期压到500μs甚至250μs1ms周期对大多数应用够了但如果你做高速贴片或者多轴插补可能需要更短的周期。把周期压到500μs需要满足几个条件内核实时性足够好cyclictest的Max Latency小于50μsEtherCAT从站支持500μs周期汇川的伺服通常支持CPU占用率不能太高建议留50%以上的余量。优化方法把EtherCAT中断绑定到A76大核把其他任务赶到A55小核关闭所有不必要的系统服务比如蓝牙、WiFi、HDMI用isolcpus内核参数隔离一个CPU核心专门跑EtherCAT。我实测过RK3588跑500μs周期带4个汇川伺服CPU占用率大概40%抖动在20μs以内。6.2 用RK3588的NPU做视觉引导RK3588自带6TOPS的NPU可以跑YOLOv8做目标检测。如果你做视觉引导的机械臂可以把摄像头接在RK3588上用NPU跑推理然后把坐标通过EtherCAT发给伺服。这样省去了工控机整套系统更紧凑。部署YOLOv8的步骤用RKNN-Toolkit2把ONNX模型转成RKNN格式然后在板子上用RKNN Runtime加载。推理速度方面YOLOv8n在RK3588上大概能跑30FPS足够大多数视觉引导场景。坐标转换后通过CODESYS的共享内存或者Socket发给PLC程序再映射到EtherCAT PDO里。6.3 系统备份与恢复的实用技巧调好系统后一定要备份。我习惯用dd命令把整个eMMC或者TF卡备份成镜像文件dd if/dev/mmcblk0 of/mnt/backup.img bs4M statusprogress。恢复的时候反过来dd if/mnt/backup.img of/dev/mmcblk0 bs4M statusprogress。另外CODESYS的工程文件也要备份。我习惯用Git管理每次改完程序就commit一次。CODESYS的工程文件是二进制格式Git diff看不了但至少能回滚。配置文件/etc/CODESYSControl.cfg也单独备份一份换板子的时候直接拷贝过去。实操心得备份镜像最好在系统干净的时候做别等装了一堆东西再备份镜像太大恢复也慢。我一般是在装完CODESYS Runtime和EtherCAT驱动后立刻备份一次作为基础镜像。7. 最后分享几个踩坑经验第一个坑RK3588的网口在望获Linux下默认是DHCP如果你没接路由器网口起不来EtherCAT也用不了。解决办法是设成静态IP编辑/etc/network/interfaces加上auto eth0和iface eth0 inet static然后指定IP和掩码。第二个坑CODESYS Runtime的License文件要放在/etc/CODESYSControl目录下文件名必须是CODESYSControl_User.lic。如果放错位置或者文件名不对Runtime会以Demo模式运行2小时后自动停止。我一开始不知道调了半天以为程序有问题后来看日志才发现是License没加载。第三个坑EtherCAT从站的ESI文件安装后需要在CODESYS里重新扫描设备否则设备树里看不到新装的从站。扫描方法是右键EtherCAT Master选择Scan Devices然后选择对应的网口CODESYS会自动扫描在线的从站。第四个坑如果从站是汇川的伺服默认的EtherCAT地址是0多个伺服会冲突。你需要用汇川的调试软件把每个伺服的地址改成唯一值或者用CODESYS的Set Address功能在线改地址。我建议用调试软件改更直观。这套方案我前后调了大概两周中间踩了不少坑但最终跑起来的效果很满意。RK3588的性能完全撑得住多轴EtherCAT控制CODESYS的编程体验也比传统PLC友好得多。如果你也在做类似的项目希望这些经验能帮你少走弯路。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

riverpod_sqflite 实战指南:基于 SQLite 的 Riverpod 离线持久化完整实现 2026/9/29 3:16:02

riverpod_sqflite 实战指南:基于 SQLite 的 Riverpod 离线持久化完整实现

前端移动开发 【免费下载链接】riverpod A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze. 项目地址: https://gitcode.com/gh_mirrors/ri/riverpod 点击查看 免费下载 导读 riverpod_sqflite 是 Riverp…

阅读更多 →
一条命令把安卓手机镜像到电脑:scrcpy 投屏实操 2026/9/29 3:16:02

一条命令把安卓手机镜像到电脑:scrcpy 投屏实操

一条命令把安卓手机镜像到电脑:scrcpy 投屏实操 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 晚上想用手柄在大屏上打两局手游,最省事的办法不是往手机里装 App&a…

阅读更多 →
WebToApp 应用分类(Categories)完全指南:基于 My Apps 主屏幕的分类组织、筛选与移动操作 2026/9/29 3:16:02

WebToApp 应用分类(Categories)完全指南:基于 My Apps 主屏幕的分类组织、筛选与移动操作

WebToApp 应用分类(Categories)完全指南:基于 My Apps 主屏幕的分类组织、筛选与移动操作 导读 本文围绕 WebToApp 主屏幕 My Apps 中顶栏下方的分类标签行(Category Tabs),系统讲解应用分类的完整用法&a…

阅读更多 →
Woodpecker 实战排障指南:克隆失败与 SELinux 权限问题的系统化排查 2026/9/29 3:16:02

Woodpecker 实战排障指南:克隆失败与 SELinux 权限问题的系统化排查

CI/CDDevOps 【免费下载链接】woodpecker Woodpecker is a simple, yet powerful CI/CD engine with great extensibility. 项目地址: https://gitcode.com/gh_mirrors/wo/woodpecker 点击查看 免费下载 本文是 Woodpecker CI/CD 引擎(当前仓库为 Woodp…

阅读更多 →
从解码到渲染输出:Diffusion Studio媒体管线与离线编码器的源码级拆解 2026/9/29 3:16:02

从解码到渲染输出:Diffusion Studio媒体管线与离线编码器的源码级拆解

从解码到渲染输出:Diffusion Studio媒体管线与离线编码器的源码级拆解 【免费下载链接】editor An open-source video editor built for agents. Edits become code, code becomes video. 项目地址: https://gitcode.com/gh_mirrors/editor94/editor Diffusi…

阅读更多 →
FR801xH BLE协议栈启动与Notify主动上报机制详解 2026/9/29 3:15:55

FR801xH BLE协议栈启动与Notify主动上报机制详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉