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

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

3天内不再提示

英创信息威廉希尔官方网站 ARM9工控板串口设备的COM组件应用

英创信息威廉希尔官方网站 来源:英创信息威廉希尔官方网站 作者:佚名 2019-11-05 10:07 次阅读

英创公司的ARM9工控主板产品均预装了Windows CE5.0操作系统,支持包括EVC、C#、VB、LabView等多种开发工具。作为工业控制领域的嵌入模块,客户的应用程序往往对系统的底层调用较多,相对于其它语言,C++具有强大的硬件控制能力和很高执行效率,因此我们提供的示例程序和软件方面的威廉希尔官方网站 支持均集中在C++方面。而C#、.net VB等在图型界面开发、数据库方面的应用和易用性方面更具优势,我们很多客户也选用他们作为开发工具。为了结合各语言的优势,为了对客户提供更好的支持,我们将与主板密切相关的一些底层功能模块封装成COM组件,用户可以使用自己喜欢的语言来调用COM组件,不必关心低层调用的细节,而COM组件本身则采用C++来编写。本文将介绍基于英创工控主板串口应用的COM组件和组件调用方法。

1、创建串口应用COM组件

串口通讯在工业控制场合应用十分广泛,当串口作为RS485通信应用时,很多场合下,需要通过硬件RTS信号来控制数据收发的方向,以提高抗干扰能力。在C#这一类的高级语言中,尽管也包括了串口控件,但缺乏对RTS硬件的操作,因此在RS485应用中受到一定的限制。为了弥补这一缺陷,在我们所设计的串口应用COM组件中,通过对串口DCB结构参数的设置,并结合英创ARM9主板低层的串口驱动程序,实现对RTS信号的完整控制。本串口组件采用C++编写,在组件内部对RTS进行设置,而上层的开发工具,如C#等,可通过向组件接口函数传递参数来控制RTS信号,从而最终实现RS485的半双工通讯。

本串口COM组件提供四个接口方法函数:打开串口,关闭串口,向串口写数据,读串口数据。客户方调用COM组件打开串口后,COM组件服务器便在组件内部创建一数据接收线程,接收线程里通过WaitCommEvent来等待串口事件发生,当串口收到数据后,将数据放入指定的接收数据缓存中,客户方可调用读串口数据方法函数将缓存中的数据读出。在实际应用中,客户可在接收线程中加入自己特定的协议转换代码,使得通过组件读取的数据为一个完整应用报文。

为了跨语言调用组件,接口方法函数参数数据均采用VARIANT数据类型,这样ASP、vbscript等可方便的进行组件调用,从而轻松实现通过网页对串口进行操作。

COM组件的创建过程请参考本网站相关文章或参考相应书籍。这里不再赘述。

2、串口应用组件接口方法函数

为了跨语言调用组件,组件接口方法函数参数数据均采用VARIANT数据类型。

(1)OpenPort( VARIANT portNo, VARIANT baud, VARIANT parity, VARIANT dataBits, VARIANT stopBits, VARIANT rtsCtrl, VARIANT* pbool)

功能描述:打开指定串口。

输入参数:

VARIANT portNo 要打开的串口号

VARIANT baud 设置波特率

VARIANT parity 设置奇偶较验

VARIANT dataBits 设置数据位

VARIANT stopBits 设置停止位

VARIANT rtsCtrl RTS设置

输出参数:

VARIANT* pbool 串口打开成功失败标志

(2)WritePort(VARIANT *var_inp, VARIANT *retLen)

功能描述:向串口写数据

输入参数:

VARIANT *var_inp 发送数据缓存

输出参数:

VARIANT *retLen 发送数据个数

(3)ReadPort(VARIANT *rxData)

功能描述:读取串口数据

输出参数:

VARIANT *rxData 接收数据缓存

(4)ClosePort( )

功能描述:关闭串口

3、串口组件调用

下面是在EVC中调用串口组件接口函数的一些程序片段,主要说明在调用接口方法时,VARIANT参数的用法。

// 从Program ID得到Class ID

hr = CLSIDFromProgID( OLESTR( ‘ComSerial.CoSerial’ ), &clsid );

if( FAILED( hr ) )

{

return -1;

}

// 从Class ID得到ICoSerial接口指针

