CANopenNode Master 配置

news2024/11/25 13:09:33

文章目录

  • CANopenNode 简介
  • CANopenNode 主栈
  • SDO Client
  • PDO 通讯参数
    • RPDO 通讯参数
    • RPDO 通信参数设置实例
    • TPDO 通讯参数
    • TPDO 通信参数设置实例
  • PDO 映射参数
    • RPDO 映射参数设置实例
    • TPDO 映射参数设置实例

CANopenNode 简介

CANopenNode 是一个开源的免费的开源 CANopen 协议栈。
在这里插入图片描述

  • 对象字典为任何变量提供清晰灵活的组织。可以直接或通过读/写函数访问变量。
  • NMT从设备启动、停止、复位设备 。
  • 监控 CANopen 设备的心跳生产者/消费者错误控制。
  • 对象字典中的变量可以动态映射到 TPDO,然后根据通信规则进行传输。传输的数据被其他设备当作 RPDO 进行接收。
  • SDO服务器支持对 CANopen 设备内所有对象字典变量的快速、分段和块传输访问。
  • SDO客户端可以访问网络内任何 CANopen 设备上的任何对象字典变量。
  • 紧急报文生产者/消费者。
  • 同步生产者/消费者,启用 PDO 对象的网络同步传输。
  • 时间戳生产者/消费者,以毫秒分辨率实现日期和时间同步。
  • LSS CANopen 节点ID和比特率设置、主站和从站、LSS 快速扫描。
  • CANopen 网关,CiA309-3 NMT 主站、LSS 主站和 SDO 客户端的 ASCII 命令接口。
  • CANopen Safety、EN 50325-5、CiA304、安全相关网络中的“类 PDO”通信。

CANopenNode 主栈

  • CANopenNode 通常作为从设备的协议栈使用,也可以作为主栈使用。
  • 在CANopen协议中,我们常用的功能是SDO和PDO,其中SDO分为服务器和客户端两种角色,而PDO是没有主从之分的。

SDO Client

  • 在 CANopenNode 中包含了SDO Client的功能,当需要作为主栈使用时,可通过修改配置中的 CO_CONFIG_SDO_CLI 开启 SDO Client 功能,通过相应的函数即可读写从设备的任意对象。

PDO 通讯参数

无论是作为从设备还是主设备使用,接受数据都是使用RPDO,发送使用TPDO。
在这里插入图片描述

RPDO 通讯参数

typedef struct{
	UNSIGNED8      maxSubIndex;
	UNSIGNED32     COB_IDUsedByRPDO;
	UNSIGNED8      transmissionType;
}OD_RPDOCommunicationParameter_t;
  • 在RPDO中只使用了前2个通讯参数
    • maxSubIndex
      • 该变量此处为2,三个子索引对应的含义如下
        • 0 maxSubIndex
        • 1 COB-ID
        • 2 transmissionType
    • COB_IDUsedByRPDO
      • 用于接收数据所使用的 COB-ID
    • transmissionType
      • 当值小于等于240时接收方式为同步接收,即产生特定个同步对象之后该RPDO才会处理接收到的数据。其他时候即使收到对应的RPDO也不会处理。
  • 每一个对象即代表一个RPDO,单个RPDO可以映射的最大长度为8字节
  • 作为主栈使用时,主栈的RPDO所使用的 COB-ID 与从栈的 TPDO 一致
  • 主栈的传输类型通常为 254,采用异步接收方式处理 RPDO

RPDO 通信参数设置实例

在这里插入图片描述

  • 图中包含一个主节点和4个从节点
  • 从节点的 NODE-ID 分别为1,2,3,4
  • 每一个节点都包含了一个TPDO,其TPDO所用COB_ID为 0x180 + NODE-ID
  • 主节点的 RPDO 与从节点的 TPDO 之间,传输类型和 COB_ID 配置相同。
  • 主节点配置的 RPDO,对应的节点会添加到过滤器设置中,从而允许该报文被接收处理。
  • 当主节点中查找找到对应的 RPDO 之后,再根据 RPDO 中的映射参数将数据复制到对象字典中。

TPDO 通讯参数

typedef struct{
	UNSIGNED8      maxSubIndex;
	UNSIGNED32     COB_IDUsedByTPDO;
	UNSIGNED8      transmissionType;
	UNSIGNED16     inhibitTime;
	UNSIGNED8      compatibilityEntry;
	UNSIGNED16     eventTimer;
	UNSIGNED8      SYNCStartValue;
}OD_TPDOCommunicationParameter_t;
  • RPDO 通讯参数只使用了前面2个,而TPDO中除了COB_ID和传输类型之外,还需要设置 inhibitTime、eventTimer 和 SYNCStartValue。
  • 主设备中的 TPDO 所使用的 COB-ID 应与从设备中的 RPDO 一致,传输类型也需要保持相同。

TPDO 通信参数设置实例

在这里插入图片描述

PDO 映射参数

