大纲

前沿:以问题为导向学习是最高效的,本文主要讲述在学习Canopen协议中的一些疑惑点,

分享一些学习心得,不讲协议本身的内容。

1.主机和从机的概念?

2.PDO和SDO的区别是什么?

3.OD存在的意义是什么?

4.心跳检测的意义?0x00、0x05、0x7f?

5.COB-ID和PDO的ID有关系吗?SDO的ID是主机的ID还是从机的ID?

COB-ID = Function code+node_id

6. PDO,SDO  数据存在几个字节,心跳节点 数据存在几个字节?

7.PDO主要关系的几点?   触发方式+通讯参数和映射参数

8.SDO传输的三种方式?

9.通讯模型 : 服务器到客户端、消费者和生产者等。

10.CANOPEN 与CAN的不同点

1. 通讯模型

(1)服务器到客户端 :客户端发送数据,服务器需要回传数据      (SDO)

(2)消费者和生产者 :生产者发送数据,消费者不需要返回数据(PDO)

(3)主机和从机   Canopen协议中NMT模式控制节点的状态,启动状态、预准备状态、

工作状态、停止状态

2. 主机和从机的概念

对于从站而言发送消息给主站就是TPDO模式,其中TPDO总共有4个。

对于从站接收主站的消息就是RPDO模式,其中RPDO总共有4个。


3. PDO 和SDO、NMT区别

  • PDO:根据模式从机选择定时发送数据或者等数据变化在发送数据给主机,以请求主机

做出一些列相应。

        模型:生产者(producter)和消费者(comsumer)模式,接收方不会返回数据值

  • SDO:通过主机发送命令(cs+主索引+子索引+4个字节数据),对对象字典进行操作改变数据

,如改变波特率,心跳的时间以及对于模式选择的切换,通过SDO_Handle进行处理即可。

       模型:客户端(client) 和服务器(service)模型

  •  NMT: 主机控制节点状态

状态(4个):节点上线(boot up)、预准备节点(pre-operational)、节点运行(operational)、节点停止(stoped)

        模型:主机(host)和从机(slave)


4.OD存在的意义是什么?

作为用户预先定义的数据库,实现参数的赋值给函数中的一些变量。通过功能码SDO命令修改。

通过SDO模式可以修改对象字典中的一些值。主索引,子索引相当于书的目录,上位机通过发送CS命令读写

其中的数据,实现对于全局变量的修改,如对波特率的修改、心跳时间间隔的修改等


5.心跳检测的意义?0x00、0x05、0x7f?

1.是主机检测从机的方式,从机发送心跳包,主机接收到心跳包后,才会向从机发送消息

否则主机就认为从机存在故障。

0x00    boot up   节点上线

0x7f     节点在准备状态

0x05    节点在工作状态

0x04    节点停止状态

通过这个的设置,上位机可以通过NMT命令控制节点的状态,其命令中运行的参数主要就是心跳报文的状态

=========================在编写接收函数的时候需要考虑以下设计内容============================

1.NMT mode   主机通过命令管理从机的状态,如节点的上线,预先准备状态,工作状态,停止状态,复位状态等等

 1.首先通过功能模式进入NMT管理模式   COB-ID=000

                        2.buf[1]是节点地址,buf[0]是命令码,为什么要存在buf[1],存放的是节点的ID,判断是不是我想控制的ID即可。

通过switch方式,可以控制节点的工作状态。

2.SDO mode     主机通过命令修改相关参数实现相应的功能(节点不工作在停止状态 0x7f)(这个描述的很抽象)

特别的,SDO和PDO将节点地址放在COB-ID中,主机发送命令给从机,判断是否是相同的ID,就可以操作

相应的功能。SDO传输数据是8个字节(CS(1byte)+主索引(2byte)+子索引(1byte)+数据4byte)

3.RPDO mode          前提: (heartbeat.buf[ 0 ] = 0x05),

1. 如果主机发送消息,下位机接收到消息

2. 复制接收到的消息给一个全局变量(为了进行数据比较,不同变量之间才可以比较)

2. 从站自己做出相应的命令,如通过数据对一个引脚控制另一个引脚等等作用


6.COB-ID和PDO的ID有关系吗?SDO的ID是主机的ID还是从机的ID?

COB-ID = 功能码(7bit)+节点ID(4bit)

NMT :功能码000

SDO   功能码 581和601

PDO   功能码  181和其他总共有8个

Heartbeat  701


7. PDO,SDO  数据存在几个字节,心跳节点 数据存在几个字节?

PDO :1~8个字节长度

SDO存在8个字节 (CS+主索引+子索引+date)

HEARTBEAT心跳节点存在1个字节  (存放节点状态)

NMT模式存在2个字节 (存放控制状态与控制从机的ID)


8.PDO配置主要考虑那几点?   触发方式+通讯参数和映射参数

      1)触发方式:

1.时间触发+事件触发