hr = CoCreateInstance( clsid, NULL, CLSCTX_INPROC_SERVER, __uuidof( ICoSerial ),

( void** )&pICoSerial );

if( FAILED( hr ))

{

return -1;

}

//打开串口

CComVariant portNo( 3 ); // 打开串口3

CComVariant baud( 9600 ); // 波特率:9600

CComVariant parity( ‘n’ ); // 无校验位

CComVariant dataBits( 8 ); // 8位数据

CComVariant stopBits( 1 ); // 1位停止位

CComVariant rtsCtrl(RTS_CONTROL_TOGGLE); // RTS设置

CComVariant pbool( FALSE ); // 串口打开成功标志

pbool = pICoSerial-》OpenPort( portNo, baud, parity, dataBits, stopBits, rtsCtrl );

// 向串口发送数据

char strBuf[100];

strcpy( strBuf, ‘1234567890!’ );

long i=0, m=0;

m = strlen( strBuf );

SAFEARRAY FAR* pSafeArray;

SAFEARRAYBOUND rgsabound[1];

rgsabound[0].lLbound = 0;

rgsabound[0].cElements = m;

pSafeArray = SafeArrayCreate( VT_VARIANT, 1, rgsabound );

VARIANT var;

for( i; i 《 m; i++)

{

var.vt = VT_UI1;

var.bVal = strBuf[i];

SafeArrayPutElement( pSafeArray, &i, &var );

}

VARIANT tarray,retLen;

tarray.parray = pSafeArray;

retLen = pICoSerial-》WritePort( &tarray );

// 接收数据

VARIANT vinput, var;

BYTE rxBuf[1500];

vinput = pICoSerial-》ReadPort( );

SafeArrayGetUBound( vinput.parray, 1, &lUbound );

SafeArrayGetLBound( vinput.parray, 1, &lLbound );

// m:串口接收到的数据个数

m = lUbound - lLbound+1;

// m=0表示串口没有收到数据

if( 0 == m )

return;

for( i=0; i 《 m; i++)

{

Safe=ArrayGetElement( vinput.parray, &i, &var );

rxBuf[i] = (BYTE)var.bVal;

}

在实际的应用中,通讯各方必须遵循统一的通讯规约。在发送数据前通常需要将数据按相应的协议打包,添加较验信息等,收到数据后,要进行帧完整性判断、数据解包、数据较验、协议转换等工作。现在可以将这些与协议密切相关的处理放在COM组件内部,客户方在使用串口时仅需要对客户感兴趣的数据进行处理,而协议转换等工作交由COM组件完成。这样程序具有更好结构,维护也更加方便。

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

    关注

    3

    文章

    3544

    浏览量

    88650
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35308
收藏 人收藏

    评论

    相关推荐

    ARM9工控主板应用程序自动加载实现

    ARM9工控主板有两种工作模式:调试模式和运行模式。调试模式是指开机以后系统处于调试状态,此时用户可以通过eVC的远程调试工具或微软的ActiveSync来操作
    的头像 发表于 10-08 17:13 1772次阅读

    信息威廉希尔官方网站 VS2005调试ARM9核心简介

    公司自2007年开始陆续推出一系列以ARM9 CPU为核心的嵌入式主板(如EM9000、EM9260),这些高性能的工控主板不仅具有高端的硬件性能和丰富的硬件接口,而且还采用了Mi
    的头像 发表于 10-31 15:03 1880次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息威廉希尔官方网站
</b>VS2005调试<b class='flag-5'>ARM9</b>核心<b class='flag-5'>板</b>简介

    信息威廉希尔官方网站 ARM9工控主板WinCE应用程序远程控制应用

    公司推出的ARM9嵌入式工控主板产品系列,均预装了正版的WinCE5.0操作系统。微软的WINCE实时多任务操作系统是嵌入式领域的主流操作系统之一,它包括了以TCP/IP为特色的完
    的头像 发表于 11-04 09:28 1751次阅读

    信息威廉希尔官方网站 ARM9工控主板内嵌AD概述

    公司推出的ARM9 嵌入式工控主板产品系列,均预装了正版WinCE5.0 操作系统。
    的头像 发表于 11-04 09:43 2642次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息威廉希尔官方网站
