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

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

3天内不再提示

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

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

英创ARM9工控主板的数据采集功能通常采用板上的GPIO实现数字输入输出、通过精简ISA总线扩展相应的AD或DA实现模拟数据的输入输出。在英创ARM9工控主板提供的基本开发资料中对GPIO和精简ISA总线的驱动均以C的静态库的形式提供,对部分使用C#LabView等其他开发工具的客户来说,不能直接使用C的API函数。针对这一部分客户的应用需求,我们把相关C函数库封装成标准COM组件,使客户能方便使用主板的数据采集功能。本文将详细介绍数据采集COM组件的相关技术要点,供广大客户使用时参考。
COM(Component Object Model),即组件对象模型,是微软公司开发的一种新的软件开发技术,提出了组件之间进行交互的规范,也提供了实现交互的环境,因为组件对象之间交互的规范不依赖于任何特定的语言,所以COM也可以是不同语言协作开发的一种标准,如VB、C#、LabView可以使用同一个COM组件来进行软件开发。COM组件的整体结构大概分为三个层次:组件、接口、方法函数,它们的关系如下图所示:

COM组件与我们常用的C++类的关系,可以简单的理解为:
COM组件名:即C++库文件名称
COM组件接口:即C++库中的类
COM组件实现方法函数:即C++中的类的成员函数
下面以EM9000的EM9000_ISA_API.LIB静态库为例,介绍在EVC开发环境,如何在EM9000_ISA_API.LIB静态库的基础上构建相应的COM组件,该方法也可同样应用于英创公司的其他ARM9工控主板产品
1、新建一个工程,在新建工程中选择WCE ATL COM AppWizard,并给工程命名为“EM9000_ISA_API_COM”,工程会自动生成一个文件来。在工程编译后,将生成“EM9000_ISA_API_COM.DLL”库文件。这个文件就是要用的COM组件的目标文件。


2、设置好以后,点击“OK”进入工程的类型选项,在这里,选择动态链接库并将对MFC的支持选择上。即完成工程的建立。

3、将英创提供的EM9000_ISA_API.h文件复制到当前这个工程目录下面,并在工程的“Settings”下面的LINK中加入“EM9000_ISA_API.lib”。
4、为COM组件添加接口:这个接口名就是在调用COM组件时的入口名字,在工程中命为EM9000_ISA_COM,添加接口的方法是:Insert -> New ALT Object…,在弹出来的对话框中,直接点击下一步,这时会再弹出一个对话框,这时,在对话框的Name表单的左上角框中输出接口名EM9000_ISA_COM,这时会生成相应的接口的名字,左边是C++调用的头文件及库,右边是COM组件的接口文件名。系统会自动地在接口名Interface项前加上一个大写字符“I”。


在工程对话框的attributes选项中,将Threading Model中选择“Free”。确定即可。


5、为该COM组件添加方法函数:将EM9000_ISA_API.H中的函数添加到COM组件中去。要注意一点,由于在制作COM组件过程中,COM组件实现的方法函数会调用EM9000_ISA_API.H中的函数且方法函数名和要调用的函数不能同名,所以在COM组件的方法函数名前加前缀“COM_”以便区分。在工程的workspace的ClassView中,单击COM组件的接口名“IEM9000_ISA_COM”并单击右键选择“Add Method…”,弹出添加方法函数的对话框。

如将EM9000_ISA_API.H中的GetPortState( int Port )函数添加进去。这里方法函数为就变为“COM_GetPortState”,参数则有两个,一个是输入参数,用[in]关键字说明,一个是函数返回值,用[out,retval]关键字说明,除了返回值的参数名外,其它的输入输出参数最好和函数的参数一样。参数类型均为”long”,可以参考:http://www.vckbase.com/document/viewdoc/?id=1488。