2.同步(sync)和异步方式

      2)通讯参数  +   映射参数 : 

              

     3)同步传输和异步传输的区别:


9.SDO传输的三种方式?

SDO传输方式主要有两种,快速传输方式和普通传输方式

  • 快速SDO:来回一次就能搞定,读取和写入的值不能大于32位

10.CANOPEN 与CAN的不同点

不同点的角度:从OSI 7层网络模型

  • CAN(controller Area Network)只规定了物理层和数据链层,这些都是通过硬件实现。

普通的CAN只需要关系收发以及收发的标志位即可,收发的速度(波特率)等。

  • CANopen 规定了应用层,能够兼容不同厂商之间进行通信的方式。

CANopen协议规范文本经过多次修改,CiA在CiA301基础上,对各个行业退出设备子协议

    关于设备子协议,就是对不同行业的应用对象,对CANopen内部的数据含义进行重新定义,

或添加新的控制逻辑。

下图是描述不同协议的编号:

下图是CANopen协议的框架

CANopen协议 学习笔记相关推荐

  1. 《CANOpen》 学习笔记5

    <CANOpen> 学习笔记5 CANOpen 学习笔记5 驱动器 CANopen 调试笔记 驱动器 CANopen 调试笔记 驱动器 Copley 公司提供的 <CANopenPr ...

  2. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  3. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  4. POP3协议学习笔记

    今日得闲,于是将POP3的学习笔记也整理出来! 互联网上的TCP/IP,POP3/SMTP等资料多如牛毛,这里只是自己一点点心得,另外对于各位网络方面的大牛请安静的路过,我可不喜欢在关公面前耍大刀.. ...

  5. CoAP协议学习笔记 1.3 用UDP工具来调试CoAP

    1 前言 CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持. 既然CoAP是基于UDP来组包的,那肯定是可以实现. 所以这篇文章给 ...

  6. CANopen协议学习

    CANopen协议学习 https://www.kvaser.cn/about-can/higher-layer-protocols/canopen/?renqun_youhua=174080

  7. 网络协议学习笔记 · 22

    IPv6 · 流媒体 · 即时通讯 · 缓存 · 网络爬虫 VPN 作用 VPN与代理的区别 实现原理(隧道协议) 网络爬虫 简易实例 robots.txt 无线网络 缓存(Cache) 响应头 请求 ...

  8. CoAP协议学习笔记 1.2 一张表了解 CoAP 协议

    1 前言 对于CoAP协议的学习,这份100多页的文档肯定没法背下来.我们只需把协议当作工具书,大体知道主体的内容,在遇到细节问题时再去具体章节找问题. 本篇笔记中先对 CoAP 协议内容做个基础了解 ...

  9. CoAP协议学习笔记 3.1 CoAP协议翻译 加密基础介绍

    CoAP协议学习笔记可点此查看. 1 前言 在之前的学习中,没有过多关注加密.但实际部分厂家的IoT平台(阿里云.OneNET)已经启用了相关安全处理,有必要深入学习下. 在 CoAP 协议 RFC7 ...

最新文章

  1. 计算机组成原理 — CPU — 指令集架构类型
  2. JAVA数据库编程(JDBC技术)-入门笔记
  3. crt mysql中文乱码_CRT 和mysql 中文乱码解决方式
  4. WSUS注冊表導入,工作組用戶系統更新
  5. UNITY优化资料收集
  6. 无法显示隐藏文件的解决方法
  7. QTP的那些事 -– Visual Relation Identifier Feature: How to use in the real world
  8. 串口通信工具android,Android串口通信工具
  9. 《从零开始学Swift》学习笔记(Day 12)——说几个特殊运算符
  10. VS C++ memcpy() memset()不明确报错
  11. Python接口自动化测试_悠悠
  12. LabVIEW终止符
  13. 见山只是山 见水只是水——提升对继承的认识
  14. source test.sh、sh test.sh、./test.sh有什么区别
  15. 三冲IPO,独角兽唱吧能成为“K歌第一股”吗?
  16. CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/win-64/curre
  17. Labview实现简单知乎日报客户端
  18. F5负载均衡配置一例 (型号:BIG-LTM-1600-4G-R)
  19. 你的名字烂大街了吗?数据揭开国人起名背后的秘密……
  20. Dump文件介绍与使用

热门文章

  1. linux SIGABRT信号
  2. android shareSDK 微博分享案例
  3. 获取IOS APP Icon
  4. 【微信小程序】用户授权以及判断登录是否过期的方法
  5. 计算机工资管理软件是,计件工资管理软件
  6. pr导入预设发现带入原片,选择合适序列预设即可
  7. 缅因大学欧洛诺分校计算机科学,缅因大学申请要求高不高?开学时间是什么时候?...
  8. linux下运行和打包electron项目遇到的错误处理(打包使用electron-builder)
  9. OpenJDK源码赏析之三:Java命令参数的读取处理流程
  10. design contains shelved or modified (but not repoured) polygons. the result....继续铺铜还是报警,解决方案如下: