首页 新闻 工控搜 论坛 厂商论坛 产品 方案 厂商 人才 文摘 下载 展览
中华工控网首页
  P L C | 变频器与传动 | 传感器 | 现场检测仪表 | 工控软件 | 人机界面 | 运动控制
  D C S | 工业以太网 | 现场总线 | 显示调节仪表 | 数据采集 | 数传测控 | 工业安全
  电 源 | 嵌入式系统 | PC based | 机柜箱体壳体 | 低压电器 | 机器视觉
ARM9工控板在远程监控中的应用
英创信息技术有限公司
收藏本文     查看收藏

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

一、创建串口应用COM组件

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

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

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

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

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

      为了跨语言调用组件,组件接口方法函数参数数据均采用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( )

      功能描述:关闭串口

三、串口组件调用

      下面是在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组件完成。这样程序具有更好结构,维护也更加方便。


 

状 态: 离线

公司简介
产品目录

公司名称: 英创信息技术有限公司
联 系 人: 李林
电  话: 028-86180660
传  真: 028-85141028
地  址: 成都市高新区高朋大道5号博士创业园
邮  编: 610041
主  页:
 
该厂商相关技术文摘:
GPRS集抄单元整机方案
DOS工控主板的TCP/IP应用
低成本LCD的选型与使用
ARM9工控主板支持断点续传的FTP文件传送
嵌入式数据库SQLCE的开发与应用
C#使用COM组件接口操作精简ISA总线
基于精简ISA总线的CE设备驱动程序
工控主板EM9360的GPIO的各种使用方法
工控主板EM9000数字IO的增强扩展
英创工控主板同时驱动RS232和RS485的方法
主板EM9161实现音频输出的方法
更多文摘...
立即发送询问信息在线联系该技术文摘厂商:
用户名: 密码: 免费注册为中华工控网会员
请留下您的有效联系方式,以方便我们及时与您联络

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 不良信息举报
工控网客服热线:0755-86369299
版权所有 中华工控网 Copyright©2022 Gkong.com, All Rights Reserved