<wbr id="ht9fj"><ins id="ht9fj"></ins></wbr>

        Linux主板4G通訊斷線重連的自動管理

         2019-5-5     作者:黃志超    

          在工控主板使用的現場環境中,可能會有一部分不能夠提供以太網的情形,所以3G和4G網絡以其便捷的使用方式,得到越來越廣泛的應用。但是在使用無線通訊的時候,為了保證通訊的穩定性,斷線重連機制是必須在程序中實現的。


          為了讓客戶能夠更加便捷的進行開發,英創公司在Linux主板上實現了自動撥號和斷線重連的管理功能,并以庫文件的形式放在主板文件系統中提供給客戶。通過撥號管理庫提供的API函數,客戶就能夠方便的實現自動撥號以及斷線重連的功能,下面就詳細介紹針對英創Linux主板的撥號管理庫及導出的API函數。


          英創公司提供的撥號管理庫文件名為libautodial.so,在編譯應用程序的時候,需要鏈接這個庫文件,如果客戶使用光盤資料中提供的eclipse工具進行開發,在編譯之前需要對工程進行設置,設置方法為選擇對應的工程,通過右鍵菜單進入properties,點擊右側C/C++ Build子欄目,選擇其中Settings這一項,在C++ Linker子項中添加庫文件和路徑,如下圖:


        Linux主板4G通訊斷線重連的自動管理.png

        工程設置


          Windows開發環境和Ubuntu開發環境下面的eclipse設置方法相同。對運行環境的英創主板,其根文件系統/lib路徑下已經做好了相應設置,客戶不需要再做任何操作,直接運行編譯好的程序即可。


          撥號管理庫文件libautodial.so一共提供了三個API函數,分別實現連接,查詢和斷開的功能,函數接口定義如下:


        /**
         *    啟用撥號管理線程
        *
        *    函數會創建一個線程用來進行撥號管理
        *    實現自動撥號,以及斷線重連
        *
         *    返回值說明:
         *     0 表示成功開啟撥號管理線程。
         *    -1 表示在當前環境無法運行。
         *
         */
        int pppconnt_start();
         
        /**
         *    查詢連接狀態
         *
         *    返回值說明:
         *    0 表示運行連接正常。
         *    -1 表示連接斷開。
        *      -2表示信號太差或者沒有讀取到SIM卡導致連接失敗。
         *    -3表示連接模塊無響應,建議檢查硬件連接和驅動是否加載成功。
        *
         */
        int pppconnt_check();
         
        /**
         *    關閉連接
         *
         *    關閉撥號管理功能,并關閉已建立的連接。
         *
         */
        void pppconnect_stop();


          pppconnt_start()函數會創建一個線程來對整個撥號的流程實現自動管理,管理線程一開始便會自動判斷接入的模塊型號,根據模塊型號調用對應的撥號腳本,然后進行撥號和斷線重連。所以對于客戶來說,只需要調用一次pppconnt_start()函數,就會創建出一個實現撥號管理的線程,不需要再執行其他任何操作。


          pppconnt_check()函數提供了查詢功能,如果在使用過程中客戶想獲取連接狀態,可以通過調用該函數的返回值來判斷,0為正常連接,-1為連接斷開,-2為信號弱或者無信號,可能是由于沒有接天線或者沒有讀取到SIM卡造成的,-3為模塊無響應,可能是由于沒有識別到外部模塊或者沒有加載驅動造成的。如果一直無法連接成功,客戶可以根據查詢的返回值判斷原因,還可以增加硬件復位和重新上電等操作來保證模塊的正常工作。


          pppconnt_stop()函數,這個函數會關閉撥號管理線程,以及已經建立好的連接。在客戶需要關閉撥號連接或是對模塊進行復位等操作時,建議先調用pppconnt_stop()函數釋放相關資源。


          客戶在主板上電后,需要先加載4G模塊對應的驅動,因為需要驅動加載成功后,才能通過虛擬串口使用程序與模塊之間進行交互,加載驅動可以放在程序或者腳本中進行,驅動加載的方法可以參考文章:《英創Linux主板基于3G和4G的無線通訊方案》中的說明。驅動加載成功后,系統會生成對應的虛擬串口,這時就可以調用撥號管理庫中提供的pppconnt_start()函數進行撥號連接了。根據上面的介紹和對API函數的描述,我們使用以下代碼進行簡單的測試:


         int   i1;
         
               //先調用一次pppconnt_stop,關閉連接
               pppconnt_stop();
         
               //通過代碼加載驅動,測試使用華為ME909s,VID=0x12d1,PID=15c1
               system("insmod /lib/modules/4.1.15/usbserial.ko vendor=0x12d1 product=0x15c1");
         
               //開啟撥號管理
               i1 = pppconnt_start( );
               printf("i1 = %d\n", i1);
         
               while(1)
               {
                      i1 = pppconnt_check();
                      if(!i1) {
        printf("connected!\n");
                             //main processing
                             //...
                             sleep(5);      
                      }
                      else {
                             //返回值為-,說明連接斷開
                             if(i1 == -1)
                                    printf("disconnect!\n");
                             //返回值為-2,說明檢測不到信號,可能是沒有檢測到SIM卡,這里執行退出
                             else if(i1 == -2) {
                                    printf("singal is weak, please check SIM card!\n");
                                    break;
                             }
                             //返回值為-3,說明模塊無響應,這里執行退出
                             else if(i1 == -3) {
                                    printf("there is no response, please check hardware!\n");
                                    break;
                             }
                      }
         
                      sleep(1);
               }
         
               //退出循環,調用pppconnt_stop,釋放相關資源
               pppconnt_stop();
               return 0;


          例程中對于查詢到的狀態,我們只是做了簡單的打印,方便觀看效果,在遇到沒有讀取到SIM卡和模塊無響應的情況下就退出,在實際使用中可以加入硬件復位和重新上電等操作。應用處理由sleep函數代表,可更換為其他處理代碼。例程測試效果如下:


        Linux主板4G通訊斷線重連的自動管理.png

        建立連接


          可以看到系統通過程序加載驅動后,生成了相應的虛擬串口,然后啟用了撥號管理功能,start_connect()函數讀出模塊為ME909s,根據模塊型號調用了對應的撥號腳本,連接成功后,檢測線程打印出connected,說明連接已經成功。為了測試效果我們通過終端關閉撥號連接,模擬斷線的情況,來測試是否能夠實現自動重連:


        Linux主板4G通訊斷線重連的自動管理.png

        斷開模塊


          從打印信息可以看到,在我們通過終端關閉撥號連接后,檢測程序打印的信息提示disconnect,說明此時撥號連接已經斷開。pppconnt_check()函數檢測到連接斷開但是硬件正常,于是返回-1,根據測試代碼,就會打印disconnect信息。接下來我們查看撥號管理線程是否會自動重連,打印信息如下:


        Linux主板4G通訊斷線重連的自動管理.png

        重連過程


          根據打印信息可以看出,在斷開連接以后,10s左右的時間便重新連接上了,重新連接的過程是在撥號管理線程內部進行的,當檢測程序提示了connected,就說明重連成功。


          成功連接后,會生成ppp0網口,可以使用ifconfig命令查看,如果要使用ppp0網絡,采用linux標準的網絡編程就可以了,即創建套接字綁定ppp0,然后進行需要的設置和操作,關于這部分的說明,可以參考我們提供的編程應用手冊以及例程step3_tcpserver、step4_tcpclient。


          如果客戶對撥號管理的功能感興趣,可以和英創工程師聯系,索取相關例程代碼。

        日韩欧美亚洲每日更新在线,草草线在线禁18成年在线,全黄一级A片免费看,一本大道香蕉九九99在线视频,日本亚洲AV综合网图片,亚洲老汉色Av影院在线 色天使久久,AV喷水高潮喷水在线观看,久久婷婷五月综合色d啪,欧美一级旡码高清在线↘,高清性色生活片视频在线观看,国产欧美日韩一区二区赛车 日本视频一区在线播放,天天躁夜夜躁狠狠夜夜澡,性色av,成年性午夜免费视频网站,国产人成午夜免电影费观看,思思99思思久久最新精品三级 免费国产凹凸在线视频,国产无套护士在线观看,精品国产高清自在线看,国产高清狼人香蕉在线,亚洲一级毛片无码专区,国产一级aa无码大片293 思思99在热线女精品视频,色狠狠色偷偷色噜噜色,奇米影色777四色在线,亚洲欧洲日韩淙合久久,无码高潮尖叫av,奇米影视第四色 首页 成人在线免费视频,大香线蕉伊人精品超碰,白嫩少妇喷水正在播放,免费岛国在线播放x片,在线观看91精品国产,久久婷香五月综合色啪 久久久噜噜噜久久熟女色,欧美老汉色老汉首页a亚洲,亚洲国产欧洲综合997久久,日本无码高清中文字幕视频,亚洲аv电影天堂网无码,国产在线观看香蕉视频 国产v综合v亚洲欧美大,777米奇影院狠狠色六月,亚洲国产欧美在线看片,亚欧乱色熟女一区二区三区,手机看片日本在线观看视频,中文字幕在线视频一字幕 色悠久久久久综合网国产,欧美成人午夜免费全部完,免费看黄色三级片,av老司机午夜福利片免费观看,无码中文有码中文人妻中文,欧美 亚洲 国产 日韩 综合aⅴ
        亚洲18禁速播影院,久久精品人人槡人妻人人玩,国产在线精选免费视频,免费一本色道久久一区,福利一区二区微拍视频,综合亚洲伊人午夜网 日本中文字幕有码在线视频,欧美刺激性视频黄页,2020国产在线视精品在亚洲,日韩AV在线观看A片,午夜性刺激在线看免费,久久综合久久自在自线精品自 色综合欧美五月俺也去,凹凸视频分类老司机视频分类,加勒比色老久久综合网,免费特黄一级欧美大片久久网,男女性色大片免费网站,国产思思99re99在线观看 国产亚洲欧美综合在线区yw,天天综合网视频网站,免费不卡国产福利在线观看,国产欧美亚洲精品a,久久亚洲中文字幕不卡一二区,奇米影视7777久久精品 日韩欧美亚洲每日更新在线,草草线在线禁18成年在线,全黄一级A片免费看,一本大道香蕉九九99在线视频,日本亚洲AV综合网图片,亚洲老汉色Av影院在线 成人视频手机免费播放,久久色综合在,亚洲一区二区经典在线播放,日韩中文字幕精品乱码,狠狠色噜狠狠狠狠的777米奇,日韩A片R级无码中文 亚洲国产日韩欧美综合另类bd,色天天综合色天天久久婷婷,91国产自拍视频,奇米四色狠狠中文字幕,亚洲不卡av不卡一区二区,奇米影视777狠狠色 色综合伊人色综合网站,小草在线观看免费播放,国产精品视频二区不卡,无码中文在线二区免费,777米奇色狠狠俺去啦,久久国产美女精品久久 成人在线免费视频,大香线蕉伊人精品超碰,白嫩少妇喷水正在播放,免费岛国在线播放x片,在线观看91精品国产,久久婷香五月综合色啪 欧美日韩在线亚洲综合国产人,亚洲男人AV天堂男人社区,老色鬼综合网在线观看,欧美一级日韩一级亚洲一级,高清性色生活片在线视频在线播放