输入完毕后,点击“OK”完成,这时可以看见新增加的这个方法函数出现在工程中了。双击接口名“IEM9000_ISA_COM”,就会看到该方法函数在文件中的定义:
interface IEM9000_ISA_COM : IDispatch
{
[id(1), helpstring('method COM_GetPortState')] HRESULT COM_GetPortState([in] long Port , [out,retval] long *pVal);
};
6、双击CEM9000_COM下的IEM9000_ISA_COM的方法函数名“COM_GetPortState(long Port,Long *Val)”,这时就打开具体实现的源文件EM9000_ISA_COM.CPP文件。在文件中加入:#include 'EM9000_ISA_API.h',并且在FileView的头文件中加入该文件。
这时将COM_GetPortState方法函数的实现完成,即调用EM9000_ISA_API.h中相应的函数完成功能。
STDMETHODIMP CEM9000_ISA_COM::COM_GetPortState(long Port, long *pVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// TODO: Add your implementation code here
*pVal = GetPortState( Port );
return S_OK;
}
到这里,就完成了对静态库中的一个函数转成COM组件的方法函数的基本操作,依照上述方法,将其它的函数需要加入到COM组件中,只需重复第5、6步的操作就行了。注意,最后还需要加入出错处理的方法函数:
方法函数名:_com_issue_errorex
参数:HRESULT _hr1 , IUnknown *pthis1 , const GUID refiid1

通过编译生成COM组件EM9000_ISA_API_COM.dll。
我们所提供的COM组件“EM9000_ISA_API_COM.dll”的文件说明:
COM组件文件名:EM9000_ISA_API_COM.dll
COM组件接口名:EM9000_ISA_COM

COM组件方法函数和EM9000_ISA_API静态库函数的对应关系如下:

COM组件方法函数名

库态库函数名

功能描述

COM_InitEM9000ISA( ) InitEM9000ISA( ) 初始化EM9000的ISA总线
COM_GetPortState( int Port ) GetPortState( int Port ) 查询Port设置状态
COM_Swap2ISA( int Port ) Swap2ISA( int Port ) 把Port设置为ISA总线
COM_Swap2DIO( int Port ) Swap2DIO( int Port ) 把Port设置为DIO功能
COM_SetPortDir( int Port, int Mode ) SetPortDir( int Port, int Mode ) 把Port对应管脚设置为DIO状态
COM_EM9000_INB( int Port ) EM9000_INB( int Port ) 把Port对应管脚设置为DIO状态
COM_EM9000_OUTB( int Port, UCHAR Value ) EM9000_OUTB( int Port, UCHAR Value ) 把Value输出到Port对应管脚
COM_EM9000_READ( int nSeg, UINT nOffset ) EM9000_READ( int nSeg, UINT nOffset ) 从ISA扩展总线某地址读取一个字节的数据
COM_EM9000_WRITE( int nSeg, UINT nOffset, UCHAR Value ) EM9000_WRITE( int nSeg, UINT nOffset, UCHAR Value ) 向ISA扩展总线某地址写入一个字节的数据
COM_EM9000_ResetISA( int milliseconds ) EM9000_ResetISA( int milliseconds ) 使RSTOUT#输出低脉冲milliseconds毫秒
COM_EM9000_PWMOUT( int ChIdx, float* pFreq, float* pDuty ) EM9000_PWMOUT( int ChIdx, float* pFreq, float* pDuty ) 使能并输出脉宽调制信号
COM_EM9000_PWMSTOP( int ChIdx ) EM9000_PWMSTOP( int ChIdx ) 停止输出脉宽调制信号
COM_EM9000_StartWatchDog( ) EM9000_StartWatchDog( ) 启动系统WATCH DOG TIMER
COM_EM9000_KicktheDog( ) EM9000_KicktheDog( ) 重载系统WATCH DOG TIMER
COM_EM9000_ResetBy( ) EM9000_ResetBy( ) 返回上次复位产生的原因
COM_EM9000_DelayInUs(int MicroSeconds ) EM9000_DelayInUs(int MicroSeconds ) 微秒延时

