激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

GPRS-串口數(shù)據(jù)透明傳輸

 2011-2-23              

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

 

        在英利開發(fā)資料光盤的“應(yīng)用開發(fā)軟件”-“典型應(yīng)用”中,有一個名為“gprs232”的文件夾,就是GPRS-串口數(shù)據(jù)透明傳輸?shù)氖纠こ涛募T摾贪舜凇⒁蕴W(wǎng)和GPRS操作,以多線程方式實現(xiàn),程序流程如下:
        1、初始化串口并啟動串口數(shù)據(jù)處理線程
        2、打開GPRS并建立連接
        3、建立TCP連接,啟動網(wǎng)絡(luò)數(shù)據(jù)處理線程并進行數(shù)據(jù)透明傳輸

 

1、準(zhǔn)備工作

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

 

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

 

        2、將實驗用PC機、開發(fā)主機和英利工控主板都接入實驗室內(nèi)網(wǎng),并確保實驗室內(nèi)網(wǎng)和公共局域網(wǎng)的連接都正確無誤。

 

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

 

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

 

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

 

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

 

GPRS-串口數(shù)據(jù)透明傳輸TCP服務(wù)器

 

2、例程測試

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

 

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

 

        此后系統(tǒng)自動進行初始化和連接,過程中用戶可以看到ETA300上的SYNC燈閃動,表示找到SIM卡以及連網(wǎng),同時超級終端會顯示相應(yīng)的運行信息。連接成功以后,超級終端最后一行信息顯示:TCP Connect Success;同時,實驗用PC機上TCP Test的消息欄也從不可編輯的灰色狀態(tài)變?yōu)榭梢暂斎胄畔顟B(tài),如下圖所示。

 

GPRS-串口數(shù)據(jù)透明傳輸TCP服務(wù)器

 

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

 

3、程序說明

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

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

 

        數(shù)據(jù)處理分別在串口數(shù)據(jù)處理線程ReceiveThreadFunc和TCP數(shù)據(jù)處理線程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 );
                                // 接收串口數(shù)據(jù)處理函數(shù)
                                if( pSer->m_DatLen > 0 )
                                {
                                        pSer->PackagePro( pSer->DatBuf, pSer->m_DatLen );
                                }
                                // 處理完畢
                        }
                }
        }

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

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

 

        TCP部分:

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

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

主站蜘蛛池模板: 国产性片在线| 国产高清免费影视在线观看| 91福利专区| 免费视频日本xvideos| 婷婷综合色| 婷婷91| zzzwww免费播放| 日本a黄| 亚洲春色在线视频| 国产欧美日韩成人| 黄色影院| www.欧美精品| 日韩欧美一区二区三区四区| 女人一级片| 中文字幕电影在线| 欧美成人精品第一区首页| 黑人解禁hd在线观看| 国产成人精视频在线观看免费| 午夜成年人视频| 大陆老太xxxxxxxxhd| 成人欧美1314www色视频| 国产高清视频| 99热这里都是国产精品| 国产一区二区三区在线看片| 亚洲精品91在线| 一级特级欧美aa毛片免费| 亚洲精品99久久久久中文字幕| 青青青伊人| 欧美一级毛片欧美一级| 国产91精品不卡在线| 国产亚洲欧美久久久久| 最近最新中文字幕免费的一页| 久久青青草原精品老司机| 日本黄色影片在线观看| 1024最新网址| 久久精品国产丝袜| 日本成本人啪啪黄3d动漫| 日韩高清特级特黄毛片| 午夜激情视频在线播放| 中国大陆一级毛片 免费| 午夜一级毛片免费视频|