当前位置: 首页 > news >正文

自建极简Ethercat主站-第8章 FOE基础功能实现

文章目录

    • 第8章 FOE
      • 8.1 FOE简介
      • 8.2 FOE 数据结构
        • 8.2.1 FOE帧格式
        • 8.2.2 FOE请求
      • 8.3 数据传输流程
        • 8.3.1 读流程
        • 8.3.2 写流程
        • 8.3.3 忙操作
        • 8.3.4 代码示例

第8章 FOE

源码地址

8.1 FOE简介

​ FOE(File Access over Ethercat),用于节点之间的文件传输。协议类似于TFTP协议,感觉和TFTP协议没有太大的区别,只是一个是UDP传输,一个是Ethercat传输。从机在通过FOE进行固件更新的时候,作为服务端,主机作为客户端,由主机发起固件的上传和下载。FOE与COE一样都是使用邮箱通信,在邮箱头中有一个TYPE字段用来标记当前的数据是COE、FOE或者其他数据。

​ 在使用过程中FOE一般是在Bootstrap状态下与从站通信,当然其他状态下也可以使用。不过在Bootstrap状态下只能使用FOE,因为从站源码中有对邮箱数据进行判断,如果在Bootstrap状态下,接收到的邮箱数据不是FOE,则会报错。

8.2 FOE 数据结构

8.2.1 FOE帧格式
目标地址源地址类型Frame HeaderDatagram HeaderMailbox HeaderFOE HeaderDataFCS
6 bytes6 bytes2 bytes (0x88A4)2 bytes10 bytes6 bytes2bytesN bytes4bytes

FOE 的帧格式与COE的帧格式差不多,也是邮箱数据。FOE Header 2个字节,第一个字节是opcode,第二个字节为预留。opcode的取值范围是1~6,表示数据包的不同功能。

8.2.2 FOE请求

FOE总共有6种请求,分别是读请求、写请求、数据、应答、错误、忙。

1、FOE Read请求

帧部分数据区域大小说明
Mailbox HeaderLength2byte邮箱数据的长度,包含2个命令字节。
Address2byte如果主站是客户机,指源站地址,如果从站是客户机,指目的地址。
Channelbit[0:5]保留,默认0
Prioritybit[6:7]数据的优先级,0~3;0最低。
Typebit[0:3]0x00:错误;0x01:保留;0x02:EOE;0x03:COE;0x04:FOE;0x05:SOE;0x06~0x0E:保留;0x0F:供应商特定
Cntbit[4:6]邮箱服务计数器(1~7)。从站与主站的邮箱数据中的Cnt没有关联,两者都是递增的。从站通过主站邮箱数据中的Cnt来判断是否是重复写服务。主站通过从站邮箱服务的Cnt可以检查出是否丢包。
Reservedbit[7]保留,默认0
FOE HeaderOpcode1byte0x01:读请求
Reserved1byte默认0
Read DataPassword4byte0:不适用密码 1~0xFFFFFFFF:密码 从站对password作为一个判断,只有当密钥正确的时候才进行操作
File Namen byte被读文件名字

2、写请求

帧部分数据区域大小说明
Mailbox HeaderLength2byte邮箱数据的长度,包含2个命令字节。
Address2byte如果主站是客户机,指源站地址,如果从站是客户机,指目的地址。
Channelbit[0:5]保留,默认0
Prioritybit[6:7]数据的优先级,0~3;0最低。
Typebit[0:3]0x00:错误;0x01:保留;0x02:EOE;0x03:COE;0x04:FOE;0x05:SOE;0x06~0x0E:保留;0x0F:供应商特定
Cntbit[4:6]邮箱服务计数器(1~7)。从站与主站的邮箱数据中的Cnt没有关联,两者都是递增的。从站通过主站邮箱数据中的Cnt来判断是否是重复写服务。主站通过从站邮箱服务的Cnt可以检查出是否丢包。
Reservedbit[7]保留,默认0
FOE HeaderOpcode1byte0x02:写请求
Reserved1byte默认0
Write DataPassword4byte0:不适用密码 1~0xFFFFFFFF:密码 从站对password作为一个判断,只有当密钥正确的时候才进行操作
File Namen byte被读文件名字

3、数据

帧部分</
http://www.lryc.cn/news/421510.html

相关文章:

  • SQL Zoo 8.Using Null
  • LeetCode274. H 指数
  • 概述:Dubbo、Nacos、 Zookeeper 等分布式服务协调与治理等技术
  • 【LINUX】小工具降耦合,全内核函数插入宏摸索测试中。。
  • 24/8/12算法笔记 复习_线性回归
  • Linux系统驱动(十四)输入子系统
  • 力扣(2024.08.12)
  • 最新版的AutoGPT,我搭建好了
  • [SWPUCTF 2021 新生赛]PseudoProtocols(构造伪协议)
  • 基于STM32开发的智能语音助手系统
  • 基于python的图像去雾算法研究系统设计与实现
  • 自定义 View 可以播放一段视频
  • LVS负载均衡集群部署之—NAT模式的介绍及搭建步骤
  • 【算法】浅析哈希算法【附代码示例】
  • 2024.8.12
  • 使用Python解析pdf、docx等格式文件。
  • Linux网络通信基础API
  • Python爬虫:下载4K壁纸
  • 2024年【北京市安全员-B证】新版试题及北京市安全员-B证免费试题
  • python爬取B站视频实验
  • 10步搞定Python爬虫从零到精通!
  • SpringMVC学习笔记---带你快速入门和复习
  • Linux系统编程 day09 线程同步
  • Vue快速入门(四)——Vue3及组合式API(一)
  • vue项目名修改、webstorm和idea创建的项目重命名、重构项目、修改项目名称
  • 【MySQL】数据库约束和多表查询
  • 抖店飞鸽客服自动回复软件开发教程与下载体验(.NET版)
  • 如何关闭redis的自动清理缓存,声明式事务(含有redis)如何解决,redis setnx锁的使用。
  • C#中抽象类的使用
  • 揭秘网络攻击:深入理解JavaScript中的跨站点请求伪造(CSRF)