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只需关注应用程序本身即可。
回复: 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应用程序)。 ____________________________________________________________________________________________
回复: 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节点。
回复: 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
回复: 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++