使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三

  • Post author:
  • Post category:其他


使用  C#进行  CAN  总线编程   —— 基于  WINCE  平台  C#编程要点之三

英创  ARM9  系列嵌入式主板,如  EM9000  、  EM9260  均带有(或可选)  CAN  总线接口,  英创公司不仅提供了硬件平台支持,还提供了  CAN  总线通讯驱动程序。本文主要介绍在基  于  Windows CE  平台的英创嵌入式主板下进行  C#  (  Microsoft Visual Stdio.Net 2005  )  CAN  总  线应用程序开发时会常常用到的一些功能函数以及开发方法。     在英创嵌入式主板上进行  CAN  编程的思路是:

(  1  )   使用  Win32  的  CreateFile  方法  (类似于传统操作串口的模式)  来获得操作  CAN  总线端口的  Handle  。

(  2  )   使用英创公司提供的  CAN  总线驱动程序动态链接库  CAN_API_DLL.dll  实现一系  列的  CAN  通讯操作,包括:     CAN_StartChip、CAN_SetBaudRate、CAN_SetGlobalAcceptanceFilter、CAN_GetNextReceivedFrame、  CAN_SendFrame、CAN_StartChip等方法。

(  3  )   使用  Win32  的  CloseHandle  方法关闭  CAN  操作的  Handle。

在使用  C#  编程操作  CAN  通讯之前,首先要明确:很多底层操作的函数(如  CreateFile  函  数)  ,  Visual Studio 2005.NET  的  API  库中并没有提供,这个时候,我们就要在  C#  开发中调用  Win32  的函数来进行相应的操作。  一大批  Win32  底层操作的函数都存在于  cordll.dll  动态链接库  中。

调用  Win32  的申明:

using System.Runtime.InteropServices;

要使用的两个  Win32  函数申明如下:

同样,英创公司提供的驱动程序动态链接库函数也需要进行申明如下:

一、启动  CAN  接口        启动  CAN  接口一般只需要按顺序进行如下四个函数的调用:

CANhandle = CreateFile(strPort, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING,   0, 0);

//  注意:  strPort  是一个字符串,定义  CAN  端口的名称,如“  CAN1:  ”或“  CAN2:  ”

CAN_StartChip(CANhandle);      //  如下三个函数的定义请见上文注释

CAN_SetBaudRate(CANhandle, BaudrateSerialno);

CAN_SetGlobalAcceptanceFilter(CANhandle, ACCFilter, 9);

注意:  ACCFilter  是一个长度为  9  的字符串数组,请在调用之前安装相关设置进行初始化。        二、数据发送        启动  CAN  接口后,就可进行  CAN  通讯了。  CAN  的数据帧分标准帧和扩展帧两种,其区  别如下图所示:

四、关闭  CAN  接口

关闭  CAN  接口一般只需要按顺序进行如下二个函数的调用即可实现:

CAN_StopChip(CANhandle);

CloseHandle(CANhandle);