ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

IgH EtherCAT Master 学习笔记

IgH EtherCAT Master 学习笔记 架构内核模块 用户态库的双层架构内核态部分以内核模块形式运行直接接管一块以太网网卡在内核空间完成帧的实时收发、EtherCAT 状态机Init/Pre-Op/Safe-Op/Op维护以及周期性的过程数据PDO刷新。之所以放进内核是因为只有这样才能绕开 Linux 网络协议栈的调度延迟和不确定性配合实时内核如 PREEMPT_RT才能实现微秒级的稳定周期。用户态部分应用程序不会直接操作网卡或内核模块而是通过一套用户态 API 来请求主站句柄、配置每个从站要用到的 PDO 映射创建“域Domain”——一块与内核共享的进程数据内存每个控制周期调用一次读写函数收发这块内存里的数据。笔记网卡 → Linux → IgH 的软件层次Ethernet硬件-st_gmac-eth0-ec_generic-ec_master-Slave配置主站生命周期与配置流程请求主站Request Master获取从站配置Slave Configuration注册 PDO 映射到域Domain Registration激活主站Activate Master进入周期性循环。单周期内实时循环的时序模型周期驱动方式IgH 本身不负责“帮你定时”应用程序必须自己起一个高精度定时循环。每周期的标准动作序列且顺序不能颠倒ecrt_master_receive()ecrt_domain_process()应用业务逻辑ecrt_domain_queue()ecrt_master_send()。实时实时任务的调度策略与隔离必须用 sched_setscheduler() 把控制循环所在的线程设置为 SCHED_FIFO先入先出的实时调度类并给一个较高的优先级比如 80-99这样只要这个线程处于可运行状态调度器就会立刻抢占普通进程去运行它用 taskset 或 sched_setaffinity() 把实时循环绑定到一个专用的 CPU 核心上并且在内核启动参数里用 isolcpus 把这个核心从通用调度池里隔离出去不让其他普通进程和中断处理程序跑上去抢占mlockall(MCL_CURRENT | MCL_FUTURE)把进程当前和未来分配的所有内存都锁在物理内存里杜绝换页延迟。多轴多从站配置与差异化 PDO 管理从站的两种定位方式Position位置与 Alias别名异构从站的差异化配置如果总线上挂的是不同厂家、不同型号的从站怎么对每一个从站分别调用 ecrt_master_slave_config() 拿到独立的配置句柄分别为每个句柄配置各自的 PDO 映射ecrt_slave_config_pdos()最后统一注册进同一个或按需拆分成多个域。
返回列表