<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • WinCE工控主板多網(wǎng)口使用方法

     2022-7-22     作者:楊陽         

    簡介


      英創(chuàng)公司ESMARC系列工控主板支持8位數(shù)據(jù)/地址復(fù)用的精簡ISA總線,通過精簡ISA總線可以擴展更多網(wǎng)口,如ETA728和ETA528,本文將介紹如何使用經(jīng)過擴展的多路網(wǎng)口。


    WinCE工控主板的多網(wǎng)口多串口擴展WinCE工控主板的多網(wǎng)口多串口擴展
    ETA528:8路串口+2路網(wǎng)口擴展模塊ETA728:2路網(wǎng)口擴展模塊


    加載驅(qū)動


      ESMARC WinCE系統(tǒng)中已經(jīng)集成了擴展模塊的驅(qū)動程序,在使用擴展模塊之前需要通過系統(tǒng)自帶的命令使能相應(yīng)的驅(qū)動程序。具體操作方法是通過telnet命令登陸WinCE主板(或打開WinCE系統(tǒng)的命令提示行)后執(zhí)行相應(yīng)的命令,例如:

      >ETA728Set 2 ; 使能ETA728 兩路網(wǎng)口擴展模塊驅(qū)動

      >ETA728Set 1 ; 使能ETA728 一路網(wǎng)口擴展模塊驅(qū)動

      >ETA728Set 0 ; 禁止ETA728驅(qū)動程序加載

      重啟板子后生效。


    新增網(wǎng)絡(luò)查看及配置


      以ESM335X為例, 連接模塊ETA728,并執(zhí)行命令ETA728Set 2加載模塊驅(qū)動后。進入控制面板->網(wǎng)絡(luò)連接,可以看到板子多出了兩個網(wǎng)絡(luò),DM9K3和DM9K4。可以查看及配置其網(wǎng)絡(luò)IP,網(wǎng)關(guān)等參數(shù)。


    WINCE工控主板多網(wǎng)口擴展使用方法.png


      通過telnet或打開WINCE系統(tǒng)命令提示行,使用ipconfig也可以查看新增網(wǎng)絡(luò)的參數(shù)(未插網(wǎng)線時IP為0.0.0.0)。


    WINCE工控主板多網(wǎng)口擴展使用方法.png


      注意:在系統(tǒng)中有多個網(wǎng)絡(luò)時,一定要注意各個網(wǎng)絡(luò)不應(yīng)同時設(shè)置到一個網(wǎng)段內(nèi),會影響系統(tǒng)路由。


    代碼控制


      查詢網(wǎng)絡(luò)


    #include <iphlpapi.h>
    IP_ADAPTER_INFO AdapterInfo[8];
    ULONG OutBufLen = sizeof(IP_ADAPTER_INFO);
    GetAdaptersInfo(AdapterInfo, &OutBufLen); 
    GetAdaptersInfo(AdapterInfo, &OutBufLen);   //調(diào)兩次,可以百度下這個API


      板子所有網(wǎng)絡(luò)的信息就存儲在AdapterInfo結(jié)構(gòu)體數(shù)組中了,其中包括,網(wǎng)絡(luò)名,如:判斷是否為ETA728擴展的第一個網(wǎng)絡(luò)


    if (strcmp(AdapterInfo[0].AdapterName, “DM9K3”) == 0)
    {
      //第一個網(wǎng)絡(luò)網(wǎng)口名為”DM9K3” 
    }


      獲得第二個網(wǎng)絡(luò)的MAC

      BYTE *mac =  AdapterInfo[1].Address;


      獲得第三個網(wǎng)絡(luò)的IP

      BYTE *mac =  AdapterInfo[2].IpAddressList;


      修改IP

      

      參考光盤中提供的例程,以設(shè)置網(wǎng)絡(luò)名為”DM9K3”的網(wǎng)口參數(shù)為例,代碼如下。

    #include "netip_api.h"
    #include <iphlpapi.h>
     
    NETWORK_ADPTS_NAME   AdaptersName;
    NETWORK_ADPT_INFO AdptInfo;
    DWORD             NewIPAddr;
    DWORD             NewMask;
    DWORD             NewGateWay;
    DWORD             dwType;
    int               i1;
     
       
    StringToIPAddr(L"192.168.1.248", &NewIPAddr );
     
    StringToIPAddr(L"255.255.255.0", &NewMask);
    StringToIPAddr(L"192.168.1.1", &NewGateWay);
     
    bRes = GetNetWorkAdaptersName( &AdaptersName );
     
    memset ((char *)&AdptInfo, 0, sizeof(AdptInfo));
    for(int i1=0; i1<AdaptersName.NumOfAdapters; i1++ )
    {
        if (wcscmp(AdaptersName.szAdapterName[i1],L"DM9K3") == 0)
        {
            bRes = GetNetWorkAdapterInfo( AdaptersName.szAdapterName[i1], &AdptInfo );
            AdptInfo.IPAddr = NewIPAddr;
            AdptInfo.SubnetMask = NewMask;
            AdptInfo.Gateway = NewGateWay;
            SetNetWorkAdapterInfo( AdaptersName.szAdapterName[i1], &AdptInfo );
            break;
        }
    }

      

      Socket調(diào)用


      參考光盤中網(wǎng)絡(luò)例程,當系統(tǒng)只有一個網(wǎng)絡(luò)時,可以設(shè)置socket的IP為0.0.0.0,即默認的網(wǎng)口進行通信。當系統(tǒng)中有多個網(wǎng)絡(luò)時,需要指定的網(wǎng)口進行通信時,綁定端口時就需要設(shè)置該網(wǎng)口的IP,參考例程第3步。


      比如希望使用ETA728的第一個網(wǎng)口進行通信時,則需要先獲得網(wǎng)口名為”DM9K3”的網(wǎng)絡(luò)IP,綁定時綁定該IP。


    WSADATA wsa;
    //1.初始化socket資源
    if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
    {
    	return -1;//代表失敗
    }
    
    //2.創(chuàng)建套接字
    if ((m_socketServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))<0)
    {
    	return -2;
    }
    
    //3.綁定端口
    SOCKADDR_IN  serverAddr;
    ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(m_dwPort);
    //serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); //單網(wǎng)絡(luò)時
    serverAddr.sin_addr.s_addr = htonl(m_dwIP); //綁定指定網(wǎng)口IP
    if (bind(m_socketServer, (struct sockaddr *)&serverAddr, sizeof(serverAddr))<0)
    {
    	return -3 ;
    }
    
    //4.設(shè)置為偵聽套接字
    if (listen(m_socketServer, 8)!=0)
    {
    	return -4;
    }
    
    //4.設(shè)置監(jiān)聽套接字通訊模式
    //DWORD ul= 1;
    //ioctlsocket(m_socketServer,FIONBIO,&ul);
    
    //5.創(chuàng)建偵聽通訊線程,在線程里,等待客戶端連接請求
    m_bListenThreadStop = FALSE;
    m_hListenThread = CreateThread(NULL , 0, SocketListenThread, this, 0, NULL);
    if (m_hListenThread == NULL)
    {
    	closesocket(m_socketServer);
    	return -5; 
    }


      通過綁定socket,可以實現(xiàn)應(yīng)用程序同時在多個網(wǎng)絡(luò)中進行通信的目的。


      路由設(shè)置


      在一個系統(tǒng)中有多個網(wǎng)絡(luò)時,系統(tǒng)通過路由表決定網(wǎng)絡(luò)數(shù)據(jù)經(jīng)哪個網(wǎng)絡(luò)的網(wǎng)口進行通信。當代碼無法連通網(wǎng)絡(luò)時,可以檢查下是否是路由設(shè)置的問題。

      通過route print命令可以查看系統(tǒng)路由表。

      使用route help查看其它指令的使用說明。

      可以增加路由,減少路由,修改路由優(yōu)先級等。


      英創(chuàng)提供了文章內(nèi)所述程序及源代碼,有需要的客戶可以聯(lián)系英創(chuàng)工程師獲得。

    波霸在线精品视频免费观看| 国产精品无码素人福利| 久久久亚洲精品视频| 精品国产免费观看| 中文字幕精品视频| 久久精品这里只有精99品| 日韩精品成人无码专区免费| 国产精品乱码高清在线观看| 国产在线精品二区赵丽颖| 国产精品亚洲午夜一区二区三区| 99精品国产99久久久久久97| 国产精品自在在线午夜出白浆| 亚洲精品午夜久久久伊人| 91精品啪在线观看国产| 老司机福利精品视频| 亚洲AV成人精品一区二区三区| 99ee6热久久免费精品6| 国产午夜精品免费一区二区三区| 亚洲精品国产福利一二区| 国产精品亚洲av色欲三区| 91精品国产麻豆国产自产在线| 久久亚洲国产欧洲精品一| 国产手机在线精品| 国产国产人精品视频69| 国产精品99精品一区二区三区 | 中文字幕一区二区三区日韩精品| 日本精品αv中文字幕| 国产精品国产福利国产秒拍| 久久国产免费观看精品3| 久久青草精品38国产| 日韩精品无码一区二区三区四区 | 免费无码精品黄AV电影| 91无码人妻精品一区二区三区L | 亚洲国产午夜中文字幕精品黄网站| 精品国产乱码一二三四区五区| 亚洲精品第一国产综合野| 亚洲午夜精品一区二区| 久久精品99国产精品日本| 久久亚洲国产欧洲精品一| 久久777国产线看观看精品| 亚洲日韩精品射精日|