EtherCAT1.5.2翻译


7.2 用户空间库

本地应用程序接口(参见第3章)驻留在内核空间中,因此只能从内核访问。 为了使应用程序接口在用户空间程序中可用,已经创建了一个用户空间库,该用户空间库可以根据LGPL版本2 [5]的条款和条件链接到程序。

这个库被命名为libethercat。 它的源代码驻留在lib /子目录中,并且在使用make时默认生成。 它被安装在安装前的lib /路径下,如libethercat.a(用于静态链接),libethercat.la(用于libtool)和libethercat.so(用于动态链接)。

7.2.1使用库

应用程序接口头文件ecrt.h可以在内核和用户上下文中使用。以下简单的显示了如何使用EtherCAT功能构建程序。 整个示例可以在主源文件的examples / user /路径中找到。

#include <ecrt .h>
int main (void)
{
ec_master_t * master = ecrt_request_master (0);
if (! master )
return 1; // error
pause (); // wait for signal
return 0;
}

该程序可以编译并通过以下命令动态链接到库:

列表7.1:使用用户空间库的链接器命令

gcc ethercat .c -o ectest -I/opt/ etherlab / include \
-L/opt / etherlab /lib -lethercat \
-Wl ,-- rpath -Wl ,/ opt / etherlab /lib

该库也可以静态编译:

gcc -static ectest .c -o ectest -I/opt/ etherlab / include \
/opt/ etherlab /lib/ libethercat .a
7.2.2 实现

内核API基本上是通过主字符设备传输到用户空间的(见第2章,图2.1和第7.1.1小节)。
内核API的函数调用通过ioctl()接口映射到用户空间。 用户空间API函数共享一组通用的ioctl()调用。 接口的内核部分直接调用相应的API函数,导致最小的附加延迟(参见7.2.3小节)。
出于性能方面的原因,实际的域进程数据(请参阅第2.3节)不会在每次访问时在内核和用户内存之间进行复制:而是将数据映射到用户空间应用程序。 主站配置和激活后,主模块会创建一个跨所有域的过程数据存储区,并将其映射到用户空间,以便应用程序可以直接访问过程数据。 因此,从用户空间访问过程数据时不会有额外的延迟。

内核/用户API差异 由于过程数据的内存映射,内存由库函数内部管理。 因此,为域提供外部内存是不可能的,例如在内核API中。 相应的函数只能在kernelspace中使用。 这是在用户空间中使用应用程序接口时唯一的区别。

7.2.3 时间

一个有趣的方面是用户空间库调用与内核API调用的时间比较。 表7.1显示了在具有2:2 GHz和标准2.6.26内核的Intel Pentium 4 M CPU上测量的典型(和时间关键)API函数的调用时间和标准设计。

测试结果显示,对于这个配置,与内核API相比,用户空间API对每个函数都会造成大约1u秒的附加延迟。

7.3 RTDM接口

当使用Xenomai或RTAI等实时扩展的用户空间接口时,不推荐使用ioctl(),因为它可能会干扰实时操作。 为此,实时设备模型(RTDM)[17]已经被开发出来。 主模块提供了一个RTDM接口(见图2.1),除了普通的字符设备,如果主源配置了–enable-rtdm(见第9章)。
要强制应用程序使用RTDM接口而不是普通字符设备,它必须与libethercat rtdm库而不是libethercat链接。 libethercat rtdm的使用是透明的,所以具有完整API的EtherCAT头ecrt.h可以照常使用。
为了使代码清单7.1中的例子使用RTDM库,链接器命令必须改变如下:

gcc ethercat -with - rtdm .c -o ectest -I/opt/ etherlab / include \
-L/ opt/ etherlab / lib - lethercat_rtdm \
-Wl ,-- rpath -Wl ,/ opt/ etherlab / lib

7.4 系统集成

为了将EtherCAT主服务器作为服务集成到正在运行的系统中,它附带了一个初始化脚本和一个sysconfig文件,如下所述。 现代系统可以由systemd管理[7]。 master和systemd的集成在7.4.4节中描述。

7.4.1 初始化脚本

