一种实现CANopen从站的方法

文档序号:7750457阅读:735来源:国知局
专利名称:一种实现CANopen从站的方法
技术领域
本发明属于现场总线技术领域,一种实现CANopen从站的方法,特别是将最早截 止期任务优先调度算法(Earliest Deadline First, EDF)引入到CANopen协议中,该方法 保证了低优先级报文对实时性的要求。
背景技术
作为一种真正开放的CAN(Controller Area Network)总线高层协议,CANopen 协议允许不同的CAN设备以标准化的方式进行通讯,使得CAN设备具有互操作性。随着 CANopen协议的日益完善,它在国内外已经有很多方面的应用,受到了广泛的重视。CANopen 目前正在从汽车工业向更多领域辐射,在欧洲,CANopen协议已被广泛的应用于医疗装置 中,并进一步扩展应用到保安控制系统中;尤其是CiA(CAN in Automation)协会会员开发 出一系列CANopen产品,在机械制造、铁路、船舶、制药、食品加工、车辆等领域获得了广泛 应用;在美国,CANopen协议已经成为装载机械和公共运输设备的协议标准,同时也应用于 嵌入式系统的控制。但是据了解,国内在CANopen的研究还处于起步阶段,除了中国单片机 公共实验室(B0L)外,目前鲜有研究院所在进行相关工作,而中国在该领域的标准制定工 作也仍处于摸索阶段。因此CANopen协议在我国的进一步推广仍需大量的研发工作。由于 知识产权和产品化的问题,CANopen节点的实现方法在国外也无相关技术的公开文献报道。

