其实3年前在21ic就准备做这篇文章了,那时,CANOpen也只是刚刚在国内推广,所以几乎没有项目用到。现在有了实际的项目,完全确认了以前移植和测试的代码,所以列举一些CANOpen的底层操作以及数据。当然,列举的都是一些简单的基本的CANOpen通信,不包括其他CANOpen应用协议中的内容。

1.心跳
CANOpen节点会以一个固定的频率发送心跳报文。用于告诉主机,偶还活着。。。心跳报文的格式很简单,COB-ID为0x700+Node_ID,数据为一字节的状态数据:

图中,ID为706,表示06号节点的心跳,状态是0x7F,表示Pre-Operational状态(节点初始化完成后,进入Pre-Operational状态)。查看时间,每个心跳报文时间间隔大概1秒。

2.NMT
NMT是管理报文,用于实现一些管理操作,比如,节点重启、进入Operational状态等等。NMT报文格式很简单,ID为000,数据为一字节命令+一节节点号(0表示广播)。

第2号报文就是让06号节点,进入Operational状态,运行完成后,节点心跳报文中的节点状态也变为Operational状态

同上,发送stop remote node命令,进入Stopped状态,当然,心跳还是有的,只是节点不干活了

这个是reset node命令,用于让节点复位。复位之后,会首先进入Initializing状态(对于于心跳报文中的0x00),初始化完成后,进入Pre-Operational状态(对应心跳报文中的0x7F)。

3.SDO
SDO 主要用来访问节点的对象字典(OD),CANOpen的节点至少需要支持SDO_Server。对象字典是CANOpen节点的数据组织形式,包含了 CANOpen节点的各个参数和数据,比如,心跳报文的发送频率、系统启动次数、节点的通信参数等等等等。可以说,SDO是用来设置CANOpen节点的各个运行参数的。

图中,1号报文0606: 40 17 10 00 00 00 00 00就是一个SDO_Read报文,告诉节点,要读取的OD索引和子索引,包括数据长度。然后节点会发送对应的数据(后面的那个8字节报文)。第一个字节是一些命令的设定包括参数的设定,后2个字节是OD的索引,再后面一个字节是OD的子索引,最后4个字节是数据。上图中,主机发送的是一个读取OD中 1017:00位置的数据命令,这个位置存放的是心跳频率,读取的结果是0x03EB(1000ms)。

9号报文就是SDO_Write,写OD中1017:00位置的数据,也就是修改心跳频率。收到完成应答后,心跳频率就变了(查看时间)。

4.PDO
PDO 是用来发送(TPDO)或者接收(RPDO)数据的,有几种不同的触发方式,比如:事件触发、同步触发等等。数据内容一般有CANOpen的各个应用协议规定,比如401文档中的AI(Analog Input)数据等。PDO的数据内容是通过映射的方式在定义在OD中的,一个节点可以有多个PDO通道。PDO的通信参数也可以通过SDO访问OD的方式来修改。

5.应急报文
应急报文用于返回一个节点上的错误,可以是CANOpen命令解析错误,等等。

待续。。。。。。

CANOpen的几种操作以及数据的更多相关文章

  1. iOS中几种常用的数据存储方式

    自己稍微总结了一下下,方便大家查看 1.write直接写入文件的方法 永久保存在磁盘中,可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

  2. iOS五种本地缓存数据方式

    iOS五种本地缓存数据方式   iOS本地缓存数据方式有五种:前言 1.直接写文件方式:可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

  3. js之操作JSON数据

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  4. js中如何操作json数据

    一.要想熟练的操作json数据,就先要了解json数据的结构,json有两种结构:对象和数组. 1.对象 一个对象以“{”开始,“}”结束.每个“名称”后跟一个“:”:“‘名称/值’ 对”之间使用“, ...

  5. Android提供了5种方式存储数据:

    --使用SharedPreferences存储数据: --文件存储数据: --SQLite数据库存储数据: --使用ContentProvider存储数据: --网络存储数据: 一:使用SharedP ...

  6. sql有几种删除表数据的方式

    有几种删除表数据的方式? truncate.delete和drop都可以删除数据. TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作. TRUNCATE TABLE 与没有 WHE ...

  7. Android(java)学习笔记208:Android中操作JSON数据(Json和Jsonarray)

    1.Json 和 Xml       JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...

  8. JS 操作一个数据值

    任何语言都有自己的操作数据的方法: Js也不例外,js有3种重要的方式来操作一个数据值. 1>复制它.例如把它赋给一个新的变量. 2>把它作为参数传递给一个函数或方法. 3>可以和其 ...

  9. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

随机推荐

  1. JavaWeb基础—XML学习小结

    一.概述 是什么? 指可扩展标记语言 能干什么? 传输和存储数据 怎么干? 需要自行定义标签. XML 独立于硬件.软件以及应用程序 通常.建立完xml文件后首要的任务是:引入约束文件! 二.XML简 ...

  2. 20145234黄斐《Java程序设计》实验三—敏捷开发与xp实践

    1在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能.提交截图,加上自己学号水印. public cla ...

  3. 公历转农历的python实现

    大杂烩.作为自己的记录,保存. 两个要点: 1.公历转农历用了查表法(第126行) 2.节气用了天文法?(第176行)  运行图 (背景是hao123万年历) 源代码: # lunar.py # 20 ...

  4. UWP MySQL 最新版 6.10.5是坏的

    #实锤#证实了,MySQL 最新版 6.10.5,在UWP平台并不能连接,是坏的 Oracle竟然没有测试吗?直接上线??? 我已经把把BUG设置为最高严重等级,提交给了官方. I'm using u ...

  5. systemctl start nginx timeout

    昨儿个研究docker ,搭建私有仓库.想着用nginx代理一下仓库地址.方式使用80端口,于是愉快的下载,编辑,安装nginx.创建nginx.service作为系统启动服务. 结果......,多 ...

  6. 关于dbw 与dbm 的计算

    一分贝(dB)表示单元信号强度的相对差异.其比率的基础对数为10,,如dB = 10 x Log10 (P1/P2). 基础10对数规则: Log10 (AxB) = Log10(A) + Log10 ...

  7. 报错:Cannot create PoolableConnectionFactory (The server time zone value 'CST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverT

    报错:Cannot create PoolableConnectionFactory (The server time zone value 'CST' is unrecognized or repr ...

  8. [硬件配置]记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程

    新电脑安装了Ubuntu 14.04,但是网络连接中只有以太网而没有WiFi的选项. 打开System Setting系统设置-Software&Updates软件&更新-Additi ...

  9. springboot+elasticsearch实现全局检索

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...

  10. ngxin 添加模块

    if test -n "$NGX_ADDONS"; then echo configuring additional modules for ngx_addon_dir in $N ...