注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- 工控机论坛 -- 工控机论坛(非专题) -- 结构与配置

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

工控机论坛(非专题)分类  

全部论题

结构与配置

数据 I/O

编程与维护

应用方案

发表人:emtronix 发表时间:2010/12/3 0:38:00  

 

 本栏论题: CAN接口COM组件在C#语言中的使用  [1699]

    英创ARM9工控主板的一个很大的特色就是提供了标准的CAN总线通讯接口,客户可以方便地在工业现场、汽车、船舶等等领域进行CAN通信应用。由于英创ARM9嵌入式主板采用WinCE操作系统,很多客户都选择了界面友好、开发便利的C#语言(使用Visual Studio 2005.NET集成开发环境);以往用户在使用C#操作控制CAN总线的时候,是使用英创提供的动态链接库,采用传统的DllImport方法,首先在程序开始的地方来进行函数申明,然后才能在程序中进行调用;而这个动态链接库里面函数的EntryPoint由于系统的原因,往往是一个古怪的名字,而且英创每次在进行动态链接库的升级后,这个EntryPoint的名字就可能发生变化,这对用户程序的可维护性带来极大的不便。为了解决这个问题,英创公司现在提供了操作CAN总线的COM组件接口;用户只需要在目标平台上进行组件注册,然后在C#程序开发的时候,对该COM组件添加引用,即可在程序里面自由地通过对象操作来使用函数,而不必去费心地进行函数申明的工作。下面我们就以EM9000嵌入式主板为实例,在C#使用COM组件接口操作CAN总线作一个说明:
   
    一、在目标嵌入式主板上进行COM组件注册
   
    CAN COM组件的核心文件就是英创提供的ComCAN.dll动态链接库文件,首先需要将它在目标嵌入式工控主板上注册。用户可以使用Visual Studio Remote Tools提供的“远程文件查看器”连接目标嵌入式工控主板,并将英创提供的ComCAN.dll和REGSVR32.exe这两个文件下载到目标主板的Flash存储器上去(这里假设下载到EM9000的NOR Flash)。然后在开发主机PC上使用Telnet连接目标工控主板(如图),进入放置刚才下载这两个文件的Flash存储器目录,运行:
   
    REGSVR32 ComCAN.dll
   
   
   
    即可完成COM组件注册。
   
    二、在C#工程中添加COM组件引用
   
    接下来可以进入C# COM组件开发。首先将ComCAN.dll文件复制到用户的C#工程目录下,然后在Visual Studio 2005.NET集成开发环境中打开用户工程。为了使用CAN总线COM组件,必须为该工程添加外部引用;用户可在集成开发环境的右侧的“解决方案资源管理器”中找到“引用”,对其单击鼠标右键,然后单击“添加引用”(如图)。
   
   
   
    在弹出的“添加引用”对话框中,选择“浏览”选项卡,并在你的工程目录下找到你刚才复制过来的ComCAN.dll文件,选择它,并单击“确定”。
   
   
   
    这时,你已经完成了添加工程中的COM组件的引用工作,这时,你可以在集成开发环境的右侧的“解决方案资源管理器”中看到了一个名称为ComCANLib的引用,同时,ComCAN.dll也加入到了你的工程中(如图)。
   
   
   
    三、在应用程序开发中使用CAN COM组件
   
    首先,为了使应用程序能直接调用相关的类和函数,必须在程序的起始using语句中添加:
   
    using ComCANLib;
   
    程序中对于CAN总线的操作完全围绕CoCANClass这个类来进行的。用户可以首先定义CAN总线操作的类的对象实体,然后通过对对象里面的方法(函数)来进行所需要的操作。CoCANClass所定义的对象只有5个函数方法,使用此5个函数方法,就可以实现CAN总线的启动、发送、接收、结束、提示出错等工作。下面大致做一些讲解:
   
    (1) 定义类的对象
   
    CoCANClass EM9000_CAN = new CoCANClass(); //定义CAN对象实例
   
    (2) 使用对象的方法函数
   
    英创在《CAN接口COM组件在WinCE平台上的实现》一文中提供了CAN COM组件的方法函数列表,里面详细罗列了各种方法函数的使用,以及相应的注意事项,用户在进行CAN开发之前应该详细阅读该文章。由于该COM组件是用C++来编写的,所以,这个列表里面的函数形式以及变量是以C++的方式来标注的;由于部分函数存在指针参数,同时,部分变量类型在C#语言里面的使用存在变化,所以我们下面以示例的形式来进行函数说明(举例中所使用的类对象已经在上文中定义):
   
    ·StartCAN(/*[in]*/ UINT canNo, /*[in]*/ UCHAR baud, /*[in]*/ BYTE
   
    acceptanceFilter[9],/*[in]*/BYTE size,/*[out,retval]*/BOOL *pBool )
   
    打开指定CAN接口的函数,在C#中,我们一般按照如下示例的方式来使用:
   
    int Start_status = EM9000_CAN.StartCAN(Port_No, BaudrateSerialno, ACCFilter, 9);
   
    实际在C#中使用的时候,只有4个变量(变量的意义请参考《CAN接口COM组件在WinCE平台上的实现》一文),返回值是一个C++的BOOL变量,而在C#中,是没有BOOL变量的(只有bool),所以,这里处理成一个int变量,为1为真,为0为假。
   
    ·WriteCAN(/*[in]*/ BYTE buf[13], /*[in]*/ DWORD bufLen,
   
    /*[out,retval]*/ BOOL *pBool )
   
    向CAN总线发送数据的函数,在C#中,我们一般按照如下示例的方式来使用:
   
    int sResult = EM9000_CAN.WriteCAN(TxBuf, dlen);
   
    参数TxBuf是一个长度为13的byte数组(所发送的帧),dlen是数据包的总长度(uint数据类型)。返回值是一个C++的BOOL变量,这里处理成一个int变量,为1为真,为0为假。
   
    ·ReadCAN( /*[out]*/ BYTE buf[13], /*[out,retval]*/ BOOL *pBool )
   
    接收CAN总线数据的函数,在C#中,我们一般按照如下示例的方式来使用:
   
    int rResult = EM9000_CAN.ReadCAN(RxBuf);
   
    参数RxBuf是一个长度为13的byte数组(所接收的帧)。返回值是一个C++的BOOL变量,这里处理成一个int变量,为1为真,为0为假。
   
    ·GetErrorCode(/*[out]*/ DWORD *ECCRegCode,/*[out]*/ DWORD
   
    errorArray[16], /*[out,retval]*/ int *errorCount)
   
    获取通讯错误代码的函数,带有一个返回输入值的指针变量,我们是按照如下示例的方法在进行使用:
   
    uint eccRegcod = 0; //初始化可以随意设置一个值
   
    uint[] errorArray = new uint[16];
   
    int errorCount = EM9000_CAN.GetErrorCode(out eccRegcod, errorArray);
   
    注意eccRegcod由C++的指针变成了一个out变量,它将返回CAN接口中错误代码捕捉寄存器的值;errorArray是最近16次的CAN接口通讯错误编码的uint数组;方法函数的返回值是一个int变量errorCount,它就返回总错误的次数。
   
    ·StopCAN( )
   
    关闭CAN通讯接口。
   
    用户还可以参考英创提供的C# CAN总线COM组件例程,进行实际的应用开发。
   
   
   
    【查看全文
   
   

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