• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于無線串口模塊的文件傳輸系統(tǒng)設(shè)計(jì)

      2018-09-10 01:31:20李緒凱王文娟
      關(guān)鍵詞:串口通信無線

      李緒凱 王文娟

      摘要:針對有線串口通信傳輸距離受限的問題,提出了一種基于P900無線串口通信模塊的無線文件傳輸系統(tǒng)。從系統(tǒng)的硬件連接、Visual C++2010環(huán)境下MSComm控件的應(yīng)用及通信協(xié)議的制定三方面對系統(tǒng)的設(shè)計(jì)進(jìn)行介紹,給出了具體的串口配置、發(fā)送和接收的軟件程序設(shè)計(jì)。經(jīng)試驗(yàn)表明,該系統(tǒng)穩(wěn)定可靠、方便實(shí)用且傳輸距離較遠(yuǎn),具有較好的推廣作用。

      關(guān)鍵詞:無線;串口通信;MSComm控件;文件傳輸

      中圖分類號:TP312文獻(xiàn)標(biāo)志碼:A文章編號:1008-1739(2018)07-62-3

      Design on Files Transmitting System Based on Wireless Serial Port Module

      LI Xukai1,WANG Wenjuan2

      (1.The 54th Research Institute of CETC, Shijiazhuang Hebei 050081, China; 2. Shijiazhuang Campus, Army Engineering University, Shijiazhuang Hebei 050003, China)

      0引言

      串口通信是一種較為簡單的計(jì)算機(jī)通信方式,將2臺計(jì)算機(jī)的串口進(jìn)行三線連接,僅使用接收數(shù)據(jù)引腳2(RXD)、發(fā)送數(shù)據(jù)引腳3(TXD)和信號地線引腳5(SG)就可完成硬件搭建[1-2],但是這種有線傳輸方式的傳輸距離受到串口線長度的限制。采用無線串口通信模塊作為無線數(shù)據(jù)傳輸?shù)挠布A(chǔ),從根本上克服了有線傳輸?shù)牟蛔愫蛡鬏攬龅氐南拗?,使用方便靈活[3]。

      利用可視化程序設(shè)計(jì)工具Visual C++ 2010,通過權(quán)衡3種串口通信方法的優(yōu)缺點(diǎn),最終確定以MSComm控件進(jìn)行串口通信的底層操作,在此基礎(chǔ)上進(jìn)行軟件的設(shè)計(jì)與編程實(shí)現(xiàn)。在數(shù)據(jù)收發(fā)基礎(chǔ)上,通過制定簡單的通信協(xié)議,完成了文件的無線串口傳輸。

      1基本設(shè)計(jì)

      1.1硬件連接

      硬件模塊采用成都某公司生產(chǎn)的P900無線串口通信模塊代替?zhèn)鹘y(tǒng)的RS232串口,實(shí)現(xiàn)串口數(shù)據(jù)的無線收發(fā)。該模塊工作頻率為908~928MHz,采用的跳頻技術(shù)(Frequency-Hopping Spread Spectrum,F(xiàn)HSS)可實(shí)現(xiàn)可靠的遠(yuǎn)距離無線異步數(shù)據(jù)傳輸,支持點(diǎn)對點(diǎn)、點(diǎn)對多點(diǎn)的通信模式,具有即插即用的優(yōu)點(diǎn),使用方便。

      為簡化設(shè)計(jì),應(yīng)用2組P900無線串口通信模塊與計(jì)算機(jī)連接,實(shí)現(xiàn)點(diǎn)對點(diǎn)的文件收發(fā)功能,具體硬件連接如圖1所示。發(fā)送數(shù)據(jù)時,按照一定的通信協(xié)議格式,將文件數(shù)據(jù)通過計(jì)算機(jī)的RS232串口發(fā)送到與之相連接的無線串口通信模塊的數(shù)據(jù)口,無線串口通信模塊將數(shù)據(jù)進(jìn)行校驗(yàn)后,按照自身的無線通信協(xié)議將數(shù)據(jù)進(jìn)行打包,通過天線發(fā)送出去。同時,如果無線串口通信模塊監(jiān)聽到無線數(shù)據(jù),首先判斷數(shù)據(jù)是否符合該模塊的無線通信協(xié)議,若判斷為系統(tǒng)內(nèi)數(shù)據(jù),則將數(shù)據(jù)進(jìn)行解碼,再通過數(shù)據(jù)口發(fā)送至計(jì)算機(jī)的RS232串口,通過計(jì)算機(jī)解析出文件。需要說明的是,通常設(shè)計(jì)該無線串口通信模塊嵌入到計(jì)算機(jī)的內(nèi)部,天線位于計(jì)算機(jī)外部。

      1.2軟件介紹

      Visual Studio 2010開發(fā)代號為“Rosario”,與Visual Studio 2008相比有了巨大的變化。帶來了增強(qiáng)的用戶界面體驗(yàn)、更有條理的應(yīng)用程序生命周期管理及更多的數(shù)據(jù)庫支持等。特別是在C++開發(fā)方面帶來了革命性的變化,這一變化也是伴隨著C++新標(biāo)準(zhǔn)的公布而產(chǎn)生的。

      在Visual C++ 2010下默認(rèn)的工具箱里沒有串口通信控件,要進(jìn)行串口收發(fā)程序的設(shè)計(jì)與開發(fā),首先要下載和注冊控件,主要有以下2種控件選擇。

      ①PComm:該軟件包是由第三方廠商MOXA公司提供的串口通信程序模塊。下載pcomm.h和pcomm.lib兩個文件,復(fù)制到項(xiàng)目目錄并引用,將pcomm.dll庫文件拷貝到Windows/System32下,即可進(jìn)行函數(shù)的調(diào)用,實(shí)現(xiàn)方便。但是要實(shí)現(xiàn)收發(fā)數(shù)據(jù)的實(shí)時監(jiān)控,需進(jìn)行多線程的程序開發(fā),編程復(fù)雜。

      ②MSComm串口通信控件[4]:如果安裝了VC6.0,就能在/Windows/System32下找到MSComm32.OCX、MSComm32.SRG和MSComm32.DEP三個文件。如果沒有安裝VC6.0,可以去CSDN網(wǎng)站下載,并按照說明完成控件的安裝和注冊。在VS2010環(huán)境下創(chuàng)建基于對話框的MFC應(yīng)用程序后,需要在工具箱選項(xiàng)中的COM組件屬性頁下勾選Microsoft Communications Control項(xiàng),工具箱中出現(xiàn)黃色電話圖標(biāo),表明控件添加成功。MSComm串口收到數(shù)據(jù)后觸發(fā)事件,有利于串口數(shù)據(jù)的實(shí)時接收,且編程較簡單。

      除下載控件外,實(shí)現(xiàn)串口數(shù)據(jù)傳輸?shù)牧硗庖环N方法是調(diào)用API函數(shù),但是這種方法需要聲明和調(diào)用多個函數(shù),編程繁瑣且收發(fā)數(shù)據(jù)功能較弱。對比以上幾種方法,本設(shè)計(jì)采用MSComm串口通信控件。

      1.3通信協(xié)議

      為了驗(yàn)證硬件系統(tǒng)與軟件設(shè)計(jì)的可靠性,只制定了涉及串口數(shù)據(jù)的發(fā)送格式,一般格式及舉例如表1所示。

      在發(fā)送文件時,需要發(fā)送文件名,以便接收端可以得到默認(rèn)的文件名。開始標(biāo)志1表示文件名的起始,結(jié)束標(biāo)志1表示其結(jié)束;開始標(biāo)志2表示文件中數(shù)據(jù)的起始,結(jié)束標(biāo)志2表示其結(jié)束,為了保證遠(yuǎn)距離傳輸時的數(shù)據(jù)可靠性,還應(yīng)對數(shù)據(jù)進(jìn)行編碼,得到校驗(yàn)位。例如發(fā)送的文本文件名為“實(shí)驗(yàn).txt”,文本內(nèi)容為“hello”,則無校驗(yàn)時的串口發(fā)送數(shù)據(jù)將為“sname實(shí)驗(yàn).txtenamesfile hello efile”。接收端收到數(shù)據(jù)后根據(jù)上述格式將文件名與數(shù)據(jù)進(jìn)行恢復(fù)。

      2程序設(shè)計(jì)及實(shí)現(xiàn)

      軟件設(shè)計(jì)主要包括串口配置、發(fā)送文件和接收文件。

      2.1串口配置

      MSComm串口通信控件封裝了串口屬性及基本數(shù)據(jù)傳送的方法。串口配置主要是對串口進(jìn)行初始化,包括設(shè)置串口的工作狀態(tài)、數(shù)據(jù)格式、串口參數(shù)(波特率、有無奇偶校驗(yàn)、停止和數(shù)據(jù)位)及緩沖區(qū)大小等。主要的串口配置程序如下:

      nSel = m_comNum.GetCurSel();//獲取組合框控件的列表框中選中項(xiàng)的索引

      m_ctrlComm.put_CommPort(nSel+1);//選擇串口號(列表框的索引號是從0開始,則(nSel+1)對應(yīng)的才是實(shí)際串口號)

      m_ctrlComm.put_PortOpen(TRUE);//打開串口

      m_ctrlComm.put_RThreshold(2);//收到2個字節(jié)引發(fā)OnComm事件

      m_ctrlComm.put_InputMode(1);//輸入模式選為二進(jìn)制

      m_ctrlComm.put_Settings(_T("115200,n,8,1"));//設(shè)置串口參數(shù)

      m_ctrlComm.put_RThreshold(1);//參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于1個字符時將引發(fā)OnComm事件

      m_ctrlComm.put_InputLen(1024);//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0

      m_ctrlComm.get_Input();//先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)

      2.2發(fā)送過程

      發(fā)送過程包括選擇文件和發(fā)送數(shù)據(jù)2個程序。點(diǎn)擊打開文件按鈕,選擇需要發(fā)送的文件,對應(yīng)的消息響應(yīng)函數(shù)為:

      CFileDialog fileDlg(true);//創(chuàng)建CFileDialog類的對象,設(shè)置為創(chuàng)建打開文件對話框

      fileDlg.m_ofn.lpstrFilter=LPCTSTR(_T("TextFiles(*.txt)\0*.txt\0All File(*.*)\0*.*\0\0"));//設(shè)置過濾器

      fileDlg.m_ofn.lpstrTitle=LPCTSTR(_T("打開文件"));//定義對話框的標(biāo)題

      if(fileDlg.DoModal()==IDOK)//若點(diǎn)擊對話框的確認(rèn)按鈕

      {

      m_sendfilePath=fileDlg.GetPathName();//保存所選文件的路徑

      }

      點(diǎn)擊發(fā)送文件按鈕,在串口打開的情況下,按照只讀方式打開文件后,從文件中讀取數(shù)據(jù)。將文件名及所讀取的數(shù)據(jù)按照通信協(xié)議的格式進(jìn)行打包,通過串口發(fā)送出去。在發(fā)送過程中,設(shè)置進(jìn)度條用以顯示發(fā)送進(jìn)度。應(yīng)用的主要函數(shù)如下:

      CFile file;//建立文件類對象file

      file.Open(m_sendfilePath,CFile::modeRead);//以只讀方式打開文件

      file.Read(pBuf,fileLen);按照文件內(nèi)容大小fileLen將數(shù)據(jù)讀取到緩沖區(qū)pBuf中

      2.3接收過程

      進(jìn)行串口配置時,規(guī)定當(dāng)串口接收緩沖區(qū)中有多于或等于1個字符時將引發(fā)OnComm事件,對應(yīng)的接收程序流程如圖2所示。

      正確讀取文件名及文件內(nèi)容后,按照所選路徑創(chuàng)建新的文件,默認(rèn)文件名為收到的文件名,也可修改。將文件內(nèi)容寫入文件,完成文件保存。在接收過程中,設(shè)置進(jìn)度條用以顯示接收進(jìn)度。應(yīng)用的主要函數(shù)如下:

      CFilesavefile(m_savefilePath,CFile::modeCreate|CFile:: modeWrite); //在所選路徑下調(diào)用構(gòu)造函數(shù)創(chuàng)建一個新文件,打開文件并寫入數(shù)據(jù)

      savefile.Write(result,strlen(result));//將恢復(fù)出的文件內(nèi)容寫入文件,strlen()表示計(jì)算內(nèi)容大小

      savefile.Close();//關(guān)閉文件

      2.4文件夾和文件顯示

      若接收文件的文件名不為空,則表示已經(jīng)收到文件。點(diǎn)擊“打開所在文件”按鈕,顯示保存接收文件所在的文件夾。點(diǎn)擊“打開文件”按鈕,顯示接收文件。應(yīng)用的主要函數(shù)如下:

      ShellExecute(NULL,"open",m_revfolderPath, NULL,NULL, SW_SHOWNORMAL);//打開文件夾,m_revfolderPath表示接收文件所在文件夾路徑

      ShellExecute (NULL,"open",m_savefilePath, NULL, NULL, SW_SHOWNORMAL);//打開文件,m_savefilePath表示文件路徑

      2.5界面設(shè)計(jì)與操作流程

      2.5.1界面設(shè)計(jì)

      程序界面包括串口設(shè)置、發(fā)送文件和接收文件,如圖3所示。在進(jìn)行初始化時,向串口號下拉框中添加數(shù)據(jù)COM1~COM9,波特率下拉框中添加數(shù)據(jù)9 600~115 200;發(fā)送文件部分用只讀編輯框顯示發(fā)送文件路徑,進(jìn)度條顯示發(fā)送進(jìn)度;接收文件部分用只讀編輯框顯示接收文件路徑,進(jìn)度條顯示接收進(jìn)度。

      2.5.2操作流程

      ①通信雙方在通信前應(yīng)設(shè)置相同的串口波特率,P900無線串口通信模塊的空中信息傳輸速率為115 200 bps,因此設(shè)置串口波特率都為此值,串口號依據(jù)各自通信模塊占用的端口號為準(zhǔn),該號可在設(shè)備管理器的端口選項(xiàng)中進(jìn)行查詢。點(diǎn)擊“打開串口”按鈕,串口被打開,串口號和波特率2個組合框變?yōu)橹蛔x,按鈕上的文本顯示為“關(guān)閉串口”,若再點(diǎn)擊該按鈕,則串口關(guān)閉,串口號和波特率2個組合框變?yōu)榭删庉嫞粹o上的文本顯示為“打開串口”。

      ②點(diǎn)擊“打開文件”按鈕,選擇要發(fā)送的文件,彈出發(fā)送文件對話框,點(diǎn)擊確定,則打開文件,文件名顯示框中顯示將要發(fā)送文件的路徑。點(diǎn)擊“發(fā)送文件”按鈕,若串口處于關(guān)閉狀態(tài),則彈出警告窗口,若串口處于打開狀態(tài),則發(fā)送該文件,進(jìn)度條顯示發(fā)送進(jìn)度,當(dāng)發(fā)送完成時,彈出發(fā)送完成提示。

      ③接收端接收到文件后,彈出是否接收的提示窗口,若取消,則不接收;若同意,則表示接收文件,彈出保存文件對話框,點(diǎn)擊保存,則保存該文件。進(jìn)度條顯示接收進(jìn)度,接收完成后,彈出文件已保存提示。

      ④點(diǎn)擊“打開所在文件夾”按鈕,彈出文件所在文件夾;點(diǎn)擊“打開文件”按鈕,顯示文件。

      3結(jié)束語

      利用配置P900無線串口通信模塊的計(jì)算機(jī)作為無線串口數(shù)據(jù)收發(fā)終端,避免了有線連接的局限性。在Visual C++2010環(huán)境下,進(jìn)行軟件設(shè)計(jì)與編程,用MSComm串口通信控件解決該版本難以直接進(jìn)行串口通信的問題。通信協(xié)議靈活且簡單易懂。試驗(yàn)結(jié)果表明,該設(shè)計(jì)采用可實(shí)現(xiàn)穩(wěn)定可靠的遠(yuǎn)距離文件傳輸,取得了良好的應(yīng)用效果。

      參考文獻(xiàn)

      [1]王保印,康健,姜傳國.用VC++6.0中MSComm控件實(shí)現(xiàn)多類型文件傳送[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2004(2): 164-168.

      [2]鄔金松,李廣彪.PC機(jī)和單片機(jī)之間文件傳輸[J].艦船電子工程,2005(4):83-85.

      [3]戴楠,孫長國,劉志宏.基于CC1110的無線串口通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與網(wǎng)絡(luò),2010,36(21):68-70.

      [4]王正強(qiáng).VC中應(yīng)用MSComm控件實(shí)現(xiàn)串口通信[J].電子測試,2010(5):73-76.

      [5]趙邦信.利用通信控件進(jìn)行串口文件傳送時的可視化程序設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2001(7) :18-21.

      [6]王春媚.多串口并行通信數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2017(4) :86-90.

      猜你喜歡
      串口通信無線
      《無線互聯(lián)科技》征稿詞(2021)
      無線追蹤3
      一種PP型無線供電系統(tǒng)的分析
      電子制作(2018年19期)2018-11-14 02:36:42
      發(fā)光無線三角警示牌
      電子制作(2018年11期)2018-08-04 03:26:00
      基于Qt和Flash的嵌入式Linux軟件架構(gòu)設(shè)計(jì)
      ADF7021-N在無線尋呼發(fā)射系統(tǒng)中的應(yīng)用
      電子制作(2016年15期)2017-01-15 13:39:03
      串口通信在智能家居監(jiān)控系統(tǒng)中的應(yīng)用
      基于OpenCV的室內(nèi)照明智能控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
      科技視界(2016年13期)2016-06-13 22:01:19
      無線輸電技術(shù)的應(yīng)用與展望
      中國市場(2016年45期)2016-05-17 05:15:26
      基于MSP430單片機(jī)的窄帶無線數(shù)據(jù)傳輸模塊的設(shè)計(jì)
      临夏市| 青龙| 胶州市| 大城县| 中牟县| 睢宁县| 潮安县| 温宿县| 蓝山县| 遵化市| 库伦旗| 福泉市| 乐山市| 三江| 柯坪县| 太白县| 桑植县| 大关县| 确山县| 栖霞市| 伊宁县| 青川县| 龙南县| 东方市| 长子县| 冷水江市| 韶山市| 富阳市| 麻栗坡县| 汾西县| 广宗县| 达拉特旗| 霍邱县| 集安市| 任丘市| 儋州市| 咸阳市| 锡林浩特市| 湾仔区| 乌什县| 福贡县|