Bitpie钱包最新版本app下载|ethercat sdo
Bitpie钱包最新版本app下载|ethercat sdo
IgH详解八、EtherCAT SDO原理-CSDN博客
>IgH详解八、EtherCAT SDO原理-CSDN博客
IgH详解八、EtherCAT SDO原理
EtherCat技术研究
已于 2022-05-11 09:55:51 修改
阅读量7.6k
收藏
42
点赞数
7
分类专栏:
IgH详解
文章标签:
ethercat
于 2022-04-27 20:44:20 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gufuguang/article/details/124459922
版权
IgH详解
专栏收录该内容
23 篇文章
248 订阅
订阅专栏
主站通过使用 SDO对对象字典进行读取/写入操作,完成对从站设备进行参数设置、状态监视等。
从站SDO的读写是非实时的,所以需要多次访问来确保数据操作的正确性。
如下图写入操作,主站把数据发送到从站,从站返回WC确保数据收到,经过几个周期后主站发起响应查询,看从站是否有正确的写入数据。
从从站读取数据主站同样需要发起多次访问,以确保数据正确读取
下面我们看下SDO是怎么封装到EtherCAT中的?
邮箱协议
从站的SM0,SM1同步管理做为邮箱通信使用,当有邮箱数据时会触发SM0或SM1信号,进行邮箱数据的处理(SM0=mailbox output SM1=mailbox input)
邮箱头占用6个字节 CANopen头占用2个字节
以一次实际的报文请求来分析
Header是mailbox头占用6个字节
CoE头占用2个字节
SDO请求和数据占用 14个字节
Header头部的length 16字节表示16个字节数据
数据已经解析到对应的sdo请求表上了,可以看到这是一次完整的数据请求
往 index: 0x1a01 Subindex: 00 写 0x01 表示0x1a01下面有一个数据
Subindex 01 写 0x60100210
功能是完成pdo的映射,功能如下图
主站配置从站的pdo映射是通过sdo来完成的。
优惠劵
EtherCat技术研究
关注
关注
7
点赞
踩
42
收藏
觉得还不错?
一键收藏
知道了
3
评论
IgH详解八、EtherCAT SDO原理
主站通过使用 SDO对对象字典进行读取/写入操作,完成对从站设备进行参数设置、状态监视等。从站SDO的读写是非实时的,所以需要多次访问来确保数据操作的正确性。如下图写入操作,主站把数据发送到从站,从站返回WC确保数据收到,经过几个周期后主站发起响应查询,看从站是否有正确的写入数据。从从站读取数据主站同样需要发起多次访问,以确保数据正确读取下面我们看下SDO是怎么封装到EtherCAT中的?邮箱协议从站的SM0,SM1同步管理做为邮箱通信使用,当有邮箱数据时会.
复制链接
扫一扫
专栏目录
EtherCAT主站SDO读报文抓包分析
kevin1499的博客
10-22
554
EtherCAT主站SDO读报文Wireshark抓包分析。
EtherCAT主站SOEM函数详解----SDO读写函数
weixin_43956732的博客
09-03
6666
EtherCAT主站SOEM函数详解----读写报文ethercatcoe.h头文件SDO读写函数SDO读取函数SDO写函数
获取SOEM主站或了解文件分布,可以读取我以前写的博客SOEM主站软件包及函数头文件介绍,本篇ethercatcoe文件相关的函数,COE的全称是CanOpen over EtherCAT, 采用CanOpen的相关协议开发了EtherCAT的运用层,核心是对象字典,想了解PDO相关知识,可以读CanOpen通信----PDO与SDO。
ethercatcoe.h头文件
为了比较全面
3 条评论
您还未登录,请先
登录
后发表或查看评论
ethercat igh1.5.2源码
03-30
ethercat igh1.5.2源码,用于搭建ethercat主站,实现ethercat通信
EtherCAT——PDO/SDO
a1347065101的博客
07-26
3917
主站与从站进行数据交互的方式主要通过PDO和SDO,即过程数据和邮箱数据其概念与CANOpen中的概念相同。
机器人控制LinuxCNC与EtherCAT介绍&&PDO&SDO,搭建环境步骤
10-21
包括LinuxCNC、EtherCAT介绍,包含系统环境搭建、驱动安装、以及需要配置的文件。INI\HAL\XML配置。讲解EtherCAT通信原理,讲解LinuxCNC通信原理以及各部分模块的介绍。包含CAN协议的PDO过程数据对象和SDO服务数据对象的讲解等
igh ethercat主站文档(中文翻译上)
qq_43530144的博客
05-12
5913
此翻译主要是用翻译软件翻译,部分自己修改,若有不当之处,可以下方评论或私聊我提醒修改,若转载,请注明出处
本文是1-4章节。
1 The IgH EtherCAT Master
本章介绍有关EtherCAT主站的一些常规信息。
1.1功能摘要
下面的列表简要介绍了主要功能。
•设计为Linux 2.6 / 3.x的内核模块。
•根据IEC 61158-12 [2] [3]实施。
•带有支持EtherCAT的本地驱动程序,可用于几种常见的以太网芯片,以及用于Linux内核支持的所有芯片的通用驱动程序。
–本地
IgH详解 一、概述
热门推荐
EtherCAT
08-24
1万+
IgH源码地址:https://gitlab.com/etherlab.org/ethercat
IgH是开源的EtherCAT主站协议栈,虽然功能上和从站兼容性性比不上商业协议栈,但完全能满足学习和普通场景的使用,公司也可以基于IgH作产品开发,基本能满足大部分使用场景。
本系列博客主要分为三部分1、介绍IgH主站ec_master运行流程; 2、介绍IgH对网卡驱动的实时性优化;3、IgH上层应用程序开发。
关于IgH在不同实时系统上安装,和实时系...
EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文
wsg1100
02-22
6999
文章目录1 启动脚本1.1 start1.2 stop2 主站实例创建2.1 Master Phases2.2 数据报与状态机数据报状态机2.3 master状态机及数据报初始化2.4 初始化EtherCAT device2.5 设置IDLE 线程的发送间隔:2.6 初始化字符设备3 网卡4 IDLE阶段内核线程
版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/
1 启动脚本
igh通过脚本来启动,可以是sys
LinuxCNC与EtherCAT学习笔记(3)——基于Preempt_RT的IgH EtherCAT Master安装
weixin_42599219的博客
08-05
3951
安装EtherCAT Master
ubuntu22.04下Ethercat IGH DC同步实现
LLiu_M__的博客
10-20
5060
基于igh主站的电机ethercat DC同步通信
要在 Ubuntu 22.04 (Jammy Jellyfish) 中升级 ubuntu-advantage-tools 到 27.8,请运行命令:
要启用测试版实时内核,可运行:
需要验证实时性能,可以使用cyclitest,主要看max的值,经过14个小时时间,其最大值的延迟在230us左右,满足8ms为周期的控制
控制对象:
参考代码:
官方例程:dc_user,该例程以主站
IgH EtherCAT Master 1.5.2 Documentation
12-03
IgH EtherCAT Master 1.5.2 英文官方文档
IgH_EtherCAT_Master移植过程.rar_dgs_igh ethercat详解_igh ethercat配置_ig
07-13
这是关于Igh开源主站如何移植到嵌入式linux系统当中,便于后续的开发。
ethercat linux 主站igh程序讲解
01-08
linux,ethercat 开源master igh 汇川伺服电机 igh流程讲解 英文论文Motion Control of 6-DOF Manipulator Based on EtherCAT 六轴机械臂开源控制
IGH移植步骤.rar_IgH_EtherCAT_JHY_SOEM ethercat移植_ethercat移植_igh ethe
07-13
Linux平台下EtherCAT主站移植相关操作,辅助开发测试参考
IgH EtherCAT master-ethercatpack.7z
10-16
Igh Master Ethercat库包含的头文件 3. scripts/ 自动生成从站信息的相关脚本文件,要生成从站信息,将该文件夹复制到开发板运行GenerateSlavesConfig.sh。 默认生成ec_common_configs_define.h和ec_common_...
vb串口通讯源码手机串口实现短信pdu编码方式
03-13
vb串口通讯源码这是一个通过手机串口实现短信发送的实例,采用pdu编码方式,VB开发语言实现的本资源系百度网盘分享地址
C语言并行爬虫(epoll)读写操作代码
03-13
c语言文件读写操作代码。在C语言中实现一个基于epoll的并行爬虫是一个相对复杂的任务,因为它涉及到网络编程、异步I/O、HTML解析等多个方面。下面我将给出一个简化的示例,说明如何使用epoll来并发地处理多个网络连接。
base.apk
最新发布
03-13
base.apk
东北农业大学902植物病虫害防治2020考研专业课初试大纲.pdf
03-13
东北林业大学
松下 igh ethercat
01-30
松下工业自动化系统公司开发的IGH EtherCAT是一种高性能的工业以太网通信协议。它采用了快速实时数据传输技术,具有低延迟和高稳定性的特点。IGH EtherCAT可以实现多种不同的设备之间的高速通信和数据交换,能够有效地提高工业自动化系统的运行效率和生产效益。
IGH EtherCAT采用了开放的标准协议和通信接口,可以实现设备之间的即插即用,简化系统的集成和维护。它还支持实时监控和远程控制,可以帮助用户实现智能化生产管理和远程维护。
作为一种先进的工业通信协议,IGH EtherCAT已经在众多行业中得到广泛的应用,包括汽车制造、机械制造、电子制造等领域。它可以满足复杂工业环境下的高速数据传输和实时控制需求,为企业提供了更加可靠和高效的自动化解决方案。
总的来说,IGH EtherCAT不仅具有高性能和稳定性,而且具有开放的标准接口和广泛的应用场景,可以为工业自动化系统的建设和应用带来更多的便利和价值。随着工业4.0和智能制造的发展,IGH EtherCAT必将在工业自动化领域发挥越来越重要的作用。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
EtherCat技术研究
CSDN认证博客专家
CSDN认证企业博客
码龄11年
暂无认证
84
原创
3万+
周排名
2万+
总排名
27万+
访问
等级
2392
积分
574
粉丝
168
获赞
261
评论
1119
收藏
私信
关注
热门文章
机内码、国际码、区位码换算
24861
各种ADC转换方式的优缺点
20211
IgH详解 一、概述
12652
IgH配置EtherCAT流程
12340
目前常用AD/DA芯片简介
7913
分类专栏
Linuxcnc-ethercat
1篇
IgH详解
23篇
arm_Linux
1篇
TCP/IP
1篇
S3C2440
18篇
EtherCAT
13篇
最新评论
IgH详解十二、IgH实现使用ENI文件配置从站(二)
EtherCat技术研究:
扫描跟兼容性关系不大,先要确保ethercat报文是否有正常收发
IgH详解二、主栈启动流程(二)
EtherCat技术研究:
要看你报文是否有超时,是否有丢包?用的实时网卡驱动吗?需要你根据自己环境去查
IgH详解十二、IgH实现使用ENI文件配置从站(二)
weixin_50007256:
大佬,我偶然会出现伺服和io的从站突然重启后扫描不上来的情况,重启前还是能扫描上来的,是因为兼容性的问题么。
IgH详解二、主栈启动流程(二)
weixin_50007256:
大佬,从站成功切到op之后,为了检测从站是否会断开,我判断ec_slave_config_state_t.online的值,出现有时候online为false的现象,但是从站状态一直是op,这是什么原因呢
IgH详解十、EtherCAT DC(4)主站做参考时钟和从站作参考时钟性能对比
records111:
大神你好,我想请教下你用从站作为参考时钟的话,主站的时钟是怎么被同步的呢,可以详细聊聊吗
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
倍福控制器搭建IgH环境
全志A40i PRREMPT-RT Linux平台搭建IgH环境
ubuntu 16.04 阿里软件源
2023年11篇
2022年18篇
2021年12篇
2019年3篇
2018年1篇
2015年2篇
2013年58篇
目录
目录
分类专栏
Linuxcnc-ethercat
1篇
IgH详解
23篇
arm_Linux
1篇
TCP/IP
1篇
S3C2440
18篇
EtherCAT
13篇
目录
评论 3
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
IgH详解八、EtherCAT SDO原理-CSDN博客
>IgH详解八、EtherCAT SDO原理-CSDN博客
IgH详解八、EtherCAT SDO原理
EtherCat技术研究
已于 2022-05-11 09:55:51 修改
阅读量7.6k
收藏
42
点赞数
7
分类专栏:
IgH详解
文章标签:
ethercat
于 2022-04-27 20:44:20 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gufuguang/article/details/124459922
版权
IgH详解
专栏收录该内容
23 篇文章
248 订阅
订阅专栏
主站通过使用 SDO对对象字典进行读取/写入操作,完成对从站设备进行参数设置、状态监视等。
从站SDO的读写是非实时的,所以需要多次访问来确保数据操作的正确性。
如下图写入操作,主站把数据发送到从站,从站返回WC确保数据收到,经过几个周期后主站发起响应查询,看从站是否有正确的写入数据。
从从站读取数据主站同样需要发起多次访问,以确保数据正确读取
下面我们看下SDO是怎么封装到EtherCAT中的?
邮箱协议
从站的SM0,SM1同步管理做为邮箱通信使用,当有邮箱数据时会触发SM0或SM1信号,进行邮箱数据的处理(SM0=mailbox output SM1=mailbox input)
邮箱头占用6个字节 CANopen头占用2个字节
以一次实际的报文请求来分析
Header是mailbox头占用6个字节
CoE头占用2个字节
SDO请求和数据占用 14个字节
Header头部的length 16字节表示16个字节数据
数据已经解析到对应的sdo请求表上了,可以看到这是一次完整的数据请求
往 index: 0x1a01 Subindex: 00 写 0x01 表示0x1a01下面有一个数据
Subindex 01 写 0x60100210
功能是完成pdo的映射,功能如下图
主站配置从站的pdo映射是通过sdo来完成的。
优惠劵
EtherCat技术研究
关注
关注
7
点赞
踩
42
收藏
觉得还不错?
一键收藏
知道了
3
评论
IgH详解八、EtherCAT SDO原理
主站通过使用 SDO对对象字典进行读取/写入操作,完成对从站设备进行参数设置、状态监视等。从站SDO的读写是非实时的,所以需要多次访问来确保数据操作的正确性。如下图写入操作,主站把数据发送到从站,从站返回WC确保数据收到,经过几个周期后主站发起响应查询,看从站是否有正确的写入数据。从从站读取数据主站同样需要发起多次访问,以确保数据正确读取下面我们看下SDO是怎么封装到EtherCAT中的?邮箱协议从站的SM0,SM1同步管理做为邮箱通信使用,当有邮箱数据时会.
复制链接
扫一扫
专栏目录
EtherCAT主站SDO读报文抓包分析
kevin1499的博客
10-22
554
EtherCAT主站SDO读报文Wireshark抓包分析。
ethercat igh1.5.2源码
03-30
ethercat igh1.5.2源码,用于搭建ethercat主站,实现ethercat通信
3 条评论
您还未登录,请先
登录
后发表或查看评论
机器人控制LinuxCNC与EtherCAT介绍&&PDO&SDO,搭建环境步骤
10-21
包括LinuxCNC、EtherCAT介绍,包含系统环境搭建、驱动安装、以及需要配置的文件。INI\HAL\XML配置。讲解EtherCAT通信原理,讲解LinuxCNC通信原理以及各部分模块的介绍。包含CAN协议的PDO过程数据对象和SDO服务数据对象的讲解等
EtherCAT——PDO/SDO
a1347065101的博客
07-26
3918
主站与从站进行数据交互的方式主要通过PDO和SDO,即过程数据和邮箱数据其概念与CANOpen中的概念相同。
EtherCAT主站SOEM函数详解----SDO读写函数
weixin_43956732的博客
09-03
6666
EtherCAT主站SOEM函数详解----读写报文ethercatcoe.h头文件SDO读写函数SDO读取函数SDO写函数
获取SOEM主站或了解文件分布,可以读取我以前写的博客SOEM主站软件包及函数头文件介绍,本篇ethercatcoe文件相关的函数,COE的全称是CanOpen over EtherCAT, 采用CanOpen的相关协议开发了EtherCAT的运用层,核心是对象字典,想了解PDO相关知识,可以读CanOpen通信----PDO与SDO。
ethercatcoe.h头文件
为了比较全面
igh ethercat主站文档(中文翻译上)
qq_43530144的博客
05-12
5913
此翻译主要是用翻译软件翻译,部分自己修改,若有不当之处,可以下方评论或私聊我提醒修改,若转载,请注明出处
本文是1-4章节。
1 The IgH EtherCAT Master
本章介绍有关EtherCAT主站的一些常规信息。
1.1功能摘要
下面的列表简要介绍了主要功能。
•设计为Linux 2.6 / 3.x的内核模块。
•根据IEC 61158-12 [2] [3]实施。
•带有支持EtherCAT的本地驱动程序,可用于几种常见的以太网芯片,以及用于Linux内核支持的所有芯片的通用驱动程序。
–本地
IgH详解 一、概述
热门推荐
EtherCAT
08-24
1万+
IgH源码地址:https://gitlab.com/etherlab.org/ethercat
IgH是开源的EtherCAT主站协议栈,虽然功能上和从站兼容性性比不上商业协议栈,但完全能满足学习和普通场景的使用,公司也可以基于IgH作产品开发,基本能满足大部分使用场景。
本系列博客主要分为三部分1、介绍IgH主站ec_master运行流程; 2、介绍IgH对网卡驱动的实时性优化;3、IgH上层应用程序开发。
关于IgH在不同实时系统上安装,和实时系...
EtherCAT主站IgH解析(一)--主站初始化、状态机与EtherCAT报文
wsg1100
02-22
6999
文章目录1 启动脚本1.1 start1.2 stop2 主站实例创建2.1 Master Phases2.2 数据报与状态机数据报状态机2.3 master状态机及数据报初始化2.4 初始化EtherCAT device2.5 设置IDLE 线程的发送间隔:2.6 初始化字符设备3 网卡4 IDLE阶段内核线程
版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/
1 启动脚本
igh通过脚本来启动,可以是sys
LinuxCNC与EtherCAT学习笔记(3)——基于Preempt_RT的IgH EtherCAT Master安装
weixin_42599219的博客
08-05
3951
安装EtherCAT Master
ubuntu22.04下Ethercat IGH DC同步实现
LLiu_M__的博客
10-20
5060
基于igh主站的电机ethercat DC同步通信
要在 Ubuntu 22.04 (Jammy Jellyfish) 中升级 ubuntu-advantage-tools 到 27.8,请运行命令:
要启用测试版实时内核,可运行:
需要验证实时性能,可以使用cyclitest,主要看max的值,经过14个小时时间,其最大值的延迟在230us左右,满足8ms为周期的控制
控制对象:
参考代码:
官方例程:dc_user,该例程以主站
IgH EtherCAT Master 1.5.2 Documentation
12-03
IgH EtherCAT Master 1.5.2 英文官方文档
IgH_EtherCAT_Master移植过程.rar_dgs_igh ethercat详解_igh ethercat配置_ig
07-13
这是关于Igh开源主站如何移植到嵌入式linux系统当中,便于后续的开发。
ethercat linux 主站igh程序讲解
01-08
linux,ethercat 开源master igh 汇川伺服电机 igh流程讲解 英文论文Motion Control of 6-DOF Manipulator Based on EtherCAT 六轴机械臂开源控制
IGH移植步骤.rar_IgH_EtherCAT_JHY_SOEM ethercat移植_ethercat移植_igh ethe
07-13
Linux平台下EtherCAT主站移植相关操作,辅助开发测试参考
IgH EtherCAT master-ethercatpack.7z
10-16
Igh Master Ethercat库包含的头文件 3. scripts/ 自动生成从站信息的相关脚本文件,要生成从站信息,将该文件夹复制到开发板运行GenerateSlavesConfig.sh。 默认生成ec_common_configs_define.h和ec_common_...
AO3407A-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
03-13
SOT23;P—Channel沟道,-30V;-5.6A;RDS(ON)=47mΩ@VGS=10V,VGS=20V;Vth=-1V;
pdf简中字体用户jspdf功能开发
最新发布
03-13
pdf简中字体
东北林业大学《工程估价与施工组织》2020考研专业课复试大纲.pdf
03-13
东北林业大学考研复试大纲
东北林业大学922基础生命科学2021年考研专业课初试大纲.pdf
03-13
东北林业大学考研初试大纲
松下 igh ethercat
01-30
松下工业自动化系统公司开发的IGH EtherCAT是一种高性能的工业以太网通信协议。它采用了快速实时数据传输技术,具有低延迟和高稳定性的特点。IGH EtherCAT可以实现多种不同的设备之间的高速通信和数据交换,能够有效地提高工业自动化系统的运行效率和生产效益。
IGH EtherCAT采用了开放的标准协议和通信接口,可以实现设备之间的即插即用,简化系统的集成和维护。它还支持实时监控和远程控制,可以帮助用户实现智能化生产管理和远程维护。
作为一种先进的工业通信协议,IGH EtherCAT已经在众多行业中得到广泛的应用,包括汽车制造、机械制造、电子制造等领域。它可以满足复杂工业环境下的高速数据传输和实时控制需求,为企业提供了更加可靠和高效的自动化解决方案。
总的来说,IGH EtherCAT不仅具有高性能和稳定性,而且具有开放的标准接口和广泛的应用场景,可以为工业自动化系统的建设和应用带来更多的便利和价值。随着工业4.0和智能制造的发展,IGH EtherCAT必将在工业自动化领域发挥越来越重要的作用。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
EtherCat技术研究
CSDN认证博客专家
CSDN认证企业博客
码龄11年
暂无认证
84
原创
3万+
周排名
2万+
总排名
27万+
访问
等级
2392
积分
574
粉丝
168
获赞
261
评论
1119
收藏
私信
关注
热门文章
机内码、国际码、区位码换算
24861
各种ADC转换方式的优缺点
20211
IgH详解 一、概述
12652
IgH配置EtherCAT流程
12340
目前常用AD/DA芯片简介
7913
分类专栏
Linuxcnc-ethercat
1篇
IgH详解
23篇
arm_Linux
1篇
TCP/IP
1篇
S3C2440
18篇
EtherCAT
13篇
最新评论
IgH详解十二、IgH实现使用ENI文件配置从站(二)
EtherCat技术研究:
扫描跟兼容性关系不大,先要确保ethercat报文是否有正常收发
IgH详解二、主栈启动流程(二)
EtherCat技术研究:
要看你报文是否有超时,是否有丢包?用的实时网卡驱动吗?需要你根据自己环境去查
IgH详解十二、IgH实现使用ENI文件配置从站(二)
weixin_50007256:
大佬,我偶然会出现伺服和io的从站突然重启后扫描不上来的情况,重启前还是能扫描上来的,是因为兼容性的问题么。
IgH详解二、主栈启动流程(二)
weixin_50007256:
大佬,从站成功切到op之后,为了检测从站是否会断开,我判断ec_slave_config_state_t.online的值,出现有时候online为false的现象,但是从站状态一直是op,这是什么原因呢
IgH详解十、EtherCAT DC(4)主站做参考时钟和从站作参考时钟性能对比
records111:
大神你好,我想请教下你用从站作为参考时钟的话,主站的时钟是怎么被同步的呢,可以详细聊聊吗
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
倍福控制器搭建IgH环境
全志A40i PRREMPT-RT Linux平台搭建IgH环境
ubuntu 16.04 阿里软件源
2023年11篇
2022年18篇
2021年12篇
2019年3篇
2018年1篇
2015年2篇
2013年58篇
目录
目录
分类专栏
Linuxcnc-ethercat
1篇
IgH详解
23篇
arm_Linux
1篇
TCP/IP
1篇
S3C2440
18篇
EtherCAT
13篇
目录
评论 3
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
EtherCAT——PDO/SDO_ethercat pdo sdo-CSDN博客
>EtherCAT——PDO/SDO_ethercat pdo sdo-CSDN博客
EtherCAT——PDO/SDO
土拨鼠的日常
已于 2023-07-26 23:22:53 修改
阅读量3.9k
收藏
9
点赞数
3
分类专栏:
SOEM
文章标签:
运维
自动化
linux
于 2023-07-26 17:33:48 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a1347065101/article/details/131944246
版权
SOEM
专栏收录该内容
7 篇文章
4 订阅
订阅专栏
目录
数据传输方式:PDO/SDO
应用层协议
数据传输方式:PDO/SDO
主站与从站进行数据交互的方式主要通过PDO和SDO,即过程数据和邮箱数据其概念与CANOpen中的概念相同。
PDO(过程数据对象):过程数据用来传输周期性的数据,PDO由三个数据缓冲区组成,类似于一个FIFO,从站写入第一个缓冲区,主站从第三个缓冲区读走。注意第二个缓冲区不可操作。从站发送PDO和接受PDO各自采用两个独立的数据缓冲区。有同步管理器来控制缓冲区,每一个同步管理器只负责一种功能,例如同步管理器2负责发送PDO,同步管理器3负责接受PDO。SDO(服务数据对象):邮箱通信用来发送非周期性的数据,邮箱通信只有一个数据缓冲区,通信方式采用握手的机制确保主从之间的数据交互不丢失,而PDO由于采用FIFO的机制,可能会出现新值覆盖旧值或旧值被多次读走的情况。SDO也由同步管理器来进行管理,发送和接受邮箱独立控制,例如同步管理器0控制发送邮箱,同步管理器1控制接受邮箱。
应用层协议
COE (CANopen over EtherCAT) : 该协议是一个具有开放性的标准应用层协议。其中CANopen协议是基于CAN协议的链路层上实现的。EtherCAT协议在应用层支持CANopen协议,因此支持CANopen协议的从站可以被运用在EtherCAT协议上。SOE (Sercos over EtherCAT) : SERCOS是世界首个应用于伺服控制的协议。EtherCAT协议在应用层接口上兼容了这个协议,简称为SOE。SERCOS应用层协议为主站设计了信息接口,可以通过配置EtherCAT过程数据报文,实现周期性传递伺服驱动器的数据。EOE (EtherNet over EtherCAT) : 该协议支持EtherCAT能分段传递标准的以太网数据报文,使得EtherCAT协议同样能支持TCP/IP、UDP/IP协议。FOE (File Access over EtherCAT) : 该协议可以使用EtherCAT总线上传、下载固件,刷新从站的固件。并且可以通过命令行工具加载或存储文件。
优惠劵
土拨鼠的日常
关注
关注
3
点赞
踩
9
收藏
觉得还不错?
一键收藏
知道了
0
评论
EtherCAT——PDO/SDO
主站与从站进行数据交互的方式主要通过PDO和SDO,即过程数据和邮箱数据其概念与CANOpen中的概念相同。
复制链接
扫一扫
专栏目录
EtherCAT增加PDO读写寄存器
11-23
EtherCAT增加PDO读写寄存器
EtherCAT动态PDO映射的实现方法
06-05
作为EtherCAT协议栈的补充,实现PDO动态映射,是一个完整的EtherCAT从站必要的组成部分。
参与评论
您还未登录,请先
登录
后发表或查看评论
EtherCAT使用与解析-关于SDO与PDO关系
lswdcyy的博客
04-07
1万+
SDO和PDO都是基于CANopen的对象字典进行讨论的,CoE基于CANopen协议进行了补充,使之可以应用在EtherCAT上,两者都是建立在CANopen的对象字典之上的,且针对的对象字典是同一个。
PDO有一些是用于特殊功能的,并不能随便乱用!
关于CoE,有一些需要注意一下,就是RxPDO和TxPDO这两种其实本质上都是PDO,都是基于索引+子索引+数据大小的模式,不同之处在于,这两...
Ethercat PDO Mapping Doc
02-22
关于如何使用Ethercat, 以及Ethercat的配置PDO Mapping配置步骤。
EtherCAT 应用层协议
changexhao的专栏
05-18
3118
不对EtherCAT进行介绍,只谈谈对EtherCAT应用层协议的简单理解1、COE (CANopen over EtherCAT) 一种基于且完全遵循CANopen协议的通信协议 用途: 1、用于驱动PDO对象,实现PDO对象间数据通信 2、用于驱动SDO对象,实现SDO对象间的数据传输 分类: 1、周期性过程数据通信 – 驱动PDO ...
Ethercat + SSC + Twincat3(PDO+SDO)
demons_cbc的博客
07-17
1717
Ethercat、SSC、Twincat3(PDO+SDO)使用经验
机器人控制LinuxCNC与EtherCAT介绍&&PDO&SDO,搭建环境步骤
10-21
包括LinuxCNC、EtherCAT介绍,包含系统环境搭建、驱动安装、以及需要配置的文件。INI\HAL\XML配置。讲解EtherCAT通信原理,讲解LinuxCNC通信原理以及各部分模块的介绍。包含CAN协议的PDO过程数据对象和SDO服务数据对象的讲解等
IgH详解九、EtherCAT PDO原理(1)
EtherCAT
05-07
6852
过程数据对象 (PDO)
过程数据对象(PDO)是EtherCAT 从站在每个周期内传输的过程数据,是应用程序期望循环更新或发送到从站的用户数据(比如每个周期下发伺服的位置)。因此,EtherCAT 主站在启动阶段对每个 EtherCAT 从站进行参数化,以定义要与该从站传输或从该从站传输的过程数据(以位/字节为单位的大小、源位置、传输类型)
PDO的配置(PDO通过邮箱SDO配置,SDO如何下发数据见上一篇文章)
寄存0x1c12 RxPDO 0x1c13 TxPDO
下面以一次实际配置过程来
IgH详解八、EtherCAT SDO原理
EtherCAT
04-27
7621
主站通过使用 SDO对对象字典进行读取/写入操作,完成对从站设备进行参数设置、状态监视等。
从站SDO的读写是非实时的,所以需要多次访问来确保数据操作的正确性。
如下图写入操作,主站把数据发送到从站,从站返回WC确保数据收到,经过几个周期后主站发起响应查询,看从站是否有正确的写入数据。
从从站读取数据主站同样需要发起多次访问,以确保数据正确读取
下面我们看下SDO是怎么封装到EtherCAT中的?
邮箱协议
从站的SM0,SM1同步管理做为邮箱通信使用,当有邮箱数据时会.
CANopen通信之PDO通信
weixin_34273479的博客
02-20
1727
CANopen通信之PDO通信
过程数据对象(ProcessDataObject,PDO)是用来传输实时数据的,提供对设备应用对象的直接访问通道,它用来传输实时短帧数据,具有较高的优先权。PDO传输的数据必须少于或等于8个字节,PDO的CAN报文数据域中每个字节都用作数据传输,因此,在应用层上不包含传输控制信息,报文利用率极高。
P...
总线/通信笔记3 —— PDO与SDO的区别
罗伯特祥的博客
12-23
1万+
PDO:过程数据对象(Process Data Object),过程数据的发送,实时、速度快,提供对设备应用对象的直接访问通道,它用来传输实时短帧数据,具有较高的优先权。PDO 传输的数据必须少于或等于 8 个字节,在应用层上不包含传输控制信息,报文利用率极高。
SDO:服务数据对象(Service Data Obiect),服务数据的发送接收,实时性要求不高,SDO一般用来配置和获得节点...
Ethercat PDO Mapping Doc(松下)
02-22
松下的Ethercat驱动器使用手册,以及关于如何使用Ethercat配置PDO等内容
EtherCAT 应用层协议的部分理解(一)
热门推荐
王三三
06-22
2万+
不对EtherCAT进行介绍,只谈谈对EtherCAT应用层协议的简单理解1、COE (CANopen over EtherCAT) 一种基于且完全遵循CANopen协议的通信协议 用途:
1、用于驱动PDO对象,实现PDO对象间数据通信
2、用于驱动SDO对象,实现SDO对象间的数据传输 分类:
1、周期性过程数据通信 – 驱动PDO
EtherCAT通信主站----PDO过程数据映射
weixin_43956732的博客
09-07
1万+
EtherCAT通信主站----PDO过程数据映射FMMU与Sync Manager配置PDO过程数据映射PDO映射PDO分配PDO 映射的步骤
EtherCAT其中COE在数据链路层采用EtherCAT协议,在运用层采用CanOpen协议,其和兴是对象字典,对PDO和SDO相关知识,可以参考CanOpen通信----PDO与SDO,本文将只PDO的映射相关知识。
FMMU与Sync Manager配置
为了使SDO与PDO数据能在EtherCAT数据链路层上得到正确解析,需要对FMMU与Sync Mana
CanOpen通信----PDO与SDO
weixin_43956732的博客
06-07
2万+
CanOpen通信----PDO与SDO
CANopen通信----PDO与SDO
波波诸葛伟
07-22
3828
https://blog.csdn.net/weixin_43956732/article/details/106606670
Ethercat解析(十一)之分布时钟
absinjun的博客
08-14
1万+
驱动代码中,同步时钟涉及到如下几个概念:
⑴ 本地时钟:每一个支持DC的从站都有一个纳秒级分辨率的本地时钟寄存器。
每次从机上电,则寄存器从0开始计时,这就意味着不同的从机因为上电开机的时间不同而本地时钟也会有差异,所以需要对从机的本地时钟对比参考时钟进行偏移补偿。再者,从机的时钟一般由时钟单元为参考,所以每个从机的时钟频率也会有极小的误差,但是由于这种极小的误差在长时间的工作中会累积,所...
PostgreSQL教程(三十二):服务器管理(十四)之监控磁盘使用
最新发布
mr~li的博客
03-11
465
本章讨论如何监控PostgreSQL数据库系统的磁盘使用情况。
EtherCAT pdo sdo ceo
05-19
EtherCAT(Ethernet for Control Automation Technology)是一种用于实时控制的高性能工业以太网通信协议。在 EtherCAT 中,PDO(Process Data Object)是用于实时数据传输的机制,SDO(Service Data Object)是用于配置和监视设备的机制,CEO(Cyclic Executive Object)是用于周期性执行任务的机制。
PDO 是 EtherCAT 中最基本的数据传输方式,用于实时传输控制数据。而 SDO 则是用于配置和监视设备的机制,可以通过 SDO 对设备进行参数配置、状态查询等操作。CEO 则是用于周期性执行任务,它可以实现周期性地发送数据、控制等操作,以满足实时控制的要求。
这三种机制在 EtherCAT 中起到了不同的作用,是 EtherCAT 实现实时控制的重要组成部分。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
土拨鼠的日常
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
37
原创
12万+
周排名
3万+
总排名
7万+
访问
等级
942
积分
61
粉丝
111
获赞
25
评论
284
收藏
私信
关注
热门文章
使用Matlab读取二进制数据文件
16626
C#如何将数据用16进制数来显示
7998
VS2015社区版、企业版、专业版下载官网地址
5914
倍福TwinCAT实现正弦Sin曲线加减速轨迹规划
5194
MATLAB使用importdata读取文本文件
4994
分类专栏
备忘录
1篇
SOEM
7篇
电机
1篇
C++
3篇
Linux
13篇
VSCODE
3篇
倍福Beckhoff
3篇
ROS
1篇
西门子
1篇
Matlab
3篇
C#
1篇
最新评论
Linux pthread详解
土拨鼠的日常:
https://hkrb7870j3.feishu.cn/docx/SCX6dcQdhocxcgxIQLXc5OLwn9f?from=from_copylink
Linux pthread详解
土拨鼠的日常:
https://hkrb7870j3.feishu.cn/docx/SCX6dcQdhocxcgxIQLXc5OLwn9f?from=from_copylink
Linux pthread详解
土拨鼠的日常:
https://hkrb7870j3.feishu.cn/docx/SCX6dcQdhocxcgxIQLXc5OLwn9f?from=from_copylink
倍福TwinCAT实现正弦Sin曲线加减速轨迹规划
土拨鼠的日常:
原理都一样
aruco_ros使用
苏三福:
是画面都显示不出来是为什么啊
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
Linux下编译EtherCAT主站SOEM-1.4.1
倍福控制器ST语言,Elmo电机上使能,DS402协议
VS2015定时运行程序,100ms触发一次
2024年6篇
2023年16篇
2022年2篇
2020年12篇
2019年2篇
目录
目录
分类专栏
备忘录
1篇
SOEM
7篇
电机
1篇
C++
3篇
Linux
13篇
VSCODE
3篇
倍福Beckhoff
3篇
ROS
1篇
西门子
1篇
Matlab
3篇
C#
1篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
EtherCAT SDO分段下载/上传说明_ethercat通讯协议 下载-CSDN博客
>EtherCAT SDO分段下载/上传说明_ethercat通讯协议 下载-CSDN博客
EtherCAT SDO分段下载/上传说明
最新推荐文章于 2023-06-19 19:13:43 发布
盐厂的伙计
最新推荐文章于 2023-06-19 19:13:43 发布
阅读量2.4k
收藏
14
点赞数
3
分类专栏:
EtherCAT
文章标签:
EtherCAT
COE
SDO
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Terrys0518/article/details/106673429
版权
EtherCAT
专栏收录该内容
8 篇文章
6 订阅
订阅专栏
ETherCAT COE (CANOpen)的 SDO 属于应用层通讯协议,基于同步管理器(SM)的邮箱实现的,主站可以通过SDO实现一下功能。
对应邮箱消息数据格式如下
其中分段下载和分段上传请求和响应较为特殊,ETG 1000-4手册上对整个通讯过程讲解不够清晰,下面是我个人的理解。
分段下载的过程
①. 客户端发送“常规下载请求”,包含数据(写满SM设定缓存区)给服务器 --> 服务器接收到数据后,判断 Complete Size > Size,且数据包完整无逻辑错误(发送的数据长度必须等于SM设定缓存,否则视为错误),断定客户端还有数据未发出(标记下一接收为 “段下载请求”),保存接收到的数据并发送“常规下载请求响应”通知客户端。
②. 客户端发出 "段下载请求"给服务器,标记Toggle = 0 ,Follows = TRUE(还有下一帧,否则为FALSE最后一帧)--> 服务器接收到数据后,下载数据,发送应答(toggle = 0)。
③. 客户端发出 "段下载请求"给服务器,标记Toggle = 1 (翻转),Follows = TRUE(还有下一帧,否则为FALSE最后一帧)--> 服务器接收到数据后,下载数据,发送应答(toggle = 1)。
....
⑥. 客户端发出 "段下载请求"给服务器,标记Toggle = (-1)^(n-1) (翻转),Follows = FALSE(最后一帧)--> 服务器接收到数据后,下载数据,合成并解析数据到对应的对象字典,再发送应答(toggle)。
以上是我阅读ETG1000协议的学习理解,欢迎指正。
优惠劵
盐厂的伙计
关注
关注
3
点赞
踩
14
收藏
觉得还不错?
一键收藏
知道了
3
评论
EtherCAT SDO分段下载/上传说明
ETherCAT COE (CANOpen)的 SDO 属于应用层通讯协议,基于同步管理器(SM)的邮箱实现的,主站可以通过SDO实现一下功能。对应邮箱消息数据格式如下其中分段下载和分段上传请求和响应较为特殊,ETG1000-4手册上对整个通讯过程讲解不够清晰,下面是我个人的理解。 分段下载的过程①. 客户端发送“常规下载请求”,包含数据(写满SM设定缓存区)给服务器 --> 服务器接收到数据后,判断 Complete Size > Si...
复制链接
扫一扫
专栏目录
EtherCAT协议中文版.zip
03-19
EtherCAT协议中文版V1.0.2
EtherCAT——PDO/SDO
a1347065101的博客
07-26
3918
主站与从站进行数据交互的方式主要通过PDO和SDO,即过程数据和邮箱数据其概念与CANOpen中的概念相同。
3 条评论
您还未登录,请先
登录
后发表或查看评论
IgH EtherCAT Master 说明手册
11-23
IgH EtherCAT Master 架构和使用详细说明
EtherCAT实时以太网从站官方协议栈,包含SSC Tool从站配置软件,5.11版本.zip
04-12
EtherCAT实时以太网从站官方协议栈,包含SSC Tool从站配置软件,5.11版本
EtherCAT规范大全-EtherCAT技术说明
02-23
EtherCAT(以太网控制自动化技术)是一个以以太网为基础的开放架构的现场总线系统,EtherCAT名称中的CAT为Control Automation Technology(控制自动化技术)首字母的缩写。最初由德国倍福自动化有限公司(Beckhoff Automation GmbH) 研发。EtherCAT为系统的实时性能和拓扑的灵活性树立了新的标准,同时,它还符合甚至降低了现场总线的使用成本。EtherCAT的特点还包括高精度设备同步,可选线缆冗余,和功能性安全协议(SIL3)。
IgH详解八、EtherCAT SDO原理
EtherCAT
04-27
7621
主站通过使用 SDO对对象字典进行读取/写入操作,完成对从站设备进行参数设置、状态监视等。
从站SDO的读写是非实时的,所以需要多次访问来确保数据操作的正确性。
如下图写入操作,主站把数据发送到从站,从站返回WC确保数据收到,经过几个周期后主站发起响应查询,看从站是否有正确的写入数据。
从从站读取数据主站同样需要发起多次访问,以确保数据正确读取
下面我们看下SDO是怎么封装到EtherCAT中的?
邮箱协议
从站的SM0,SM1同步管理做为邮箱通信使用,当有邮箱数据时会.
基于am5728芯片的ethercat和ROS开源协议栈的配置流程-2-源码的下载及编译
PlutoZuo的博客
06-19
118
【代码】基于am2578芯片的ethercat和ROS开源协议栈的配置流程-2-源码的下载及编译。
EtherCAT 应用层协议的部分理解(一)
热门推荐
王三三
06-22
2万+
不对EtherCAT进行介绍,只谈谈对EtherCAT应用层协议的简单理解1、COE (CANopen over EtherCAT) 一种基于且完全遵循CANopen协议的通信协议 用途:
1、用于驱动PDO对象,实现PDO对象间数据通信
2、用于驱动SDO对象,实现SDO对象间的数据传输 分类:
1、周期性过程数据通信 – 驱动PDO
倍福EtherCAT终端Modbus TCP/UDP 总线耦合器手册
01-30
倍福EtherCAT终端Modbus TCP/UDP 总线耦合器手册.
EK系列总线耦合器允许EtherCAT终端在传统的总线系统中工作. 其中 EK9000 支持 Ethernet Modbus TCP/UDP总线.
基于Infineon XMC4800 EtherCAT Slave Digital I/O模组之工业自动化通讯控制方案-电路方案
04-20
1.EtherCAT为目前最快速之工业网络技术,优点为国际标准安全协议、高效率低成本、精确同步、灵活拓朴结构、冗馀回复功能。
2.因应工业4.0智慧制造智慧工厂等工业自动化市场需求的增加,InfineonMCUXMC4800集成提供EtherCATSlave工业乙太网路控制技术,实现工业自动化控制、智慧生产制造机器人、远端总线监控等应用。
3.InfineonXMC4800/XMC4300为EtherCAT协会会员产品,客户可基于XMC4800开发EtherCATslave远端AIO/DIO模组、EtherCATP电源、EtherCATslave马达运动控制器、机械手臂……等工控产品。
4.展示板XMC4800集成MCU和EtherCATslaveASIC,应用于EtherCATSlave产品。
5.EtherCATMasterPC使用开源工具TwinCAT3监控Slave。
6.8通道ISOFACE数位输入接口可监视8个设备节点,8通道ISOFACE数位输出接口可控制8个设备节点,目前广泛应用于工厂自动化和楼宇自动化产品。
场景应用图产品实体图展示板照片方案方块图核心技术优势一、芯片优势:
1. XMC4800 MCU based on ARM Cortex-M4 at 144 MHz, 2 MB flash and 352 KB SRAM.
2. XMC4800 integrated Beckhoff ET1100 EtherCAT ASIC, interface capable of 100 Mbit/s transfer rates with 2 MII ports.
3. 通讯单元:Ethernet, USB, CAN bus, UART, SPI, IIC, IIS, external memory, SD/MMC card.
4. 外设单元:ADC 12-bit, DAC 12-bit, POSIF and DSD for motor control.
5. PWM CCU4/CCU8 support capture, compare, timer, counter, mosfet dead time.
二、EtherCAT slave demo:
1. 软体工具说明:
(1) XMC_ESC excel:定义 Isoface 8ch DI/8ch DO位址和输出输入格式。
(2) Beckhoff Slave Stack Code Tool:简称SSC Tool为代码产生器,产生EtherCAT SSC code and ESI file.
(3) DAVE4:Infineon XMC IDE.
(4) TwinCAT2/TwinCAT3:EtherCAT master monitor.
2. XMC_ESC 定义 EtherCAT slave设备位址和输出输入格式。
3. SSC tool代码产生器,产生SSC code, ESI file和ETG产品资讯。
4. XMC_ESC.c 撰写展示板对应位址和通道之程式。
5. DAVE4撰写XMC4800 and EtherCAT slave 应用层,打通EtherCAT slave控制。
6. TwinCAT3为EtherCAT monitor,模拟控制工厂远端设备节点。
方案规格1. Infineon XMC4800集成支持工业乙太网路从站自动化控制应用。
2. EtherCAT slave controller support 1 MII port input, 1MII port output.
3. 24V 8通道数位输入模组,具备电源隔离与故障保护,可监控工厂设备输入讯号。
4. 24V 8通道数位输出模组,具备电源隔离与故障保护,可远端控制工厂设备输出讯号。
5. OPTIGA Trust E 适用于工业自动化系统,增强系统安全性。
6. 展示板通讯接口,整合工业远端控制:EtherCAT slave, Ethernet, CAN bus, micro USB, external SDRAM, external FRAM.
7. IDE DAVE4 example code for basic EtherCAT physical layer evaluation.
8. Beckhoff slave stack code tool for EtherCAT software support.
9. Third-party driver tools for full EtherCAT application and charge support.
10. TwinCAT 3 support EtherCAT master.
本方案来源“大大通”
EtherCat从站开发使用说明
04-12
1-EtherCAT从站开发板使用说明;
2-EtherCAT SPI通信程序流程分析;
3-EherCAT从站代码架构解析;
4-EtherCAT_ET1100_Datasheet_all_v1i8-解锁;
5-Twincat支持EtherCAT的intel 网卡列表(芯片型号);
6-从Beckhoff ET1100到Microchip LAN9252的移植;
7-工业以太网现场总线EtherCAT驱动程序设计及应用。
EtherCAT分布式时钟同步过程的理解
Terrys0518的专栏
05-24
1万+
分布式时钟(Distributed Clock,DC)可以使所有EtherCAT设备使用相同的系统时间,从而控制各个设备任务的同步执行。从站可以根据同步的系统时间产生同步信号,用于中断控制或触发数字量输入/输出。支持分布式时钟的从站称为DC从站。
时钟术语的描述
Local system time 即本地系统时间,每个DC从站的本地时钟经过补偿和同步之后,都产生本地系统时间,分布时钟同步机制就是使各个从站的本地系统时间保持一致。参考时钟与本地系统时钟对应。
参考时钟和从时钟 EtherCAT...
EtherCAT 之邮箱
Terrys0518的专栏
05-25
8702
EtherCAT特点
由于工作需要, 最近在学习EtherCAT总线,对于主站和从站的通信,发表一下我个人的理解。
1. EtherCAT为保证低延迟高响应,不可能像MODBUS一样用软件解析数据包再转发的模式,而是采用“高速火车”不停车上下车的方式,不停车指的是底层转发完全靠硬件实现流处理,自动加载和提取数据,上层需配置相应的寄存器即可。
2. 通信兼容,最大化兼容以太网现有的设备,配置好上位机软件,可以直接使用电脑控制(需要一些实时性优化)。
从站协议状态机(硬件)
底层由硬件状态机处理,
EtherCAT偏移时间的理解
Terrys0518的专栏
01-12
3553
在使用TwinCAT测试伺服时,有一个参数引起我的重视。
上图为TwinCAT上设置的偏移时间的接口
从站侧观察,在EtherCAT的DC模式下(同步模式),从站先使用PDI中断接收主站发来的数据(帧解析由ESC完成),然后在DC中断(一般sync0中断)处理数据,比如开关一个IO 或者写入指令到设备的控制环等等。这里的PDI和Sync0中断的间隔时间,就是所谓的偏移时间。
上图横轴为时间,纵轴为设备报文的位置
结合主站看(上图),主站定时发送数据帧,从站接收数据帧,距离越远的从站,接收
EtherCAT从站 SII结构说明
Terrys0518的专栏
09-21
2532
EtherCAT从站简称ESC,ESC在上电过程中,会自动加载EEPROM中前7个字(1word = 2 byte)到ESC寄存器。ESC寄存器总是可以被EtherCAT主站通过EtherCAT总线访问,无论PDI接口寄存器配置什么值。
EEPROM存储器(SII信息)中的前7个字,将决定ESC的工作模式。
下图为SII信息,已经其前7个字对应ESC寄存器的映射关系。
ESC寄存器信息参考文档ethercat_esc_registers.pdf
如PDI
等等
因此SII信息的前7.
EtherCAT ESI文件中Imagedata16X14图像的编辑
Terrys0518的专栏
02-25
2066
使用Altova XMLSpy 打开EtherCAT从站设备的Xml文件,里面有个厂商和设备的Logo小图片,如何看到图片内容和编辑图片呢
1. 根据首位的两个字节,424D对于Ascii码为“BM”,表示这是个bmp格式的文件。
2. 使用HexEdit工具,新建一个空白的文件,这里使用了软件Hex Editor Neo工具,将图像数据粘贴到hex文件中。
3. 文件另存为logo.bmp,即bmp格式的文件
4. 用画图板打开logo.bmp,就可以看到图片内容,修改后保存,反向操作可...
igh sdo 配置
最新发布
11-05
IGH是控制工业机器人系统的一种协议,它定义了机器人与控制器之间的通信规则和数据格式。SDO是一个字节顺序的TCP/IP协议,用于在网络上传输数据。IGH SDO配置是指在工业机器人系统中配置IGH协议和SDO协议的过程。
IGH SDO配置的目的是确保机器人能够正确地与控制器进行通信,并实现控制和监控功能。配置过程一般包括以下几个步骤:
1. 确定机器人和控制器的网络连接方式:可以通过有线或无线网络连接机器人和控制器。需要确保网络连接稳定并能够满足数据传输的要求。
2. 配置机器人和控制器的网络参数:包括IP地址、子网掩码、网关等。需要确保机器人和控制器在同一个局域网中,并且能够互相通信。
3. 配置IGH协议和SDO协议的参数:包括通信速率、数据格式、错误处理等。需要根据具体的机器人和控制器型号,按照它们的规格手册进行配置。
4. 进行测试和调试:配置完成后,需要进行测试和调试,确保机器人和控制器能够正常通信,并能够实现控制和监控功能。
IGH SDO配置工作的完成需要具备一定的网络和通信知识,同时需要对机器人的控制系统有一定的了解。配置过程中需要仔细阅读机器人和控制器的规格手册,并按照要求进行操作。
IGH SDO配置的正确与否直接影响到工业机器人系统的稳定性和性能。因此,在配置过程中需要认真对待,确保配置的准确性和可靠性。当出现问题时,需要及时排查和解决,以保证系统的正常运行。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
盐厂的伙计
CSDN认证博客专家
CSDN认证企业博客
码龄12年
暂无认证
39
原创
4万+
周排名
138万+
总排名
37万+
访问
等级
3339
积分
188
粉丝
291
获赞
141
评论
1733
收藏
私信
关注
热门文章
串级PID控制(多闭环PID控制)的理解
33807
一种串口两线的 TTL 转 485的电路
21148
Matlab下 IIR 滤波器实现(Simulink仿真和C语言实现)
20590
传递函数极点和零点的几何表示
18459
Matlab 的几种曲线的绘制方法
18118
分类专栏
EtherCAT
8篇
算法点滴
2篇
C语言语法
电机杂谈
1篇
Qt
4篇
python
1篇
嵌入式软件
20篇
电路总结
5篇
PID控制
4篇
功率测量
1篇
单片机
5篇
matlab
12篇
奇思妙想
2篇
control theory
2篇
信号与系统
2篇
最新评论
pahoMQTT+SIM800C+STM32 移植和使用
sharp_OvO:
楼主大神,求分享一份完整代码,
1318897738@qq.com,非常感谢!
pahoMQTT+SIM800C+STM32 移植和使用
magpie_XJ:
大佬 你移植到stm32上了吗?可以加个联系方式指导下吗
pahoMQTT+SIM800C+STM32 移植和使用
pai314159267:
楼主大神,求分享一份完整代码,
206223288@qq.com,非常感谢!
二次插值
DA_Sk1:
任意选值
pahoMQTT+SIM800C+STM32 移植和使用
yyryg:
楼主大神,求分享一份完整代码,
467638352@qq.com,非常感谢!
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
EtherCAT偏移时间的理解
二次插值
C语言技巧一 全局变量定义
2022年1篇
2021年3篇
2020年24篇
2019年11篇
2018年19篇
目录
目录
分类专栏
EtherCAT
8篇
算法点滴
2篇
C语言语法
电机杂谈
1篇
Qt
4篇
python
1篇
嵌入式软件
20篇
电路总结
5篇
PID控制
4篇
功率测量
1篇
单片机
5篇
matlab
12篇
奇思妙想
2篇
control theory
2篇
信号与系统
2篇
目录
评论 3
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
Ethercat解析之命令行工具的使用教程 - 知乎
Ethercat解析之命令行工具的使用教程 - 知乎首发于IT技术专栏切换模式写文章登录/注册Ethercat解析之命令行工具的使用教程iiidd777IT技术分享及教程说明:EtherCAT为了方便用户空间对主站进行调试,因此提供一套用户空间使用的工具来设置从站参数,观察调试信息等等。正常情况下,每个主站的实例都会生成一个字符设备,名字为:/dev/EtherCATx。欲想深入了解其他命令,可通过执行ethercat –help命令来查看详细使用方法。下面具体的介绍了一下各参数及命令的使用,其中[ ]中为必选参数,< >为可选参数。1.1 设置别名地址命令:ethercat alias [ OPTIONS ] < ALIAS >参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;* –force -f:匹配所有从站;例子:sudo ethercat alias –position 0 0x2000解析:将在bus总线上对应的从站0的别名(默认为0)为0x2000;注意:必须有从站连接才能使用此命令。1.2 显示总线配置命令:ethercat config [ OPTIONS ]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;* –verbose -v:显示详细信息;例子:sudo ethercat config -v解析:显示所有从站的详细配置信息。注意:必须启动应用程序才能使用此命令查看。1.3 以C语言的形式输出PDO信息说明:生成的PDO信息可以直接被应用层的ecrt_slave_config_pdos()函数调用。命令:ethercat cstruct [ OPTIONS ]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;例子:sudo ethercat cstruct -a 100解析:输出别名为100的从站的PDO信息。注意:必须有从站连接才能使用此命令。1.4 显示过程数据说明:输出二进制的过程数据。命令:ethercat data [ OPTIONS ]参数:* –domain -d :域的索引值,假如不填写参数则显示所有过程数据。例子:sudo ethercat data解析:显示所有PDO过程数据。注意:必须启动应用程序才能使用此命令查看。1.5 设置主站调试级别说明:设置主站的调试级别,调试信息将输出在/var/log/syslog文件中。命令:ethercat debug其中可有以下情况:* 0 : 无任何调试信息输出* 1 : 输出部分调试信息* 2 : 输出所有的帧的内容(由于输出信息较多,请谨慎使用)例子:sudo ethercat debug 1解析:打开部分调试信息输出1.6 配置域说明:显示域的信息。命令:ethercat domains [ OPTIONS ]参数:* –domain -d :根据索引号,匹配域;* –verbose -v:显示域的详细信息(FMMU和过程数据的信息);例子:① sudo ethercat domains执行后显示Domain0:LogBaseAddr 0x00000000, Size 12, WorkingCounter 0/3以上各字段的含义:* LogBaseAddr:逻辑寻址的逻辑基地址;* Size:域交换数据的字节数;* WorkingCounter:第一个数字是WKC的当前值,第二个数字是WKC的期望值;解析:显示域的基本信息。② sudo ethercat domains -v执行后显示Domain0:LogBaseAddr 0x00000000, Size 12, WorkingCounter 3/3SlaveConfig 0:0, SM2 (Output), LogAddr 0x00000000, Size 6 06 00 9d aa 00 00SlaveConfig 0:0, SM3 (Input), LogAddr 0x00000000, Size 6 31 0a 9d aa 00 00以上各字段的含义:* SlaveConfig:从机配置信息,主要包含别名和地址(绝对地址或相对地址);* SM2:同步管理器2;* LogAddr:FMMU映射的地址;* Size:映射地址的大小;* 数据位:十六进制显示的过程数据;解析:显示域的详细信息(FMMU和过程数据的信息)。注意:必须启动应用程序才能使用此命令查看。1.7 访问SDO说明:向从站写一条PDO条目。命令:ethercat download [ OPTIONS ]参数:⑴ 可选参数:* INDEX:16位无符整型的SDO索引;* SUBINDEX:8位无符整型的SDO子索引;* VALUE:需写入的SDO的值⑵ [ OPTIONS ]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;* –type -t :SDO条目的数据类型;type可使用的类型有:bool、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float、double、string、octet_string、unicode_string对于sign-and-magnitude coding有:sm8、sm16、sm32、sm64例子:sudo ethercat download -t int16 -p 0 0x6060 00 08解析:向从站0的索引号为0x6060(16位),子索引号为00(8位)的地址写入PDO条目值”0x08“;1.8 访问SDO说明:向从站读取一个SDO条目。命令:ethercat upload [ OPTIONS ]参数:⑴ 可选参数:* INDEX:16位无符整型的SDO索引;* SUBINDEX:8位无符整型的SDO子索引;⑵ [ OPTIONS ]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;* –type -t :SDO条目的数据类型;type可使用的类型有:bool、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float、double、string、octet_string、unicode_string对于sign-and-magnitude coding有:sm8、sm16、sm32、sm64例子:sudo ethercat upload -t int16 -p 0 0x6060 00解析:读取从站0中索引号为0x6060(16位),子索引号为00(8位)的SDO条目。注意:必须有从站连接才能使用此命令。1.9 输出EOE统计信息说明:显示EOE的统计信息,包括主站的发送率和接收率(Byte/s)。命令:ethercat eoe参数:无1.10 FOE通信⑴ 通过FOE读取从站的文件。命令:ethercat foe_read [ OPTIONS ]参数:① 可选参数* :为从站中的源文件;② [ OPTIONS ]参数* –output -file -o :为读取数据的存储文件,缺省的话数据将读取到stdout;* –alias:匹配从站的别名;* –position:匹配从站的绝对位置;⑵ 通过FOE向从站存储文件。命令:ethercat foe_write [ OPTIONS ]① 可选参数* :为要发送的文件(指定路径+文件名),也可以为” - “,表示从标准输入中读取文件;② [ OPTIONS ]参数* –output -file -o :为从站存储的目标文件名,假如不指定名字,则为主站发送 FILENAME的去掉路径的名字;* –alias:匹配从站的别名;* –position:匹配从站的绝对位置;1.11 创建一个拓扑图形说明:输出总线拓扑图。命令:ethercat graph [ OPTIONS ]例子:sudo ethercat graph | dot -Tsvg > ~/Desktop/bus.svg解析:将总线拓扑图输出到桌面。1.12 主站和以太网设备说明:显示主站和以太网设备信息。命令:ethercat master [ OPTIONS ]参数:* –master -m :indices为主站的索引。默认显示所有的设备信息;例子:sudo ethercat master解析:显示所有主机的设备信息(发送帧、接收帧、参考时钟、应用时间)。注意:欲想显示应用时间需启动应用程序。1.13 同步管理,PDOs,PDO条目说明:显示出同步管理器的参数和PDO任务和映射信息。命令:ethercat pdos [OPTIONS]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;* –skin -s :”skin”可选择”default“和”etherlab“;例子:sudo ethercat pdos -p 0 -s default执行后显示:SM2:PhysAddr 0x1400, DefaultSize 64, ControlRegister 0x34, Enable 1RxPDO 0x1600 “Receive PDO1 Mapping”PDO entry 0x6040:00, 16 bit, ” ”PDO entry 0x607a:00, 32 bit, ” “以上各字段的含义:⑴ 同步管理器信息* SM2:同步管理器2;* PhysAddr:物理地址开始地址;* DefaultSize:默认数据大小;* ControlRegister:控制寄存器;* Enable:使能字⑵ 显示PDO方向,索引值,PDO名字* RxPDO:代表从站发送数据的方向(从站接收数据);* 0x1600:PDO的索引值;* “Receive PDO1 Mapping”:PDO的名字;⑶ 显示PDO条目的索引和子索引(都是以16进制的形式现实的),显示位宽和描述* 0x6040:00 : 表示索引和子索引;* 16bit:表示该条目的位宽;* ” “:表示该位的描述;1.14 寄存器访问⑴ 获取对应从站寄存器的内容命令:ethercat reg_read [ OPTIONS ][ SIZE ]参数:① 可选参数* ADDRESS:16位无符号的寄存器地址;* SIZE:要读取的对应寄存器字节数(16位无符号值);[ SIZE ] + ADDRESS不能超过64K,假如type参数隐含要读取的字节数,则可以忽略掉[ SIZE ]参数;② [ OPTIONS ]参数* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;* –type -t :匹配数据类型;type可使用的类型有:bool、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float、double、string、octet_string、unicode_string对于sign-and-magnitude coding有:sm8、sm16、sm32、sm64例子:sudo ethercat reg_read -p 6 -t sm32 0x092c解析:获取从站6的0x092C寄存器所存储的值。⑵ 将内容写入指定从站寄存器命令:ethercat reg_write [ OPTIONS ]参数:① 可选参数* ADDRESS:16位无符号的寄存器地址;* DATA:要写入寄存器的数据;假如制定了”type”数据类型,那么”DATA”根据指定的数据类型对数据进行解析;假如未指定”type”数据类型,则”DATA”可以为指定的文件或将”DATA”设置为” - “,表示从标准输入中获得数据;② [ OPTIONS ]参数* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对地址;* –type -t :匹配数据类型;* –emergency -e:以紧急的方式请求写入文件;例子:sudo ethercat reg_write -p 5 -t sm32 0x092c 200解析:向从站5的寄存器0x092c写入数据200。1.15 SDO字典说明:列出SDO字典(SDO信息和SDO条目信息)。命令:ethercat sdos [ OPTIONS ]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;* –quiet -q:只输出PDOs,不输出PDO条目信息;例子:sudo ethercat sdos执行后显示SDO 0x1000,”Device type”0x1000:0, r-r-r-, uint32, 32 bit, “Device type”12SDOs:SDO 0x1000,”Device type”* 0x1000:SDO索引值;* “Device type”:SDO名字;SDO条目:0x1000:0, r-r-r-, uint32, 32 bit, “Device type”* 0x1000:0:索引值及子索引值;* r-r-r-:表示访问权限;* uint32:表示该条目的数据类型;* 32bit:表示该条目的位宽;* “Device type”:对该条目的描述;1.16 SII访问⑴ 读取从站的SII内容命令:ethercat sii_read [OPTIONS]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;* –verbose -v:分类显示数据文本内容;例子:① sudo ethercat sii_read -p 0 -v解析:以分类数据文本形式显示sii的内容;② sudo ethercat sii_read -p 0 | hexdump解析:以16进制形式显示sii的内容;③ sudo ethercat sii_read -p 0 > Backup.bin解析:将sii的内容备份到Back.bin文件下;注意:必须有从站连接才能使用此命令。⑵ 向从站写入sii内容命令:ethercat sii_write [ OPTIONS ]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对位置;* –force -f:不进行有效检查;例子:sudo ethercat sii_read -p 0 Backup.bin解析:将Backup.bin的内容写入从站0的SII中。注意:必须有从站连接才能使用此命令。1.17 显示从站的信息说明:显示总线上的从站的信息。命令:ethercat slaves [ OPTIONS ]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对地址;* –verbose -v:显示从站的详细信息;例子:sudo ethercat slaves -v解析:显示所有从站的详细信息。1.18 SOE IDN访问说明:读取从站的SOE IDN。命令:ethercat soe_read [ OPTIONS ]参数:① 可选参数* DRIVE:驱动号【0 - 7】,缺省默认为0;* IDN:② [ OPTIONS ]参数* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对地址;* –type -t :匹配数据类型;type可使用的类型有:bool、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float、double、string、octet_string、unicode_string对于sign-and-magnitude coding有:sm8、sm16、sm32、sm641.19 请求应用层转换状态机说明:请求应用层转换状态。命令:ethercat states [ OPTIONS ]参数:⑴ 可选参数* STATE:可选的参数有INIT、PREOP、BOOT、SAFEOP、OP;⑵ [ OPTIONS ]参数* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对地址;例子:sudo ethercat states -p 0 OP解析:将从站0的状态切换为OP;注意:必须有从站连接才能使用此命令。1.20 显示主站版本说明:显示主张的版本。命令:ethercat version [ OPTIONS ]1.21 生成从站配置描述说明:生成从站信息描述文件。命令:ethercat xml [ OPTIONS ]参数:* –alias -a :匹配从站的别名;* –position -p :匹配从站的绝对地址;例子:sudo ethercat xml -p 0解析:生成从站0的从站信息描述文件并显示出来开启系统后,用户主要需要进行从站配置与PDO映射、域操作功能,然后就可以进行PDO交换了,当然,这个过程是基于主站状态机在后台完成了庞大的扫描工作后我们才得以进行这些操作的:1. 1.ec_master_t *ecrt_request_master(unsigned int master_index);2. 2.ec_domain_t *ecrt_master_create_domain(ec_master_t *master);3. 3.ec_slave_config_t *ecrt_master_slave_config(ec_master_t *master,uint16_t alias, uint16_t position, uint32_t vendor_id, uint32_t product_code);4. http://4.int ecrt_slave_config_reg_pdo_entry(ec_slave_config_t *sc,uint16_t index, uint8_t subindex,ec_domain_t *domain,unsigned int *bit_position);5. http://5.int ecrt_master_activate(ec_master_t *master);6. 6.uint8_t *ecrt_domain_data(ec_domain_t *domain);7. 7.void ecrt_domain_queue(ec_domain_t *domain);8. 8.void ecrt_master_send(ec_master_t *master);以上,就是配置PDO基本需要使用到的函数,当然,主站程序运行在内核空间,应用层需要一种方式实现对内核调用。通过open主站创建的字符设备/dev/EtherCAT就是这一目的。首先第一个函数ecrt_request_master(),负责打开字符设备文件,传入参数为使用主站索引(使用/etc/init.d/ethercat开启系统的时候可以一次性传入多个MAC地址从而开启多个主站,不同主站创建不同字符设备,如:/dev/EtherCAT0、/dev/EtherCAT1...),而这个索引就是用于开启对应的字符设备,从而使用不同的主站,使用open接口打开,然后返回文件描述符,该文件描述符用于ioctl调用对应主站功能。另外在申请到主站后就不在允许进行总线的重新扫描,固化了主站连接的从站链表,且设置从站状态当前申请状态为PREOP;第二个函数ecrt_master_create_domain()创建域,domain与PDO映射有密切联系,之后在说到主站激活的位置细谈这部分;至于这个函数具体内容就是直接在内核空间中创建一块ec_domain_t空间并将该空间连接到主站domains链表尾部;第三个函数ecrt_master_slave_config(),从站配置函数,说到从站配置函数,有个地方需要明确一下,那就是主站模块中的从站链表,他们之间的关系并不像我们想的那么紧密,首先,从站配置是应用层通过ecrt_master_slave_config()函数添加到主站的configs链表中的,而从站链表slaves则是通过ehtercat主站状态机通过扫描ethercat总线得到的,两者的共通之处就在于从站配置过程的alias、position、VID和PID,这些在主站扫描到的从站链表中都是有一份参数的,当应用层设置配置和主站扫描到的从站信息相匹配的时候,那就将从站与从站配置相联系(这时候会将主站扫描到的SII信息关于sync关联的PDO信息复制到从站配置中,也就是默认PDO配置);这样,就可以通过从站配置寻找到主站模块中从站配置信息,进而获取到从站信息。第四个函数ecrt_slave_config_reg_pdo_entry(),该函数是从站配置PDO函数,首先需要注意一点,那就是在主站正式激活之前,所有配置PDO相关的其实并没有相对应的空间申请操作,一切都是进行的计算,计算PDO需要多大空间,计算domains的逻辑位置,计算FMMU的逻辑位置,计算PDO的逻辑位置,直到主站正式激活,主站会根据自身已经申请的域链表domains,获取所有域需要的空间大小,而后对每个域进行逻辑地址分配,每个域中再对每个FMMU进行逻辑地址分配。这样。言归正传,继续该函数研究,首先了解一下接口:1. int ecrt_slave_config_reg_pdo_entry(ec_slave_config_t *sc,2. uint16_t index, /* 对象字典索引 */3. uint8_t subindex, /* 对象字典子索引 */4. ec_domain_t *domain, /* 使用的域 */5. unsigned int *bit_position)/* 一个Byte中的偏移量,当PDO映射逻辑地址不是完整的Byte时有用 */首先,通过从站应用层配置索引可以获取到主站的从站配置链表中对应的从站配置,而后根据配置目标domain的索引获取到主站的domains链表对应的域,这样就可以实现应用层的从站配置和domain切换到主站对应的从站配置和domain,然后进行pdo映射操作。另外每次进行PDO映射的时候,并不是只对设置的一个对象进行处理,而是直接将整个sync关联的PDO都进行批次化处理:具体操作如下1. 1.找到PDO对象所在的sync同步管理器;2. 2.找到PDO对象在该同步管理器中的相对起始地址,如果该起始地址并不是整Byte数据,那么启用bit_position,如果没有,进行报警;3. 3.进行FMMU配置计算(FMMU管理映射是以一个sync关联的所有PDO进行映射的,因此只要配置的PDO对象的domain和sync是同一个,那就说明已经配置过对应sync,因此也就没必要新建FMMU去配置映射PDO),这里有几个空间块关系和逻辑地址需要明确一下,先说空间块,在主站没有激活之前,各个domians是无关的,domain内部由多个FMMU组成,每个FMMU配置映射是基于sync关联的PDO得到的(且经过字节对齐处理);然后就是domian->data_size,这个量只表明当前需要的空间大小,那么这个量也可以看作下一个需要配置的FMMU的起始逻辑地址,而对于PDO的逻辑地址,则可以通过在变量sync关联PDO过程进行获取,也就是第二步完成的操作;所以,本质上来讲,PDO配置映射就是确定PDO的逻辑地址位置。第五个函数ecrt_master_activate(),该函数为主站正式激活的函数,该函数完成以下功能:1. 1.主站注册的domains链表整体大小计算:经过PDO注册映射之后,对主站中关联的每个domains都是相互独立的,并且每个domains都只是一个计算得到的值,其实并没有需要的空间申请,因此在主站激活的时候会将全部domians需要的空间进行统一申请。具体申请到的PDO映射逻辑空间存放在字符设备打开文件的priv指针处,关于字符设备的file->priv在字符设备打开eccdev_open的时候进行指定。然后按照主站连接的domains链表顺序对每个domian起始地址进行设置:主要是domain的逻辑起始地址,domain的大小,以及domain中的FMMU的逻辑地址重新设置,最终,domain和FMMU的逻辑起始地址都是在主站全部domains环境下的逻辑起始地址。为了进行PDO映射,在主站激活过程中还对每个domain需要的子报文进行空间申请。在计算子报文需要个数的时候,各个domain计算各自需要的子报文需要,这样就可以满足不同domain的PDO交换周期是可以单独设置的;在domain计算自己需要的子报文个数的时候,计算是以FMMU为一个基本单位进行计算的,每个子报文可承载的数据大小为1486Byte,然后根据一个子报文中FMMU的输入输出情况设置子报文类型,也就是EC_DATAGRAM_LRD类型子报文,EC_DATAGRAM_LRR类型子报文以及EC_DATAGRAM_LRW类型子报文。然后将这些子报文添加到domain的datagram_pairs链表中。当然,整体过程中,domain映射空间和子报文使用的数据空间都是同一段空间。2. 2.完成主站的domains域空间处理,之后就停止主站的空闲阶段线程(等待空闲阶段线程退出);3. 3.开启主站的操作阶段线程,该线程和空闲阶段线程相比不同之处就在于将主站子报文队列组合发送移动到用户手中进行处理。第六个函数ecrt_domain_data(),返回domain在逻辑空间的逻辑地址;第七个函数ecrt_domain_queue(),就是将对应domain空间使用的子报文排列到主站子报文发送链表中;第八个函数ecrt_master_send(),就是将主站的子报文发送链表的子报文进行发送(在发送过程中,默认的会将从站状态机子报文和主站状态机子报文进行排队发送);以上,就是应用层执行PDO映射的基本原理。EtherCAT igh源码的ecrt_slave_config_dc()函数的理解。ethercat总结一下自己对igh的ecrt_slave_config_dc()函数的理解。参考了igh的example里的“dc_user例程”。例程里有这样一处代码: // configure SYNC signals for this slave ecrt_slave_config_dc(sc, 0x0700, PERIOD_NS, 4400000, 0, 0); 在slave_config.c文件里可以查看到函数的定义: /** Configure distributed clocks. * * Sets the AssignActivate word and the cycle and shift times for the sync * signals. * * The AssignActivate word is vendor-specific and can be taken from the XML * device description file (Device -> Dc -> AssignActivate). Set this to zero, * if the slave shall be operated without distributed clocks (default). * * This method has to be called in non-realtime context before * ecrt_master_activate(). * * \attention The \a sync1_shift time is ignored. */ void ecrt_slave_config_dc( ec_slave_config_t *sc, /**< Slave configuration. */ uint16_t assign_activate, /**< AssignActivate word. */ uint32_t sync0_cycle, /**< SYNC0 cycle time [ns]. */ int32_t sync0_shift, /**< SYNC0 shift time [ns]. */ uint32_t sync1_cycle, /**< SYNC1 cycle time [ns]. */ int32_t sync1_shift /**< SYNC1 shift time [ns]. */ ); void ecrt_slave_config_dc(ec_slave_config_t *sc, uint16_t assign_activate, uint32_t sync0_cycle_time, int32_t sync0_shift_time, uint32_t sync1_cycle_time, int32_t sync1_shift_time) { ec_ioctl_config_t data; int ret; data.config_index = sc->index; data.dc_assign_activate = assign_activate; data.dc_sync[0].cycle_time = sync0_cycle_time; data.dc_sync[0].shift_time = sync0_shift_time; data.dc_sync[1].cycle_time = sync1_cycle_time; data.dc_sync[1].shift_time = sync1_shift_time; ret = ioctl(sc->master->fd, EC_IOCTL_SC_DC, &data); if (EC_IOCTL_IS_ERROR(ret)) { fprintf(stderr, "Failed to set DC parameters: %s\n", strerror(EC_IOCTL_ERRNO(ret))); } } 发布于 2021-05-28 14:38开放式 IEC 61131 控制系统设计(书籍)终端命令赞同 8添加评论分享喜欢收藏申请转载文章被以下专栏收录IT技术专栏IT技术分享
EtherCAT学习记录 - 知乎
EtherCAT学习记录 - 知乎首发于技术资料切换模式写文章登录/注册EtherCAT学习记录EXyang在逻辑世界的孤独濒危物种简介这篇文档是从我在学习EtherCAT的过程中,从一个学习者的角度去写的,主要是趁着记忆犹新的时候,记载了解到的知识点,并把当时通过时间查找资料总结的概念固化下来,以便帮助后来的新人。EtherCAT这个名词不仅仅只是代表着一个报文数据格式约定层面的通讯协议,它的从设备是需要使用专用的通信芯片才可以完成传输的,比如EtherCAT的开发者“倍福(Beckhoff)公司”的官方原厂芯片ET1100,其他的各个芯片厂商会取得倍福公司的内核授权,开发相关芯片,如亚信的AX58100等等。从物理层来看EtherCAT的通信电信号和我们普通的以太网一样,通信线也是使用普通网线+RJ45接口、或者光纤连接。因此理论上任意一个网卡模块都可以收发EtherCAT的数据内容,因此对于主站而言,使用普通的电脑通过网线连接一个EtherCAT从站就可以实现通信了,但是EtherCAT对于从站的要求就有特殊的定义,必须要使用专业的芯片才能完成,这个芯片被称为ESC。关于从站芯片的特殊性、从站芯片的数据处理以及实现原理,本文不对此进行深入介绍,因为这部分内容参考倍福公司文档、视频;以及网上的各种资料可以有更好的理解,何况其内容之多是不适合用文档进行描述,本文只是重点介绍应用开发人员需要了解的EtherCAT的通信知识,帮助开发者上手EtherCAT的通信理解。简单的说,应用开发者可以把EtherCAT分为两层:链路层和应用层,本文是以EtherCAT的从设备开发上,对这两层进行介绍。——EXyang1、EtherCAT链路层EtherCAT的从设备是必需要使用专用的通信模块才能实现的,从设备方案上一般是使用MCU(或其他控制器)+ESC芯片来实现。链路层的功能就是在ESC芯片上完成解析、发送的;通过配置ESC芯片,使芯片正常运行链路层功能并把应用层的数据交给MCU。ESC芯片还具有一个特点,那就是通常会给这个芯片外挂一个EEPROM存储器,里面可以保存一些芯片初始化的寄存器配置,这样就不需要每次上电后由MCU或主站来进行配置了。对于开发者而言,链路层的原理只需要知道EtherCAT的模型概念:报文是由主站发出,然后像一条列车一样发往各个从站,每个从站认为是串联起来的,会按照目前串联的位置顺序对数据进行发送,就像是列车的轨道一样;每到一站,数据就像货物一样可以以极快的速度进行上下车,到达最后一站就开始原路返回(在网线上看就是在同一根网线里的TX和RX,其中TX就是列车出发的方向,RX就是返程的方向。每个从设备一般有两个以太网口,一个口对接上一个从设备,另一个对接下一个从设备,而对应连接的两条网线在本地被“连接”成了一条网线,所以整个网络的所有网线可以认为是同一根网线。),数据每经过一个往返就完成了一次通信,主站就是列车的起始站,所有通信都是由主站发起并把控的。1.1、EtherCAT数据帧格式首先,需要了解EtherCAT帧格式,如图:如图所示,报文的起始数据我们看到了熟悉的内容:以太网帧头,只是其中的帧类型是EtherCAT专有的0X88A4,后面的就是EtherCAT的数据内容了。这与我们熟知的网络通信格式不同,不是遵循着TCP/IP的分层格式,没有网络层和传输层。图中清晰明了的显示了EtherCAT的格式中的各个部分,其中“第三行”的子报文格式结构中的“数据”段就是属于应用层的内容了(也称为一个“邮箱”数据),而其他部分都是由EtherCAT的链路层进行解析的,MCU不需要也无法参与其解析工作。帧格式说明如下图所示(列出了除了子报文格式的其他内容,子报文格式放到1.2章中进行说明):其实EtherCAT也还是能支持嵌入了UDP/IP格式的数据帧格式的(只是EtherCAT数据段会让出28个字节长度给UDP/IP段使用),如图:1.2、EtherCAT链路层通信机制要了解EtherCAT的链路层通信机制,首先就要明白EtherCAT通信链路层的通信“目标”,也就是通信到底是需要交换什么东西,数据内容又是怎么呈现的?这个问题的答案就是:EtherCAT的链路层定义每一个从设备都具有一个数据空间,被称为DPRAM,这段空间长度为16位,范围为0x0000~FFFF,主站与从站的通信目标就是能够读、写这段空间内允许被访问的数据。这段空间存在于从站的ESC芯片里,主站和从站MCU都可以访问这段空间(这段空间需要SM进行管理,后文会进行说明),从而作为中间缓存提供给应用层和主站之间建立起通信的桥梁。好,明确了这个目标之后,我们就要开始了解实现这一目标的方法了,我们可以分两步来进行:1、主站与从站ESC芯片通信,并可以通知MCU数据的到达等功能。2、从站MCU与ESC芯片通信。其中,第1步就是链路层的通信机制需要实现的内容了,这个通信机制主要的内容就是子报文来实现的。关于子报文,我们从上文的1.1章可以看到一个完整EtherCAT数据包中可以有多个子报文,这里的多个子报文并不是指有几个从设备就一定对应着有几个子报文,而是每个子报文中都有自己的指令逻辑可以寻址找到要通信的从站。1.2.1、子报文说明配合1.1章中的EtherCAT数据帧格式,子报文格式说明如图:简单的说,主站发出来的子报文就是通过上图中的“命令”配合“地址区”和“长度”寻址到目标从设备,从而对“数据区”中的内容进行读、写操作。这里主要就是对“命令”、“地址区”、“长度”、“数据区”四个部分进行说明,其他的内容不是初学者急需了解的,可以查看相关资料就行。 首先需要了解一下子报文的命令码: 一个子报文想寻址到要找的从站,可以分四种命令:顺序、设置、逻辑、广播寻址。与上图中的指令描述一一对应。1.2.1.1、顺序寻址与设置寻址顺序寻址:就是按照网络连接的顺序,从主站往后数的从站编号,按照负数递减寻址对应的从站,比如0为第一个从站,-1为第二个从站……依次递推。设置寻址:就是给每个从设备分配一个“从站地址”,通过找到对应的从站地址来确定通信的从站,也是传统主从网络中常见的形式。从站地址可以在ESC外挂的EEPROM中预先设置好,也可以是通信过程中进行修改。由于这两种寻址方式只是固定地址与位置顺序的区别,其他的方面几乎一致,所以也统称为“设备寻址”,设备寻址的指令对子报文格式中的“地址区”的使用如下图: 其中地址区被分为16位的从站地址+16位的从站内存地址,再配合子报文格式中的“长度”和“数据区”,子报文就找到要寻址的从设备,并对数据内容进行交互了。顺序寻址只是在网络初始化阶段时被使用,对每个从站设备的从站地址进行读写,而后面的通信通常都是使用设置寻址来进行。1.2.1.2、逻辑寻址 逻辑寻址是另一种更加灵活的寻址方式,基本概念主要需要了解以下几点: 1、我们从前文知道了每个从站的ESC芯片中都有一个16位长度的物理空间,其实主站也有自己的空间,不过是32位长度的,4G大小的“数据逻辑地址”空间。 2、逻辑寻址就是把主站的“数据逻辑地址”与从站的“物理空间”映射起来,一旦映射好了之后,主站访问从站数据就像是访问自己的内部空间一样,只需要发出指定要读写的“数据逻辑地址”即可达成目的。所以使用逻辑寻址的子报文格式中的“地址区”的使用就不是前文的设备寻址的格式了,而是一整段32位地址区来表示主站要访问的“数据逻辑地址”。 3、主站的“数据逻辑地址”与从站ESC的“物理空间”映射是需要在使用逻辑寻址指令通信之前就映射好,进行这个映射功能就是由从站的ESC芯片内的FMMU完成的。 由于FMMU是ESC中的一个功能模块,在ESC中有专门配置FMMU的相关寄存器,寄存器的具体地址和FMMU的个数可以查看具体使用的ESC芯片手册,但是寄存器的内容都是一样的,如图是一个映射的例子:如图中的例子,映射一旦分配好了之后,主站就可以在子报文中使用逻辑寻址的相关指令,访问“数据逻辑地址”0x00014711时,就可以操作配置了这个FMMU的从站的0x0F01的物理地址的数据了。这里可以看出逻辑寻址有以下几个特点: 1、逻辑寻址完全不关心从站的地址,只关心有配置了FMMU的从站是否映射了当前要访问的逻辑地址。2、多个从站都可以配置FMMU映射到主站的同一片逻辑地址,这种情况下主站对一个逻辑地址的操作就可以同时对多个映射的从站进行操作。1.2.2、存储同步管理SM在前文中我们已经了解到了EtherCAT的链路层通信机制,也就是主站是怎么与从站ESC芯片的物理空间进行数据交互的,那么很容易联想到一个问题:ESC的物理空间既可以被主站操作,也可以被从站的MCU操作,怎么保证这两者的操作的正确性,以及通知对方另一方有最新的操作需要处理?这就是ESC芯片中的一个功能模块:存储同步管理(SM)的功能需要解决的了,SM用于阻止主站和从站MCU同时访问 ESC存储区,确保数据的一致性,以及通知MCU数据到达等功能。也就是说从站MCU与主站之间通信需要指定ESC的物理空间作为缓存,那么这片缓存必然要被SM进行管理才可以合理的使用,SM管理的区域就是从站MCU应用层与主站之间的通信交互通道。SM既然是ESC芯片内的一个功能块,也和FMMU一样,有专门的寄存器进行配置,具体可以查看ESC芯片手册,寄存器会有以下功能: 这里不对SM寄存器多做介绍,具体内容还是查看芯片手册,但是需要说明的是SM中可以配置它所管理的物理地址,可以配合FMMU共同指向某片物理空间,使这片空间既可以被逻辑寻址所访问,也同时受到SM的管理:当SM配合FMMU共同指向一片物理空间的情况,就是用来传输“周期性过程数据”的,也就是“PDO数据”,此时SM中的运行模式配置为3个缓存区以保证数据的一致性。从站MCU通过分别使用SM2和SM3两个通道来接收和发送主站的数据所指向的物理空间由于有FMMU映射,可以使用逻辑寻址进行访问。当SM不配合FMMU共同来管理一片物理空间时,就是用来传输“非周期性数据”的,也就是“邮箱数据”,此时SM中的运行模式配置为1个缓存区,而从站MCU通过分别使用SM0和SM1两个通道来接收和发送主站的数据以避免读写冲突。这一片物理空间由于没有FMMU管理,所以不能使用逻辑寻址访问,而是通过设置寻址进行访问的。这里的“PDO数据”、“邮箱数据”就是ESC要与从站MCU交互的数据了,这一部分放到EtherCAT应用层进行描述。2、EtherCAT应用层首先,先看一张EtherCAT描述总图:在结合了前文的链路层讲解之后,配合这张图进行进行理解,会有更直观的感受,图中的DL层就是前文1章节的内容了,前文最后提到了邮箱数据和过程数据,就是要提交给应用层的内容了,所以我们可以看到图中的AL层就是MCU内部要处理的应用层了。EtherCAT应用层协议支持VOE\FOE\EOE\COE等,本文的应用层主要介绍的是COE,也就是CanOpen Over EtherCAT,顾名思义也就是把CanOpen协议通过EtherCAT来实现,CanOpen协议在本文中不做过多的介绍,可以查看CanOpen相关的资料进行了解,在了解COE这部分内容时,要建立在对CanOpen协议了解的基础上进行,本文认为读者已经了解了CanOpen的对象字典、SDO、PDO的前提下进行说明。2.1、CanOpen与COE在看到COE这个词的时候,最容易想到的一个问题就是:原本CanOpen是基于CAN通信方式来设计并实现的,与EtherCAT的通信链路不一样啊,CAN报文含有的ID和8字节数据段,也不是像EtherCAT的列车式的数据运输方式,那么是怎么移植到EtherCAT上来进行通信的呢?其实就是EtherCAT把CAN通信中的ID部分做了一些变化,这里就以CanOpen中的两个重要通信数据:SDO和PDO进行描述。2.1.1、COE中实现SDO对于SDO数据而言:COE中把CAN ID的概念变成一个“类型”参数与CAN的数据段8字节内容全部放到EtherCAT的子报文格式中的“数据区”里,作为一个“邮箱数据”进行发送。邮箱具有专门的格式,如图所示:邮箱数据头说明:邮箱协议中的“命令”格式如下图: 邮箱协议的“命令”说明:由以上内容,我们看到邮箱的数据格式里,在“邮箱数据头”和“命令”中各有一个“类型”,一个是用来指示使用的应用层协议类型的,一个是用来指示这段数据是应用层协议中的什么服务类型的。图中展示的就是COE协议类型的服务类型。这里我们看到了熟悉的名字:SDO请求和响应(这就替代了原本CAN通信中的SDO数据的ID),而紧随其后的“命令相关数据”就是原本CAN通信中的8字节数据部分。格式如下图所示:关于标准CanOpen的SDO协议内容这里不做介绍,在上图可以看到SDO数据后面还有一段“可选扩展数据”,COE相当于对SDO数据做了改良:在标准CanOpen协议的寄存上,可以使一个SDO数据发送更多的数据量,而不是仅限于原本使用CAN通信只能发送4个字节的数据了。MCU对邮箱数据的收发接口可以看第第1.2.2章,SM的介绍。2.1.1、COE中实现PDO 从上文的SDO介绍中,我们看到COE协议类型的服务类型里除了有SDO类型,还有PDO类型,那么PDO是否就如同SDO的实现那样,仅仅只是更改这个类型参数,并解析不同的数据格式就可以实现了呢?这是初学者容易混淆的一个地方,也是COE对于PDO数据定义上我认为比较乱的一个问题,这个问题的答案是否定的;其实,邮箱协议格式里的COE服务类型的PDO类型只是一个预留,并不使用。可以说邮箱只是用来实现SDO数据传输的,PDO数据传输与邮箱数据并没有关联。现在回过头看上文的第1.2.2章,SM的介绍。有提到SM配合FMMU的逻辑寻址通信方式,这才是实现COE的PDO数据传输的方式。也可以看第2章开头的EtherCAT描述总图,里面也有显示PDO数据的传输方法。其实PDO数据采用这个方式也是符合了CanOpen原本的设计理念,PDO的数据报文是为了快速传输对象字典的内容,数据段里全是实际数据,不用解析报文协议格式,如果COE中使用邮箱来进行传输其实是违背这一原则的。PDO数据格式如下图所示:那么很显然,COE中的PDO报文也同样要由映射参数进行映射,如上图所示的例子中,某一个子报文发送的内容是PDO数据,这个子报文通过逻辑寻址找到与逻辑地址映射匹配的从站ESC,并把数据传入FMMU映射的DPRAM物理空间中,这段空间同时也被SM2所管理,于是SM2通知从站MCU从ESC中取走PDO数据。MCU拿到这段数据之后会根据对象字典进行查找,这里要重点介绍与CanOpen映射逻辑的区别:1、CanOpen中PDO具有两个参数:“通信参数”和“映射参数”,在COE中不会使用CanOpen中定义的“通信参数”,COE在对象字典中占用了其他的索引定义了专用的参数进行替代,如图所示: 其中的0x1C00的子索引1~32定义SM0~31这32个通道的通信数据类型,如果定义的是过程数据类型,0x1C10~0x1C2F就会生效,用来定义SM0~31所使用的CanOpen的映射参数(RPDO映射参数:索引=1600~17ffh,TPDO映射参数:索引=1A00~1Bffh)。2、由于COE在一条报文中可以包含多个PDO,相当于是CanOpen的多个PDO数据合并到一起发送了,所以需要做两次映射,第一次是根据获取数据使用的SM(n)通道通过0x1C10+(n)对象字典中的参数确认这条COE报文中有几个PDO,以及每个PDO映射的CanOpen的映射参数,第二次就是根据CanOpen的映射参数进行PDO映射,确认具体的对象内容。 以上两点区别,配前面的PDO格式说明的例子,需要反复阅读理解。编辑于 2023-04-07 19:08・IP 属地广东Ethernet历史记录记录系统赞同 536 条评论分享喜欢收藏申请转载文章被以下专栏收录技
【EtherCAT】非周期性事件处理(二)——邮箱处理 - 知乎
【EtherCAT】非周期性事件处理(二)——邮箱处理 - 知乎首发于EtherCAT切换模式写文章登录/注册【EtherCAT】非周期性事件处理(二)——邮箱处理小皎皎一只可爱的小皎皎在上一篇文章中,我们介绍了非周期性事件处理的一个整体流程,在本文中将详细介绍每个操作函数的具体实现。上一节讲过,非周期性事件处理主要分为三个部分MBX_Main,状态跳转和读写事件处理。其中状态机的跳转是另一个核心功能,后面将专门开一节讲,这一节我们继续聚焦读写邮箱的实现。MailboxServiceInd在MBX_Main中有一个重要函数MailboxServiceInd,它用来处理各类邮箱报文,首先分析这一函数:MailboxServiceInd位于MBX_Main中。 pMbx = GetOutOfMbxQueue(&sMbxReceiveQueue);
if ( pMbx )
{
result = MailboxServiceInd(pMbx);
}将接收邮箱(主站写从站)从队列中取出,函数代码如下:UINT8 MailboxServiceInd(TMBX MBXMEM *pMbx)
{
UINT8 result;
switch ( (pMbx->MbxHeader.Flags[MBX_OFFS_TYPE] & MBX_MASK_TYPE) >> MBX_SHIFT_TYPE )
{
case MBX_TYPE_COE://收到了COE数据报文
result = COE_ServiceInd((TCOEMBX MBXMEM *) pMbx);//调用COE服务函数
break;
default://不支持的邮箱协议
LOG_INFO("Mailbox Unsupport\r\n");
result = MBXERR_UNSUPPORTEDPROTOCOL;
break;
}
return result;
}使用一个switch-case来调用对应的处理函数,在我的这个配置之下只支持COE。这里我认为是SSC代码一个非常不好的地方,这里进行的是邮箱的操作,而COE属于另一个“层”或者模块,这里进行COE的调用,是否应当让读者知道COE_ServiceInd的输入输出是什么,执行了哪些操作?但作者并没有考虑这么多,因此我们只能自行阅读:UINT8 COE_ServiceInd(TCOEMBX MBXMEM *pCoeMbx)
{
UINT8 result = 0;
switch ((pCoeMbx->CoeHeader & COEHEADER_COESERVICEMASK) >> COEHEADER_COESERVICESHIFT)
{
case COESERVICE_SDOREQUEST://sdo请求事件,0x02
result = SDOS_SdoInd( (TINITSDOMBX MBXMEM *) pCoeMbx );
break;
case COESERVICE_SDOINFO://sdo信息
result = SDOS_SdoInfoInd( (TSDOINFORMATION MBXMEM *) pCoeMbx );
break;
case COESERVICE_SDORESPONSE:
case COESERVICE_EMERGENCY:
case COESERVICE_TXPDO:
case COESERVICE_RXPDO:
case COESERVICE_TXPDOREMREQ:
case COESERVICE_RXPDOREMREQ:
result = MBXERR_SERVICENOTSUPPORTED;
break;
default:
result = MBXERR_INVALIDHEADER;
break;
}
return result;
}这里只支持两类,SDO请求和SDO信息两种,我们先来看SDOS_SdoInd这个函数,这个函数的功能显然是对SDO请求进行处理,属于SSC中最核心的模块之一。这段代码中杂揉了分段上传、分段下载和普通上传、普通下载等,作者做了一个神奇的操作,先在switch-case中把几种情况一起处理,然后实际存在区别时再用if-else判断。这样节省了一部分代码里,后果就是代码相当混乱。。。我梳理了此部分内容,把它分开来讲。普通下载普通下载请求是SDO处理的一类最简单的请求,一般用于设置从站的相关参数,本节从它开始分析,普通下载又可以分为快速传输和常规传输,常规传输可以传输超过8个字节的数据。bTransferType = sdoHeader & SDOHEADER_TRANSFERTYPE;用上面的语句提取SDO头的第一位,判断是快速传输请求还是常规传输请求。如果是快速传输,这里pData指针应当指向Sdo报文的数据域,但代码中如下:pData = (UINT16 MBXMEM *) &pSdoInd[1];这段代码实在未能理解是何意。普通传输的代码则好理解的多:UINT32 downloadSize = ((UINT32)(SWAPWORD(((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->CompleteSize[1]))<<16) + (SWAPWORD(((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->CompleteSize[0]));
//数据长度
if ( (MBX_HEADER_SIZE+EXPEDITED_FRAME_SIZE+downloadSize) > u16ReceiveMbxSize )
{
if ( mbxSize != (u16ReceiveMbxSize-MBX_HEADER_SIZE) )
{
return MBXERR_INVALIDSIZE;
}
}
else
{
if ( mbxSize != (EXPEDITED_FRAME_SIZE+downloadSize) )
{
return MBXERR_INVALIDSIZE;
}
}
pData = (UINT16 MBXMEM *) ((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->Data;
dataSize = downloadSize;
if ( dataSize > (UINT32)(mbxSize - DOWNLOAD_NORM_REQ_SIZE) )
{
segTransfer = 1;
}首先计算数据的长度并进行相应的判断;找到报文中的数据域并赋值给pData;如果下载数据过长,设置分段下载位segTransfer;如果没有触发分段,那么下一步执行:abort = OBJ_Write( index, subindex, dataSize, pObjEntry, pData, bCompleteAccess );
if ( abort == ABORTIDX_WORKING )
{
/* the application generates the SDO-Response later on by calling SDOS_SdoRes (only possible if object access function pointer is defined) */
u8PendingSdo = SDO_PENDING_WRITE;
bStoreCompleteAccess = bCompleteAccess;
u8StoreSubindex = subindex;
u16StoreIndex = index;
u32StoreDataSize = dataSize;
pStoreData = pData;
pSdoPendFunc = pObjEntry->Write;
bSdoInWork = TRUE;
/* we have to store the buffer and the response header */
pSdoResStored = pSdoInd;
/*update command field*/
pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] &= ~SDOHEADER_COMMANDMASK;
pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= (sdoHeader & (SDOHEADER_COMPLETEACCESS | SDOHEADER_COMMAND));
return 0;
}这段代码调用OBJ_WRITE将pData中的数据写入到对应的entry中,下面的if实际上并不会触发。最后调用一次SdoRes应答以下主站,一次SDO下载就完成了。分段下载分段下载的情形复杂一点。如果前面设置了segTransfer = 1,那么会执行如下的逻辑: else
{
/* Segmented Download */
MBXMEMCPY( pSdoSegData, (UINT16 *)((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->Data, mbxSize-DOWNLOAD_NORM_REQ_SIZE );
nSdoSegService = SDOSERVICE_DOWNLOADSEGMENTREQ;
dataSize = (mbxSize-DOWNLOAD_NORM_REQ_SIZE);
}实际上就是将数据赋值到pSdoSegData中。令人惊奇的是SODS_SdoInd后续没有任何处理了,那么下一步在何处进行呢?答案是在SdoDownloadSegmentInd函数中。SdoDownloadSegmentInd函数的一开始是对翻转位进行检测,如果和上一次的翻转位相等,那么存在问题,因为每一次分段都会翻转。 if ( SWAPWORD(pSdoInd->SdoHeader.SegHeader & SEGHEADER_TOGGLE) == bSdoSegLastToggle )
{
/* toggle bit has not toggled... */
abort = ABORTIDX_TOGGLE_BIT_NOT_CHANGED;
}随后,保存好maxData(数据长度)和当前的翻转位。 /* maxData contains the maximum data to be received with a SDO-DownloadSegment */
UINT16 maxData = u16ReceiveMbxSize - MBX_HEADER_SIZE - SEGMENT_NORM_HEADER_SIZE;
/* the new toggle bit is stored in bSdoSegLastToggle */
bSdoSegLastToggle = SWAPWORD(pSdoInd->SdoHeader.SegHeader & SEGHEADER_TOGGLE);接下来:bytesToSave = nSdoSegCompleteSize - nSdoSegBytesToHandle;这里的nSdoSegCompleteSize就是整个分段传输的总长度,是第一次传输时主站下发的。nSdoSegBytesToHandle是前面的分段传输中,已经存储的数据长度。那么这两个相减理论上就是剩余还需要保存的数据长度了。下面的代码处理的是,当前已经是最后一个分段时的情况。if ( pSdoInd->SdoHeader.SegHeader & SEGHEADER_NOMOREFOLLOWS )
{
/* the last segment is received, check if the length of the remaining data is the
same as the length of the received data */
if ( bytesToSave <= maxData )
{
UINT16 mbxSize = SWAPWORD(pSdoInd->MbxHeader.Length);
/* for the check it is distinguished if the remaining bytes are less than 8 (in that
case 7 data bytes were sent and the SDO-Download Segment header contains the information
how much bytes are valid (CAN-compatibility)), otherwise the length has to match exactly
and the SDO-Download Segment-Headerbyte is ignored */
if (((bytesToSave <= (UINT32)(mbxSize - SEGMENT_NORM_HEADER_SIZE))
&&( bytesToSave == ((UINT16) (MIN_SEGMENTED_DATA - ((pSdoInd->SdoHeader.SegHeader & SEGHEADER_SEGDATASIZE) >> SEGHEADERSHIFT_SEGDATASIZE))) )
)
||( ( bytesToSave > MIN_SEGMENTED_DATA )
&& (bytesToSave == (UINT32)(mbxSize - SEGMENT_NORM_HEADER_SIZE))
) )
{
/* length is correct */
bSdoSegFollows = FALSE;
}
else
{
abort = ABORTIDX_PARAM_LENGTH_ERROR;
}
}
else
{
abort = ABORTIDX_PARAM_LENGTH_ERROR;
}
}如果长度验证正确,那么将bSdoSegFollows标志位设置为False,标志着这是最后一个分段。下面处理的时不是最后一个分段的情况: else
{
/* its not the last segment */
bSdoSegFollows = TRUE;
/* we have to check if we expect less bytes than the maximum size which can be send with a single
SDO Download Segment */
if ( bytesToSave <= maxData )
{
abort = ABORTIDX_PARAM_LENGTH_ERROR;
}
else
{
/* length is okay, bytesToSave contains the data size to be copied */
bytesToSave = maxData;
}
}这里将SdoSegFollows设置为True,同时验证剩下的长度大于当前长度。接下来会将数据拷贝到缓存,但这个移位操作我着实没有看懂。 if ((nSdoSegBytesToHandle & 0x1) == 0x01)
{
// Data0 will be copied to an odd address of pSdoSegData, Data1 to an even address (Segment 2, 4, ...)
// Read Data0
pSdoSegData[(nSdoSegBytesToHandle >> 1)] &= ~SEGHDATA_MASK;
pSdoSegData[(nSdoSegBytesToHandle >> 1)] |= (pSdoInd->SdoHeader.SegHeader & SEGHDATA_MASK);
// Copy Data1 - DataN
MBXMEMCPY(&pSdoSegData[(nSdoSegBytesToHandle >> 1) + 1],pSdoInd->SdoHeader.Data, bytesToSave - 1 );
}
else
{
// Data0 will be copied to an even address of pSdoSegData, Data1 to an odd address (Segment 1, 3,...)
// Read Data0 and Data1
pSdoSegData[( nSdoSegBytesToHandle >> 1)] = ((pSdoInd->SdoHeader.SegHeader >> SEGDATASHIFT) &~SEGHDATA_MASK) | ((pSdoInd->SdoHeader.Data[0] << 8) & SEGHDATA_MASK);
// Copy Data2 - DataN
for (i = 1; i <((bytesToSave + 1) >> 1); i++)
{
pSdoSegData[(nSdoSegBytesToHandle >> 1) + i] = ((pSdoInd->SdoHeader.Data[i - 1] >> SEGDATASHIFT) & ~SEGHDATA_MASK) | ((pSdoInd->SdoHeader.Data[i] << 8) & SEGHDATA_MASK);
// (If bytesToSave is odd, one byte too much is copied. But, that is not a problem.)
}
}最后,如果确认了是最后一段,再次调用OBJ_Write函数写入对象字典,同时释放pSdoSegData指向的缓存。 if ( bSdoSegFollows == FALSE )
{
/* it was the last segment, OBJ_Write will called to make the Write-operation */
abort = OBJ_Write( nSdoSegIndex, nSdoSegSubindex, nSdoSegCompleteSize, pSdoSegObjEntry, (UINT16 MBXMEM *) pSdoSegData, bSdoSegAccess );
if ( abort == ABORTIDX_WORKING )
{
/* the application generates the SDO-Response later on by calling SDOS_SdoRes (only possible if object access function pointer is defined) */
u8PendingSdo = SDO_PENDING_SEG_WRITE;
bStoreCompleteAccess = bSdoSegAccess;
u8StoreSubindex = nSdoSegSubindex;
u16StoreIndex = nSdoSegIndex;
u32StoreDataSize = nSdoSegCompleteSize;
pStoreData = pSdoSegData;
pSdoPendFunc = pSdoSegObjEntry->Write;
bSdoInWork = TRUE;
pSdoResStored = (TINITSDOMBX MBXMEM *) pSdoInd;
bSdoSegFollows = FALSE;
nSdoSegService = 0;
nSdoSegBytesToHandle = 0;
return ABORTIDX_WORKING;
}
else
{
/* the allocated buffer can be released */
FREEMEM( (UINT16 VARMEM *) pSdoSegData );
pSdoSegData = NULL;
}
}处理好写入之后并没有结束,还需要准备好向主站的应答报文: /* send the SDO Download Segment response */
pSdoInd->MbxHeader.Length = SEGMENT_NORM_RES_SIZE;
pSdoInd->CoeHeader &= ~COEHEADER_COESERVICEMASK;
pSdoInd->CoeHeader |= ((UINT16)COESERVICE_SDORESPONSE) << COEHEADER_COESERVICESHIFT;
/* the SDO Download Segment header depends if it was the last segment or not */
/* ECATCHANGE_START(V5.12) ECAT2*/
if ( bSdoSegLastToggle )
{
pSdoInd->SdoHeader.SegHeader = SWAPWORD(SDOSERVICE_DOWNLOADSEGMENTRES|SEGHEADER_TOGGLE);
}
else
{
pSdoInd->SdoHeader.SegHeader = SWAPWORD(SDOSERVICE_DOWNLOADSEGMENTRES);
}同时更新nSdoSegBytesToHandle变量,如果还未结束,需要添加上本次处理的数据长度,否则将这个值设为0. if ( bSdoSegFollows == TRUE )
{
/* segments are still expected, nSdoSegBytesToHandle contains the number of received data bytes */
nSdoSegBytesToHandle += bytesToSave;
}
else
{
/* the last segment was received, the variables are reset */
nSdoSegBytesToHandle = 0;
nSdoSegService = 0;
}到这里我们基本上分析完了SDO的下载,应该说不管是分段还是普通,最核心的就是OBJ_Write的调用,这个调用将报文中的数据,写入到实际的对象字典链表中。我们也加深了对对象字典的理解,它并不是一个固定的XML文件,也不是其他玄乎的东西,而只是一个存在于内存中的数据结构罢了。普通上传上传其实就是读取对象字典的某个值,上传也是由主站发起的,需要主站先发送一个报文到从站,这个报文由于只是一个请求,不需要携带数据,因此默认采用快速传输,如果报文长度不是快速传输长度,那么需要报错: /* SDO Upload */
if (mbxSize != EXPEDITED_FRAME_SIZE)
{
/* a SDO Upload request has always a fixed size (2 Byte CoE-Header plus 8 Byte SDO-Header) */
return MBXERR_INVALIDSIZE;
} /* SDO Upload */
if (mbxSize != EXPEDITED_FRAME_SIZE)
{
/* a SDO Upload request has always a fixed size (2 Byte CoE-Header plus 8 Byte SDO-Header) */
return MBXERR_INVALIDSIZE;
}下面处理快速传输,如果对象的长度满足快速传输的条件,设置bTransferType为1,然后取到报文中的数据缓冲区。 if ((objLength <= MAX_EXPEDITED_DATA) && objLength != 0)
{
bTransferType = 1;
/* pData is the pointer where the object data has to be copied for the response */
pData = (UINT16 MBXMEM *) ((TINITSDOUPLOADEXPRESMBX MBXMEM *) pSdoInd)->Data;
/* initialize the 4 data bytes of the SDO upload response because the requested object data
could be less than 4 */
pData[0] = 0;
pData[1] = 0;
}如果不满足,采用常规传输,和下载类似,如果长度过长则采用分段传输。 else
{
/* HBu 06.02.06: the variable dataSize has to be set to the available size in one mailbox */
dataSize = u16SendMbxSize - MBX_HEADER_SIZE - UPLOAD_NORM_RES_SIZE;
if (dataSize < objLength)
{
/* Segmented Upload */
segTransfer = 1;
}
else
{
/* Normal Upload */
/* ECATCHANGE_START(V5.12)*/
pData = (UINT16 MBXMEM *) ((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoInd)->Data;
/* ECATCHANGE_END(V5.12)*/
}
}接下来调用OBJ_Read函数,去读取对应的索引的数据,保存在pData中。 if ( command == SDOSERVICE_INITIATEUPLOADREQ )
{
/* Expedited or Normal Upload */
abort = OBJ_Read( index, subindex, objLength, pObjEntry, pData, bCompleteAccess );
if ( abort == ABORTIDX_WORKING )
{
/* the application generates the SDO-Response later on by calling SDOS_SdoRes (only possible if object access function pointer is defined) */
u8PendingSdo = SDO_PENDING_READ;
bStoreCompleteAccess = bCompleteAccess;
u8StoreSubindex = subindex;
u16StoreIndex = index;
u32StoreDataSize = objLength;
pStoreData = pData;
pSdoPendFunc = pObjEntry->Read;
bSdoInWork = TRUE;
/* we have to store the buffer and the response header */
pSdoResStored = pSdoInd;
/*update command field*/
pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] &= ~SDOHEADER_COMMANDMASK;
pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= (sdoHeader & (SDOHEADER_COMPLETEACCESS | SDOHEADER_COMMAND));
return 0;
}
}分段上传对于分段上传,我们不进行分析了,可以想象就是将对象逐一拆分,然后主站每发送一个报文,从站就进行一次上传。SdoRes在下载执行完OBJ_Write,上传执行完OBJ_Read后,还有如下一行代码: if(abort != ABORTIDX_WORKING)
{
/* type cast was added because of warning */
SdoRes(abort, command, (UINT8) (sdoHeader & SDOHEADER_COMPLETEACCESS), (UINT16) dataSize, objLength, pSdoInd);
}这个函数主要用于向主站反馈邮箱报文。这个函数的前面,是用各种位操作生成应答报文的各个字段,十分恶心。关键在于最后: if (MBX_MailboxSendReq((TMBX MBXMEM *) pSdoRes, COE_SERVICE) != 0)
{
/* we store the CoE mailbox service to send it later (in COE_ContinueInd) when the mailbox is read */
pCoeSendStored = (TMBX MBXMEM *) pSdoRes;
}这里调用了MBX_MailboxSendReq函数,我个人是不太喜欢这种不同层级之间互相的调用的,因为这样造成了代码的混乱,但作者显然很喜欢。这里MBX_MailboxSendReq显然是将之前组织好的报文反馈给主站,我们继续阅读此函数。MBX_MailboxSendReq这段函数中最为核心的部分是调用了MBX_CopyToSendMailbox执行了实际的ESC发送。 if ( bSendMbxIsFull )
{
/* mailbox service cannot be sent because the send mailbox is still full */
return MBXERR_NOMOREMEMORY;
}
else
{
/* the variable mbxSize contains the size of the mailbox data to be sent */
UINT16 mbxSize = pMbx->MbxHeader.Length;
HW_EscWriteMbxMem((MEM_ADDR *)pMbx, u16EscAddrSendMbx, (mbxSize + MBX_HEADER_SIZE));
{
/*Read Control and Status of SyncManager 1 to check if the buffer is still marked as empty*/
VARVOLATILE UINT16 smstate = 0x00;
HW_EscReadWord(smstate,(ESC_SYNCMAN_CONTROL_OFFSET + SIZEOF_SM_REGISTER));
smstate = SWAPWORD(smstate);
if(!(smstate & SM_STATUS_MBX_BUFFER_FULL))
{
UINT16 BytesLeft = u16SendMbxSize - (mbxSize + MBX_HEADER_SIZE);
/*Write last Byte to trigger mailbox full flag*/
/*Read last 2 Bytes and write them again (required if low Byte of the WORD were written before)*/
u16dummy = 0;
if(BytesLeft < 2)
{
/*The last 2Bytes are overlapping the already written buffer*/
/*ECATCHANGE_START(V5.12) MBX1*/
/*Get the valid 16Bit address*/
UINT32 LastDataAddress = ((mbxSize + MBX_HEADER_SIZE)/2);
/*Copy the buffer to overwrite*/
MEMCPY((UINT16 *)&u16dummy,(((UINT16 *)pMbx) + LastDataAddress),(2 - BytesLeft));
}
HW_EscWriteWord(u16dummy,(u16EscAddrSendMbx + u16SendMbxSize - 2));
}接下来更新缓冲区,将读邮箱更新为当前邮箱,并将发送邮箱标志位设置为满,意味当前缓冲区已经占用。 /* store last send mailbox service for a possible repeat
one buffer includes the last send service (psRepeatMbx),
the other one the actual service to be sent (psReadMbx),
there is no buffer available for a mailbox receive service
until the last sent buffer was read from the master
the exception is after the INIT2PREOP transition, in that
case there is no last sent service (psReadMbx = 0) */
if ( psReadMbx )
{
psWriteMbx = NULL;
}
// HBu 17.06.06: psRepeatMbx was already updated in MBX_MailboxReadInd
// psRepeatMbx = psReadMbx;
psReadMbx = pMbx;
/* set flag that send mailbox is full now */
bSendMbxIsFull = TRUE;现在我们回过头来再看MBX_Main函数: do
{
UINT8 result = 0;
pMbx = GetOutOfMbxQueue(&sMbxReceiveQueue);
if ( pMbx )
{
result = MailboxServiceInd(pMbx);
}
if ( result != 0 )
{
pMbx->MbxHeader.Length = 4;
pMbx->MbxHeader.Flags[MBX_OFFS_TYPE] &= ~(MBX_MASK_TYPE);
pMbx->Data[0] = SWAPWORD(MBXSERVICE_MBXERRORCMD);
pMbx->Data[1] = SWAPWORD(result);
MBX_MailboxSendReq(pMbx, 0);
}
}从队列中获取到接收邮箱报文,然后写/读对象字典,最后反馈给主站。这也是它为什么能被叫做MBX_Main的原因,因为对象字典是在这里被处理的!读事件看到这里我们基本上理清了写邮箱的流程,也理解了为啥写和读不对称——因为在处理写操作时,从站已经将数据准备好,发送到SM寄存器中了。那么读又有什么作用呢?我们再来读一下MBX_MailboxReadInd的代码。/////////////////////////////////////////////////////////////////////////////////////////
/**
\brief This function is called when the Master has read the Send-Mailbox.
*////////////////////////////////////////////////////////////////////////////////////////
void MBX_MailboxReadInd(void)
{This function is called when the Master has read the Send-Mailbox。注意这里使用的是完成时,也就是说主站在读SM之后,触发SM读事件,才会调用此函数。那主站读的是什么呢?当然是之前反馈的信息了。 bSendMbxIsFull = FALSE;
// HBu 02.05.06: the pointer psRepeatMbx is only free if there is no stored
// mailbox service from the last repeat
if ( psRepeatMbx && psStoreMbx == NULL )
{
/* the last sent service is not stored for repeat any longer */
APPL_FreeMailboxBuffer(psRepeatMbx);
psRepeatMbx = NULL;
}
/* the actual sent service has to be stored for repeat */
psRepeatMbx = psReadMbx;这里第一句将bSendMbxIsFull标志位清空,这意味着之前从站对主站的应答已经被主站确认。这里psRepeatMbx存在,则需要释放内存,因为psRepeatMbx是用来保存最后一个主站读的报文的。这里主站读了新的报文,以需要更新到新的缓冲区。另一个条件是,psStoreMbx不为空,为什么这个缓冲区不为空是不释放内存呢?因为后面可见如果此缓冲区不为空,那么优先发送此缓冲区的内容,因此,psRepeatMbx实际上没有变化。接下来: if ( psStoreMbx )
{
/* there was a buffer stored */
MBX_CopyToSendMailbox(psStoreMbx);
/* no more buffer to be stored any more */
psStoreMbx = NULL;
}
else
{
TMBX MBXMEM *pMbx = GetOutOfMbxQueue(&sMbxSendQueue);
if (pMbx)
{
MBX_CopyToSendMailbox(pMbx);
}
}这里显然就是将存储的报文发送到缓冲区了。那么发送邮箱的数据是哪里来的呢,我们前面说过MBX_MailboxSendReq这个函数,它的核心是调用MBX_CopyToSendMailbox进行发送,但如果发送失败会将邮箱报文入列。那么在处理完上次读事件之后,新的数据就会进入缓冲区了。最后处理未处理完的邮箱报文: if ( u8MailboxSendReqStored )
{
/* there are mailbox services stored to be sent */
if ( u8MailboxSendReqStored & COE_SERVICE )
{
UINT8 result = 0;
/* reset the flag indicating that CoE service to be sent was stored */
u8MailboxSendReqStored &= ~COE_SERVICE;
/* call CoE function that will send the stored CoE service */
result = COE_ContinueInd(psWriteMbx);
if (result != 0)
{
/*Set the pending CoE indication is an error occurred during the continue indication*/
u8MailboxSendReqStored |= COE_SERVICE;
}
}
else
{
}从上述代码分析来看,读和写的地位不太一样。读仅仅是主站读邮箱之后从站进行一些善后的工作,例如重复邮箱的保存,而写则是非周期性通信处理的核心。这种不对称性看似奇怪,实际上却再正常不过,因为在Ecat网络中,所有的邮箱通信都是主站发起的,从站处于被动的地位。小结通过两篇博文的分析,对于分周期性事件的处理已经基本理清了(当然,具体的一些特殊场景还有待进一步分析,但无伤大雅)。下一步将进行状态机模块的分析。编辑于 2023-12-05 19:25・IP 属地浙江法律事件赞同 4添加评论分享喜欢收藏申请转载文章被以下专栏收录EtherCAT介绍工业以太网总线Ether
EtherCAT使用与解析-关于SDO与PDO关系 - 呵哈呵 - 博客园
EtherCAT使用与解析-关于SDO与PDO关系 - 呵哈呵 - 博客园
会员
周边
新闻
博问
AI培训
云市场
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式 ...
退出登录
注册
登录
welsey
博客园
首页
新随笔
联系
订阅
管理
EtherCAT使用与解析-关于SDO与PDO关系
SDO和PDO都是基于CANopen的对象字典进行讨论的,CoE基于CANopen协议进行了补充,使之可以应用在EtherCAT上,两者都是建立在CANopen的对象字典之上的,且针对的对象字典是同一个。
PDO有一些是用于特殊功能的,并不能随便乱用!
关于CoE,有一些需要注意一下,就是RxPDO和TxPDO这两种其实本质上都是PDO,都是基于索引+子索引+数据大小的模式,不同之处在于,这两种PDO是用来索引其他PDO的,因而也被称之为映射表PDO,同样特殊的PDO还包括同步管理器使用的PDO,也就是0x1C10~0x1C2F这些PDO,这种PDO专门用于映射RxPDO以及TxPDO的,也就是是说相当于 映射表PDO 的 映射表PDO,不同之处只在于同步管理其PDO只存储RxPDO和TxPDO的索引,并不需要存储子索引信息。
posted @
2020-04-07 22:09
呵哈呵
阅读(246)
评论(0)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面返回顶部
公告
Copyright © 2024 呵哈呵
Powered by .NET 8.0 on Kubernetes
D09_EtherCAT中PDO(进程数据对象)与SDO(服务数据对象)讲解_哔哩哔哩_bilibili
D09_EtherCAT中PDO(进程数据对象)与SDO(服务数据对象)讲解_哔哩哔哩_bilibili 首页番剧直播游戏中心会员购漫画赛事投稿欧姆龙NJ系列PLC和1S伺服控制系统实战
9.6万
200
2022-04-26 13:54:59
8274543166793欧姆龙NJ系列PLC欧姆龙1S伺服控制系统实战知识野生技能协会EtherCAT欧姆龙PLC欧姆龙伺服电子凸轮IEC61131欧姆龙NJ欧姆龙NXSysmacStudio圆弧插补定位欧姆龙ST编程
工控圈
发消息
扣扣群937256780
关注 34.0万
桌面AI伙伴,陪你High翻天!视频选集(96/182)自动连播欧姆龙NJ系列PLC入门到精通全套视频工控圈
5323
5
欧姆龙NJ控制器_项目篇大山里的狼哥
1.1万
24
欧姆龙串行通讯编程实战智慧工控
7750
2
徐盼盼--欧姆龙1S伺服控制系统实战 34课时bili_1297782762
588
0
NJ系列欧姆龙PLC运动控制教程(2)没有耳朵的兔子丶
891
0
欧姆龙1S系列伺服器操作指南和实战佳途自动化
3035
0
精通欧姆龙NX1P系列PLC-通讯篇智慧工控
1.1万
0
山东大学欧姆龙PLC视频教程知识搬运工二月版
5663
0
【电气自动化】欧姆龙PLC编程读书记笔记
4600
2
西门子S7-1500PLC高级应用工控猿
12.3万
479
精通欧姆龙NX1P系列PLC运动控制智慧工控
3587
1
电气自动化入门+西门子PLC入门基础(新手必学)常州智控教育
119.1万
8867
欧姆龙软件的安装技成培训
1.6万
1
PLC初学者只要明白这个框架写程序就很简单了工控技能教学
20.5万
583
常用的伺服控制方式:Ethercat总线篇Kinco步科
2.7万
5
欧姆龙 NJ系列运动控制教程没有耳朵的兔子丶
851
0
欧姆龙NJ系列PLC- (共50集)摸凹喵阿
2129
0
精通欧姆龙NX1P系列PLC运动控制 EtherCAT高速现场总线高功能运动控制原理工控吧
1.5万
16
欧姆龙伺服异常与故障现象分析、排错智慧工控
2115
0
NX/NJ PLC基本逻辑编程欧姆龙自动化
2831
0
展开
小窗
客服
顶部
赛事库 课堂 2021
EtherCAT Technology Group | 技术概览
EtherCAT Technology Group | 技术概览
EN
|
DE
|
ES
|
IT
|
CN
|
JP
主页
新闻
市场活动
新闻发布
联系方式
会员专区
搜索
技术概览 技术概览 为何使用EtherCAT? 协会组织 常见问题 会员相关 供应商ID 产品指南 资料下载 一致性测试 EtherCAT G EtherCAT P Safety over EtherCAT EtherCAT 和 TSN 技术汇编 开发者论坛 知识库
退出
EtherCAT - 以太网现场总线
本文深入阐述了基于以太网现场总线系统的EtherCAT (Ethernet for Control Automation Technology)技术。EtherCAT为现场总线技术领域树立了新的性能标准,具备灵活的网络拓扑结构,系统配置简单,和现场总线系统一样操作直观简便。另外,由于EtherCAT实施的成本低廉,因此使系统得以在过去无法应用现场总线网络的场合中选用该现场总线。
1. 引言
1.1 以太网和实时能力
2. EtherCAT 运行原理
3. EtherCAT 技术特征
3.1 协议
3.2 拓扑
3.3 分布时钟
3.4 性能
3.5 诊断
3.6 高可靠性
3.7 安全性
3.8 EtherCAT 取代PCI
3.9 设备行规
3.9.1 EtherCAT实现CAN总线应用层协议 (CoE)
3.9.2 EtherCAT实现伺服驱动设备行规IEC61491 (SoE)
3.10 EtherCAT实现以太网(EoE)
3.11 EtherCAT实现文件读取(FoE)
3.12 ADS over EtherCAT (AoE)
4. 基础设施成本
5. EtherCAT 实施
5.1 主站
5.1.1 主站实施服务
5.1.2 主站样本代码
5.2 从站
5.2.1 EtherCAT Slave Controller
5.2.2 从站评估工具包
6. 小结
7. 参考文献
1. 引言
页首
现场总线已成为自动化技术的集成组件,通过大量的实践试验和测试,如今已获得广泛应用。正是由于现场总线技术的普及,才使基于PC的控制系统得以广泛应用。然而,虽然控制器CPU的性能(尤其是IPC的性能)发展迅猛,但传统的现场总线系统正日趋成为控制系统性能发展的“瓶颈”。急需技术革新的另一个因素则是由于传统的解决方案并不十分理想。传统的方案是,按层划分的控制体系通常都由几个辅助系统所组成(周期系统):即实际控制任务、现场总线系统、I/O系统中的本地扩展总线或外围设备的简单本地固件周期。正常情况下,系统响应时间是控制器周期时间的3-5倍。 在现场总线系统之上的层面(即网络控制器)中,以太网往往在某种程度上代表着技术发展的水平。该方面目前较新的技术是驱动或I/O级的应用,即过去普遍采用现场总线系统的这些领域。这些应用类型要求系统具备良好的实时能力、适应小数据量通讯,并且价格经济。EtherCAT可以满足这些需求,并且还可以在I/O级实现因特网技术 (参见图1)。
图1: 传统现场总线系统响应时间
在现场总线系统 之上的层面(即网络控制器)中,以太网往往在某种程度上代表着技术发展的水平。该方面目前较新的技术是驱动或I/O级的应用,即过去普遍采用现场总线系统的这些领域。这些应用类型要求系统具备良好的实时能力、适应小数据量通讯,并且价格经济。EtherCAT可以满足这些需求,并且还可以在I/O级实现因特网技术。
1.1 以太网和实时能力
目前,有许多方案力求实现以太网的实时能力。例如,CSMA/CD介质存取过程方案,即禁止高层协议访问过程,而由时间片或轮循方式所取代的一种解决方案;另一种解决方案则是通过专用交换机精确控制时间的方式来分配以太网包。这些方案虽然可以在某种程度上快速准确地将数据包传送给所连接的以太网节点,但是,输出或驱动控制器重定向所需要的时间以及读取输入数据所需要的时间都要受制于具体的实现方式。
如果将单个以太网 帧用于每个设备,那么,理论上讲,其可用数据率非常低。例如,最短的以太网帧为84字节(包括内部的包间隔IPG)。如果一个驱动器周期性地发送4字节的实际值和状态信息,并相应地同时接收4字节的命令值和控制字信息,那么,即便是总线负荷为100%(即:无限小的驱动响应时间)时,其可用数据率也只能达到4/84= 4.8%。如果按照10 µs的平均响应时间估计,则速率将下降到1.9%。对所有发送以太网 帧到每个设备(或期望帧来自每个设备)的实时以太网方式而言,都存在这些限制,但以太网帧内部所使用的协议则是例外。
2. EtherCAT 运行原理
页首
EtherCAT技术突破了其他以太网解决方案的系统限制:通过该项技术,无需接收以太网数据包,将其解码,之后再将过程数据复制到各个设备。EtherCAT从站设备在报文经过其节点时读取相应的编址数据,同样,输入数据也是在报文经过时插入至报文中(参见图2)。整个过程中,报文只有几纳秒的时间延迟。
图 2: 过程数据插入至报文中
由于发送和接收的以太网帧压缩了大量的设备数据,所以有效数据率可达90%以上。100 Mb/s TX的全双工特性完全得以利用,因此,有效数据率可 大于100 Mb/s(即大于2 x 100 Mb/s的90%)(参见图3)。
图 3: 带宽利用率的比较
符合IEEE 802.3标准的以太网协议无需附加任何总线即可访问各个设备。耦合设备中的物理层可以将双绞线或光纤转换为LVDS(一种可供选择的以太网物理层标准[4,5]),以满足电子端子块等模块化设备的需求。这样,就可以非常经济地对模块化设备进行扩展了。之后,便可以如普通以太网一样,随时进行从底板物理层LVDS到100 Mb/s TX物理层的转换。
3. EtherCAT 技术特征
页首
3.1 协议
EtherCAT是用于过程数据的优化协议,凭借特殊的以太网类型,它可以在以太网帧内直接传送。EtherCAT帧可包括几个EtherCAT报文,每个报文都服务于一块逻辑过程映像区的特定内存区域,该区域最大可达4GB字节。数据顺序不依赖于网络中以太网端子的物理顺序,可任意编址。从站之间的广播、多播和通讯均得以实现。当需要实现最佳性能,且要求EtherCAT组件和控制器在同一子网操作时,则直接以太网帧传输就将派上用场。
然而,EtherCAT不仅限于单个子网的应用。EtherCAT UDP将EtherCAT协议封装为UDP/IP数据报文(参见图4),这就意味着,任何以太网协议堆栈的控制均可编址到EtherCAT系统之中,甚至通讯还可以通过路由器跨接到其它子网中。显然,在这种变体结构中,系统性能取决于控制的实时特性和以太网协议的实现方式。因为UDP数据报文仅在第一个站才完成解包,所以EtherCAT网络自身的响应时间基本不受影响。
图 4: EtherCAT:符合IEEE 802.3 [3]的标准帧
另外,根据主/从数据交换原理,EtherCAT也非常适合控制器之间(主/从)的通讯。自由编址的网络变量可用于过程数据以及参数、诊断、编程和各种远程控制服务,满足广泛的应用需求。主站/从站与主站/主站之间的数据通讯接口也相同。
从站到从站的通讯则有两种机制以供选择。一种机制是,上游设备和下游设备可以在同一周期内实现通讯,速度非常快。由于这种方法与拓扑结构相关,因此适用于由设备架构设计所决定的从站到从站的通讯,如打印或包装应用等。而对于自由配置的从站到从站的通讯,则可以采用第二种机制—数据通过主站进行中继。这种机制需要两个周期才能完成,但由于EtherCAT的性能非常卓越,因此该过程耗时仍然快于采用其他方法所耗费的时间。
按照文献[3]所述,EtherCAT仅使用标准的以太网帧,无任何压缩。因此,EtherCAT 以太网帧可以通过任何以太网MAC发送,并可以使用标准工具(如:监视器)。
3.2 拓扑
EtherCAT几乎支持任何拓扑类型,包括线型、树型、星型等(参见图5)。通过现场总线而得名的总线结构或线型结构也可用于以太网,并且不受限于级联交换机或集线器的数量。
图 5: 灵活的拓扑结构:线型、树型或星型拓扑
最有效的系统连线方法是对线型、分支或树叉结构进行拓扑组合。因为所需接口在I/O 模块等很多设备中都已存在,所以无需附加交换机。当然,仍然可以使用传统的、基于以太网的星型拓扑结构。
还可以选择不同的电缆以提升连线的灵活性:灵活、经济的标准超五类以太网电缆可采用100BASE-TX模式传送信号;塑封光纤(PFO)则可用于特殊应用场合;还可通过交换机或介质转换器实现不同以太网连线(如:不同的光纤和铜电缆)的完整组合。
快速以太网的物理层(100BASE-TX )允许两个设备之间的最大电缆长度为100米。由于连接的设备数量可高达65535,因此,网络的容量几乎没有限制。
3.3. 分布时钟
精确同步对于同时动作的分布式过程而言尤为重要。例如,几个伺服轴同时执行协调运动时,便是如此。
最有效的同步方法是精确排列分布时钟(请参阅IEEE 1588标准[6])。与完全同步通讯中通讯出现故障会立刻影响同步品质的情况相比,分布排列的时钟对于通讯系统中可能存在的相关故障延迟具有极好的容错性。
采用EtherCAT,数据交换就完全基于纯硬件机制。由于通讯采用了逻辑环结构 (借助于全双工快速以太网的物理层),主站时钟可以简单、精确地确定各个从站时钟传播的延迟偏移,反之亦然。分布时钟均基于该值进行调整,这意味着可以在网络范围内使用非常精确的、小于1 微秒的、确定性的同步误差时间基(参见图6)。而跨接工厂等外部同步则可以基于IEEE 1588 标准。
图 6: 同步性与一致性:相距电缆长度为有120米的两个分布系统,
带有300个节点的示波器比较
此外,高分辨率的分布时钟不仅可以用于同步,还可以提供数据采集的本地时间精确信息。当采样时间非常短暂时,即使是出现一个很小的位置测量瞬时同步偏差,也会导致速度计算出现较大的阶跃变化,例如,运动控制器通过顺序检测的位置计算速度便是如此。而在EtherCAT中,引入时间戳数据类型作为一个逻辑扩展,以太网所提供的巨大带宽使得高分辨率的系统时间得以与测量值进行链接。这样,速度的精确计算就不再受到通讯系统的同步误差值影响,其精度要高于基于自由同步误差的通讯测量技术。
3.4 性能
EtherCAT使网络性能达到了一个新境界。借助于从站硬件集成和网络控制器主站的直接内存存取,整个协议的处理过程都在硬件中得以实现,因此,完全独立于协议堆栈的实时运行系统、CPU 性能或软件实现方式。1000个I/O的更新时间只需30 µs,其中还包括I/O周期时间(参见表1)。单个以太网帧最多可进行1486字节的过程数据交换,几乎相当于12000个数字输入和输出,而传送这些数据耗时仅为300 µs。
表 1: EtherCAT性能概貌
100个伺服轴的通讯也非常快速:可在每100µs中更新带有命令值和控制数据的所有轴的实际位置及状态,分布时钟技术使轴的同步偏差小于1微秒。而即使是在保证这种性能的情况下,带宽仍足以实现异步通讯,如TCP/IP、下载参数或上载诊断数据。
超高性能的EtherCAT技术可以实现传统的现场总线系统无法迄及的控制理念。EtherCAT使通讯技术和现代工业PC所具有的超强计算能力相适应,总线系统不再是控制理念的瓶颈,分布式I/O可能比大多数本地I/O接口运行速度更快。EtherCAT技术原理具有可塑性,并不束缚于100 M bps的通讯速率,甚至有可能扩展为1000 M bps的以太网。
3.5 诊断
现场总线系统的实际应用经验表明,有效性和试运行时间关键取决于诊断能力。只有快速而准确地检测出故障,并明确标明其所在位置,才能快速排除故障。因此,在EtherCAT的研发过程中,特别注重强化诊断特征。
试运行期间,驱动或I/O 端子等节点的实际配置需要与指定的配置进行匹配性检查,拓扑结构也需要与配置相匹配。由于整合的拓扑识别过程已延伸至各个端子,因此,这种检查不仅可以在系统启动期间进行,也可以在网络自动读取时进行(配置上载)。
可以通过评估CRC校验,有效检测出数据传送期间的位故障——32 位CRC多项式的最小汉明距为4。除断线检测和定位之外,EtherCAT系统的协议、物理层和拓扑结构还可以对各个传输段分别进行品质监视,与错误计数器关联的自动评估还可以对关键的网络段进行精确定位。此外,对于电磁干扰、连接器破损或电缆损坏等一些渐变或突变的错误源而言,即便它们尚未过度应变到网络自恢复能力的范围,也可对其进行检测与定位。
3.6 高可靠性
选择冗余电缆可以满足快速增长的系统可靠性需求,以保证设备更换时不会导致网络瘫痪。您可以很经济地增加冗余特性,仅需在主站设备端增加使用一个标准的以太网端口(无需专用网卡或接口),并将单一的电缆从总线型拓扑结构转变为环型拓扑结构即可(见图7)。当设备或电缆发生故障时,也仅需一个周期即可完成切换。因此,即使是针对运动控制要求的应用,电缆出现故障时也不会有任何问题。EtherCAT也支持热备份的主站冗余。由于在环路中断时EtherCAT从站控制器芯片将立刻自动返回数据帧,一个设备的失败不会导致整个网络的瘫痪。例如,拖链设备可以配置为分支拓扑以防线缆断开。
图 7: 使用标准从站设备的低成本线缆冗余
3.7 安全性
为了实现EtherCAT安全数据通信,EtherCAT安全通信协议已经在ETG组织内部公开。EtherCAT被用作传输安全和非安全数据的单一通道。传输介质被认为是“黑色通道”而不被包括在安全协议中(见图8)。EtherCAT过程数据中的安全数据报文包括安全过程数据和所要求的数据备份。这个“容器”在设备的应用层被安全地解析。通信仍然是单一通道的。这符合IEC61784-3附件中的模型A。
图 8: 使用黑色通道的EtherCAT安全通信软件构件
EtherCAT安全协议已经由德国技术监督局(TÜV SÜD Rail)评估为满足IEC61508定义的SIL3等级的安全设备之间传输过程数据的通信协议。设备上实施EtherCAT安全协议必须满足安全目标的需求。相应的产品相关要求也必须考虑进来。
图 9: EtherCAT安全系统
图9中的应用示例受益于这种技术。安全元件在自动化系统中所需要的任意地方都可以使用。系统中可以使用不同规模的本地输入和输出元件。可以根据需求使用安全或非安全总线端子扩展额外的输入和输出。安全逻辑也嵌入到网络当中。这样不用安全扩展的标准PLC可以继续处理控制任务。安全输入和输出功能需要的本地安全逻辑由智能化的安全总线端子实现。这节约了昂贵的安全PLC所带来的成本,并可以根据当前任务随意裁剪逻辑功能。只有安全EtherCAT主站和所分配的安全从站通过非安全的标准PLC路由。
本协议在安全数据长度,通信介质或波特率方面么有限制。
EtherCAT被用作“黑色通道”,即,通信系统在安全处理中没有任何作用。
协议被鉴定符合IEC61508定义的SIL3等级
提供EtherCAT安全功能的产品已经于2005年就上市了。
3.8 EtherCAT 取代PCI
随着PC组件急剧向小型化方向发展,工业PC的体积日趋取决于插槽的数目。而快速以太网的带宽和EtherCAT通讯硬件的过程数据长度则为该领域的发展提供了新的可能性——IPC 中的传统接口现在可以转变为集成的EtherCAT接口端子(参见图10)。除了可以对分布式I/O进行编址,还可以对驱动和控制单元以及现场总线主站、快速串行接口、网关和其它通讯接口等复合系统进行编址。
图 10: 分布式现场总线接口
即使是其他无协议限制的以太网设备变体,也可以通过分布式交换机端口设备进行连接。由于一个以太网接口足以满足整个外围设备的通讯 (参见图11),因此,这不仅极大地精简了IPC主机的体积和外观,而且也降低了IPC主机的成本。
图 11: EtherCAT使控制器的体积显著减小
3.9 设备行规
设备行规描述了设备的应用参数和功能特性,如设备类别相关的机器状态等。现场总线技术已经为I/O设备、驱动、阀等许多设备类别提供了可利用的设备行规。用户非常熟悉这些行规以及相关的参数和工具,因此,EtherCAT无需为这些设备类别重新开发设备行规,而是为现有的设备行规提供了简单的接口。该特性使得用户和设备制造商可以轻松完成从现有的现场总线到EtherCAT技术的转换过程。
3.9.1 EtherCAT实现CANopen (CoE)
CANopen©设备和应用行规广泛用于多种设备类别和应用,如I/O组件、驱动、编码器、比例阀、液压控制器,以及用于塑料或纺织行业的应用行规等。EtherCAT可以提供与CANopen机制[7]相同的通讯机制,包括对象字典、PDO(过程数据对象)、SDO(服务数据对象),甚至于网络管理。因此,在已经安装了CANopen的设备中,仅需稍加变动即可轻松实现EtherCAT,绝大部分的CANopen©固件都得以重复利用。并且,可以选择性地扩展对象,以便利用EtherCAT所提供的巨大带宽。
3.9.2 EtherCAT实施伺服驱动 设备行规IEC 61491 (SoE)
SERCOS interface™ 是全球公认的、用于高性能实时运行系统的通讯接口,尤其适用于运动控制的应用场合。用于伺服驱动和通讯技术的SERCOS™框架属于IEC 61491标准[8] 的范畴。该伺服驱动框架可以轻松地映射到 EtherCAT中,嵌入于驱动中的服务通道、全部参数存取以及功能都基于EtherCAT邮箱(参见图12)。在此,关注焦点还是EtherCAT与现有协议的兼容性(IDN的存取值、属性、名称、单位等),以及与数据长度限制相关的扩展性。过程数据,即形式为AT和MDT的SERCOS™数据,都使用EtherCAT从站控制器机制进行传送,其映射与SERCOS映射相似。并且,EtherCAT从站的设备状态也可以非常容易地映射为SERCOS™协议状态。EtherCAT从站状态机可以很容易地映射到SERCOS™协议的通信阶段。EtherCAT为这种在CNC行业中广泛使用的设备行规提供了先进的实时以太网技术。这种设备行规的优点与EtherCAT分布时钟提供的优点相结合,保证了网络范围内精确时钟同步。可以任意传输位置命令,速度命令或扭矩命令。取决于实现方式,甚至可能继续使用相同的设备配置工具。
图 12: 同时并存的多个设备行规和协议
3.10 EtherCAT实现以太网(EoE)
EtherCAT技术不仅完全兼容以太网,而且在“设计”之初就具备良好的开放性特征——该协议可以在相同的物理层网络中包容其它基于以太网的服务和协议,通常可将其性能损失降到最小。对以太网的设备类型没有限制,设备可通过交换机端口在EtherCAT段内进行连接。以太网帧通过EtherCAT协议开通隧道,这也正是VPN、 PPPoE (DSL) 等因特网应用所普遍采取的方法。EtherCAT网络对以太网设备而言是完全透明的,其实时特性也不会发生畸变(参见图13)。
图 13: 对所有以太网协议完全透明
EtherCAT设备可以包容其它的以太网协议,因此具备标准以太网设备的一切特性。主站的作用与第2层交换机所起的作用一样,可按照编址信息将以太网帧重新定向到相应的设备。因此,集成万维网服务器、电子邮件和FTP 传送等所有的因特网技术都可以在EtherCAT的环境中得以应用。
3.11 EtherCAT实现文件读取(FoE)
这种简单的协议与TFTP类似,允许存取设备中的任何数据结构。因此,无论设备是否支持TCP/IP,都有可能将标准化固件上载到设备上。
3.12 ADS over EtherCAT (AoE)
ADS over EtherCAT (AoE)是由EtherCAT规范定义的客户端-服务器邮箱协议。尽管CoE协议提供了详尽的描述,但AoE则更适合路由与并行服务的应用:通过网关设备访问子网络,如EtherCAT至CANopen® 或 EtherCAT至IO-Link™ 网关设备。AoE使EtherCAT主站应用(如PLC程序)可以访问所属CANopen® 或 IO-Link™从站的各个参数。AoE路由机制开销远低于因特网协议(IP)所定义的开销,并且发送方和接收方寻址参数始终包含在AoE报文中。因此,EtherCAT主站和从站端的实施更为精简。AoE也通过EtherCAT自动化协议(EAP)进行非周期通信的标准化,从而为上位机MES系统或主计算机、EtherCAT主站及其从属的现有设备之间提供无缝通信。同时,AoE也提供了从远程诊断工具获取EtherCAT网络诊断信息的标准化方法。
4. 基础设施成本
页首
由于EtherCAT无需集线器和交换机,因此,在环境条件允许的情况下,可以节省电源、安装费用等设备方面的投资,只需使用标准的以太网电缆和价格低廉的标准连接器即可。如果环境条件有特殊要求,则可以依照IEC标准,使用增强密封保护等级的连接器。
5. EtherCAT 实施
页首
EtherCAT技术是面向经济的设备而开发的,如I/O 端子、传感器和嵌入式控制器等。EtherCAT使用遵循IEEE802.3标准的以太网帧。这些帧由主站设备发送,从站设备只是在以太网帧经过其所在位置时才提取和/或插入数据。因此,EtherCAT 使用标准的以太网MAC,这正是其在主站设备方面智能化的表现。同样,EtherCAT在从站控制器中使用专用芯片,这也是其在从站设备方面智能化的表现——无论本地处理能力是否强大或软件品质好坏与否,专用芯片均可在硬件中处理过程数据协议,并提供最佳实时性能。
5.1 主站
EtherCAT可以在单个以太网帧中最多实现1486字节的分布式过程数据通讯。其它解决方案一般是,主站设备需要在每个网络周期中为各个节点处理、发送和接收帧。而EtherCAT系统与此不同之处在于,在通常情况下,每周期仅需要一个或两个帧即可完成所有节点的全部通讯,因此,EtherCAT主站不需要专用的通讯处理器。主站功能几乎不会给主机CPU带来任何负担,轻松处理这些任务的同时,还可以处理应用程序,因此EtherCAT 无需使用昂贵的专用有源插接卡,只需使用无源的NIC卡或主板集成的以太网MAC设备即可。EtherCAT主站很容易实现,尤其适用于中小规模的控制系统和有明确规定的应用场合。
例如,如果某个单个过程映像的PLC没有超过1486 字节,那么在其周期时间内循环发送这个以太网帧就足够了。因为报文头运行时不会发生变化,所以只需将常数报文头插入到过程映像中,并将结果传送到以太网控制器即可。
EtherCAT映射不是在主站产生,而是在从站产生(外围设备将数据插入所经以太网帧的相应位置),因此,此时过程映像已经完成排序。该特性进一步减轻了主机CPU的负担。可以看到,EtherCAT主站完全在主机CPU中采用软件方式实现,相比之下,传统的慢速现场总线系统通过有源插接卡方可实现主站的方式则要占用更多的资源,甚至服务于DPRAM的有源卡本身也将占用可观的主机资源。
系统配置工具(通过生产商获取)可提供包括相应的标准 XML 格式启动顺序在内的网络和设备参数。
图 14: 主站实施的单个过程映像
5.1.1 主站实施服务
已经在各种实时操作系统上实现了EtherCAT主站,包括但并不限于:eCos, INtime, MICROWARE OS-9, MQX, On Time RTOS-32, Proconos OS, Real-Time Java, RT Kernel, RT-Linux, RTX, RTXC, RTAI Linux, PikeOS, Linux with RT-Preempt, QNX, VxWin + CeWin, VxWorks, Windows CE, Windows XP/XPE with CoDeSys SP RTE, Windows NT/NTE/2000/XP/XPE/Vista with TwinCAT RTE, Windows 7 and XENOMAI Linux.
可以获得开源主站协议栈,作为示例代码或商业软件。也有各种公司提供各种硬件平台上的实施服务。可以在EtherCAT网站上的产品区找到快速增长的供应商信息[1]。
5.1.2 主站样本代码
另一种EtherCAT主站的实现方式是使用样本代码,花费不高。软件以源代码形式提供,包括所有的EtherCAT主站功能,甚至还包括EoE(EtherCAT实现以太网)功能(见图15)。开发人员只要把这些应用于Windows环境的代码与目标硬件及所使用的RTOS加以匹配就可以了。该软件代码已经成功应用于多个系统。
图 15: 主站样本代码结构
5.2 从站
EtherCAT从站设备使用一个价格低廉的从站控制器芯片ESC。从站不需要微处理器就可以实现EtherCAT通信。可以通过I/O接口实现的简单设备可以只由ESC和其下的PHY,变压器和RJ45接头。给从站的过程数据接口是32位的I/O接口。这种从站没有可配置的参数,所以不需要软件或邮箱协议。EtherCAT状态机由ESC处理。ESC的启动信息从EEPROM中读取,它也支持从站的身份识别。更复杂的可配置从站有使用一个CPU。这个CPU和ESC之间使用8位或16位并行接口或串行SPI接口。要求的CPU性能取决于从站的应用,EtherCAT协议软件在其上运行。EtherCAT协议栈管理EtherCAT状态机和应用层协议,可以实现CoE协议和支持固件下载的FoE协议。EoE协议也可以实施。
5.2.1 EtherCAT Slave Controller
目前,有多家制造商均提供EtherCAT从站控制器。通过价格低廉的FPGA,也可实现从站控制器的功能,可以购买授权以获取相应的二进制代码。
从站控制器通常都有一个内部的DPRAM,并提供存取这些应用内存的接口范围:
串行SPI(串行外围接口)主要用于数量较小的过程数据设备,如模拟量I/O模块、传感器、编码器和简单驱动等。该接口通常使用8位微控制器,如微型芯片PIC、DSP、Intel 80C51等(见图16)。
8/16位微控制器并行接口与带有DPRAM接口的传统现场总线控制器接口相对应,尤其适用于数据量较大的复杂设备。通常情况下,微控制器使用的接口包括Infineon 80C16x、Intel 80x86、Hitachi SH1、ST10、ARM和TI TMS320等系列(见图16)。
32位并行I/O接口不仅可以连接多达32位数字输入/输出,而且也适用于简单的传感器或执行器的32位数据操作。这类设备无需主机CPU(见图17)。
图 16: 从站硬件:带主机CPU的FPGA
图 17: 从站硬件:带直接I/O的FPGA
关于EtherCAT从站控制器的最新信息,请登录EtherCAT网站[1]。
5.2.2 从站评估工具包
倍福公司提供的从站评估工具包使接口操作变得简便易行。由于采用了EtherCAT,无需功能强大的通讯处理器,因此,可将从站评估工具包中的8位微处理器作为主机CPU使用。该工具包还包括源代码形式的从站主机软件(相当于协议堆栈)和参考主站软件包(TwinCAT)。
6. 小结
页首
EtherCAT 拥有杰出的通讯性能,接线非常简单,并对其它协议开放。传统的现场总线系统已达到了极限,而EtherCAT则突破建立了新的技术标准——30 µs内可以更新1000个I/O数据,可选择双绞线或光纤,并利用以太网和因特网技术实现垂直优化集成。使用 EtherCAT,可以用简单的线型拓扑结构替代昂贵的星型以太网拓扑结构,无需昂贵的基础组件。EtherCAT还可以使用传统的交换机连接方式,以集成其它的以太网设备。其它的实时以太网方案需要与控制器进行特殊连接,而EtherCAT只需要价格低廉的标准以太网卡(NIC) 便可实现。
EtherCAT拥有多种机制,支持主站到从站、从站到从站以及主站到主站之间的通讯(参见图18)。它实现了安全功能,采用技术可行且经济实用的方法,使以太网技术可以向下延伸至I/O级。EtherCAT功能优越,可以完全兼容以太网,可将因特网技术嵌入到简单设备中,并最大化地利用了以太网所提供的巨大带宽,是一种实时性能优越且成本低廉的网络技术。
图 19: 网络结构形式多样
7. 参考文献
页首
[1]
EtherCAT Technology Group (ETG)
http://www.ethercat.org
[2]
IEC 61158-3/4/5/6-12 (Ed.1.0), Industrial communication networks – Fieldbus specifications – Part 3-12: Data-link layer service definition – Part 4-12: Data-link layer protocol specification – Part 5-12: Application layer service definition – Part 6-12: Application layer protocol specification – Type 12 elements (EtherCAT)
[3]
IEEE 802.3: Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical Layer Specifications
[4]
IEEE 802.3ae-2002: CSMA/CD Access Method and Physical Layer Specifications: Media Access Control (MAC) Parameters, Physical Layers, and Management Parameters for 10 Gb/s Operation
[5]
ANSI/TIA/EIA-644-A, Electrical Characteristics of Low Voltage Differential Signaling (LVDS) Interface Circuits
[6]
IEEE 1588-2002: IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems
[7]
EN 50325-4: Industrial communications subsystem based on ISO 11898 (CAN) for controller-device interfaces. Part 4: CANopen
[8]
IEC 61800-7-301/304 (Ed.1.0), Adjustable speed electrical power drive systems – Part 7-301: Generic interface and use of profiles for power drive systems – Mapping of profile type 1 to network technologies – Part 7-304: Generic interface and use of profiles for power drive systems – Mapping of profile type 4 to network technologies
[9]
SEMI E54.20: Standard for Sensor/Actuator Network Communications for EtherCAT.
http://www.semi.org
[10]
IEC 61784-2 (Ed.1.0), Industrial communication networks – Profiles – Part 2: Additional fieldbus profiles for real-time networks based on ISO/IEC 8802-3
EtherCAT样本
了解更多关于最快的“工业以太网现场总线”的详细信息
中文
英文
德文
西班牙语
意大利文
法语
日文
韩文
EtherCAT多媒体视频
EtherCAT技术协会
工业以太网通信技术EtherCAT运行原理
EtherCAT技术简介
39_欧姆龙NJ系列EtherCAT通过SDO进行变频器控制_哔哩哔哩_bilibili
39_欧姆龙NJ系列EtherCAT通过SDO进行变频器控制_哔哩哔哩_bilibili 首页番剧直播游戏中心会员购漫画赛事投稿欧姆龙NJ系列PLC和1S伺服控制系统实战
9.6万
200
2022-04-26 13:54:59
8274543166793欧姆龙NJ系列PLC欧姆龙1S伺服控制系统实战知识野生技能协会EtherCAT欧姆龙PLC欧姆龙伺服电子凸轮IEC61131欧姆龙NJ欧姆龙NXSysmacStudio圆弧插补定位欧姆龙ST编程
工控圈
发消息
扣扣群937256780
关注 34.0万
桌面AI伙伴,陪你High翻天!视频选集(160/182)自动连播欧姆龙NJ系列PLC入门到精通全套视频工控圈
5323
5
欧姆龙NJ控制器_项目篇大山里的狼哥
1.1万
24
欧姆龙串行通讯编程实战智慧工控
7750
2
徐盼盼--欧姆龙1S伺服控制系统实战 34课时bili_1297782762
588
0
NJ系列欧姆龙PLC运动控制教程(2)没有耳朵的兔子丶
891
0
欧姆龙1S系列伺服器操作指南和实战佳途自动化
3035
0
精通欧姆龙NX1P系列PLC-通讯篇智慧工控
1.1万
0
山东大学欧姆龙PLC视频教程知识搬运工二月版
5663
0
【电气自动化】欧姆龙PLC编程读书记笔记
4600
2
西门子S7-1500PLC高级应用工控猿
12.3万
479
精通欧姆龙NX1P系列PLC运动控制智慧工控
3587
1
电气自动化入门+西门子PLC入门基础(新手必学)常州智控教育
119.1万
8867
欧姆龙软件的安装技成培训
1.6万
1
PLC初学者只要明白这个框架写程序就很简单了工控技能教学
20.5万
583
常用的伺服控制方式:Ethercat总线篇Kinco步科
2.7万
5
欧姆龙 NJ系列运动控制教程没有耳朵的兔子丶
851
0
欧姆龙NJ系列PLC- (共50集)摸凹喵阿
2129
0
精通欧姆龙NX1P系列PLC运动控制 EtherCAT高速现场总线高功能运动控制原理工控吧
1.5万
16
欧姆龙伺服异常与故障现象分析、排错智慧工控
2115
0
NX/NJ PLC基本逻辑编程欧姆龙自动化
2831
0
展开
小窗
客服
顶部
赛事库 课堂 2021