0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术CAN接口COM组件在C#语言领域应用

英创信息技术 来源:英创信息技术 作者:英创信息技术 2019-11-12 10:34 次阅读

英创ARM9工控主板的一个很大的特色就是提供了标准的CAN总线通讯接口,客户可以方便地在工业现场、汽车、船舶等等领域进行CAN通信应用。由于英创ARM9嵌入式主板采用WinCE操作系统,很多客户都选择了界面友好、开发便利的C#语言(使用Visual Studio 2005.NET集成开发环境);以往用户在使用C#操作控制CAN总线的时候,是使用英创提供的动态链接库,采用传统的DllImport方法,首先在程序开始的地方来进行函数申明,然后才能在程序中进行调用;而这个动态链接库里面函数的EntryPoint由于系统的原因,往往是一个古怪的名字,而且英创每次在进行动态链接库的升级后,这个EntryPoint的名字就可能发生变化,这对用户程序的可维护性带来极大的不便。为了解决这个问题,英创公司现在提供了操作CAN总线的COM组件接口;用户只需要在目标平台上进行组件注册,然后在C#程序开发的时候,对该COM组件添加引用,即可在程序里面自由地通过对象操作来使用函数,而不必去费心地进行函数申明的工作。下面我们就以EM9000嵌入式主板为实例,在C#使用COM组件接口操作CAN总线作一个说明:

1、在目标嵌入式主板上进行COM组件注册

CAN COM组件的核心文件就是英创提供的ComCAN.dll动态链接库文件,首先需要将它在目标嵌入式工控主板上注册。用户可以使用Visual Studio Remote Tools提供的“远程文件查看器”连接目标嵌入式工控主板,并将英创提供的ComCAN.dll和REGSVR32.exe这两个文件下载到目标主板的Flash存储器上去(这里假设下载到EM9000的NOR Flash)。然后在开发主机PC上使用Telnet连接目标工控主板(如图),进入放置刚才下载这两个文件的Flash存储器目录,运行:

REGSVR32 ComCAN.dll

即可完成COM组件注册。

2、在C#工程中添加COM组件引用

接下来可以进入C# COM组件开发。首先将ComCAN.dll文件复制到用户的C#工程目录下,然后在Visual Studio 2005.NET集成开发环境中打开用户工程。为了使用CAN总线COM组件,必须为该工程添加外部引用;用户可在集成开发环境的右侧的“解决方案资源管理器”中找到“引用”,对其单击鼠标右键,然后单击“添加引用”(如图)。

在弹出的“添加引用”对话框中,选择“浏览”选项卡,并在你的工程目录下找到你刚才复制过来的ComCAN.dll文件,选择它,并单击“确定”。

这时,你已经完成了添加工程中的COM组件的引用工作,这时,你可以在集成开发环境的右侧的“解决方案资源管理器”中看到了一个名称为ComCANLib的引用,同时,ComCAN.dll也加入到了你的工程中(如图)。

3、在应用程序开发中使用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组件例程,进行实际的应用开发。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6087

    浏览量

    35667