EtherCAT主机脚本符合“Linux标准基础”(LSB,[6])的要求,该脚本安装在安装前缀下的etc / init.d / ethercat中,并且必须复制(或者最好: 链接到适当的位置(请参阅第9章),然后将主服务器作为服务插入。请注意,初始化脚本取决于下面描述的sysconfig文件。
为了在初始化脚本代码中提供服务依赖关系(即,在其他服务之前必须启动哪些服务),LSB定义了一个特殊的注释块。 系统工具可以提取此信息以在启动顺序中的正确位置插入EtherCAT初始化脚本:

7.4.2 Sysconfig文件

对于持久化配置,初始化脚本使用安装到etc / sysconfig / ethercat(在安装前缀x之下)的sysconfig文件,这对init脚本是必需的。 系统包含操作一个或多个master所需的所有配置变量。 文档在文档中,包含如下内容:



对于由systemd管理的系统(请参阅第7.4.4小节),sysconfig文件已移至/etc/ethercat.conf。 这两个版本都是主要来源的一部分,是为了交替使用。

7.4.3 启动主服务

在init脚本和sysconfig文件放在正确的位置后,EtherCAT主站可以作为服务插入。不同的Linux发行版提供了不同的方法来标记在某些运行级别启动和停止的服务。 例如,SUSE Linux提供了insserv命令:

insserv ethercat

初始化脚本也可用于手动启动和停止EtherCAT主站。 必须执行其中一个参数启动,停止,重新启动或状态。

7.4.4 系统集成

使用systemd代替SysV init系统的分发使用服务文件描述如何维护服务。 清单7.2列出了主服务文件:

ethercatctl命令用于加载和卸载主控制器和网络驱动器模块,与以前的init脚本类似(第7.4.1小节)。 因为它被安装到sbin /目录下,所以也可以单独使用:

ethercatctl start

使用systemd和/或ethercatctl命令时,主配置必须位于/etc/ethercat.conf而不是/ etc / sysconfig / ethercat! 后者是被忽略的。 配置选项完全相同。

7.5 调试接口

总是可以通过在主站和从站之间插入一个开关来监视EtherCAT总线。 例如,这可以将另一台PC与Wireshark [8]等网络监视器连接起来。 也可以直接在运行EtherCAT主站的机器上监听本地网络接口。 如果使用通用以太网驱动程序(参见章节4.3),网络监视器可以直接监听连接到EtherCAT总线的网络接口。
使用本地以太网驱动程序时(请参阅第4.2节),由于用于EtherCAT的以太网设备未在网络堆栈中注册,因此本地网络接口无法侦听。 在这种情况下,支持所谓的“调试接口”,它们是虚拟网络接口,允许通过在主机上运行的网络监视器(如Wireshark或tcpdump)来捕获EtherCAT流量,而无需使用外部硬件。 ,主要来源必须配置–enable-debug-if开关(参见第9章)。
每个EtherCAT主站为每个连接的物理以太网设备注册一个只读网络接口。 网络接口名称为主设备的ecdbgmX,备份设备的名称为ecdbgbX,其中X是主索引。 以下列表显示了一些标准网络接口之间的调试接口:

在启用调试接口的同时,所有发送到物理设备或从物理设备接收的帧都会被相应的主设备转发到调试接口。 网络接口可以使用以下命令启用:

ip link set dev ecdbgm0 up

请注意 帧率可能非常高。 在连接了应用程序的情况下,调试接口每秒可以产生数千帧。
注意调试接口操作所需的套接字缓冲区必须动态分配。 一些Linux实时扩展(如RTAI)不允许实时上下文!

EtherCAT1.5.2官方文档翻译-第七章相关推荐

  1. Spring官方文档翻译(7章)

    转载自:http://blog.csdn.net/tangtong1/article/details/51960382 三.核心技术 这部分的文档覆盖了spring完整的技术. 在这些技术中最重要的要 ...

  2. 【iOS官方文档翻译】iOS蓝牙的基本概念

    之前写了[iOS官方文档翻译]iOS的蓝牙连接.数据接收及发送一文,介绍了怎样进行蓝牙通讯,但是很多基本概念没有进行解释,看起来可能有点吃力,所以现在再翻译一篇苹果对官方蓝牙4.0一些基本概念介绍的文 ...

  3. stm32 工业按键检测_「正点原子STM32Mini板资料连载」第七章 按键输入实验

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上一章,我们介 ...

  4. 判断按键值_ALIENTEK 阿波罗 STM32F767 开发板资料连载第七章 按键输入实验

    1)实验平台:alientek 阿波罗 STM32F767 开发板2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上 ...

  5. 怎么证明建立了存储过程_【Filecoin源码仓库全解析】第七章:了解PoRep与PoSt并参与复制证明游戏

    欢迎大家来到第七章,经过前章<[Filecoin源码仓库全解析]第六章:如何单机部署多节点集群及矿池设计思路>的介绍,我们分享了如何在单机部署多节点集群的知识以及矿池设计的一些思路. 我们 ...

  6. 使用gpio输出驱动蜂鸣器出现破音_探索者 STM32F407 开发板资料连载第七章 蜂鸣器实验...

    1)实验平台:探索者 STM32F407 开发板 2)摘自<STM32F4 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 蜂鸣器实验 上一章,我们介绍了 ...

  7. 《深入理解分布式事务》第七章 XA 强一致性分布式事务原理

    <深入理解分布式事务>第七章 XA 强一致性分布式事务原理 文章目录 <深入理解分布式事务>第七章 XA 强一致性分布式事务原理 一.X/Open DTP 模型与 XA 规范 ...

  8. 第七章 Java基础类库

    前言:如果你真正学习到了这里,那么先容许我夸赞一下你,太棒了!哪怕你对前面六篇文章的掌握度达到50%也是非常了不起的了,关于后面的文章学习我只能说,非常简单,只是我们文章会非常详细的介绍实现原理和一些 ...

  9. 第七章 本源时空(补充)

                    第七章        本源时空(补充) ​      第七章是匆匆结束的,有点文不对题.什么是本源时空,没有详细的论述.2个月来.我一直想做个小结,无奈心不在焉,忙于正 ...

