CANOpen
深入探究canfestival的实现细节
优惠券已抵扣
余额抵扣
还需支付
¥299.90
¥399.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
Stone_lu。
这个作者很懒,什么都没留下…
展开
-
CAN总线电平(隐性与显性)
CAN2.0B规范定义了两种互补的逻辑数值:显性和隐性。同时传送显性和隐性位时,总线呈现显性状态;同时传送显性状态位时,总线呈现显性状态;同时传送隐性状态位时,总线呈现隐性状态。显性数值表示逻辑0,隐性数值表示逻辑1。 典型地,CAN总线为隐性(逻辑1)时,CAN_H和CAN_L的电平都为2.5V(电位差为0V);CAN总线为显性(逻辑0)时,CAN_H和CAN_L电平分原创 2017-04-17 13:18:09 · 30821 阅读 · 2 评论 -
CAN总线冲突裁决
当总线上的几个器件同时发送数据的时候,CAN总线必须决定哪个器件可以发送,而其他的器件必须等待。冲突裁决是CAN协议最重要的一个特性。 以下图为例。总线上有器件A,B,C,D。A,B,C同时发出SOF位为显性。而D为隐形,当它发现总线上的状态与自己的状态不一致时,D就进入监听状态。A,B,C继续发送数据。发送到ID的第5位时A,C为显性,B为隐形。B检测到总线的状态于自己的状态不一致,进原创 2017-04-17 13:19:47 · 5236 阅读 · 0 评论 -
CAN报文格式
CAN协议的报文传输过程中有:数据帧、远程帧、错误帧、过载帧和帧间隔。 1.数据帧:用于发送节点向接收节点传送数据的帧。 2.远程帧:用于接收节点向具有相同ID的发送节点传送数据的帧。 3.错误帧:用于当检测出错误时向其他节点通知错误的帧。 4.过载帧:用于接收节点通知其尚未做好准备的帧。 5.帧间隔:用于将原创 2017-04-17 13:20:43 · 54773 阅读 · 2 评论 -
CAN和CANOpen的关系
最原始的CAN协议有五层,MDI、PMA、PLS、MAC和LLC层。和ISO网络模型进行对比的话,MDI、PMA和PLS属于物理层,MAC、LLC属于数据链路层。CAN原本是没有应用层协议的。 CANOpen是一种架构在控制器局域网(CAN)上的应用层通讯协议。开发过程中我们也不一定要用CANOpen协议,你可以根据自己的需要定制自己的应用层协议。原创 2017-04-17 13:14:11 · 1929 阅读 · 0 评论 -
CanFestival移植准备工作
CanFestival是一种开源的CANOpen协议栈,可以很容易在网上下载CanFestival-3.10。objdictedit是CanFestival的字典生成工具,开发过程中使用objdictedit配置CANOpen字典能够很大程度上提高开发效率,objdictedit也可以很容易下载并安装。查看CanFestival源码查看objdictedit...原创 2019-03-14 10:22:13 · 1477 阅读 · 0 评论 -
CanFestival移植到STM32F103
1.创建工程2.将CanFestival源码,拷贝到工程目录3.删除其它架构和编译器的代码查看include文件夹发现没有cortex-m3架构,因此我们这里借鉴AVR架构进行修改将AVR文件夹重命名为STM32,并删除其它架构文件夹打开STM32文件夹,将里面avr相关的文件删除,我们用的开发环境是MDK,因此将iar相关文...原创 2019-03-14 13:00:08 · 6765 阅读 · 11 评论 -
CANOpen报文类型
CANOpen应用层协议细化了CAN总线协议中关于标识符的定义。定义标准报文的11比特标识符中高4比特为功能码,后7比特为节点号,重命名为通讯对象标识符(COB-ID)。功能码将所有的报文分为7个优先级,按照优先级从高至低依次为:网络命令报文(NMT)、同步报文(SYNC)、紧急报文(EMERGENCY)、时间戳(TIME)、过程数据对象(PDO)、服务数据对象(SDO)、节点状态报文(NMT原创 2017-04-17 13:23:18 · 6760 阅读 · 3 评论 -
CANOpen状态机
CANopen 的每一个节点都维护了一个状态机。该状态机的状态决定了该节点当前支持的通讯方式以及节点行为。节点在不同的状态下支持不同的报文通讯初始化:bootup报文(lifeguard的一种)预运行:SDO报文,紧急报文,同步报文,节点守护报文、LSS报文运行:SDO报文,紧急报文,同步报文,节点守护报文、PDO报文...原创 2017-04-17 13:24:36 · 5804 阅读 · 0 评论 -
CANOpen生命守护机制
CanOpen提供两种监视节点在线的机制,一种叫做生命保护机制,一种叫心跳机制。两种机制都是基于NMT报文进行实现的。心跳机制:从站每隔一段时间上报一次自己的当前状态。主站对每个从站进行倒计时,一旦在规定时间内从站没有上报状态,则认为其掉线。/* 初始化心跳报文:主站为所有使用心跳包的从站配置入口, 从站没有在规定时间内上报心跳包,主站将从站状态置为掉线 */void he原创 2017-04-17 13:32:03 · 7901 阅读 · 2 评论 -
CANOpen定时器
在CANOpen中,有部分和时间相关的子协议,比如pdo和lifegrd等,这就要求移植的时候实现定时器的底层接口。在timer.h中给出了接口声明/* 设置定时器重载值 */void setTimer(TIMEVAL value);/* 获取当前定时器计数器值 */TIMEVAL getElapsedTime(void);timer.c通过一个定时器实现各种定时事务的原创 2018-03-19 19:46:31 · 3168 阅读 · 5 评论 -
CANOpen同步报文
同步(SYNC),该报文对象基于生产者/消费者模式,由SYNC生产者周期性的广播,作为网络基本时钟,实现整个网络的同步传输,每个节点都以该同步报文作为同步PDO触发参数,因此该同步报文的COB-ID具有比较高的优先级以及最短的传输时间。同步报文一般由主站进行发送,原理比较简单,只要按照字典中配置的周期,循环发送同步报文即可。/* 启动同步报文 */void startSYNC原创 2018-03-22 10:17:29 · 7119 阅读 · 0 评论 -
CANOpen过程数据对象报文
PDO被用来传输实时数据,数据从一个生产者传到一个或多个消费者,采用无确认的方式。在CANOpen网络中,一般情况下从站之间是不进行交互的,所以这个生产者或指主站。比如主站发送一个远程索取报文,多个从站接收到该报文之后开始发送应答PDO。再比如主站发送同步报文,从站接收到同步报文之后判断是否回应PDO报文。 数据长度被限制为1~8字节。这原创 2018-03-22 11:05:45 · 9301 阅读 · 0 评论 -
CANOpen紧急报文
紧急报文,当设备内部发生错误时触发该对象,即发送设备内部错误代码。在canopen内部维持一个错误表,对发生的错误进行记录。当错误发生后从表中查看该错误是否已经发生并未被解决时,则报告主站;如果错误被解决则从表中清除,当所有错都被解决,则报告主站。canopen记录了所有错误的历史记录,当前是否有错误发生,所有错误掩码,目前为止发生过的错误种数。/* 紧急报文初始化 */voi原创 2018-03-22 14:18:32 · 4733 阅读 · 3 评论 -
CANOpen服务数据对象报文
SDO是服务数据对象接口(ServiceData Object)的缩写,顾名思义提供服务数据的访问接口,所谓服务数据指一些实时性要求不高的数据,一般是指节点配置参数,因此,SDO一般用来配置和获得节点的配置参数,充当OD对外的接口。SDO基于CS模式,所有报文都需要确认。通常从节点作为SDO服务器,主节点作为客户端。客户端通过索引和子索引,访问服务器上的任意对象字典,SDO的上传与下载,原创 2018-03-23 15:54:35 · 5208 阅读 · 2 评论 -
CANOpen网络管理报文
网络管理报文用于监视和设置节点的运行状态,心跳机制和寿命保护机制都基于该报文。/* 改变节点状态 */UNS8 masterSendNMTstateChange(CO_Data *d, UNS8 Node_ID, UNS8 cs){ Message m; MSG_WAR(0x3501, "Send_NMT cs : ", cs); MSG_WAR(0x3502, " t原创 2018-03-25 10:38:51 · 4192 阅读 · 0 评论 -
CANOpen数据存档文件
数据存档文件,用于保存所有从节点的字典配置。在从节点初始化时,从节点将上报boot_up报文。主节点收到boot_up报文后,将对从节点的字典和数据存档文件进行对比,如果不匹配,则需要通过sdo报文对从节点字典进行重新配置,并根据配置决定是否命令从节点将新的配置存入非易失性存储器。主站可以为每个从站配置一个节点数据存档文件,节点数据存档文件的格式如图:/* DCF入口 */原创 2018-03-25 11:12:57 · 2435 阅读 · 1 评论 -
CANOpen层配置服务报文
LSS提供查询和改变CANopen模块底层参数的功能,LSS Slave用于某个CANopen模块,LSS Master处理整个CAN网络。LSS功能占用两个接口,占用2021(for master)和2020(for slave)两个标识符。属于主从式服务,类似于NMT的方式,CANopen网络中同时只能有一个节点能提供LSS Master服务,并且该节点同时也必须是NMT Mast...原创 2018-06-26 17:43:49 · 2264 阅读 · 1 评论 -
CanFestival字典生成
主节点1.打开objdictedit软件2.新建工程,文件->新建3.配置心跳报文,编辑->DS-301Profile添加0x1016,删除0x1017,点击确认设置节点1,定时1s。其中,bit0-15:倒计时时间ms、bit16-24:从站id4.配置SDO客户端,添加->SDO客户端设置客户端15.配置RPDO1,添加-&...原创 2019-06-19 20:01:32 · 2798 阅读 · 2 评论 -
CanFestival应用
1.初始化协议栈2.在lifegrd.c中添加如下代码,用于将在预运行态的从节点切换到运行态。3.修改bug,打开dcf.c文件修改原程序4.SDO报文运用,下面举例读写SDO5.PDO报文运用,异步传输模式下数据变化则要进行传输,因此需要实时扫描PDO数据。对于PDO数据内容,由于字典中配置了用户变量,直接读写用户变量即可。...原创 2019-06-20 16:11:38 · 3691 阅读 · 1 评论