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

CANopenNode学习笔记(一)--- README翻译

CANopenNode学习笔记

文章目录

  • CANopenNode学习笔记
    • 特性
      • CANopen
      • 其他
    • CANopenNode 流程图
    • 文件结构
    • 对象字典编辑器

CANopenNode 是免费开源的CANopen协议栈。
CANopen是建立在CAN基础上的用于嵌入式控制系统的国际标准化(EN 50325-4) (CiA301)高层协议。有关CANopen的更多信息,请参见http://www.can-cia.org/
CANopenNode是用ANSI C语言以面向对象的方式编写的。它运行在不同的微控制器上,作为裸机应用或带RTOS应用。
通信变量、设备变量、自定义变量收集在CANopen对象字典中,可以从C代码和CANopen网络访问。
CANopenNode的主页为https://github.com/CANopenNode/CANopenNode
这是CANopenNode的第4版,带有新的对象字典实现。对于旧版本,git签出分支v1.3-master或v2.0-master。

特性

CANopen

Object Dictionary提供清晰和灵活的组织任何变量。变量可以直接访问或通过读/写函数访问。
NMT从机启动、停止、复位设备。简单的NMT主机。
Heartbeat用于监控 CANopen 设备的心跳生产者/消费者错误控制。
PDO用于广播处理数据,具有高优先级,没有协议开销。对象字典中的变量可以动态映射到TPDO上,TPDO按照通信规则进行传输,并被另一台设备作为RPDO接收。
SDO服务器支持对CANopen设备内所有对象字典变量的快速、分段和块传输访问。
SDO客户机可以访问网络内任何CANopen设备上的任何对象字典变量。
Emergency消息生产者/使用者。
Sync生产者/消费者允许网络同步传输PDO对象,等等。
Time-stamp生产者/消费者支持以毫秒分辨率进行日期和时间同步。
LSS CANopen节点ID和比特率设置,主站和从站,LSS 快速扫描。
CANopen gateway,用于 NMT 主站、LSS 主站和 SDO 客户端的 CiA309-3 Ascii 命令接口。
CANopen Safety, EN 50325-5, CiA304,安全相关网络中的“类PDO”通信
CANopen Conformance Test Tool CANopen一致性测试工具通过。

其他

适用于16位及以上单片机
多线程,实时
对象字典编辑器
对象字典或其他变量的非易失性存储。 自动或由标准 CANopen 命令控制,可配置。
可省电
可能的引导加载程序(用于固件更新)

CANopenNode 流程图

典型 CANopenNode 实现的流程图:

                            -----------------------|     Program start     |-----------------------|-----------------------|     CANopen init      |-----------------------|-----------------------|     Start threads     |-----------------------|     |     |--------------------      |      --------------------|                          |                          |----------------------    ------------------------    -----------------------
| CAN receive thread   |  | Timer interval thread  |  | Mainline thread       |
|  (CAN接收线程)       |  |  (定时器触发线程)      |  |  (主线线程)           |
|                      |  |                        |  |                       |
| - Fast response.     |  | - Realtime thread with |  | - Processing of time  |
| - Detect CAN ID.     |  |   constant interval,   |  |   consuming tasks     |
| - Partially process  |  |   typically 1ms.       |  |   in CANopen objects: |
|   messages and copy  |  | - Network synchronized |  |    - SDO server,      |
|   data to target     |  | - Copy inputs (RPDOs,  |  |    - Emergency,       |
|   CANopen objects.   |  |   HW) to Object Dict.  |  |    - Network state,   |
|                      |  | - May call application |  |    - Heartbeat.       |
|                      |  |   for some processing. |  |    - LSS slave        |
|                      |  | - Copy variables from  |  | - Gateway (optional): |
|                      |  |   Object Dictionary to |  |    - NMT master       |
|                      |  |   outputs (TPDOs, HW). |  |    - SDO client       |
|                      |  |                        |  |    - LSS master       |
|                      |  |                        |  | - May cyclically call |
|                      |  |                        |  |   application code.   |----------------------    ------------------------    -----------------------