最新文章

  1. SpringBoot配置文件YAML
  2. sqlite库——C实现,给sqlite数据库添加信息并把信息写入文件,删除日志和库中的日志信息
  3. spring 深入reading
  4. 编写安全的代码(ACL使用方法)
  5. python的opencv库_用于Python的Opencv可视化库安装,面向,OpenCV,视觉
  6. cloud foundry_Cloud Foundry Java客户端–流事件
  7. PID控制器开发笔记之一:PID算法原理及基本实现
  8. 火热的数据中台对企业的价值是什么?
  9. React中的高阶组件
  10. AI ProCon 2020第一天:40+大厂专家共话AI技术应用下一个十年!
  11. SAX方式解析XML文档
  12. 作业收集小程序推荐|视频作业收集、图片作业收集、文档作业收集
  13. DeFi 2.0的LaaS协议Elephant,重振DeFi赛道发展的关键
  14. arcmap小技巧之获取行政区划及json格式转shp,json转csv
  15. 环信IM即时通讯的简单集成
  16. maskrcnn_benchmark 代码详解(更新中...)
  17. Springboot+Netty实现基于天翼物联网平台CTWing(AIOT)终端TCP协议(透传模式)-设备终端(南向设备)
  18. centos7.4安装中文字体黑体宋体
  19. 名编辑电子杂志大师教程 | 名编辑电子杂志大师软件简介
  20. 中国柔性制造系统(FMS)市场发展动态及未来趋势预测报告2022~2028年

热门文章

  1. 音频放大电路_低音升压功率放大器电子电路的完整设计
  2. 记录几个CentOS安装包(rpm)的下载地址-离线安装必备
  3. linux内核那些事之 VMA Gap
  4. Flink java.lang.NoClassDefFoundError: org/apache/flink/api/common/functions/FlatMapFunction
  5. sql查询出的字段切割_SPL 简化 SQL 案例详解:多层固定分组
  6. adb隐藏状态栏图标_[应用]华为手机怎么设置隐藏状态栏上的图标
  7. c语言逃跑的蠕虫函数,源码指标:穿越5线 第一时间吃鱼身 上行末端逃跑 没有未来函数 通达信幅图 精品公式...
  8. graphpad数据小数点_GraphPad Prism 统计指南 | 关于异常值(Outlier),你真的了解吗?...
  9. lisp提取长方形坐标_用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积...
  10. WPSmushProv3.7.0图片上传压缩插件-WordPress图像优化插件