</b><b class='flag-5'>ARM9</b><b class='flag-5'>工控</b>主板内嵌AD概述

    信息威廉希尔官方网站 ARM9工控在远程监控领域的应用

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

    信息威廉希尔官方网站 C#使用COM组件接口操作精简ISA总线浅谈

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

    信息威廉希尔官方网站 CAN接口COM组件在C#语言领域应用

     ARM9工控主板的一个很大的特色就是提供了标准的CAN总线通讯接口,客户可以方便地在工业现场、汽车、船舶等等领域进行CAN通信应用。由于
    的头像 发表于 11-12 10:34 2451次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息威廉希尔官方网站
</b>CAN接口<b class='flag-5'>COM</b><b class='flag-5'>组件</b>在C#语言领域应用

    信息威廉希尔官方网站 ARM9工控远程抓拍图像应用介绍

    ARM9工控主板功能齐全、体积小巧、性能稳定、超低价格的嵌入式主板产品。主板硬件完全按工业级标准设计,CPU采用了32位工业级ARM9
    的头像 发表于 11-13 09:41 1994次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息威廉希尔官方网站
</b><b class='flag-5'>ARM9</b><b class='flag-5'>工控</b><b class='flag-5'>板</b>远程抓拍图像应用介绍

    信息威廉希尔官方网站 C#使用COM组件接口进行串口操作介绍

    ARM9工控主板均提供了多个串口供客户进行通讯控制使用,包括标准的RS232和TTL电平的COM
    的头像 发表于 11-14 09:37 2324次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息威廉希尔官方网站
</b>C#使用<b class='flag-5'>COM</b><b class='flag-5'>组件</b>接口进行<b class='flag-5'>串口</b>操作介绍

    信息威廉希尔官方网站 EM9000工控主板的版本信息管理概述

    EM9000是公司极具特色的一款ARM9工控主板。经过长时间的完善,现系统已完全稳定。
    的头像 发表于 11-17 11:23 1736次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息威廉希尔官方网站
</b>EM9000<b class='flag-5'>工控</b>主板的版本<b class='flag-5'>信息</b>管理概述

    信息威廉希尔官方网站 如何实现WinCE系统中USB设备自动检测概述

    公司ARM9系列工控主板预装正版WinCE操作系统,提供标准USB接口,本文介绍如何在应用程序中判断USB存储设备的插入和移出操作。
    的头像 发表于 11-18 09:44 1385次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息威廉希尔官方网站
</b>如何实现WinCE系统中USB<b class='flag-5'>设备</b>自动检测概述

    信息威廉希尔官方网站 C#使用VS2005提供的串口类进行串口操作介绍

     ARM9工控主板均提供了多个串口供客户进行通讯控制使用,包括标准的RS232和TTL电平的COM
    的头像 发表于 11-18 09:53 1323次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息威廉希尔官方网站
</b>C#使用VS2005提供的<b class='flag-5'>串口</b>类进行<b class='flag-5'>串口</b>操作介绍

    信息威廉希尔官方网站 ARM9工控主板扩展矩阵键盘的方法

    公司ARM9系列工控主板预装正版WinCE操作系统,板载了丰富的通讯接口,GPIO,存储器等资源,支持TFT LCD显示及触摸,支持标准USB键盘,鼠标输入。在实际使用中,客户如果
    的头像 发表于 01-14 11:05 1656次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息威廉希尔官方网站
</b><b class='flag-5'>ARM9</b><b class='flag-5'>工控</b>主板扩展矩阵键盘的方法

    信息威廉希尔官方网站 ARM9主板进行连接调试的两种方法

    在我们提供给用户的《使用VS2005连接和调试ARM9嵌入式模块》一文中,我们分别以在EM9000上和在EM9260上为例讲述了两种对基于WinCE的ARM9主板进行连接调试的方法
    的头像 发表于 01-14 11:29 1454次阅读

    信息威廉希尔官方网站 ARM9工控主板的SMS短信息应用介绍

    的应用越来越广泛,其中主要以GPRS数据通讯及SMS短信息方式为主。GPRS数据通讯是以TCP/IP方式进行通讯,GPRS模块发送SMS短信,是通过串口发送AT指令来实现。 公司基
    的头像 发表于 01-14 11:45 1345次阅读