文件结构

  • 301/ - CANopen 应用层和通信配置文件。
    • CO_config.h - CANopenNode 的配置宏。
    • CO_driver.h - CAN 硬件和 CANopenNode 之间的接口。
    • CO_ODinterface.h/.c - CANopen 对象字典接口。
    • CO_Emergency.h/.c - CANopen 紧急协议。
    • CO_HBconsumer.h/.c - CANopen 心跳消费者协议。
    • CO_NMT_Heartbeat.h/.c - CANopen 网络管理和心跳生产者协议。
    • CO_PDO.h/.c - CANopen 过程数据对象协议。
    • CO_SDOclient.h/.c - CANopen 服务数据对象 - 客户端协议(主站功能)。
    • CO_SDOserver.h/.c - CANopen 服务数据对象 - 服务器协议。
    • CO_SYNC.h/.c - CANopen 同步协议(生产者和消费者)。
    • CO_TIME.h/.c - CANopen 时间戳协议。
    • CO_fifo.h/.c - 用于 SDO 和网关数据传输的 Fifo 缓冲区。
    • crc16-ccitt.h/.c - CRC 16 CCITT 多项式的计算。
    • 303/ - CANopen 推荐
      • CO_LEDs.h/.c - CANopen LED 指示灯
    • 304/ - CANopen 安全。
      • CO_SRDO.h/.c - CANopen 安全相关数据对象协议。
      • CO_GFC.h/.c - CANopen 全局故障安全命令(生产者和消费者)。
    • 305/ - CANopen 层设置服务 (LSS) 和协议。
      • CO_LSS.h - CANopen 层设置服务协议(通用)。
      • CO_LSSmaster.h/.c - CANopen 层设置服务 - 主协议。
      • CO_LSSslave.h/.c - CANopen 层设置服务 - 从站协议。
    • 309/ - 从其他网络访问 CANopen。
      • CO_gateway_ascii.h/.c - Ascii 映射:NMT 主站、LSS 主站、SDO 客户端。
    • 贮存/
      • CO_storage.h/.c - CANopen 数据存储基础对象。
      • CO_storageEeprom.h/.c - CANopen 数据存储对象,用于将数据存储到块设备 (eeprom) 中。
      • CO_eeprom.h - 与 CO_storageEeprom 一起使用的 Eeprom 接口,功能是特定于目标系统的。
    • 额外的/
      • CO_trace.h/.c - 用于随时间记录变量的 CANopen 跟踪对象。
    • example/ - 包含基本示例的目录,应在任何系统上编译。
      • CO_driver_target.h - CANopenNode 的示例硬件定义。
      • CO_driver_blank.c - CANopenNode 的示例空白接口。
      • main_blank.c - 主线和其他线程 - 示例模板。
      • CO_storageBlank.h/.c - 数据存储到非易失性存储器的示例空白演示。
      • Makefile - 例如 Makefile。
      • DS301_profile.xpd - DS301 的 CANopen 设备描述文件。 它还包括 CANopenNode 的特定属性。 该文件在对象字典编辑器的配置文件中也可用。
      • DS301_profile.edsDS301_profile.md - 标准 CANopen EDS 文件和降价文档文件,从 DS301_profile.xpd 自动生成。
      • OD.h/.c - CANopen 对象字典源文件,从 DS301_profile.xpd 自动生成。
    • doc/ - 文档目录
      • CHANGELOG.md - 更改日志文件。
      • deviceSupport.md - 有关受支持设备的信息。
      • objectDictionary.md - CANopen 对象字典接口的描述。
      • CANopenNode.png - 小图标。
      • html - 带有文档的目录 - 必须由 Doxygen 生成。
    • CANopen.h/.c - CANopen 对象的初始化和处理,适用于通用配置。
    • codingStyle - 编码风格的例子。
    • Doxyfile - 文档生成器 doxygen 的配置文件。
    • 许可证 - 许可证。
    • README.md - 这个文件。

对象字典编辑器

对象字典是CANopen 最重要的部分之一。