收藏 人收藏

    相关推荐

    信息技术利用COM组件远程更改设备配置文件的流程

     COM(Component Object Model),即组件对象模型,是微软公司开发的一种新的软件开发技术,Microsoft的许多技术,如ActiveX、DirectX、以及OL
    的头像 发表于 11-04 09:48 1410次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>利用<b class='flag-5'>COM</b><b class='flag-5'>组件</b>远程更改设备配置文件的流程

    信息技术ARM9工控板远程监控领域的应用

    ARM9工控主板的数据采集功能通常采用板上的GPIO实现数字输入输出、通过精简ISA总线扩展相应的AD或DA实现模拟数据的输入输出。
    的头像 发表于 11-12 10:04 1877次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>ARM9工控板<b class='flag-5'>在</b>远程监控<b class='flag-5'>领域</b>的应用

    信息技术ARM9工控板串口设备的COM组件应用

    公司的ARM9工控主板产品均预装了Windows CE5.0操作系统,支持包括EVC、C#、VB、LabView等多种开发工具。
    的头像 发表于 11-05 10:07 1841次阅读

    信息技术C#使用COM组件接口操作精简ISA总线浅谈

    ARM9工控主板的数据采集功能通常采用板上的GPIO实现数字输入输出、通过精简ISA总线扩展相应的外部控制电路(如控制继电器或AD或DA实现模拟数据的输入输出等)。
    的头像 发表于 11-12 10:24 1669次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>C#</b>使用<b class='flag-5'>COM</b><b class='flag-5'>组件</b><b class='flag-5'>接口</b>操作精简ISA总线浅谈

    信息技术C#使用COM组件接口进行串口操作介绍

    通讯的时候,往往是需要对RTS进行设置的。为了解决这个问题,公司现在提供了操作串口的COM组件接口;用户只需要在目标平台上进行
    的头像 发表于 11-14 09:37 2435次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>C#</b>使用<b class='flag-5'>COM</b><b class='flag-5'>组件</b><b class='flag-5'>接口</b>进行串口操作介绍

    信息技术C#调用COM组件的效率分析概述

    Intermediate Language,MSIL),这些代码不专用于任何一种操作系统,也不专用于C#;要执行应用程序,是Just-In-Time(JIT)编译器的任务,它把MSIL编译为专用于OS和目标机器结构的本机代码。
    的头像 发表于 11-15 09:06 1539次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>C#</b>调用<b class='flag-5'>COM</b><b class='flag-5'>组件</b>的效率分析概述

    信息技术WinCE平台C#例程要点介绍

    嵌入式ARM9主板采用微软的Windows CE操作系统,可以采用eVC或者VS2005进行应用开发。C#作为一种简单易用的编程语言工具,由于其
    的头像 发表于 11-15 10:01 2212次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>WinCE平台<b class='flag-5'>C#</b>例程要点介绍

    信息技术C#通过串口读取GPS模块定位数据的方法

    的高精度、全天候、全球覆盖、方便灵活和优质价廉所吸引。嵌入式产品的开发应用中,很多领域都涉及到GPS导航和定位的应用;的很多用户,就是
    的头像 发表于 01-14 11:33 2917次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>C#</b>通过串口读取GPS模块定位数据的方法

    信息技术嵌入式系统设备驱动接口C#编程

    的驱动程序,用户只需直接调用相应的接口函数即可实现。 使用C#进行应用程序开发时,由于C#无法使用C++的静态库函数,对于一些流式驱动设备
    的头像 发表于 01-15 11:29 1357次阅读

    信息技术嵌入式系统通讯线程的C#编程方法

    使用ARM9系列嵌入式主板的COM口,CAN口,网口时,一般会使用到timer或线程来实现数据的接收。使用timer控件较为方便,通过
    的头像 发表于 01-15 11:25 1344次阅读

    信息技术C/C#开发基于WEC7的CAN通讯介绍

    EM335x工控主板,使用的Cortex-A8及WEC7操作系统。本文以EM335x工控主板光盘例程为例,简单介绍一下CC#代码如何调用WEC7平台下
    的头像 发表于 01-17 10:01 2774次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>C</b>/<b class='flag-5'>C#</b>开发基于WEC7的<b class='flag-5'>CAN</b>通讯介绍

    信息技术CAN驱动接口调用方法及说明

    时间,单位ms。 BusErrorReport :错误帧上报标记,0:不上报,1:上报错误帧 设置程序可以连接工程师获得。 CAN打开及关闭 打开关闭采用标准的流式设备驱动接口Cr
    的头像 发表于 02-05 10:26 1439次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>新<b class='flag-5'>CAN</b>驱动<b class='flag-5'>接口</b>调用方法及说明

    信息技术ESM6802 Android版支持双CAN通信简介

    2017年8月,ESM6802 Android基础版之上,完善了对双CAN接口的支持。 CAN
    的头像 发表于 02-06 10:57 2257次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>ESM6802 Android版支持双<b class='flag-5'>CAN</b>通信简介

    信息技术JAVA操作主板SPI接口简介

    资源,提供了Java硬件支持包,主要支持的工控接口有:以太网、串口、CAN、GPIO、SPI、I2C、RTC等。本文主要介绍使用Java
    的头像 发表于 02-06 11:09 2017次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>JAVA操作<b class='flag-5'>英</b><b class='flag-5'>创</b>主板SPI<b class='flag-5'>接口</b>简介

    信息技术JAVA操作主板I2C接口简介

    资源,提供了Java硬件支持包,主要支持的工控接口有:以太网、串口、CAN、GPIO、SPI、I2C、RTC等。本文主要介绍使用Java
    的头像 发表于 02-06 11:06 1751次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b>JAVA操作<b class='flag-5'>英</b><b class='flag-5'>创</b>主板I2<b class='flag-5'>C</b><b class='flag-5'>接口</b>简介