「操作演示」CANOpen通讯使用指南
qiyuwang 2025-04-08 17:52 8 浏览 0 评论
CANOpen有两种通讯方式:SDO和PDO。SDO通常由主站发送用于读取从站信息或配置从站PDO运行方式,从站接收到消息后需要应答,如下图所示。
PDO为生成者消费者模式,消息发出后不需要等待回复,一条消息可以有多个消费者。从站进入操作模式后会按照配置的通讯参数周期发送PDO消息或事件触发发送PDO。如果配置了SYNC功能,收到指定个数的同步帧后发送PDO。当然主站也可发送PDO消息。如下图所示:
拨动广成的CANOpen IO设备的拨码开关,将节点号设置为2,波特率设置为10k。如下图所示:
设备上电后会向主站先后发送两条帧ID为0x700+NOD_ID,数据为00(设备处于初始化状态)和7F(设备处于预操作状态)的消息,如下图所示:
此时设备处于预操作状态,在ECAN Tools选择CANOpen选项,点击添加从站ID为2。选择NMT功能选项,选择“start remoteb node”后点击NMT,如下图所示:
此时上位机会发送一条帧ID为000,数据为01(运行状态)02(节点2,如果广播则为00)的数据。此时节点2的IO设备会开始通过PDO(生产者消费者模式)发送帧ID为182,数据长度为2字节的消息,其两字节数据对应16个DI口,若DI有输入对应位置1。注意此功能为广成自定义,并非标准cia301协议。效果如下图所示:
当然使用CAN工具手动发送数据也是一样的效果,如下图所示:
阅读EDS文件可知索引2000h子索引01h可知设置其中的值可以改变TPDO1的inhibit time(禁止时间)。禁止时间的作用是设置PDO发送的最小间隔。这里使用手动发送SOD(一问一答模式)进行演示。
手动发送时将帧ID设置为602(600代表是SDO功能+节点号2),第一个数据2B代表写入两字节。注意后面的数据低字节在前,所以2000h索引写做0020h,写入的数据1FF写做01FF。发送后从站返回帧ID为582数据头为60的一条消息,代表刚才的写入成功。重新进入操作状态后,观察此时的从站发送的PDO数据的时间戳,变为了511us即1FF。但是要注意的是标准的cia301协议中,禁止时间的单位是100us。如何使用SDO读取和写入长度超过4字节的数据见详细文档。
想要配置DO口的输出状态需要从站在操作状态下,主站向从站发送帧ID为0X200+NOD_ID长度为2字节的PDO消息。如下图所示,发送数据为0F 00此时0-3DO口全部打开(低字节在前)。
由于广成的此产品PDO功能不全,接下来用举例子的方式解释如何使用SDO配置PDO功能。刚才说过2000索引01字索引中的数据可以改变DI数据的PDO发送最小间隔,现在假设这个数据是可以映射的。下图是各个TPDO和RPOD的COB-ID、通讯参数、映射参数的数值。
观察上图COB-ID,可知RPDO1被用来读取数据,配置DO口的输出状态,因为刚才就是使用主站控制发送帧ID为202的PDO数据来控制DO口状态的。现在我们使用从站的RPDO2来读取主站发送的的帧ID为302的TPDO数据,从而控制从站TPDO1数据(即DI口输入情况)的返回速率。
通讯对象的可配置参数如下图所示,注意RPDO和TPDO的通讯对象可配置的参数范围和意义不完全相同,详情见详细文档和cia301文档。
这里作为简单演示,我们只用修改1401索引01字索引中COB-ID数据,使用SDO的方法将其配置为302。其它子索引中的数据假设合理能正常通讯,其具体含义和作用见详细文档和cia301文档。映射对象1601索引中的数据构成很简单,1601索引00子索引中存放的值代表:除了00子索引外还有多少子索引,有多个子索引的00子索引中存放的值都是这个意义。
由于要修改的数据只有一处,且存放在2000索引01子索引数据为16位,所以只需要使用SDO向1601索引01子索引写入 0x20000110(最后的10代表存放16位数据,如果是08代表8位数据,20代表32位数据)即可,然后向1601 00索引写入01。如果要存入的数据有多个地址继续增加1601的子索引个数,并将00子索引的值改为对应个数即可。但是要注意所以映射索引存储的数据加起来不能超过8字节。
为了系统的稳定性,对通讯对象和映射对象进行修改时,要先使能对应PDO(01子索引最高位置1)和清空映射对象00子索引的值。
602 22 01 14 01 02 03 00 80 (将COB-ID设置为302并失能该PDO)
602 22 01 16 00 00 00 00 00 (情况映射对象个数数据)
602 22 01 16 01 10 01 00 20 (10 格式标识16位,01子索引2000索引)
602 22 01 16 00 01 00 00 00 (1个参数)
602 22 01 14 01 02 03 00 00 (使能PDO)
配置完成后使用上位机发送帧ID为302的PDO信息,从站就会将其存入RPDO2的映射索引2000 01中,从而改变发送DI状态的速率。
打开SYNC功能,主站会按照设置的时间周期性地发送帧ID为80没有数据的信号,该信号可触发从站发送PDO信息,由于此设备PDO功能不全无法演示,具体效果和配置方法见详细文档和cia301文档。
EMCY功能是当从站发送错误时返回的报文,也无法演示。
节点保护服务的原理是NMT主站可向相应的从站发送包含CAN-ID 700h +节点ID的RTR消息。随后从站必须发送消息进行响应;从站回复的消息结构如下。其中位7在每次传送时都会进行交替,从而能够确定消息是否丢失。在位6到0中输入从站当前的NMT状态。如下图所示:
从站等待主站发送RTR消息的时间为100Ch:00(守护时间)*100D:00(生存因素),配置完成后在上位机打开节点保护,效果如下图所示:
如果激活心跳,从站将自发循环地将其NMT状态发送至CAN总线。可通过将对象1017h:00h中的创建心跳时间设为非零值,从而激活该服务。如下图所示,将1017h:00h设置为不为0的数后从站周期性地返回心跳。
串口服务器_数传电台_4G DTU_遥控开关_LoRa/ZigBee/WiFi/蓝牙模块-成都亿佰特电子科技有限公司官网
相关推荐
- 基于Docker方式安装与部署Camunda流程引擎
-
1Camunda简介官网:https://docs.camunda.org/manual/7.19/installation/docker/Camunda是一个轻量级、开源且高度灵活的工作流和决策自...
- 宝塔Linux面板如何部署Java项目?(宝塔面板 linux)
-
通过宝塔面板部署Java还是很方便的,至少不需要自己输入tomcat之类的安装命令了。在部署java项目前,我还是先说下目前的系统环境,如果和我的系统环境不一样,导致部署不成功,那你可能需要去找其他资...
- 浪潮服务器如何用IPMI安装Linux系统
-
【注意事项】此处以浪潮服务器为例进行演示所需使用的软件:Chrome浏览器个人PC中需要预先安装java,推荐使用jdk-8u181-windows-x64.exe【操作步骤】1、在服务器的BIOS中...
- Centos7环境Hadoop3集群搭建(hadoop集群环境搭建实验报告)
-
由于项目需要存储历史业务数据,经过评估数据量会达到100亿以上,在原有mongodb集群和ES集群基础上,需要搭建Hbase集群进行调研,所以首先总结一下Hadoop集群的搭建过程。一、三个节点的集群...
- Hadoop高可用集群搭建及API调用(hadoop高可用原理)
-
NameNodeHA背景在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNo...
- 使用Wordpress搭建一个属于自己的网站
-
现在开源的博客很多,但是考虑到wordpress对网站的seo做的很好,插件也多。并且全世界流量排名前1000万的网站有33.4%是用Wordpress搭建的!所以尝试用Wordpress搭建一个网站...
- Centos 安装 Jenkins(centos 安装ssh)
-
1、Java安装查看系统是否已安装Javayumlistinstalled|grepjava...
- Java教程:gitlab-使用入门(java中的git)
-
1导读本教程主要讲解了GitLab在项目的环境搭建和基本的使用,可以帮助大家在企业中能够自主搭建GitLab服务,并且可以GitLab中的组、权限、项目自主操作...
- Dockerfile部署Java项目(docker部署java应用)
-
1、概述本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过do...
- 如何在Eclipse中搭建Zabbix源码的调试和开发环境
-
Zabbix是一款非常优秀的企业级软件,被设计用于对数万台服务器、虚拟机和网络设备的数百万个监控项进行实时监控。Zabbix是开放源码和免费的,这就意味着当出现bug时,我们可以很方便地通过调试源码来...
- Java路径-02-Java环境配置(java环境搭建及配置教程)
-
1Window环境配置1.1下载...
- 35.Centos中安装python和web.py框架
-
文章目录前言1.Centos7python:2.Centos8python:3.进行下载web.py框架然后应用:4.安装好之后进行验证:5.总结:前言...
- 《我的世界》服务器搭建(我的世界服务器如何搭建)
-
1.CentOS7环境1.1更改YUM源#下载YUM源文件curl-o/etc/yum.repos.d/CentOS-Base.repohttps://mirrors.aliyun.com...
- CentOS 7 升级 GCC 版本(centos7.4升级7.5)
-
1.GCC工具介绍GCC编译器:...
- Linux安装Nginx详细教程(linux安装配置nginx)
-
环境准备1.因为Nginx依赖于gcc的编译环境,所以,需要安装编译环境来使Nginx能够编译起来。命令:yuminstallgcc-c++显示完毕,表示安装完成:2.Nginx的http模块需要...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 基于Docker方式安装与部署Camunda流程引擎
- 宝塔Linux面板如何部署Java项目?(宝塔面板 linux)
- 浪潮服务器如何用IPMI安装Linux系统
- Centos7环境Hadoop3集群搭建(hadoop集群环境搭建实验报告)
- Hadoop高可用集群搭建及API调用(hadoop高可用原理)
- 使用Wordpress搭建一个属于自己的网站
- Centos 安装 Jenkins(centos 安装ssh)
- Java教程:gitlab-使用入门(java中的git)
- Dockerfile部署Java项目(docker部署java应用)
- 如何在Eclipse中搭建Zabbix源码的调试和开发环境
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)