【文章內(nèi)容簡介】
刪除:如上所述,SDLC/HDLC協(xié)議規(guī)定以01111110為標(biāo)志字節(jié),但在信息場中也完全有可能有同一種模式的字符,為了把它與標(biāo)志區(qū)分開來,所以采取了“0”位插入和刪除技術(shù)。具體作法是發(fā)送端在發(fā)送所有信息(除標(biāo)志字節(jié)外)時,只要遇到連續(xù)5個“1”,就自動插入一個“0”,當(dāng)接收端在接收數(shù)據(jù)時(除標(biāo)志字節(jié))如果連續(xù)收到5個“1”,就自動將其后的一個“0”刪除是,以恢復(fù)信息的原有形式。這種“0”位的插入和刪除過程是由硬件自動完成的。(2)SDLC/HDLC異常結(jié)束:若在發(fā)送過程中出現(xiàn)錯誤,則SDLC/HDLC協(xié)議常用異常結(jié)束(Abort)字符,或稱為失效序列使本幀作廢。在HDLC規(guī)程中,7個連續(xù)的“1”被作為失效字符,而在SDLC中失效字符是8個連續(xù)的“1”。當(dāng)然在試銷序列中不使用“0”位插入/刪除技術(shù)。SDLC/HDLC協(xié)議規(guī)定,在一幀之內(nèi)不允許出現(xiàn)數(shù)據(jù)間隔。在兩幀之間,發(fā)送器可以連續(xù)輸出標(biāo)志字符序列,也可以輸出連續(xù)的高電平,它被稱為空閑(Idle)信號。 SPCP協(xié)議的發(fā)送格式 01/2D1D2D3D4D5D6D7D83數(shù)據(jù)尾頭標(biāo)志數(shù)據(jù)類發(fā)送過程中的約定:當(dāng)收信方收到0時為開始發(fā)送的開始標(biāo)志,在此之后又收到1則表示是文本文件,如果收了2則表示是文件類型,當(dāng)收到3時則表示發(fā)送完畢。串口發(fā)送過來的數(shù)據(jù)作為一個數(shù)據(jù)流按SPCP協(xié)議進行處理,并加上控制字符進行發(fā)送;在接收端,根據(jù)接收到的數(shù)據(jù)進行處理,接收完成后在發(fā)送到顯示窗口。第4章 雙機互聯(lián)程序的實現(xiàn) 創(chuàng)建標(biāo)準(zhǔn)的項目文件,打開 Visual Basic,從“ 文件”菜單中選擇“新建工程”。 加入串口通信控件默認(rèn)的控件工具欄中沒有MSComm控件,因此首先要把它加入到控件工具欄中。為了在實現(xiàn)文件傳送功能時能夠方便地選擇文件路徑,還應(yīng)添加一個標(biāo)準(zhǔn)對話框,這在默認(rèn)的控件工具欄中也是沒有的。選擇“Project”菜單下的“ Components… ”選項,在彈出的對話框中選取“controls”選項卡,選中“ Microsoft Comm Control ”和“ Microsoft Common Dialog Control ”,單擊“確定”按鈕將它們加入到控件工具欄中來,這時就可以看到控件工具欄出現(xiàn) MSComm控件圖標(biāo)(形狀與電話相似)和標(biāo)準(zhǔn)對話框控件圖標(biāo)。 外接程序管理器 設(shè)計程序主窗體 主窗體的功能分析本文的程序僅包含兩個窗體,即主窗體和參數(shù)設(shè)置窗體。參數(shù)設(shè)置僅完成對MSComm進行參數(shù)設(shè)置,其他功能幾乎均從主窗體中進行響應(yīng)。本文將完成以下功能:整個程序的初始化。對各標(biāo)志變量的設(shè)置與響應(yīng)。對各個按鈕的響應(yīng)。短語的輸入功能。程序的主界面應(yīng)當(dāng)能夠響應(yīng)各種操作,并調(diào)用程序的各個模塊和功能,因此,主界面主要實現(xiàn)的功能就是調(diào)用本系統(tǒng)的所有其他功能,包括打開串行口、關(guān)閉串行口、啟動參數(shù)設(shè)置、發(fā)送消息、或顯示文件傳送界面等功能?!”境绦虻幕竟δ苁且揽縈SComm控件實現(xiàn)的,首先要將其添加到窗體中,由于該控件在程序運行時是不可見的,我把它們放在窗體的底部即可。同樣,標(biāo)準(zhǔn)對話框控件也只需放在窗體底部即可。為了實現(xiàn)對串行口的操作,我利用組合框定制了一個簡單的選擇框,和兩個按鈕來實現(xiàn)對串口設(shè)置能改變到程序中和能將收到的信息清空以保證能把接下來收到的信息顯示在窗口上,當(dāng)在發(fā)送文件時會顯示發(fā)送信息內(nèi)容及文件路徑。 主窗體的界面設(shè)計窗體及其控件的主要屬性和作用如表所示: frmMain 窗體及其控件的主要屬性和作用名稱控件類型主要屬性主要屬性frmMainFormCaption=雙機互聯(lián)標(biāo)題欄顯示程序CtrMSCommMSCommSettings和CommPort兩屬性運行時設(shè)置用于操作串行口的控序控制啟用和關(guān)閉SendDataCommandButtonCaption=發(fā)送控制發(fā)送一條消息rtfReceiveRichTextBox顯示信息記錄CmdSendTextCommandButtonCaption=發(fā)送文件選擇發(fā)送文件SendFileDialOle調(diào)用發(fā)送對話框cboBaudComboBoxList=9600,24001200設(shè)置波特率cboDataComboBoxList=6設(shè)置數(shù)據(jù)位cboStopComboBoxList=1設(shè)置停止位cboOutBufferSizeComboBoxList=25511022046設(shè)置緩沖區(qū)cboComPortComboBoxList=1,2,3,4設(shè)置串口號SettingOkCommandButtonCaption=打開串口設(shè)置打開串口CommPortCloseCommandButtonCaption=關(guān)閉串口設(shè)置關(guān)閉串口SaveFileDialOle調(diào)用保存對話框frmMain 窗體的設(shè)計界面如圖所示: 整體控件圖 主窗體左上部分負(fù)責(zé)聊天功能(收短信息),右下部分負(fù)責(zé)信息的發(fā)送,“發(fā)送“按鈕實現(xiàn)文本的發(fā)送,“發(fā)送文件“按鈕,實現(xiàn)文件傳輸功能。右上方的幾個選擇框可以實現(xiàn)配置串口參數(shù)功能,按鈕分別完成打開串口、關(guān)閉串口。如果需要發(fā)送文件,點擊“發(fā)送文件”按鈕,將自動彈出文件對話框,從中選擇待發(fā)送文件,則程序在互聯(lián)的另一方發(fā)送文件請求接收時自動打開文件對話框,要求用戶選擇文件保存路徑和名稱,然后將文件保存。系統(tǒng)的加構(gòu)方式所示?!〕绦蜷g交換數(shù)據(jù)發(fā)送端應(yīng)用程接收端應(yīng)用 文件傳輸短信息其它其它短信息文件傳輸 緩沖區(qū)spcp串口通信協(xié)議 SPCP串行通訊協(xié)議 緩沖區(qū)spcp串口通信協(xié)議 SPCP串行通訊協(xié)議 ?。停樱胦mm控件Windows APIWindows APIMSComm控件Windows APIWindows API 串行口串行口 串口線本系統(tǒng)中關(guān)注的重點是SPCP協(xié)議的設(shè)計和實現(xiàn),而建立在SPCP協(xié)議上的兩種上層應(yīng)用,文件傳輸和短信息傳輸則是程序的主要目標(biāo)。第5章 程序的測試與運行 軟件及硬件測試本程序的測試運行需要把兩臺計算機用串口線連接起來進行,或者在把一臺機器上的兩個串行口連接起來,本論文采用的是前一種方式。 發(fā)送消息時發(fā)送方和收信方見下圖。 發(fā)送方窗口輸入中文“04級通信工程畢業(yè)設(shè)計”點“發(fā)送”: 收信方窗口同時發(fā)送方也可以作為接受方,例如輸入中文“于向陽”點“發(fā)送”。 發(fā)送文件時當(dāng)發(fā)送方選定文件路徑即文件名后,接收端將彈出一個標(biāo)準(zhǔn)的“另存為”對話框由接收方選擇存盤路徑,如果所選擇的路徑指向的文件已存在,則程序會詢問是否覆蓋原有的文件,確定后即可開始接收。 選擇要發(fā)送的文件 發(fā)送方窗口 保存收到的文件 收信方窗口至此,完成了雙機通信程序的發(fā)送消息和發(fā)送文件兩個功能,達(dá)到了預(yù)期的效果。 總結(jié)隨著計算機應(yīng)用領(lǐng)域的不斷擴展,計算機之間的遠(yuǎn)程通信用得也越來越廣泛。作為RAD開發(fā)工具代表的VisualBasic同樣提供了一系列標(biāo)準(zhǔn)通信命令的接口,它允許建立串口連接,可以連接到其他通信設(shè)備(如Modem)、還可以發(fā)送命令、進行數(shù)據(jù)交換以及監(jiān)視和響應(yīng)在通信過程中可能發(fā)生的各種錯誤和事件等,可以滿足通常情況下的串口通信需求。如果在實際應(yīng)用過程中,能夠很好的掌握MSComm控件的特性,靈活變通,就可以達(dá)到安全、穩(wěn)定、高效通信的目的。在本文中,以控件作為底層接口,在此基礎(chǔ)上建立了一個簡單的串行通信協(xié)議SPCP,并由此實現(xiàn)了實時通信和文件傳輸功能。當(dāng)然還有一些缺點,比如文件傳輸效率較低,安全性也較差,由于是做聊天和數(shù)據(jù)的傳輸,為了減少傳輸?shù)呢?fù)擔(dān),就沒有設(shè)置校驗位,還有待于進一步的完善和優(yōu)化。附錄(1)相關(guān)代碼Dim RHead, RType, One, IsStr As BooleanDim RStr, Sendstr As StringDim b(0 To 1) As ByteDim strSet As String Dim intPort As Long Dim intOutBuffer As Long Private Sub OpenPort_Click() If = False Then Call CommPortOpen Sendstr = 設(shè)置:打開串行口! Else Sendstr = 設(shè)置:串行口已經(jīng)打開! End IfEnd SubPrivate Sub ClearRecV_Click() = End SubPrivate Sub CommPortClose_Click() If = True Then = False Sendstr = MsgBox(串行口已關(guān)閉!, 0 + vbExclamation) Else Sendstr = MsgBox(串行口已關(guān)閉!, 0 + vbExclamation) End IfEnd SubPrivate Sub Form_Load()If = True Then = FalseEnd If = True RecvHead = False RecvType = FalseOne = FalseIsStr = FalseRS