typedef struct {
	UNSIGNED8      numberOfMappedObjects;
	UNSIGNED32     mappedObject1;
	UNSIGNED32     mappedObject2;
	UNSIGNED32     mappedObject3;
	UNSIGNED32     mappedObject4;
	UNSIGNED32     mappedObject5;
	UNSIGNED32     mappedObject6;
	UNSIGNED32     mappedObject7;
	UNSIGNED32     mappedObject8;
} OD_RPDOMappingParameter_t;
  • 映射参数的用于描述一个 PDO 中的数据与本地对象字典中对象之间的映射关系
  • TPDO 将对象字典中的对象映射到 TPDO 后,通过触发 TPDO 传输,可将对象字典中的数据按照映射的格式发送出去。
  • RPDO 将对象字典中的对象映射到 RPDO 后,在接收到RPDO数据时,会将接收到的数据更新到对象字典中。
  • 下面是各参数的含义:
    • numberOfMappedObjects
      • 该 PDO 中映射的对象个数
    • mappedObject1 ~ mappedObject8
      • 对应一个映射项
      • bit31-bit16 索引
      • bit15-bit8 子索引
      • bit7-bit0 数据长度,其单位为bit,在CANopenNode中,该值必须是 8 的整数,即以字节为基本单位

RPDO 映射参数设置实例

  • 假设需要将从设备如下几个对象映射到 TPDO中,从设备TPDO使用的 COB-ID为 0x181 :
indexsub-indexlen (byte)
0x20010x000x1
0x20020x000x1
0x20040x000x1
0x20080x000x1
  • 从设备TPDO1中消息与对象字典的映射关系如下:
byte0byte1byte2byte3
TPDO10x2001-0x000x2002-0x000x2004-0x000x2008-0x00
  • 而主设备除了通讯参数与从设备一致,其映射关系与从设备无关,是由主设备自身决定的,例如可将从设备通过TPDO发出的数据映射到下面几个对象中:
indexsub-indexlen (byte)
0x20080x000x1
0x20090x000x1
0x200a0x000x1
0x200b0x000x1
  • 当主设备接收到 ID 为 0x181 的数据帧后,便会根据 RPDO 的映射关系,将4字节的数据拷贝到映射的对象中去。

TPDO 映射参数设置实例

  • 假设需要将从设备如下几个对象映射到 RPDO中,从设备RPDO使用的 COB-ID为 0x201 :
indexsub-indexlen (byte)
0x20010x000x1
0x20020x000x1
0x20040x000x1
0x20080x000x1
  • 从设备RPDO1中消息与对象字典的映射关系如下:
byte0byte1byte2byte3
TPDO10x2001-0x000x2002-0x000x2004-0x000x2008-0x00
  • 而主设备除了通讯参数与从设备一致,其映射关系与从设备无关,是由主设备自身决定的,例如可将需要发送给从设备的数据映射到下面几个对象中:
indexsub-indexlen (byte)
0x20080x000x1
0x20090x000x1
0x200a0x000x1
0x200b0x000x1
  • 当主设备触发相应的事件之后,便会将数据从对象字典中拷贝到TPDO中进行发送,从设备通过RPD接收后,根据映射关系将数据拷贝到从设备的对象字典中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【谷粒商城笔记】1.基于docker的mysql、redis环境配置

0.系统 宝塔 v7.5.1 Centos v8.2 1. 安装Docker 直接yum install docker会提示找不到 > docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine Loaded plugins: fastestmirror No Match for argument: …

Ae:常用内置抠像效果

Ae 中的抠像都是基于效果控件来实现的,最终生成动态遮罩来控制画面像素的透明度。 常用的内置抠像效果有:提取、线性颜色键、颜色差值键、内部/外部键等。 黑色或白色背景的抠像 对于白色或黑色背景的素材,可直接尝试图层混合模式。 或者&…

一文打通File类

目录 基本概述 常用构造器 构造方法 路径分隔符 常用方法 File类的获取功能 File类的重命名功能 File类的判断功能 File类的创建功能 File类的删除功能 在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象,也就是说,如果…

一大波智能AI对话机器人来袭——一共20个可以白嫖的ChatGPT网站供您使用,总有一款能打开~

文心一言https://yiyan.baidu.com 小莓用AIhttps://ai.usesless.com/chat NotGPTNotGPT,AI问答,AI绘画,AI协助提升工作效率https://chat2.pypig.com https://chatgptmirror.comhttps://chatgptmirror.com 超大模型AI对话https://chat.ktoai.com ChatGPTYour personal ChatGPT B…

使用nsenter检查docker网络

