peakcan 支持can和canopenn吗

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


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

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


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

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

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

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


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

图中1号报文 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位置的数据,也就是修改心跳频率收到完成应答后,心跳频率就变了(查看时间)

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

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

【简介】基于前ROS CAN总线设备接入(┅)我们成功实现了对于libpcan库的使用,本次将实现对于can总线的初始化以及对于can总线上有效数据提取并将其以topic形式发布到ros节点中。

1要完荿数据读取,需要对以下函数进行映射

映射的方法在设备接入(一)教程中有详细介绍。程序中用了多处dlerror()进行dlfcn函数调用中的错误处理該函数每次调用会清除之前错误队列,返回当前函数调用出现的错误

2,pcan使用时可以先打开再进行波特率、标准模式或扩展模式的设置等操作。

如果打开的pcan_handle非空则函数调用成功,进行下一步处理此处进行了打开成功的提示,并通过读取驱动can的版本号来验证是否驱动成功

实际实验的结果给个图咯!


1898)这两层完全由CAN硬件处理,从洏大大地提高了现场总线节点固件的开发效率

CAN总线的高级协议通过定义CAN报文的11位标识符和8字节数据的使用方式,从而保证了基于CAN标准的笁业化系统的互操作性和互换性不同制造商要求使用标准化的应用层协议和配置文件(profiles),从而实现了通信系统、设备功能和系统管理嘚标准化

  • 应用层(application layer):提供一系列的服务和协议给网络上的每个设备。
  • 通信配置文件(communication profile):提供配置设备和通讯数据的方法并定义数據如何在设备之间通信。
  • 设备配置文件(device profiles):为设备添加特定于设备的行为

CAL(CAN Application layer)是基于CAN网络的高层通讯协议之一,由飞利浦医疗系统发展洏来它被独立的CAN用户和制造商集团CiA采用,并进一步开发并发布了一系列的标准CAL提供了4个应用层服务元素:

  • NMT(Network Management,网络管理):提供支持網络管理的服务如:初始化、启动/停止节点、检测节点异常。这个服务是基于master-slave概念实现的

CMS定义了8个优先级组,每组有220个COB-IDs取值范围:[1, 1760]。0和[]是NMT、DBT和LMT的保留标识符在CAN网络中,COB-ID的数值越小其在网络上的优先级越高。

Frame)时其有29位的标识符,取值范围和优先级仍符合上图的描述图中的11位范围映射到29位COB-ID的11个最重要的位,表中的COB-ID范围将增大

CAL提供了所有网络管理服务和报文协议,但是它并没有定义CMS对象的内容戓通讯对象的类型(it defines how, not what)can和canopenn建立在CAL之上,使用了CAL服务和通讯协议的子集提供了基于CAL服务和协议的分布式控制系统(A distributed control system)的实现,使网络节點能够从简单的功能扩展至复杂的功能同时不影响网络节点的之间的互操作性。

下面首先先介绍设备对象字典,然后再接收can和canopenn通讯机淛

can和canopenn对象字典(OD)是对象的有序分组,每个对象使用16位索引寻址为了实现对数据结构体的各个元素进行访问,还定义了一个8位的子索引(sub-index)can和canopenn OD的总体布局如下图所示。

NOTE: 不要被OD中小于0x0FFF索引值的数据类型(data type)所迷惑它们主要是为了定义而存在的。节点OD的实际相关范围為[0xFFF]

网络上的每一个节点都存在一个OD,OD包含了描述设备及其网络行为的所有参数节点的OD主要是以EDS或纸质的数据库(database)形式存在。这不一萣需要通过CAN总线查询(interrogate)节点OD中的所有参数只要节点的行为和其在纸上的OD描述完全一致,就足够了节点本身必须能够显示所有强制性OD條目(由can和canopenn指定,这些条目实际上非常少)和可选的条目(如:节点的可配置功能)

  • 通讯配置文件(Communication profile):描述了OD的一般形式、OD中通信配置文件相关的对象以及通讯参数,通常也描述can和canopenn的通讯对象(Communication object)这个配置文件适用于所有的can和canopenn设备。
  • 设备配置文件(device profile):各种设备配置攵件为特定类型的设备定义OD对象现在大约有5种不同的设备配置文件,还有几种正在开发中

EDS和DCF的文件类型都在can和canopenn规定中定义。

配置文件萣义了哪些OD对象是强制的哪些OD对象是可选的。强制对象的数量需要保持在允许的最小实现(lean implementation)通讯部分和设备特性相关的部分的可选功能可以根据需求添加,以扩展can和canopenn设备的功能若有更多的特征被要求加入配置文件,那么配置文件需要有足够的空间来添加制造商相关嘚功能

因此,描述通信参数的OD部分对所有can和canopenn设备都是相同的(也就是说放置在OD中的对象是相同的,而不是对象的值)同时,OD中不同設备特性相关的部分对于不同设备来说是不同的

上面我们已经介绍了对象字典的概念,那么现在我们来看看can和canopenn网络中通讯报文的内容和功能换个词语表达:can和canopenn 通讯模型(can和canopenn Communication model)。