发明内容
本发明的目的在于提供一种实现可灵活配置的CANopen从站的方法。本发明提供一种实现CANopen从站的方法,如图1、图2和图3所示,其特征在于, 包括以下步骤1)胃会充± 电,率刀女台UeCos (embedded configurable operating system) 系统,至少包括对硬件资源的初始化;2)初始化CAN控制器模块(集成在处理器内部),至少包括总线波特率设置,收发 缓冲区配置,以及接收中断设置;3)设置基于处理器硬件平台的时钟中断;4)创建定时器线程,初始化系统时间;5)初始化对象字典,对对象字典中数据区的应用对象进行初始化;6)创建一个CANopen线程,其内部维护了一个CANopen状态机;7)开定时器中断,启动eCos操作系统,并开始管理线程;8)进入状态机循环,首先进入初始化状态;设置从节点的节点号,初始化过程数据对象(Process Data Objects, PD0)和服 务数据对象(Service Date Objects, SD0)的接收和发送报文数组,初始化网络管理报文 (Network ManagemenT, NMT)和同步报文的接收报文数组,初始化心跳报文发送周期,初始 化PD0在对象字典中的通讯参数和映射参数。
9)初始化完毕,从站自动进入预操作状态,并向CAN总线发送一条启动报文,从站 进入正常的状态机循环。CANopen状态机就是状态管理,负责从节点状态转换,维护着四种状态,分别为初 始化状态、预操作状态、操作状态和停止状态。从站的状态机靠接收主站发送的NMT命令报 文推动,而且没有应答报文。在预操作状态下,CANopen支持SD0通讯对象、NMT通讯对象和 心跳报文的处理;在操作状态下,CANopen支持对包括PD0在内的所有通讯对象的处理;在 停止状态下,CANopen支持NMT通讯对象的接收处理和节点保护机制的发送。为了方便实现CANopen协议,从站按功能定义了 PD0通讯对象处理函数、SD0通讯 对象处理函数、NMT通讯对象处理函数和同步报文通讯对象处理函数。当CAN控制器监听到总线有报文传输时,将产生接收报文中断,读报文中断服务 程序开始执行,将报文从CAN控制器的接收缓冲区中读出,并通过CAN驱动接口函数对报文 分类并存储到PD0或SD0或NMT或同步报文通讯对象数组中,并设置通讯对象接收数组非 空标志;CANopen线程中的状态机调用接收通讯对象分发处理函数,将通讯对象数组中的 报文分发给PD0或SD0或NMT或同步报文处理函数,通讯对象处理函数通过对象字典的接 口对对象字典中的对象进行读写操作,完成CANopen报文的处理任务。在该过程中如果有报文需要发送,则通过通讯对象发送函数将对象字典中的对象 封装成PD0、SD0或者心跳报文的格式,在CANopen线程中调用CAN驱动发送接口函数,将报 文内容写进CAN控制器的发送缓冲区中并将其发送到CAN总线上。另外,在CANopen协议层设计了一个基于定时器线程的时钟计时器,可以为心跳 报文的发送周期提供毫秒级计时功能。应用线程可以通过调用对象字典接口函数读写对象 字典中的应用对象,或者直接与对象字典共享相同的应用对象。从站运行在操作状态时,同步报文处理函数主要完成同步PD0报文的发送。本发 明采用最早截止期(Earliest Deadline First,EDF)优先级动态调度的方法实现同步PD0 的发送,可以保证低优先级PD0报文对实时性的要求。具体采用EDF优先级动态调度算法实现同步PD0发送的过程如下定义发送PD0报文的相对截止期为P = Di^-Di (t),其中Di(niax)表示第i条发 送PD0报文的最大截止期,D, (t)表示在t时刻第i条发送PD0报文的当前截止期,条件为 (XDjt) <Di(max)。优先级判定依据规定,待发送同步PD0报文的优先级与其相对截止期成反比,也 就是说相对截止期越小的报文,它的优先级越高;相对截止期越大的报文,它的优先级越 低。本发明中EDF优先级动态调度算法的实质是,同一时刻总线上距离自身最大截止 期最近的同步PD0报文具有最高的发送优先级。对象字典是CANopen协议的核心,是一个有序的对象数组,其中定义了 CANopen网 络中设备的所有信息。在CANopen网络中,从站负责完成属于自己范围内的特定任务,进行 实时数据的传输,响应主节点发送的管理信息报文,对自己负责的底层设备进行数据采集 和控制。所以从站的对象字典必须具有可快速查找、调用、更新对象的特性。本发明采用主索引定位,子索引确定对象的思想构建对象字典。具有搜索范围少、 搜索效率高和可动态更新的优点。
具体采用主索引定位,子索引确定对象的思想构建对象字典如下使用结构体定义子索引,子索引结构体的成员变量包含对象的属性,至少包含读 写权限、数据类型、数据长度和指向对象的指针,定义主索引时包含指向子索引的指针和子 索引数目。根据对象的功能将对象字典的主索引分成不同的功能区,为每个分区定义上边界 和下边界。当有任务需要从对象字典读或写对象时,提供给对象字典接口函数该对象的主索 引和子索引。首先根据主索引定位到对象所在的功能区,然后在具体的功能区中查找主索 引项,如果找到了则返回这个主索引项,如果返回的主索引中的子索引数目不小于要查找 的对象的子索引值,并且访问权限正确,就可直接在返回的主索引项中定位对象子索引的 指针,子索引中已经包含了对象的属性和对象指针,所以就可对该子索引中的对象指针进 行读或写操作。本发明的优越性在于将eCos嵌入式实时操作系统应用在从站的设计中,使其具 有高度的实时性和并发处理能力;将最早截止期优先级动态调度算法引入CANopen从站同 步PD0报文的设计,保证了低优先级报文对实时性的要求,改善总线通讯特性;CANopen协 议核心的对象字典的构建基于主索引主要用于分块定位查找,子索引确定对象的属性的思 想,减少了对象字典的搜索范围,提高了搜索效率,满足从站对其对象字典快速查找定位的 要求。


