处于存在错误或超时,如果有错误或超时则进行相应处理;(3)通信状态正常,将目 的数据帧写入邮箱;(4)数据帧写入完成后,设置核间信号量,通知伺服进行响应;
(5)查询核间信号量,判断伺服是否完成响应;(6)伺服响应成功后,读取伺服响
应帧数据(7) Linux 系统任务通信结束。
伺服系统的具体操作如下:( 1 )通过 while(1) 程序轮询核间信号量,判断通信是
否处于存在错误或超时,如果有错误或超时则进行相应处理;(2)如果 Linux 已发起
任务通信,则从邮箱中读取目的数据帧;(3)解析目的数据帧,完成相应的指令操作;
(4)将响应数据封装成数据帧,并重新写入邮箱; 5 )数据帧写入完成后,设置核间
信号量,通知 Linux 系统已完成响应;(6)伺服系统任务通信结束。
4.4 周期任务通信技术
在多轴运动控制过程中,双核系统的周期任务通信主要用于完成周期性控制指
令的更新和伺服反馈数据的读取,进而实现多轴运动控制。
4.4.1 数据链路设计
在周期任务通信中,双核系统的通信数据类别固定,数据量小。因此采用固定长
度邮箱完成周期通信的数据链路,并使用核间信号量完成系统通信状态的切换。周期
通信数据分为控制指令和反馈数据两类,在双核间进行单向传输。为了提高数据传输
效率,分别设置发送邮箱区和接收邮箱区。其中,发送邮箱区保存 Linux 系统的控制
指令,接收邮箱区保存伺服系统的反馈数据。周期任务通信数据链路如图 4.15 所示。
周期通信过程中,设置核间信号量表示 OCM 的访问状态。当核间信号量为 1 时,
表示 OCM 空闲,周期通信未开始或已完成;当核间信号量为 0 时,表示 OCM 忙,
周期通信正在进行。双核系统通过核间信号量确定通信的实时状态,从而进行具体操
作并完成状态切换。在 OCM 上完成发送邮箱区和接收邮箱区的定义,用于保存通信
数据。在通信周期内, Linux 系统从接收邮箱区读取反馈数据,并将控制指令写入发
送邮箱区;伺服系统从发送邮箱区读取控制指令,并将反馈数据写入接收邮箱区。
4.4.2 基于硬件中断机制的周期任务实现
双核间周期任务通信采用 FPGA 硬件中断进行,即 Linux 系统和伺服系统均同
步与 FPGA 。在 FPGA 中断信号到来时,双核系统分别进行响应,通过执行中断服务
程序完成双核间数据通信。
为了保证实时性, Linux 系统通过 Xenomai 完成中断服务,如图 4.16 和图 4.17
所示。在用户程序中首先创建一个 Xenomai 域下的实时任务线程,该任务实现了循
环等待中断信号的功能。在 Adeos 进行任务调度时,会将 Xenomai 等待信号的任务
加入到等待队列中,此时线程进入睡眠。当系统接收到 FPGA 的中断信号时, Xenomai
的实时线程将被唤醒。线程唤醒后,执行中断服务函数实现周期任务通信。
双核间周期性任务通信的流程如图 4.18 所示。其中, Linux 系统的具体操作如
下:( 1 )完成看门狗清零并清除中断标志,表明 Linux 系统接收到中断并进行处理;
(2)读取核间信号量,判断通信是否处于存在错误或超时,如果有错误或超时则进
行相应处理;(3)通信状态正常,则切换响应缓存区,从接收邮箱区中读取响应数据;
(4)读取完成后,切换指令缓存区,将控制指令写给发送邮箱区;(5)写入完成后,
设置信号量,通知伺服进行响应;(6) Linux 系统任务通信结束。
伺服系统的具体操作如下:( 1 )完成看门狗清零并清除中断标志,表明伺服系统
接收到中断并进行处理;(2)轮询核间信号量,判断通信是否处于存在错误或超时,
如果有错误或超时则进行相应处理;(3)如果 Linux 已发起任务通信,则切换指令缓
存区,从发送邮箱区中读取指令数据;(4)读取完成后,切换响应缓存区,将伺服响
应数据写给接收邮箱区;(5)写入完成后,设置信号量,周期任务通信状态恢复为空
闲态;(6)伺服系统任务通信结束。
信迈提供ZYNQ+LINUX+XENOMAI的实时运动控制解决方案。
原文链接:https://blog.csdn.net/YEYUANGEN/article/details/129784030