每个SDO作为客户机(client)通过对象字典的索引(index)和子索引(sub-index)访问设备字典(设备作为server)中的条目索引信息包含在CAN消息中的前几个字节中。

依据CAL的表述SDO被实现为“多路复用域”(Multiplexed Domain)类型的CMS对象,因此允许传输任意长度的数据在必要时数据会被分割成多个CAN消息,此时数据占用超过4个字节。

SDO协议属于“确认服务”(confirmed service)类型:每个CAN消息生成一个应答(一个SDO需要2个CAN 标識符)SDO请求和应答消息总是包含8个字节,因此通过SDO进行通信的开销相当大携带协议信息的非有效字节数总是最为第一个字节的一部分顯示。

PDO用于传输实时数据:数据从一个生产者(producer有且只有1个)传输至一个或多个消费者(consumers)。数据传输限制在1~8字节如:一个PDO最大可传輸64个数字I/O值或4个16位模拟输入。

每个PDO由对象字典中的两个对象描述:

  • PDO映像参数(PDO Mapping Parameter):包含映射到PDO的对象字典中的对象列表包含它们的大小(单位:bits)。PDO的生产者(producer)和消费者(consumers)都必须知道映射关系以便能够解析PDO的内容。

PDO消息的内容都是预定义的或者在网络启动时配置的应用程序对象在PDO中的映射都是在设备字典中的PDO映射参数中描述的。如果设备支持可变PDO映射那么还可以通过SDO消息对PDO消息的内容进行配置。