文章目录 一 环境准备二 需求三 解决 一 环境准备 虚拟机IP:10.0.0.100 拉取的三个镜像,镜像名称与ID如下: [rootcanway01 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED …

flink 解决udf重复调用的问题(亲测有效)

问题 针对如图的情况,udf会被调用4次,如果udf是计算型的,后果很严重。接下来介绍一下解决的办法。 更改底层源码 大神的博客继续往下看,有测试过程测试UDF 1.写两个udf public class Udf1 extends ScalarFunction {public long eval(long ordernumber

【宝塔建站】Ubuntu下使用宝塔面板一键搭建Z-Blog个人博客

文章目录 1.前言2.网站搭建2.1. 网页下载和安装2.2.网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语 1.前言 Ubuntu系统作…

CyberLink的照片编辑软件PhotoDirector Ultra 14.5版本在win10系统的下载与安装配置教程

目录 前言一、PhotoDirector Ultra安装二、使用配置总结 前言 PhotoDirector Ultra是由CyberLink公司开发的一款专业的照片编辑工具,旨在为用户提供全面的照片后期制作和编辑解决方案。其具有多种编辑工具,例如调整曝光、色彩、对比度和锐度等参数&…

深入解析Linux C/C++ 编程中的内存泄漏问题

深入解析Linux C/C 编程中的内存泄漏问题 I. 前言 (Introduction)1.1 文章目的与内容概述 (Purpose and Overview of the Content)1.2 重要性和实用性的说明 (Significance and Practicality Explanation)1.3 数据结构与内存泄漏的基本概念 (Basic Concepts of Data Structure …

python视角对比其他编程语言

引用《编程小白的第一本Python入门书》

ArcMap:第一届全国大学生GIS应用技能大赛(滁州学院)详解-上午题

目录 01 上午题 1.1 题目 1.2 数据 1.2.1 如何添加比赛数据? 1.2.2 比赛数据展示 1.3 思路 1.3.1 坐标系问题 1.4 实操 1.4.1 建立空间数据库和比赛数据导入 1.4.2 坐标系问题解决 1.4.3 要素的订正 1.4.4 数据入库和符号化管理; 1.4.5 其…

手撕链式二叉树(二)—【C语言】

链式二叉树(一) http://t.csdn.cn/HWu6E 目录 1. 二叉树找值为x的节点 代码实现分析 代码实现 递归展开图 2. 求二叉树层数 代码思路分析 代码实现 3. 二叉树的销毁 代码思路分析 代码实现 运行结果 4. 二叉树的一些OJ题目 1. 单值…

【云原生•监控】Categraf大一统的监控数据采集器

【云原生•监控】Categraf大一统的监控数据采集器 前言 「笔者已经在公有云上搭建了一套临时环境,可以先登录体验下:」 http://124.222.45.207:17000/login 账号:root/root.2020 简介 Categraf 是一个监控采集 Agent,类似 Telegra…

KDHL-200A高压开关电阻测量仪技术参数

一、产品概述 KDHL-200A高压开关电阻测量仪操作面板采用人体工学设计,符合操作习惯,采用高频开关电源和数字电路技术,适用于开关控制设备回路电阻的测量。 测试电流采用国家标准推荐的直流100A,可在直流100A的情况下直接测得回路…

媒体公关是什么?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 常常有很多朋友问我,胡老师,你具体是从事什么行业的,能为我们做些什么呢,其实51媒体网(51 Media PR)是专注于媒体公…

员工每天带薪拉屎3至6小时,对谁更不利?

#员工每天带薪拉屎3至6小时被解雇# 事件摘要: 据劳动报报道,2015年7月开始,某公司员工王某每天在厕所停留的时间为3至6个小时。记录显示,自2015年9月7日至17日(9月13日除外)王某每天分二至三次&#xff0…

第51讲:Python定义函数时使用*定义个数可变的位置形参

文章目录 1.个数可变的位置形参概念2.定义函数时定义一个个数可变的位置形参3.个数可变的形参通常位于函数中的最后一个形参 1.个数可变的位置形参概念 定义函数时,如果无法事先确定传递的位置实参的个数,在这种情况下,可以将形参定义为个数…

AutoAI 2023峰会观察:数据驱动变革,迎接智驾未来

在驶向智驾未来的科技之路上,数据正在发挥什么样的重要作用? AutoAI 2023中国峰会盛大召开 近日,AutoAI 2023第六届无人驾驶及智能驾舱中国峰会在上海盛大召开,AutoSec 7周年年会暨中国汽车网络安全与数据安全合规峰会也于同期一起…

老手机安装apk包时出现[解析包时出现错误]

问题 在老手机上安装打包好的apk时出现了“解析包时出现错误” 环境 手机 型号:华为、荣耀Android版本: 6.0 开发环境 gradle 6.9.2Android Studio 4.2.1minSdkVersion 23 解决 打包时只使用V1签名。 总结分析 因为Android7以上,引入使…

气氛热烈 金句频出!一文看尽网易科技首期AIGC创新社沙龙

GPT狂飙,AI突进。 无数人的热情被点燃,振臂高呼“AI的iPhone时刻已经到来”。面对时代新机遇,创业者闻风而动,投资人竞相追逐,巨头纷纷入局。未来会怎样?没人能给出确切的答案。 但是,几乎已成共…