ARM9工控板在远程监控中的应用之二——利用COM组件远程设置网络参数

 2009-6-17          [nemail]    
[lablebox]

        为了满足客户多网络的需求,英创公司推出了有3个网络接口的嵌入式主板——EM9360。 由于EM9360没有标准的WinCE界面,给更改网络的ip地址带来困难。本演示示例是通过英创嵌入式主板的WebServer功能来完成ip地址的配置。 其实现的原理是通过ASP网页提交给服务器需要更改的ip地址内容,在服务器端,通过调用COM组件,完成ip地址的配置。通过本示例,你可以加深对COM组件的理解。

 

        EM9360可以通过一下三种方法来完成ip地址的配置:

 

        1、通过更改WinCE的注册表

        对注册表的访问,可以更改ip地址,但是,需要重新启动开发板才能使设置的ip地址生效。注册表的修改可以利用远程调试工具中的Remote Registry Editor来进行,这部分的详细介绍可以参见英创公司网站“技术天地”栏目中英创9260系列嵌入式主板调试使用方法简介。该方法一般是在产品开发时,技术开发人员使用。

 

        2、参考C程序SetIPParms 示例程序来进行IP参数的设置

        该程序主要是提供了一个利用NetIP_API静态库修改网卡参数的示例。通过API函数GetNetWorkAdapterInfo(…)获取网络参数, SetNetWorkAdapterInfo(…)来设置网络参数并自动绑定网络适配器,无需重启开发板,就能使设置的网络生效。该程序主要提供给用C语言进行应用程序开发技术人员参考,同时也可以作为一个独立的小工具程序,在telnet环境下启动运行,通过命令行参数进行网络参数的设置。命令行的格式如下:

        SetIPParms 网卡名 IP地址 子网掩码 默认网关

        如设置网络2口DM9K21的参数:

        SetIPParms DM9k21 192.168.202.170 255.255.255.0 192.168.202.8

        为了适应客户灵活修改程序,我们在开发光盘中提供了SetIPParms的源码。

 

        3、利用COM组件通过ASP动态网页设置

        由于NetIP_API静态库主要是面向C开发环境下使用,对于采用其它开发工具,如C#、Labview等就不能直接使用,因而需要一种更为通用而简便的方法来对网络参数进行配置。这里采用的方法是将NetIP_API静态库封装成一个标准的COM组件,来支持各种开发平台的调用,本文主要介绍的是ASP动态网页对COM组件的调用。这种方法只需通过IE浏览器访问即可实现对网络参数的设置,因而特别适合用于工程现场的设备配置。本文的以下部分主要介绍了COM组件的生产以及调用方法。

 

1、建立COM组件

        1、新建EVC工程,选择WCE ATL COM AppWizard,工程名字为Scripting。

 

        2、选择支持MFC。

 

        3、通过ATL向导添加接口 Insert->New ATL Objcet…,在该对话框中选择Simple Object项添加一个COM对象,点击Next按钮来设置对象名和属性。

 

 

        对象名Names选项卡中主要包括两类输入信息:C++信息和COM信息。在这里,我们输入名字COM_NetIP_API,其它信息会自动生成。

 

        在Attributes选项卡中,我们要设置COM对象的底层特征。由于在CE中,目前只支持Free模型,所以,必须选中这一项。其它选项意义请参考相应的书籍。

 

        4、为COM_NetIP_API对象添加接口方法。选中ICOM_NetIP_API接口,右击,在弹出的快捷菜单中选择Add Method…项,为COM_NetIP_API对象添加接口方法。

 

        5、为接口添加方法的对话框界面,只需在Method Name输入框中输入ChangParms,在Parameters输入框中输入 [in]VARIANT AdapterName,[in] VARIANT AdaptersParameter,[in] VARIANT AdaptersParameterVal, [out, retval] long * pVal然后点击OK按钮,即可添加一个COM_NetIP_API方法。这里,要注意参数的数据类型,选择VARIANT类型,可以根据输入的参数类型,灵活处理参数数据。在写COM组件时,可以把参变量设置为VARIANT类型,这样,可以根据参数变量的类型进行不同的处理。下面介绍一下两个重要的类型转换 。

 

        // VARIANT转换为CString类型

        CComVariant v_1( v1 ); // V1是参变量VARIANT类型

        v_1.ChangeType( VT_BSTR ); // 转换为BSTR字符串

        CString keyName(v_1.bstrVal); // 转化为CString

        // char 转换为VARIANT pVal为VARIANT指针变量

        char buf[100];

        CString str;

        str=buf;

        pVal->vt = VT_BSTR; // 指定pVal的类型为BSTR

        pVal->bstrVal = str.AllocSysString();// str转换为BSTR

 

        6、添加了ChangParms方法后,就要添ChangParms方法实现代码了。在ClassView选项卡中,双击ChangParms,就可以在代码窗口添加实现代码了。具体代码见EVC工程源码。

 

        7、把NETIP_API.lib和NETIP_API.h拷贝到当前工程目录下,在Projecting->Setting->link标签,增加netip_api.lib,在ChangIP.cpp包含头文件NETIP_API.h。

 

        8、以同样的方法,添加ReadIP接口方法。详见源码。

 

2、注册COM组件

        COM组件编写并编译为DLL文件,只有向系统注册此组件后,其它语言才能够调用。注册的方法有两种。

 

        1、用telnet登陆开发板,用regsvr32 SetIPParms.dll注册

        2、在程序中注册。具体方法请参考例程一Regdll 工程源码

 

3、在ASP中调用COM组件

        以VBScript为例,调用COM组件对象,完成对文件的操作。

 

        1、创建SetIPParms对象,并读出现有ip地址的信息

        set ipObj=CreateObject('SetIPParms.COM_NetIP_API') // 创建ChangIP对象

        emIPAddress=ipObj.ReadParms('DM9K21','IPAddress') // 读ip地址第一个参数为网卡编号名DM9K21或者DM9K31,第二个参数为:IPAddress、DHCP、SubnetMask、DefaultGateway

        ipObj.ChangIP 'DM9K21','DHCP',emDHCP // 更改ip配置信息,前两个参数和前面的定义相同,第三个参数,为“Enable”或者“Disable”

 

        2、详细网页代码请参考ASP源文件。

 

4、综合测试

        至此,我们完成了COM组件的编写和VBScript调用组件。我们提供了综合例程,如图9所示,通过网页配置网络参数,具体步骤如下:

        1、把regsvr32 .exe 和SetIPParms.dll拷贝到Nandflash的根目录下

        2、telnet登陆嵌入式主板,执行regsvr32 SetIPParms.dll注册

        3、把ASP文件夹下的所有文件拷贝到 \nandflash\www目录下

        4、在浏览器中输入 嵌入式主板的ip地址/nand/SetIPParms.asp就可以看到配置网页。

[lablebox]