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

    文章

    3435

    浏览量

    87122
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6063

    浏览量

    34596
收藏 人收藏

    评论

    相关推荐

    几个提供ARM9的公司的比较

    。现在,周立功的技术支持远远不如以前了,有些时候还很不好,如果自己的软件及硬件开发能力很不错的话,选择它的东西还是可以的,性价比不错。成都信息:他的板子很少,X86的,
    发表于 12-02 17:29

    ARM9 串口下载程序

    想请教各位大神如何利用串口arm9下载程序。[attach]***[/attach](图为串口的原理图)
    发表于 11-18 23:12

    Linux工控主板串口硬件流控实现方法

      Linux工控主板上的串口除了COM2为五线制的串口,其余都为三线制的
    发表于 06-12 15:29

    支持Linux高级客户自行移植内核

    上市)  该项服务具体说明和实施流程参见:支持客户进行Linux移植  需要该服务的客户需与签订技术保密协议,并承诺严格履行协议:
    发表于 01-18 13:52

    工控主板产品选型指南

      成都信息技术有限公司是一家专注于嵌入式工控主板研发、销售与服务的高科技公司,在嵌入式领域已有超16年的从业经历。
    发表于 02-28 11:28

    串口WiFi方案使用说明

    上的编程方法》,《串口WiFi在WinCE工控主板上的编程方法》。成都信息技术有限公司http://www.emtronix.
    发表于 04-05 15:52

    ARM9嵌入式主板看门狗的使用方法

    ARM9嵌入式主板Watchdog的使用
    发表于 09-26 10:06

    VS2005与ARM9嵌入式模块连接和调试步骤

    使用VS2005连接和调试ARM9嵌入式模块
    发表于 09-27 13:05

    基于COM技术串口通信组件的设计

    分析了目前对串口编程存在的问题,介绍了COM技术及其在RS232串口通信的应用,指出使用组件相对于ActiveX控件及Windows API
    发表于 09-02 09:06 17次下载

    英创信息技术ARM9工控主板内嵌AD概述

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

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

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

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

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

    英创信息技术ARM9工控板远程抓拍图像应用介绍

    英创ARM9工控主板功能齐全、体积小巧、性能稳定、超低价格的嵌入式主板产品。主板硬件完全按工业级标准设计,CPU采用了32位工业级ARM9芯片,PCB板经精心优化设计,除提供全面、高效的功能之外,还较好地控制了模块功耗。英创
    的头像 发表于 11-13 09:41 1615次阅读
    英创<b class='flag-5'>信息技术</b><b class='flag-5'>ARM9</b><b class='flag-5'>工控</b>板远程抓拍图像应用介绍

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

    英创ARM9工控主板均提供了多个串口供客户进行通讯控制使用,包括标准的RS232和TTL电平的COM接口(经过简单的电平转换即可成为标准的RS232/RS485或者RS422)。由于英
    的头像 发表于 11-14 09:37 1903次阅读
    英创<b class='flag-5'>信息技术</b>C#使用<b class='flag-5'>COM</b><b class='flag-5'>组件</b>接口进行<b class='flag-5'>串口</b>操作介绍

    英创信息技术ARM9工控主板的SMS短信息应用介绍

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