<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>
  • GPRS-串口數據透明傳輸

     2011-2-23              

            GPRS通訊和串口通訊都是工控領域使用極為頻繁的數據傳輸方式,而實際工程中經常需要在GPRS和串口之間進行數據的透明傳輸,即:將串口終端設備傳輸過來的各種數據通過GPRS發送到另一設備,或者將GPRS終端設備傳輸過來的數據通過串口轉發。利用英利開發資料光盤中的GPRS、以太網和串口示例程序,可以很容易地開發這樣一個GPRS-串口數據透明傳輸的應用例程。

     

            在英利開發資料光盤的“應用開發軟件”-“典型應用”中,有一個名為“gprs232”的文件夾,就是GPRS-串口數據透明傳輸的示例工程文件。該例程包括了串口、以太網和GPRS操作,以多線程方式實現,程序流程如下:
            1、初始化串口并啟動串口數據處理線程
            2、打開GPRS并建立連接
            3、建立TCP連接,啟動網絡數據處理線程并進行數據透明傳輸

     

    1、準備工作

            在測試和使用該例程之前,需進行如下準備工作:

     

            1、將英利工控主板的調試串口連接到開發主機,然后將英利工控主板的串口ttyS2(程序默認。如果使用其他串口,請參照程序代碼,在命令行帶入相關參數)與實驗用PC機的串口連接(開發主機的COM1往往和英利工控主板的調試串口連接,用于通過超級終端操作英利工控主板。因此如果開發主機還有一個完好的串口,可以將此串口連接到ttyS2;否則建議客戶另找一臺PC機連接ttyS2,以便于測試該例程。本文中的“實驗用PC機”就是指連接ttyS2的PC機)。

     

            2、將實驗用PC機、開發主機和英利工控主板都接入實驗室內網,并確保實驗室內網和公共局域網的連接都正確無誤。

     

            3、將ETA300與英利工控主板連接好,將實驗用SIM卡裝在ETA300上面。

     

            4、將英利工控主板/mnt/nandflash文件夾下userinfo.txt文件中的默認網關改為0,即如下:
                  DefaultGateway='0'
                  如果不進行這個修改,則系統默認會通過以太網,而非GPRS傳輸數據。

     

            5、通過實驗室的網關路由器,為實驗用PC機分配一個端口,并記下該網關路由器的外網IP地址。

     

            6、將英利開發資料光盤“工具軟件”中的“串口調試助手”和文件夾“TCPTest_Linux”復制到實驗用PC機上,啟動串口調試助手和“TCPTest_Linux”中的TCPTest。TCPTest啟動以后將套接字類型選擇為服務器,服務器名稱填入實驗用PC機的內網IP地址,服務器端口填入之前為實驗用PC機分配的端口號,然后選擇偵聽,如下圖所示。

     

    GPRS-串口數據透明傳輸TCP服務器

     

    2、例程測試

            以上6步準備完畢以后,在開發主機上啟動超級終端,為英利工控主板上電,啟動sourcery g++并編譯gprs232工程文件,通過超級終端將應用程序下載到英利工控主板的/mnt/nandflash文件夾中,并輸入如下命令運行程序:
            [root@EM9X60 /mnt/nandflash]#  ./gprs232  50

     

            由于GPRS模塊首次上電連接速度可能比較慢,因此此處設置了參數50(等待50秒。該項設置與用戶使用的SIM卡有關。如果50秒以后仍然無法連接,可以將這個時間再加長)。一旦首次連接成功以后,只要不斷開電源,再次運行該程序的時候可以不設置這個參數,直接如下運行即可:
            [root@EM9X60 /mnt/nandflash]#  ./gprs232

     

            此后系統自動進行初始化和連接,過程中用戶可以看到ETA300上的SYNC燈閃動,表示找到SIM卡以及連網,同時超級終端會顯示相應的運行信息。連接成功以后,超級終端最后一行信息顯示:TCP Connect Success;同時,實驗用PC機上TCP Test的消息欄也從不可編輯的灰色狀態變為可以輸入信息狀態,如下圖所示。

     

    GPRS-串口數據透明傳輸TCP服務器

     

            此后通過串口調試助手發送信息,可以看到信息顯示在TCP Test的“接收的信息”欄中,通過TCP Test發送的信息則顯示在串口調試助手的接收區中。發送/接收數據的過程中,ETA300的SYNC燈會閃動,表示數據正通過GPRS發送/接收。如果SYNC燈沒有閃動,則數據并不是通過GPRS發送/接收。此時需檢查userinfo.txt的默認網關是否配置為0。

     

    3、程序說明

            該例程的主程序參見光盤中的源文件。本例程以多線程方式實現,串口、TCP數據收發由各自獨立的線程完成,這樣不但能夠充分發揮嵌入式Linux多任務操作系統的優勢、實時處理數據,同時有利于減少系統開銷、提高系統資源利用效率。其中主程序部分需要用戶自行填寫參數的是以下兩個地方:

            // 此處填寫網關路由器的外網IP地址
            strcpy( ServerIP, '222.212.15.128' );
            // 此處填寫通過實驗室的網關路由器為實驗用PC機分配的端口號
            TCPClntManager.AddTCPClientObject( ServerIP, 7051 );

     

            數據處理分別在串口數據處理線程ReceiveThreadFunc和TCP數據處理線程SocketThreadFunc中進行。

     

            串口部分:

            // 聲明外部變量TCPClntManager類
            extern class CTCPClientManager TCPClntManager;

            int CSerial::ReceiveThreadFunc(void* lparam)
            {
                    // 得到CSerial實例指針
                    CSerial *pSer = (CSerial*)lparam;
                    .
                    .
                    .
                    if (ret > 0)
                    {
                            // 判斷是否讀事件
                            if (FD_ISSET(pSer->m_fd,&fdRead))
                            {
                                    // data available, so get it! 
                                    pSer->m_DatLen = read( pSer->m_fd, pSer->DatBuf, 100 );
                                    // 接收串口數據處理函數
                                    if( pSer->m_DatLen > 0 )
                                    {
                                            pSer->PackagePro( pSer->DatBuf, pSer->m_DatLen );
                                    }
                                    // 處理完畢
                            }
                    }
            }

            // 接收串口數據處理函數
            int CSerial::PackagePro( char* Buf, int len )
            {
                    // 將接收的數據發送至TCP服務器
                    CTCPClient* pTCPClnt;
                    Buf[len] = 0;

                    // 檢測TCP連接是否打開
                    if( TCPClntManager.m_TCPClientInfo[0].ConnState == csOPEN )
                    {
                            pTCPClnt = (CTCPClient*)TCPClntManager.m_TCPClientInfo[0].pTCPClient;
                            // 調用CTCPClient類的發送函數將串口接收到的數據發送到TCP服務器
                            pTCPClnt->SendData( Buf, len );
                    } 
                    return 1;
            }

     

            TCP部分:

            // 聲明外部變量CSerial類
            extern class CSerial m_Serial;

            // TCP數據處理線程
            int CTCPClient::SocketThreadFunc( void* lparam )
            { 
                    CTCPClient *pSocket;
                    // 得到CTCPClient實例指針
                    pSocket = (CTCPClient*)lparam;
                    .
                    .
                    .
                    if (ret > 0)
                    {
                            .
                            .
                            .
                            else
                            {
                                    // 對接收的數據進行處理
                                    pSocket->RecvBuf[pSocket->m_nRecvLen] = 0;
                                    // printf( 'RCV:%s\n', pSocket->RecvBuf);
                                    // 調用CSerial類的發送函數將GPRS接收到的數據發送到串口調試助手 
                                    m_Serial.WritePort( pSocket->RecvBuf, pSocket->m_nRecvLen );
                                    // pSocket->SendData( pSocket->RecvBuf, pSocket->m_nRecvLen );
                                    // 處理完畢
                            }
                    }
            }

    精品视频国产狼友视频| 久久久精品2019中文字幕之3| 国产高清精品入口91| 99re6这里只有精品| 国产精品福利在线观看免费不卡 | 97精品国产手机| 日本精品不卡视频| 国产成人精品曰本亚洲79ren| 伊人久99久女女视频精品免| 久久精品人人做人人妻人人玩| 最新国产乱人伦偷精品免费网站| 91精品国产亚洲爽啪在线观看| 精品国产91久久久久久久| 四虎影视永久在线精品| 亚洲精品成a人在线观看☆| 91精品国产自产91精品| 久久精品国产一区| 91精品最新国内在线播放| 午夜精品久久影院蜜桃| 日韩精品中文字幕在线观看| 在线精品自偷自拍无码中文| 91精品福利在线观看| 人妻精品久久久久中文字幕一冢本| 中文字幕在线亚洲精品| 久久精品无码一区二区三区日韩| 人妻无码久久精品| 国产精品久久久久9999赢消| 99re热免费精品视频观看| 四虎国产精品高清在线观看| 精品无码久久久久久午夜| 香蕉国产精品频视| 色欲精品国产一区二区三区AV | 久久国产亚洲精品无码| 国产精品免费大片| 久久久久夜夜夜精品国产| 国产999精品2卡3卡4卡| 亚洲精品卡2卡3卡4卡5卡区| 亚洲精品无码永久在线观看你懂的| 三级精品在线观看| 成人午夜精品无码区久久| 国产成人精品三上悠亚久久|