一、 方案核心概述
本方案旨在解决系统开发中“高性能实时控制与“丰富人机交互”的需求矛盾。它采用混合部署的架构,将系统清晰地分为两个层面:
1.实时层:部署在睿擎派设备的RT-Thread实时系统中,负责执行高频率、高确定性的核心控制算法、EtherCat 等工业总线通信、故障保护等硬实时任务。
2.交互层:基于Qt Framework开发,运行在Linux操作系统上,提供图形化用户界面,用于参数配置、状态监控、曲线显示、数据记录、报警管理和网络通信等软实时或非实时任务。
两个层面通过高速通信机制进行数据交换和指令传递,从而形成一个兼顾实时性能与开发效率的完整解决方案。
二、睿擎派运行混合部署方案
混合部署双系统指的是单一芯片上同时运行两个系统,既运行Linux,又运行RT-Thread系统。
●Linux 系统:运行在应用核心,负责图形界面和非实时任务
●RT-Thread 系统:运行在实时核心,负责电机控制和实时通信
●核间通信通道:基于 rpmsg 机制实现两个系统间的高速数据交换,是整个方案的技术核心
睿擎派RC3506上运行Linux系统日志图通过串口1查看

睿擎派RC3506上运行RT-Thread系统日志图通过串口3查看
三、Linux 侧 QT 应用界面与核间通讯实现
1.UI 设计与实现

2.QT界面绘制及业务逻辑核心代码
●绘制电机启停按钮
●设计电机运行方向控制
●实现电机期望位置和当前位置显示
●创建位置曲线实时显示界面

3.Linux 侧核间通讯实现
●rpmsg 端点管理:通过 rpmsg_char_create_eptdev 创建通信端点,rpmsg_char_destroy_eptdev 销毁端点
●数据发送:send_msg 函数通过 write 接口向 RT-Thread 侧发送控制命令
●数据接收:MotorStateThread 线程通过 recv_msg 函数接收 RT-Thread 侧的状态数据
●数据同步:sync_data 函数在控制参数变化时触发数据传输
●状态更新:MotorStateRecv 接收并更新电机状态数据到 UI 界面

创建打开Linux侧/dev/rpmsg字符设备节点,初始化电机ctrl_data结构体成员值

Linux MASTER端地址是0x1001,RT-Thread远端地址是0x3001

Linux侧将电机的启动停止,运行方向和电机位置控制值通过send_msg接口实际是write接口将ctrl_data结构体写入RT-Thread侧。
四、RT-Thread侧核间通讯实现
●通信初始化:通过 rt_device_find 查找并打开 rpmsg 设备
●线程创建:创建 rpmsg_ethercat_read 和 rpmsg_ethercat_write 线程
●数据同步:使用 dynamic_sem 信号量实现数据传输同步
●状态反馈:将电机状态实时更新到 ctrl_data 结构体并发送到 Linux 侧

创建打开RT-Thread侧/dev/rpmsg字符设备节点,创建两个rpmsg读写线程

RT-Thread源地址是0x3001,Linux目的地址是0x1001
RT-Thread侧 rpmsg读线程

rpmsg读线程里RT-Thread源端的电机控制值,电机运行状态,电机运行方向赋值给 ctrl_data结构体中
RT-Thread侧 rpmsg写线程

rpmsg写线程会不断的获取dynamic_sem信号量,这个信号量会在每次改变电机控制偏移值,改变电机运行状态,改变电机运行方向都会去释放,一旦获取到信号量就会通过rt_device_write接口将ctrl_data结构体写入到Linux目的端。
五、核间通讯技术总结
rpmsg 是一种用于 Linux 与 RT-Thread 操作系统之间进行多核异构通信的机制,是整个方案的技术核心。通过前面的实现分析,我们可以总结出以下技术要点:
1.通信架构
●双端通信:Linux 端作为 MASTER(地址 0x1001),RT-Thread 端作为 REMOTE(地址 0x3001)
●数据结构:统一使用 motorctrl_data_t 结构体在两端传递数据,确保数据格式一致
●传输机制:基于字符设备接口,通过 write/read 操作实现数据传输
2.技术优势
●低延迟:基于内核级通信机制,延迟低,满足实时控制需求
●高可靠性:采用信号量同步机制,确保数据传输的完整性
●双向通信:支持 Linux 到 RT-Thread 的控制命令传输,以及 RT-Thread 到 Linux 的状态数据回传
●易于集成:提供了简洁的 API 接口,便于在应用层集成
3.实现要点
●端点管理:通过 rpmsg_char_create_eptdev 和 rpmsg_char_destroy_eptdev 管理通信端点
●线程安全:使用独立的读写线程,确保通信的并发处理能力
●错误处理:包含完善的设备查找、打开和通信错误处理机制
●实时性保障:设置合理的线程优先级和通信周期,确保实时控制的响应速度
4.数据流程
1.控制命令流:Qt 界面 → Linux 应用 → rpmsg 发送 → RT-Thread 接收 → 电机控制
2.状态数据流:电机状态 → RT-Thread 读取 → rpmsg 发送 → Linux 接收 → Qt 界面更新
这种双向数据流确保了用户操作与电机状态的实时同步,为整个系统提供了流畅的交互体验。
- 随机文章
- 热门文章
- 热评文章
- 江湖号令,蓉小香见——老卤冒烤鸭加盟加盟条件好不好?加盟多少钱?
- 预售价25.99万起 极越01下线/开启预订
- 配置更高 动力更强!2024款奥迪Q4 e-tron发布:售41.2万起
- E周见|一汽丰田减产/AEB之争落下帷幕
- 22万起售:“最美比亚迪”宋L开卖17天累计订单超1.1万辆
- 第二届全球数字生态大会数字会展在杭州成功举办
- 群智咨询:预计2028年全球OLED面板在中尺寸渗透率约两成
- 夏天穿波司登防晒?波司登发力多场景,1000-3000元“稳大盘”