图ICANopen从站系统结构2系统启动软件流程3状态机系统软件流程4接收报文处理流程5对象字典组织形式6对象字典接口函数流程7同步发送PD0报文处理函数流程图
具体实施例方式本发明是基于飞思卡尔公司32 位 PowerPC (Performance Optimizationffith Enhanced RISC-Performance Computing)构架的 MPC565 车用处理器硬件平台的 CANopen 从站的开发,并且将eCos嵌入式实时操作系统应用在从站的设计中,系统结构框图如图1 所示。整个CANopen从站软件部分按照三层结构来设计编码,分别为驱动及硬件抽象层、 eCos操作系统层和CANopen应用协议层。硬件驱动层完成硬件的初始化,至少包括eCos操作系统对硬件资源的初始化、 CAN控制器的初始化、时钟中断的初始化。eCos操作系统层提供CAN控制器底层驱动与上 层应用软件的读写接口函数,设置时钟中断,并创建CANopen线程、时钟中断线程以及应用 线程,由操作系统内核管理线程。时钟中断线程是操作系统初始化完成之后,基于MPC565 处理器内部硬件时钟中断创建的。CANopen线程主要维护着CANopen状态机,在没有更高级线程处于就绪态或者出现中断时该线程将会一直处于循环运行状态。应用线程是用来运行 应用控制算法的,由用户创建。最上层是CANopen协议层的实现,包括CANopen线程中维护的状态机,是整个 CANopen从站运行的载体,提供一个通讯对象接收分发处理函数,将基于CAN控制器中断接 收并保存在通讯对象接收数组中的PDO、SD0、NMT或同步报文分发给它们的处理函数,包括 PD0通讯对象、SD0通讯对象、NMT通讯对象和同步报文通讯对象的处理函数,通讯对象处理 函数通过对象字典的接口函数对对象字典中的对象进行读写操作,完成CANopen报文的处 理任务。在该过程中如果有报文需要发送,则通过通讯对象发送函数将对象字典中的对象 封装成PDO、SD0或者心跳报文通讯对象的格式,在CANopen线程中调用CAN驱动发送接口 函数,将报文内容写进CAN控制器的发送缓冲区中并将其发送到CAN总线上。对象字典(Object Dictionary, 0D)在CANopen协议中起着类似数据库的功能,涉 及整个协议的运转参数都存放在里面,在代码中通过接口模块与通讯对象进行读写操作; 应用线程可以通过调用对象字典接口函数读写对象字典中的应用对象,或者直接与对象字 典共享相同的应用对象。。另外,在CANopen协议层设计了一个基于定时器线程的时钟计时器,可以为心跳 报文的发送周期提供毫秒级计时功能。CANopen状态机就是状态管理,负责从节点状态转换,维护着四种状态,分别为初 始化状态、预操作状态、操作状态和停止状态。从站系统上电启动之后,进入状态机的初 始化状态,初始化过程数据对象(Process Data Objects, PD0)和服务数据对象(Service Date Objects, SD0)的接收和发送报文数组,初始化网络管理报文(Network ManagemenT, NMT)和同步报文的接收报文数组,初始化心跳报文发送周期,初始化PD0在对象字典中的 通讯参数和映射参数。初始化完成之后,自动进入预操作状态,该状态从站可以进行SD0和 心跳报文通讯;在操作状态,节点支持包括PD0在内的所有通讯对象。在停止状态,从站除 了支持NMT报文和节点保护机制外,其他通讯都会停止。各通讯对象的处理函数通过接收 报文分发处理函数调用,状态机系统软件流程图如图3所示。有报文到时,接收中断调用CAN报文接收函数,将接收到的报文放入PDO、SD0、 NMT、同步报文接收报文数组中,并设置接收通讯对象数组非空标志。接收报文分发处理函 数调用PD0报文或SD0报文或NMT报文或同步报文处理函数,过程如图4所示。在PD0报 文处理函数、SD0报文处理函数、NMT报文处理函数和同步报文处理函数中,首先判断当前 状态下是否支持相应通讯对象,如果支持完成相应的处理。如果在PDO、SD0和同步报文处 理函数中有报文要发送或者心跳报文正在执行,将会封装成PDO、SD0或心跳报文的格式, 调用CAN驱动发送接口函数,将报文内容写进CAN控制器的发送缓冲区中并将其发送到CAN 总线上。本发明采用主索引定位,子索引确定对象的思想构建对象字典,即搜索过程以主 索引为目标,然后确定子索引即可确定对象参数及其属性。实现方法是使用结构体定义子 索引,子索引结构体的成员变量包含对象的属性,至少包含读写权限、数据类型、数据长度 和指向对象的指针,定义主索引时包含指向子索引的指针和子索引数目,对象字典的组织 形式如图5所示。根据对象功能将对象字典的主索引分成不同的功能区,为每个分区定义上边界和下边界。例如将对象字典分为基本通信协议区(1000h-10FFh)、SD0参数区(1200h-127Fh)、 接收PD0通信参数区(1400h-15FFh)、接收PD0映射参数区(1600h_17FFh)、发送PD0通信参 数区(1800h-19FFh)、发送PD0映射参数区(lAOOh-lBFFh)、制造商协议区(2000h_54FFh)、 数字输入数据区(6000h-61FFh)、数字输出数据区(6200h-63FFh)九个功能区。为通讯层或应用层提供了对象字典的读写接口函数,当有任务需要从对象字典读 或写对象时,提供给接口函数该对象的主索引和子索引。首先根据主索引定位到功能区,然 后在具体的功能区间中查找主索引项,如果找到了则返回这个主索引项,返回的主索引中 的子索引数目不小于要查找的对象的子索引值,并且访问权限正确,就可直接对任务提供 的子索引项中的对象指针进行操作,实现过程如图6所示。例如要获取第2个发送PD0的标识符,提供在对象字典中的主索引为1801h,子索 引为01h。首先根据1801h位于1800h-19FFh这个区间,所以要找的对象在发送PD0通讯参 数区,在该功能区间定位到1801h这一项。然后判断1801h主索引中子索引的个数是否满 足大于等于1,如果满足,就可直接读取1801h的第2个(第1个对应的子索引为00h)子索 引结构体中的对象。本发明采用最早截止期(Earliest Deadline First,EDF)优先级动态调度的方法 实现同步PD0的发送,可以保证低优先级PD0报文对实时性的要求。定义PD0报文相对截 止期为P = Dmy-Dm),其中Di(niax)表示第i条PD0报文的最大截止期,Djt)表示在t时刻 第i条PD0报文的当前截止期,约束条件为0彡Di (t)彡Di(fflax)。定义Di(niax)和Djt)均为某一时间单位下的相对值,当前截止期的实现方法为每隔 一个时间单位整个网络进行一次刷新,将所有待发送的PD0报文的当前截止期减去一个时 间单位。在eCos操作系统层创建一个基于硬件时钟中断的定时器线程,中断频率作为系 统中的最小周期,用于截止期更新的时间单位,也即是EDF调度算法的调用频率。CANopen协议中,PD0通讯参数的第四个子索引保留没有定义,本发明中将发送 PD0的第四个通讯参数定义为其最大截止期,即将对象字典主索引18xxh的子索引04h项定 义为PD0报文发送的最大截止期Di(max)。以这种方式定义发送PD0报文的最大截止期,在实际应用中,用户可以通过两种 方式对各条PD0的最大截止期进行设置。一种是在线设置,通过主站发送SD0报文对发送 PD0的通讯参数的第四个子索引,也就是对象字典主索引为18xxh,子索引为04h项的对象 参数读写操作,即可完成最大截止期的设置。另一种方法是用户在从站应用层直接调用对 象字典的读或写接口函数,就可对主索引为18xxh的子索引04h项中定义的最大截止期进 行读取或改变。优先级判定依据规定,待发送同步PD0报文的优先级与其相对截止期成反比,也 就是说相对截止期越小的报文,它的优先级越高;相对截止期越大的报文,它的优先级越 低。在同步报文处理函数中,如果节点运行于操作状态,计算所有待发送PD0报文的 相对截止期的大小,实现PD0报文优先级的动态变化,其软件流程图如图7所示。
权利要求
一种实现CANopen从站的方法,其特征在于,包括以下步骤1)系统上电,首先初始化eCos操作系统;2)初始化集成在处理器内部CAN控制器模块,至少包括总线波特率设置,收发缓冲区配置,以及接收中断设置;3)设置基于处理器的时钟中断;4)创建定时器线程,初始化系统时间;5)初始化对象字典,对对象字典中数据区的应用对象进行初始化;采用主索引定位,子索引确定对象的思想构建对象字典,具体如下使用结构体定义子索引,子索引结构体的成员变量包含对象的属性,至少包含读写权限、数据类型、数据长度和指向对象的指针,定义主索引时包含指向子索引的指针和子索引数目;根据对象的功能将对象字典的主索引分成不同的功能区,为每个分区定义上边界和下边界;6)创建一个CANopen线程,CANopen线程内部维护了一个CANopen状态机;7)开定时器中断,启动eCos操作系统,并开始管理线程;8)进入状态机循环,首先进入初始化状态;设置从节点的节点号,初始化过程数据对象和服务数据对象的接收和发送报文数组,初始化网络管理报文和同步报文的接收报文数组,初始化心跳报文发送周期,初始化PDO在对象字典中的通讯参数和映射参数;9)初始化完毕,CANopen从站自动进入预操作状态,并向CAN总线发送一条启动报文,从站进入正常的状态机循环;CANopen状态机就是状态管理,负责从节点状态转换,维护着四种状态,分别为初始化状态、预操作状态、操作状态和停止状态;从站的状态机靠接收主站发送的NMT命令报文推动,而且没有应答报文;在预操作状态下,CANopen支持SDO报文、NMT报文和心跳报文的处理;在操作状态下,CANopen支持对SDO报文、PDO报文、同步报文、NMT报文和心跳报文的处理;在停止状态下,CANopen支持NMT报文的接收处理和节点保护机制的发送;当CAN控制器监听到有报文接收时,将产生接收报文中断,读报文中断服务程序开始执行,将报文从CAN控制器的接收缓冲区中读出,对报文分类并存储到PDO或SDO或NMT或同步报文通讯对象数组中,并设置通讯对象接收数组非空标志;在CANopen状态机中调用接收报文分发处理函数,通过查询通讯对象接收数组非空标志,将通讯对象数组中的报文分发给PDO或SDO或NMT或同步报文处理函数,通讯对象处理函数通过对象字典的接口对对象字典中的对象进行读写操作,完成CANopen报文的处理任务;当从站中需要发送报文时,系统通过通讯对象发送函数调用底层CAN驱动发送接口函数,将报文内容写进CAN控制器的发送缓冲区中并将其发送到CAN总线上;当有任务需要从对象字典读或写对象时,提供给对象字典接口函数该对象的主索引和子索引;首先根据主索引定位到对象所在的功能区,然后在具体的功能区中查找主索引项,如果找到了则返回这个主索引项,如果返回的主索引中的子索引数目不小于要查找的对象的子索引值,并且访问权限正确,就直接在返回的主索引项中定位对象子索引的指针,对该子索引中的对象指针进行读或写操作。
2.根据权利要求1所述的一种实现CANopen从站的方法,其特征在于从站运行在操作状态时,采用EDF优先级动态调度算法实现同步PDO报文发送的过程 如下 定义发送PDO报文的相对截止期为P = Di(max)-Ddt),其中Diimax)表示第i条发送 PDO报文的最大截止期,Di (t)表示在t时刻第i条发送PDO报文的当前截止期,条件为 O^DiW ^ Di(fflax);优先级判定依据规定,待发送同步PDO报文的优先级与其相对截止期成 反比,也就是说相对截止期越小的报文,它的优先级越高;相对截止期越大的报文,它的优 先级越低。
全文摘要
一种实现CANopen从站的方法,特征在于本从站实现的硬件平台是基于PowerPC架构的处理器,在eCos操作系统上构建多线程系统,包括CANopen状态机线程、定时器线程和读报文中断。状态机线程用来管理从站的状态转换,CAN报文接收、CAN报文、PDO报文、SDO和报文收发、PDO、SDO、NMT和同步报文处理等CANopen的基本任务。其中传输实时数据的同步PDO报文中引入了最早截止期优先级(EDF)动态调度算法,保证低优先级报文对实时性的要求,改善总线通讯特性。本发明将eCos嵌入式实时操作系统应用在从站的设计中,具有高度的实时性和并发处理能力;将动态调度算法引入CANopen从站同步PDO报文的设计,保证低优先级报文对实时性的要求;对象字典满足网络灵活的配置,通过主站动态的改变对象字典中的对象。
文档编号H04L12/56GK101854300SQ201010189480
公开日2010年10月6日 申请日期2010年6月2日 优先权日2010年6月2日
发明者徐喆, 段建民, 董石峰 申请人:北京工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1