要自定义对象字典,必须使用外部应用程序:CANopenEditor。 还提供了最新的预编译二进制文件。 只需提取 zip 文件并运行 EDSEditor.exe。 在 Linux 中,它使用 mono 运行,这在 Ubuntu 上默认可用。 只需将文件权限设置为“可执行”,然后执行程序即可。

在程序中,在首选项中,将导出器设置为“CANopenNode_V4”。 然后开始新项目或打开现有的项目文件。

支持许多项目文件类型,EDS、XDD v1.0、XDD v1.1、旧的自定义 XML 格式。 然后可以将生成的项目文件保存为 XDD v1.1 文件格式 (xmlns=“http://www.canopen.org/xml/1.1”)。 项目文件也可以导出为其他格式,可用于生成对象字典的文档和CANopenNode源文件。

如果启动了新项目,则可能会插入 DS301_profile.xpd。 如果编辑现有(旧)项目,则可能会删除现有的通信特定参数,然后可能会插入新的 DS301_profile.xpd。 另一种方法是通过观察 objectDictionary.md 中 CANopenNode 的对象字典要求来编辑现有的通信参数。

要克隆、添加或删除,请选择对象并使用右键单击。 正确设置自定义对象字典需要一些 CANopen 知识。 也可以从另一个项目中插入单独的对象。

CANopenNode 在标准项目文件中包含一些自定义属性。 有关详细信息,请参阅 objectDictionary.md。

相关文章:

CANopenNode学习笔记(一)--- README翻译

CANopenNode学习笔记 文章目录CANopenNode学习笔记特性CANopen其他CANopenNode 流程图文件结构对象字典编辑器CANopenNode 是免费开源的CANopen协议栈。 CANopen是建立在CAN基础上的用于嵌入式控制系统的国际标准化(EN 50325-4) (CiA301)高层协议。有关CANopen的更多信息&#…...

关于Android 11、12和13服务保活问题

物联网环境,为了解决不同厂商、不同设备、不同网络情况下使用顺畅,同时也考虑到节约成本,缩小应用体积的好处,我们需要一个服务应用一直存在系统中,保活它以提供服务给其他客户端调用。 开机自启动,通过广播…...

Java 泛型 使用案例

参考资料 Java 基础 - 泛型机制详解路人甲-Java泛型专题 目录一. 通用Mapper1.1 实体类1.2 Mapper基类1.3 自定义接口1.4 抽象基类Service1.5 调用二. session和bean的获取一. 通用Mapper 1.1 实体类 ⏹ Accessors(chain true): 允许链式调用 import lombok.Data; import …...

进程与线程

文章目录什么是线程线程与进程的关系线程与进程的区别什么是线程 上一篇文章中我们介绍了什么进程,我们把进程比作一个工厂,那么线程就是工厂中的流水线。引入进程的目的就是为了实现多个任务并发执行,但是如果频繁的创建销毁进程&#xff0…...

骑友,怎么挑选适合自己的赛事

骑友,怎么挑选适合自己的赛事一、从场地、路况、天气,各个方面了解赛事的要求。二、看完赛事,要知道自己适合参加什么样的比赛。三、通过比赛成绩,对比自己的实力。四、综合考虑自己的经济能力,根据自己的经济能力选择…...

【Java 数据结构与算法】-遍历Map和Set的方式

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【Java 数据结构与算法】 文章目录一、遍历Map法一 先获取Map集合的全部key的set集合,遍历map的key的Set集合法二 把map的key和value打包成Set的key后的这个Set集合法…...

组件、套件、 中间件、插件

组件、套件、 中间件、插件 组件 位于框架最底层,是由重复的代码提取出来合并而成。组件的本质,是一件产品,独立性很强,组件的核心,是复用,与其它功能又有强依赖关系。 模块 在中台产品和非中台产品中&…...

自动化工具 pytest 内核测试平台落地初体验

测试平台,有人说它鸡肋,有人说它有用,有人说它轮子,众说纷纭,不如从自身出发,考虑是否要做测试平台: 第 1 阶段,用 Pythonrequests 写接口自动化。 第 2 阶段,选择 unit…...

Python 自动化指南(繁琐工作自动化)第二版:四、列表

原文:https://automatetheboringstuff.com/2e/chapter4/ 在开始认真编写程序之前,您需要理解的另一个主题是列表数据类型及其表亲元组。列表和元组可以包含多个值,这使得编写处理大量数据的程序更加容易。由于列表本身可以包含其他列表&#…...

大数据领域的发展及其对现实世界的价值

大数据已经成为全球各行业领域不可或缺的一部分,并且其应用不断涌现。尽管很多人最初对“大数据”这一术语表示怀疑和不信任,但大数据技术已经确立了稳定的发展方向。根据调研机构的预测,到2027年,全球大数据市场规模将达到1090亿…...

几种常见的架构模式

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 如果访问不了Github&#xff0c…...

flutter安装各种问题汇总

C:\Users\Administrator>flutter doctor -v Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source! [√] Flutter (Channel stable, 3.7.0, on Microsoft Windows [版本 10.0.19044.1826], locale zh-CN) • Flutte…...

网络传输层

目录传输层再谈端口号端口号范围划分认识知名端口号netstatpidofUDP协议UDP协议端格式UDP的特点面向数据报UDP的缓冲区UDP使用注意事项使用udp协议 的应用层协议其它TCP协议TCP协议段格式如何理解链接如何理解三次握手如何理解四次挥手概念TIME_WAIT/CLOSE_WAITTCP策略确认应答…...

linux内核启动分析(二)

文章目录1. set_task_stack_end_magic2.smp_setup_processor_id3. debug_objects_early_init4. cgroup_init_early4.1 init_cgroup_root4.1.1 init_cgroup_housekeeping4.2 cgroup_init_subsys5. local_irq_disable5.1 raw_irqs_disabled5.2 raw_local_irq_disable5.3 trace_ha…...

『EasyNotice』.NET开源消息通知组件——快速实现邮件/钉钉告警通知

📣读完这篇文章里你能收获到 傻瓜式扩展方法直接使用如何通过EasyNotice快速实现钉钉/邮件的通知发送感谢点赞收藏,避免下次找不到~ 文章目录一、EasyNotice1. 功能介绍2. 源码地址二、项目接入1. 发送邮件通知Step 1 : 安装包,通过Nuget安装…...

JVM垃圾回收算法

垃圾标记阶段 对象存活判断:在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,…...

怎么看待ChatGPT封号这件事呢?

最近的ChatGPT大量封号,刷爆了全网,我的两个个人账号被封禁了,不知道大家最近有没有遇到相关的报错信息,要么就是检查你当前的浏览器配置,最后来一个access denied,要么直接就给你来一个当前的国家不支持。…...

八、交换技术原理

(一)交换机 1、交换机介绍 一种用于电(光)信号转发的网络设备,可以为接入交换机的任意两个网络节点提供独享的电信号通路。 工作于第二层的叫交换机,工作于第三层的叫第三层交换机,最常见的是…...

什么是DHCP?DHCP有什么用?(中科三方)

在IP网络中,每一个连接的设备都需要分配一个唯一的IP地址,才能实现和Internet上其他设备的互联。在一些终端规模较大的网络中,需要为每一个主机手工配置IP地址,以避免IP地址的重复,如果主机发生变更,还要去…...

算法设计-二分

一、有序和单调 ​ 二分本质上是一种更加智能的搜索状态空间的方式,他需要状态空间的状态呈现一种“有序的一维数组”的形式,然后再进行搜索。所以一开始的排序是无法避免的。 ​ 因为二分的写法问题,所以应当怎样排序也是有一定讲究的&…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

李沐--动手学深度学习--GRU

1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...

CppCon 2015 学习:Simple, Extensible Pattern Matching in C++14

什么是 Pattern Matching&#xff08;模式匹配&#xff09; ❝ 模式匹配就是一种“描述式”的写法&#xff0c;不需要你手动判断、提取数据&#xff0c;而是直接描述你希望的数据结构是什么样子&#xff0c;系统自动判断并提取。❞ 你给的定义拆解&#xff1a; ✴ Instead of …...

【多线程初阶】单例模式 指令重排序问题

文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…...