下面以EVC开发环境为基于MFC编程,调用EM9000_ISA_API_COM.dll实现GPIO操作为例,对如何使用COM组件“EM9000_ISA_API_COM.dll”进行说明,以更指导客户方便地使用COM组件来完成自有产品的开发。
在eVC中调用COM组件,需按如下基本步骤来完成:
1、注册COM组件
运行英创公司提供的regsvr32程序进行COM组件的注册
2、初始化组件,并创建一个实体对像
(1)在测试文件的头文件中,先定义所需要的对像及变量:
首先,先将COM组件EM9000_ISA_API_COM.dll文件放在当前的工程目录下,同时要在工程的StdAfx.h文件中,添加导入COM组件文件的语句:
#import “EM9000_ISA_API_COM.dll” no_namespace
// 如果COM组件文件没在当前应用的工程目录下面,则需要写出COM组件文件所在的路径
然后在测试工程文件头COM_TESTDlg.h中,在CCOM_TESTDlg类中进行定义:
private:
CLSID clsid; // 用以缓存所查询到的COM组件的标识
IEM9000_ISA_COM *m_pSimple; // 利用COM组件接口定义一个指针
(2)完成COM组件的初始化:
在测试工程文件COM_TESTDlg.cpp中,在BOOL CCOM_TESTDlg::OnInitDialog()过程中完成初始化部份
HRESULT hr;
CoInitializeEx(NULL,COINIT_MULTITHREADED) ;//初始化COM组件以便创建线程
Hr = CLSIDFromProgID( OLESTR ( 'EM9000_ISA_API_COM. EM9000_ISA_COM ' ) , &clsid );
// 查找组件是否存在,并获取组件的标识,这里的参数为:COM组件名字.接口名
C, oCreateInstance ( clsid , NULL , CLSCTX_INPROC_SERVER , _uuidof ( I EM9000_ISA_COM ) , ( void** ) &m_pSimple );
// 利用查找组件时所获得的标识创建实体对像,并交给指针。这里的第四个参数为组件的接口名
3、调用COM组件中的方法函数
利用, , 所定义的接口指针*m_pSimple,在事件中调用相应的函数。如要调用COM_GetPortState方法函数来获取GPIO(P4口)的状态,则可以如下方式来实现调用:

#define P4 4
int iState ;
iState= m_pSimple-> COM_GetPortState (P4); // 调用成员函数读出GPIO(P4口)的状态
4、当使用后,应当释放COM组件
CoUninitialize(); // 释放COM组件


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

    关注

    7

    文章

    6085

    浏览量

    35196
收藏 人收藏

    评论

    相关推荐

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

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

    信息技术VS2005调试ARM9核心简介

    公司自2007年开始陆续推出一系列以ARM9 CPU为核心的嵌入式主板(如EM9000、EM9260),这些高性能的工控主板不仅具有高端的硬件性能和丰富的硬件接口,而且还采用了Mi
    的头像 发表于 10-31 15:03 1846次阅读
    <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实时多任务操作系统是嵌入式领域的主流操
    的头像 发表于 11-04 09:28 1709次阅读

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

    公司推出的ARM9 嵌入式工控主板产品系列,均预装了正版WinCE5.0 操作系统。
    的头像 发表于 11-04 09:43 2599次阅读
    <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工控串口设备的COM组件应用

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

    信息技术ARM9主板上运行案例解析

    今年(2009年)的市场活动中,为了让客户更好地完成产品应用开发,向第一次购买
    的头像 发表于 11-12 10:20 1388次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>ARM9</b>主板上运行案例解析

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

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

    信息技术ARM9工控主板远程操作自动更新介绍

    库EM_FTPClient.LIB,客户利用这个库可以方便的编写出适合自己应用的FTP客户端应用程序,ARM9工控主板支持断点续传的FTP文件传送》一文中对各库函数做了详细介绍。本文介绍的更新方案就是利用
    的头像 发表于 11-13 09:26 1334次阅读

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

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

    信息技术工控主板的复位管理介绍

     公司的工控主板是基于ARM9 CPU、预装正版WinCE的嵌入式主板产品。作为嵌入式应用,系统的可靠启动是其可靠性的重要组成部分。本文针对嵌入式应用的特点、介绍
    的头像 发表于 11-14 10:03 1615次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>工控</b>主板的复位管理介绍

    信息技术工控主板内核更新与版本管理介绍

    公司的ARM9工控主板系列产品均预装了正版的Window CE操作系统,支持客户采用强大的微软开发工具直接开发应用程序。
    的头像 发表于 11-15 09:24 1277次阅读
    <b class='flag-5'>英</b><b class='flag-5'>创</b><b class='flag-5'>信息技术</b><b class='flag-5'>工控</b>主板内核更新与版本管理介绍

    信息技术EM9000工控主板的版本信息管理概述

    EM9000是公司极具特色的一款ARM9工控主板。经过长时间的完善,现系统已完全稳定。
    的头像 发表于 11-17 11:23 1690次阅读
    <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>管理概述

    信息技术ARM9工控主板扩展矩阵键盘的方法

    公司ARM9系列工控主板预装正版WinCE操作系统,板载了丰富的通讯接口,GPIO,存储器等资源,支持TFT LCD显示及触摸,支持标准USB键盘,鼠标输入。
    的头像 发表于 01-14 11:05 1605次阅读
    <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上为例讲述了两种对基
    的头像 发表于 01-14 11:29 1407次阅读

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

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