[讨论] CANopen主节点的设计方案

阿南   2008-1-29 14:15 楼主
CANopen主节点的设计方案 - 基于IXXAT公司 CANopen Master API for Windows CANopen主节点除具备CANopen设备的基本条件外,还需具备NMT Master的功能,即对CANopen网络进行管理。对CANopen主节点的实现提出三种方案: ?? 方案1:在CANopen-Chip基础上开发CANopen主站。 ?? 方案2:通过对CANopen协议栈源代码的二次开发在单片机上实现嵌入式CANopen主站。 ?? 方案3:利用CANopen Master API在PC机上实现CANopen主节点。 分析比较: ?? 方案1:通过对CANopen-Chip的深入研究,在其EDS文件中发现CANopen-Chip仅适用于开发从站,其内部没有固化CANopen协议栈中的Master部分,而CANopen-Chip的可开发性较低。因此方案1不可行。 ?? 方案2:此方案可以在单片机上实现CANopen主站,但需要的开发周期较长。 ?? 方案3:利用CANopen Master API可在windows下开发CANopen主节点,较为方便快捷,同时还有界面可编辑性好、可读行强等优点。 综上,方案3最适合本应用系统,因此选用方案3。 1 CANopen Master API基础 1.1 CANopen Master API简介 CANopen API是在windows操作系统下快速开发CANopen主站的软件包。该软件包含两个组件:适用于主动型 PC/CAN板的CANopen Master Firmware(固件)和以Windows dll形式的程序接口(CANopen API)。CANopen Master固件由完整的CANopen Master组成,它可以完全自主处理CANopen的通信流程(带超时监视的发送/接收SDO,发送/接收PDO,同步产生,突发处理,网络管理,周期节点维护,heartbeat监视),这样,PC只需关注应用程序本身即可。

回复评论 (5)

回复: CANopen主节点的设计方案

1.2 CANopen Master API的实现原理 CANopen Master API为CANopen网络管理和CANopen对象通信提供了相关的函数。CANopen Master API DLL将固件下载至board的非易失性存储器中,并建立用于编辑队列中数据的队列和句柄(handle)。 CANopen Master固件可独立运行于CAN-board(USB-to-CAN)上。上层与固件通信时使用2个命令队列(CMD-queues),与网络通信时使用7个数据队列(data queues)。 在board上与CANopen Master固件相关的命令都通过两个命令队列传送。通信对象和紧急对象的交换则通过7个数据队列更快速的实现。见图1.2.1: 图1.2.1 Master API DLL与Master固件间的通信 固件经命令队列被配置并参数化为会话状态。CANopen Master API的所有函数在DLL被编辑为操作结构,然后传送至固件并被处理。 通过两个SDO队列可以对外部CANopen设备进行配置。可利用API函数进行异步SDO传输(非模块化Windows应用程序)及同步SDO传输(模块化Windows应用程序)。 ____________________________________________________________________________________________
点赞  2008-1-29 14:15

回复: CANopen主节点的设计方案

Windows应用程序和CANopen网络之间进程数据的交换以PDO发送和PDO接收队列的方式进行。 另外,还有三个接收队列分别用于Windows应用程序对紧急对象、网络事件和同步对象的接收。一个Callback或Windows-message ID被分配给每隔队列,这样,当收到相应的CANopen报文时,客户机应用程序就会直接调用一个函数或者一个Windows报文被发送至应用程序窗口。 1.3 CANopen Master API函数类别 CANopen Master API的函数可以分为如下类别(标有*号的为主节点程序设计时用到的函数): 1、基本API函数 此类函数用于初始化并参数化API,选择CAN-board及在CAN-board上与Master固件通信。 ?? 选择CAN-board COP_InitBoard * COP_ReleaseBoard * COP_GetBoardInfo * ?? 初始化并参数化API COP_InitInterface * COP_DefineCallbacks COP_DefineEventMsgs COP_ResetDLL ?? 与Master固件通信 COP_SendMsg COP_GetMsg COP_SetCommTimeOut COP_GetStatus * COP_TestCommand 2、网络管理函数 此类函数用于建立网络并控制CANopen节点。
点赞  2008-1-29 14:16

回复: CANopen主节点的设计方案

?? 建立CANopen网络 COP_AddNode * COP_DeleteNode COP_SearchNode * COP_ChangeNodeParameter ?? 控制CANopen节点 COP_StartNode * COP_StopNode * COP_ResetComm COP_ResetNode COP_EnterPreOperational * 3、CANopen对象管理 此类函数用于创建并参数化CANopen通信对象。 ?? 进程数据对象(PDO) COP_CreatePDO * ?? 服务数据对象(SDO) COP_CreateSDO * COP_SetSDOTimeout ?? 系统服务 COP_DefSyncObj COP_EnableSync * COP_DisableSync * COP_InitTimeStampObj COP_StartStopTSObj 4、CANopen通信 用于独立CANopen设备间的直接信息交换。 ?? 进程数据对象(PDO) COP_ReadPDO * COP_ReadPDO_S
点赞  2008-1-29 14:16

回复: CANopen主节点的设计方案

COP_RequestPDO COP_WritePDO * COP_WritePDO_S ?? 服务数据对象(SDO) COP_ReadSDO COP_WriteSDO COP_PutSDO COP_GetSDO COP_CancelSDO ?? 系统服务 COP_GetEmergencyObj * COP_GetEmergencyObj_S COP_CheckSync COP_GetEvent * 5、LMT服务 COP_LMT_ConfigNode COP_LMT_GetAddress 2. 主节点程序设计 在进行主节点程序设计时以CANopen从节点为参考,主节点的波特率、节点号、节点守卫参数、PDO的数据位以及各通信对象的COB-ID等均参照从节点的参数设计。 CANopen Master API for Windows程序设计可使用下列语言(并含有实例): 1.C++ Builder 2.Delphi 3.VB 4.VC++
点赞  2008-1-29 14:17
wo you jibn sa le
点赞  2010-3-2 12:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复