CanOpen协议是在标准的CAN总线上运行的应用层协议,其通信模式也是工业通信协议常用的。主站也被称为“客户端”,从站也被称为“服务器”。
底层通信方式使用CAN标准帧格式,也就是CAN ID为11位(0x000~7FF),数据8字节。简单的看,协议主要是定义了:
1、CAN ID的使用约定。
2、CAN数据部分8个字节的使用约定
根据功能码功能分为PDO报文和SDO报文,PDO报文需要按约定映射数据对象,无需协议开销,SDO报文分段传输和块传输,需要协议开销。
。
PDO分两种用法,发送和接收,分别为Transmit-PDO(TPDO)和Receive-PDO(RPDO), TPDO为从站(组件)发送主站(控制器),RPDO为主站(控制器)发送给从站(组件)。
PDO报文传输采用定时器触发的方式,定时器时间可以通过SDO报文配置。
原则上分配PDO的FUN-ID表为:表1 PDO分配FUN-ID表 PDO FUN-ID PDO1(tx) 0x1810x1FF PDO1(rx) 0x2010x27F PDO2(tx) 0x2810x2FF PDO2(rx) 0x3010x37F PDO3(tx) 0x3810x3FF PDO3(rx) 0x4010x47F PDO4(tx) 0x4810x4FF PDO4(rx) 0x5010x57F
功能码功能分为下载(写)和上传(读)功能,参考DS301协议的SDO传输协议。 SDO用于客户端和服务器之间传输多个数据集(每个包含任意大小数据块)。客户端通过寻址(对象字典的索引和子索引)来控制传输哪个数据集,数据集的内容定义在对象字典中。 SDO可采用段序列传输,也可以采用块传输,段和块传输可用于OTA升级数据报文传输。
段传输:
先发送一个初始化分段指令,让客户端和服务器各自准备好处理接下来的分段。对于传输数据量小于等于4个字节情况,可以在初始化分段指令中包含数据,无需再分段传输(称为快速SDO传输)。
块传输:
其中每个块可由多至127段(包含序号和数据)的段序列组成。先发送一个初始化块,让客户端和服务器准备好处理接下来的块,并议定每块的分段数。在传输完成阶段。客户端和服务器通过校验来验证之前接收到的数据集的正确性。
- SDO下载,分为SDO下载启动,SDO下载分段。
- SDO上传,分为SDO上传启动,SDO上传分段。
- SDO中止传输
- SDO块下载,分为SDO块下载启动,SDO下载块,SDO块下载结束。
- SDO块上传,分为SDO块上传启动,SDO上传块,SDO块上传结束。
SDO段传输一共定义了六种带应答的服务(SDO下载,SDO上传,SDO上传启动,SDO下载启动,SDO分段下载和SDO分段上传)和一种不带应答的服务(SDO中止传输),它们共同进行SDO段正常传输和加速传输。
SDO块传输一共定义了八种带应答的服务(SDO块下载,SDO块上传,SDO块上传启动,SDO块下载启动,SDO子块下载,SDO子块上传,SDO块上传结束和SDO块下载结束)和一种不带应答的服务(SDO中止传输),它们共同进行SDO块正常传输和加速传输。
到此这篇can报文解析实例(can报文pgn)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/37133.html