[发明专利]一种实现CANopen主站的方法无效
申请号: | 200810056824.5 | 申请日: | 2008-01-25 |
公开(公告)号: | CN101222510A | 公开(公告)日: | 2008-07-16 |
发明(设计)人: | 徐喆;闫士珍;宋威;余春暄;段建民;张明杰 | 申请(专利权)人: | 北京工业大学 |
主分类号: | H04L29/06 | 分类号: | H04L29/06;H04L12/28 |
代理公司: | 北京思海天达知识产权代理有限公司 | 代理人: | 刘萍 |
地址: | 100022*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 实现 canopen 方法 | ||
技术领域
本发明属于现场总线领域,特别是一种实现CANopen主站的方法。
背景技术
作为一种真正开放的CAN总线高层协议,CANopen协议允许不同的CAN设备以标准化的方式进行通讯,使得CAN设备具有互操作性。随着CANopen协议的日益完善,它在国内外已经有很多方面的应用,受到了广泛的重视。CANopen目前正在从汽车工业向更多领域辐射,已经广泛应用到公共交通运输系统、医疗设备、海运电子设备和建筑自动化系统中。在欧洲,CANopen协议已被广泛的应用于医疗装置中,并进一步扩展应用到保安控制系统中;在美国,CANopen协议已经成为装载机械和公共运输设备的协议标准,同时也应用于嵌入式系统的控制。但是据了解,国内在CANopen的研究还处于起步阶段,除了中国单片机公共实验室(BOL)外,目前鲜有研究院所在进行相关工作,而中国在该领域的标准制定工作也仍处于摸索阶段。因此CANopen协议在我国的进一步推广仍需大量的研发工作。CANopen主站的实现方法在国外也无相关技术的公开文献报道。
发明内容
本发明的目的在于提供一种实现CANopen主站的方法。
本发明提供一种实现CANopen主站的方法,如图1和图2所示,其特征在于,包括以下步骤:
1)主站开始运行时,首先初始化全局变量,对本协议栈中需要的所有全局变量进行初始化;
2)初始化系统时间,该系统时间是通过定时器获得的微秒级时间;
3)初始化基本任务,包括给它们分配存储空间,赋初始值;
4)初始化对象字典,建立基本的对象字典项;
5)添加节点,向主站的对象字典中添加从节点的信息;
6)建立发送PDO,在对象字典中添加发送PDO对应的所有信息;
7)建立接收PDO,在对象字典中添加接收PDO的所有信息;
8)启动网络;
9)初始化操作系统;
10)创建线程,这里只创建一个开始线程;
11)启动操作系统,操作系统开始调度线程:第一个被操作系统调度的线程是开始线程,在这个线程中完成的工作包括硬件的初始化、调度机线程的创建和写报文线程的创建,该线程运行一次之后就将自己销毁。之后写报文线程被调度运行,但是此时没有报文要发送,所以该线程退出运行状态并触发调度机线程。调度机线程完成CANopen内部各任务的调度。在没有更高优先级线程处于就绪态或者出现中断时该线程将会一直处于循环运行状态。
当调度机中的任务需要发送报文时触发写报文发送线程,该线程将需要发送的报文写进CAN控制器相应的寄存器中并将其发送到CAN总线上。当CAN控制器收到报文时将产生报文接收中断,读报文中断服务程序开始执行,将报文从CAN控制器中读出,当调度机线程再次获运行时将调度其管理的相应任务处理该报文。
对象字典是CANopen协议的核心,是一个有序的对象组,其中定义了CANopen网络中设备的所有信息。在CANopen网络中主站要行使网络管理、配置从站的功能。主站对象字典的构建必须考虑网络的灵活扩展能力,即,灵活的增减节点。网络中节点的增减必然要求修改主站对象字典,甚至大量添加、删除对象字典中的对象。所以主站的对象字典必须具有可快速查找、添加、删除对象的特性。
本发明采用散列表的方式构建对象字典。具有可动态更新、搜索效率高和存储空间利用率高等优点。
具体采用散列表的方式构建对象字典如下:
使用一个数组来存储对象,设计一个哈希函数,使得每个对象的索引和子索引都与数组的一个下标相对应;数组定义如下:
ODIndex iOD[HS_index_range]
其中,HS_index_range为散列地址的范围常量;
对象的索引和子索引通过哈希函数转化为散列地址。采用如下哈希函数:
HS_index=mod(((index*ran_num)>>shift_num+sub_index),HS_index_range)
式中,HS_index为散列地址,mod()为取模运算,index为对象索引,ran_num为随即因子,shift_num为位移因子,sub_index为对象子索引,HS_index_range为散列地址的范围常量。
当出现对于不同的对象,却计算出了相同的函数值,这样就产生了冲突,即从index和sub_index到HS_index的映射会重叠;采用链地址法处理冲突,将映射到同一个散列地址处多于一个的对象组成链表,即形成该散列地址对应的溢出表。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京工业大学,未经北京工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810056824.5/2.html,转载请声明来源钻瓜专利网。