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

使用  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  函数申明如下:

使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三_第1张图片

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

使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三_第2张图片

使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三_第3张图片

使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三_第4张图片

使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三_第5张图片

使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三_第6张图片

一、启动  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  的数据帧分标准帧和扩展帧两种,其区  别如下图所示:

使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三_第7张图片   

使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三_第8张图片

使用 C#进行 CAN 总线编程 —— 基于 WINCE 平台 C#编程要点之三_第9张图片

四、关闭  CAN  接口        

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

CAN_StopChip(CANhandle);        

CloseHandle(CANhandle);

 

你可能感兴趣的:(通信协议,C#,WinForm)