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

ARM9工控板在遠程監控中的應用之二——利用COM組件遠程設置網絡參數

 2009/6/17    

        為了滿足客戶多網絡的需求,英創公司推出了有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就可以看到配置網頁。