<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 淺談遠(yuǎn)程診斷技術(shù)在電控發(fā)動(dòng)機(jī)方面的應(yīng)用

          淺談遠(yuǎn)程診斷技術(shù)在電控發(fā)動(dòng)機(jī)方面的應(yīng)用

          作者: 時(shí)間:2016-12-20 來源:網(wǎng)絡(luò) 收藏

          int pascal far listen( socket s, int backlog );

          參 數(shù): s:需要建立監(jiān)聽的socket;

          backlog:最大連接個(gè)數(shù);

          服務(wù)器端的socket調(diào)用完listen()后,如果此時(shí)客戶端調(diào)用connect()函數(shù)提出連接申請(qǐng)的話,server 端必須再調(diào)用accept() 函數(shù),這樣服務(wù)器端和客戶端才算正式完成通信程序的連接動(dòng)作。為了知道什么時(shí)候客戶端提出連接要求,從而服務(wù)器端的socket在恰當(dāng)?shù)臅r(shí)候調(diào)用accept()函數(shù)完成連接的建立,我們就要使用wsaasyncse-lect()函數(shù),讓系統(tǒng)主動(dòng)來通知我們有客戶端提出連接請(qǐng)求了。該函數(shù)調(diào)用成功返回0,否則返回socket_error。

          int pascal far wsaasyncse-lect( socket s, hwnd hwnd,unsigned int wmsg, long levent );

          參數(shù): s:socket 對(duì)象;

          hwnd :接收消息的窗口句柄;

          wmsg:傳給窗口的消息;

          levent:被注冊(cè)的網(wǎng)絡(luò)事件,也即是應(yīng)用程序向窗口發(fā)送消息的網(wǎng)路事件,該值為下列值fd_read、fd_write、fd_oob、fd_accept、fd_connect、fd_close的組合,各個(gè)值的具體含意為fd_read:希望在套接字s收到數(shù)據(jù)時(shí)收到消息;fd_write:希望在套接字s上可以發(fā)送數(shù)據(jù)時(shí)收到消息;fd_accept:希望在套接字s上收到連接請(qǐng)求時(shí)收到消息;fd_connect:希望在套接字s上連接成功時(shí)收到消息;fd_close:希望在套接字s上連接關(guān)閉時(shí)收到消息;fd_oob:希望在套接字s上收到帶外數(shù)據(jù)時(shí)收到消息。

          具體應(yīng)用時(shí),wmsg應(yīng)是在應(yīng)用程序中定義的消息名稱,而消息結(jié)構(gòu)中的lparam則為以上各種網(wǎng)絡(luò)事件名稱。所以,可以在窗口處理自定義消息函數(shù)中使用以下結(jié)構(gòu)來響應(yīng)socket的不同事件:  

          switch(lparam) 
          {
          case fd_read:
               …  
            break;
          case fd_write、
              …
            break;
              …
          }

          電控單元(ECU)的通信協(xié)議主要就封裝在該消息響應(yīng)函數(shù)當(dāng)中。

          (5)服務(wù)器端接受客戶端的連接請(qǐng)求

          當(dāng)client提出連接請(qǐng)求時(shí),server 端hwnd視窗會(huì)收到winsock stack送來我們自定義的一個(gè)消息,這時(shí),我們可以分析lparam,然后調(diào)用相關(guān)的函數(shù)來處理此事件。為了使服務(wù)器端接受客戶端的連接請(qǐng)求,就要使用accept() 函數(shù),該函數(shù)新建一socket與客戶端的socket相通,原先監(jiān)聽之socket繼續(xù)進(jìn)入監(jiān)聽狀態(tài),等待他人的連接要求。該函數(shù)調(diào)用成功返回一個(gè)新產(chǎn)生的socket對(duì)象,否則返回invalid_socket。

          socket pascal far accept( scoket s, struct sockaddr far *addr,int far *addrlen );
          參數(shù):s:socket的識(shí)別碼;
          addr:存放來連接的客戶端的地址;
          addrlen:addr的長度

          (6)結(jié)束 socket 連接

          結(jié)束服務(wù)器和客戶端的通信連接是很簡(jiǎn)單的,這一過程可以由服務(wù)器或客戶機(jī)的任一端啟動(dòng),只要調(diào)用closesocket()就可以了,而要關(guān)閉server端監(jiān)聽狀態(tài)的socket,同樣也是利用此函數(shù)。另外,與程序啟動(dòng)時(shí)調(diào)用wsastartup()憨數(shù)相對(duì)應(yīng),程式結(jié)束前,需要調(diào)用 wsacleanup() 來通知winsock stack釋放socket所占用的資源。這兩個(gè)函數(shù)都是調(diào)用成功返回0,否則返回socket_error。

          int pascal far closesocket( socket s );
          參 數(shù):s:socket 的識(shí)別碼;
          int pascal far wsacleanup( void );
          參 數(shù): 無

          3.系統(tǒng)實(shí)現(xiàn)與應(yīng)用

          遠(yuǎn)程故障診斷系統(tǒng)要完成數(shù)據(jù)的傳輸需要建立一套完整的數(shù)據(jù)傳輸系統(tǒng)。系統(tǒng)中包括:DTU,電控單元(ECU)、移動(dòng)網(wǎng)絡(luò)、后臺(tái)中心。

          3.1網(wǎng)絡(luò)拓?fù)鋱D:

          圖2 網(wǎng)絡(luò)結(jié)構(gòu)

          3.2系統(tǒng)實(shí)現(xiàn)方式

          (1)終端設(shè)備,GPRS模塊(DTU)

          首先通過AT命令對(duì)GPRS模塊進(jìn)行設(shè)置,設(shè)置要連接的中心IP和端口及其它必要性的設(shè)置,設(shè)置好之后電控單元(ECU)通過RS232接口和GPRS模塊相連,GPRS模塊上電之后根據(jù)事先設(shè)置好的中心IP和端口進(jìn)行連接,成功連接到服務(wù)中心后即可雙向傳輸數(shù)據(jù)。即可實(shí)現(xiàn)在線遠(yuǎn)程監(jiān)控電控單元(ECU)狀態(tài)與下載電控單元(ECU)程序。



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();