PDO有如下的传输模式:

    ? 周期(cyclic):每1/2条或最多240条同步消息后会周期性地触发传输。

      • 传输由来自另一个设备的远程传输请求(通过CAN远程幀)触发
      • 传输是由设备配置文件中指定的对象(设备)特定事件的发生触发的。如:an input-change-of-value 或计时器事件

    下图介绍了can和canopenn中PDO传输类型的定义。對于类型1到240数字表示两个PDO传输之间的同步对象的数量。

    每个PDO可以分配一个事件计时器周期(event timer period)在一个时间计时器周期内,当指定的时間已经过去PDO传输将周期性地触发(没有出现替代触发器)。类型:unssigned 16-bit;单位:1ms

    依据CAL的说法,PDO是一个存储-事件(Stored Event)类型的CMS对象的实现这意味着数据PDO数据传输是没有协议开销的,并且消息没有应答机制(PDO只需要1个CAN标识符)最大能传输8字节(64比特)的数据。

    预定义消息或特殊功能对象包含如下内容:

    SYNC用于网络范围内的同步任务(尤其是与驱动程序相关的任务)实际输入的数值准时地(quasi-simultaneously)存储在全网中,若偠求传输输出值将根据上一次的SYNC接收到的信息进行更新。

    关于SYNC消息传输的同步PDO的传输是在给定的时间窗口内进行的

    can和canopenn建议在高优先级組中设置一个COB-ID,确保定时同步信号为了保证消息尽可能的短,SYNC不传输任何数据字节

    Time Stamp为应用程序设备提供公共的时间帧参考,在实现中昰“存储事件”(Stored Event)类型的CMS对象

    Emergency是右设备内部故障的发生而触发的,在实现中是“存储事件”(Stored Event)类型的CMS对象

    检测(Detects)到设备网络接ロ中的错误,而不是设备本身的错误将通过Emergency报告。

    Node/Life Guarding根据NMT节点保护协议实现一个从NMT Master到特定节点的远程传输请求,将触发一个应答应答Φ包含节点的状态。

    SDO和PDO都是用于数据传输的它们实现了两种不同的数据传输机制。

    • SDO用于(大的)低优先级的设备之间的数据传输最常應用于can和canopenn网络设备的配置。
    • PDO用于快速的8字节的数据传输或者,没有协议开销的数据传输(这意味着数据内容要预定义)

    can和canopenn设备必须支歭许多的网络管理服务,并至少需要一个SDO每个can和canopenn设备,无论是生产者(produces)或者消费者(consumes)要处理数据就必须有至少一个PDO所有的其他通信对象都是可选的。

    can和canopenn设备的CAN通信、OD和应用程序之间的关系如下图所示

    为了减小简单网络的配置工作量,can和canopenn定义了一个强制性的默认CAN标誌符分配方案这些标志符在初始化后立即进入预操作状态(Pre-Operational State),可以通过动态分配(dynamic distribution)的方式进行修改设备必须仅为支持的通信对象提供相应的标识符。

    预定义连接设置定义了:

    • 1个SDO(出现2个CAN标志符)

    CAN标识符分配方案如下图所示

    将默认的can和canopenn集合(set)的标识符映射与CAL的映射进行比较,可以清楚地看到具有特殊功能定义的can和canopenn对象映射到CAL的通用CMS对象时,表明can和canopenn通过使用更通用的CAL设施(facilities)实现一个系统

    can和canopenn的CAN標识符(或者COB-IDs)的分配有三种改变途径:

    • 上电后修改PDO标识符

    标识符的分配是默认的,无需配置若节点支持对PDO数据内容进行配置,那么PDO可配置是必须的

    上电后修改PDO标识符

    当节点是预操作状态,使用SDO写入新值到节点OD的合适位置

    连接到can和canopenn网络的节点或者Slave最初是通过已配置的Node-ID標识的。Node-ID可以通过设置设备上的DIP开关或者通过CAL的层管理服务(LMS)来进行配置当网络初始化或引导时,网络Master首先与每个已连接的Slave通过“连接远程节点”(Connect Remote Node)电报(telegram)方式建立(establishes)个对话框(dialog)

    一旦建立此对话框后,用于SDOs和PDOs通讯的CAN标识符将分配到使用CAL DBT服务的节点上这要求節点必须支持扩展启动(extended boot-up)。

    在网络初始化过程中can和canopenn支持所谓的扩展启动(extended boot-up)以及所谓的最小启动过程。扩展启动时可选的但是,所囿can和canopenn设备或节点必须支持最小启动这两种类型的节点可以同时存在于同一个网络中。

    当标识符是通过CAL的DBT服务分配的那么节点必须支持擴展启动。两种初始化过程都可以用设备或节点状态转换表示如下图所示。

    在CAN网络中有且只有1个节点是NMT Master。NMT Master发出NMT消息并控制节点初始化過程

    通过将设备切换到Prepared状态,设备被迫地完全停止通信如果设备支持并处于活动状态,那么设备仍可进行NMT服务和节点保护(node guarding)

    在下媔的章节中,将介绍COB-IDs是如何在can和canopenn预定义连接集中定义的

    只有NMT Master能发出NMT模块控制消息,所有的Slaves必须支持NMT模块控制服务NMT模块控制消息是没有響应的。NMT模块控制消息格式如下:

    NMT Master通过使用节点守护可以检测每个节点的当前状态尤其是,当这些节点没有定期轮循数据时这个方法特别有用。

    NMT Slave发出启动消息向NMT Master表明它从初始化状态进入了预操作状态。

    举个例子假设第2个发送PDO的映射如下所示(在can和canopenn中,由OD的0x1A01条目描述):

    PDO发送的CAN消息包含3个数据字节如下所示:

    多路复用PDO(Multiplexor PDO,MPDO)定义允许单个PDO通过在消息字节中包含源(source)或目标(destination)Node-ID和OD索引和子索引来發送多个变量。举个栗子某个节点有64个16Bits模拟通道,如果没有这样的机制(mechanism)那么需要16个不同的发送PDOs来发送它的消息。

    SDO用于访问设备的ODOD访问的请求程序,称为Client;若can和canopenn设备的OD被访问并为请求提供服务那么这个设备称为Server。Client的CAN消息和Server 回复的CAN消息均是由8Bytes组成(尽管并非所有字節都必须包含有意义的数据)Client端的请求总是由Server的回复确认的。SDO传输有两种机制:

    • 快速传输(Expedited transfer):用于长度不超过4字节的数据对象
    • 分段傳输(Segmented transfer):用于长度超过4字节的数据对象。

    SDO共有5种请求/响应协议:

    在最新的can和canopenn通信配置文件版本中一个新的SDO传输机制是这么介绍的,块傳输(Block transfer):为了增加长度大于4字节的对象的总线吞吐量多个段数据由1个确认消息确认(从Server下载,从Client上传)相关协议如下:

    • 这些协议的SDO Command Specifier(SDO CAN消息的第一个数据字节)的语法和细节如下面小节所示。

    Emergency messages 是由设备内部(致命)错误情况发生而触发的并从相关应用程序设备传输到具有最高优先级的其他设备。它们也用于中断类型错误警报一个Emergency messages由8字节组成,格式如下:

    0

    综上所述基于CAN总线的完了通讯 can和canopenn标准具有如丅的特点:

    • 设备功能的标准化描述是设备对象字典的一种方式。
    • 设备的标准化描述和它的配置都是采用ASCII格式文件:电子数据表(EDS)和设备配置文件(DCF)
    • 基于CAL CMS的数据交换与系统管理。
    • 基于CAL NMT的标准化系统启动和节点保护
    • 系统范围同步操作的定义。
    • 定义特定于节点的紧急消息

    通过遵循can和canopenn通信配置文件和相应的can和canopenn设备配置文件中包含的指导方针,两个独立的制造商可以生产标准化的设备这些设备可以被合并箌同一个can和canopenn CAN网络中。

    可以区分下面3个级别的兼容性(安装兼容性的增加顺序):

    • 一致性(Conformance):应用层兼容性设备可以连接到can和canopenn网络,而鈈会干扰其他设备的通信
    • 互操作性(Interoperability):通信配置文件兼容性。设备可以与网络中的其他节点交互数据
    • 可交换性(Interchangeability):设备可以替代叧一个设备配置文件兼容性。

    can和canopenn设备至少需要(最小能力设备):

    • 一个OD(内容由设备功能而定)
    • ?默认配置文件ID分配

    我要回帖

    更多关于 can和canopen 的文章

     

    随机推荐