開發通訊軟體的技術與技巧

2022-03-30 03:43:16 字數 3944 閱讀 7571

【提要】隨著計算機應用領域的不斷擴充套件,計算機之間的遠端通訊用得也越來越廣泛,計算機間的遠端通訊所使用的通訊軟體,在市面上可以買到,但是通用的通訊軟體雖然能傳送和接收檔案,在許方情況下這些通訊軟體並不能滿足實際工作的需要。本文就這一技術進行了**,介紹了有關的知識和技術,並由例項分步驟說明如何進行通訊軟體的開發。 

一、前言 

本文將以vb5.0所帶的通訊控制項mscomm進行通訊軟體的開發,它有約30個屬性和事件(可以從聯機幫助中找到其使用資料)。本文簡述它的主要屬性及事件,並歸類整理。 

利用串列埠與數據機進行連線時,對於用mscomm控制項編制通訊軟體來說,只需了解以下五根線的代號及作用。以下五根線的高電平/低電平狀態分別對應mscomm控制項的相應屬性的true/false值。 

(1)dtr線:pc發往modem,表示pc機是否已準備好。 

(2)rts線:pc發往modem,表示pc機是否允許modem發回資料. 

(3)dsr線:modem發往pc,表示modem是否已做好操作準備 

(4)cts線:modem發往pc,表示modem是否允許傳送資料 

(5)cd線:modem發往pc,表示moedm已經與呼叫的遠方modem處於鏈結狀態 

二、mscomm控制項的屬性 

用1,2,...表示串列埠com1,com2.... 

設定或返回聯接modem的串列埠的編號 

settings 

例用"19200,n,8,1"表示傳輸速率為19200bps,沒有奇偶校驗位,8位資料位,1位停止位。 

設定或返回通訊引數。 

handshaking 

0沒有握手協議,不考慮流量控制。 

1xon/xoff,即在資料流中嵌入控制苻來進行流控。 

2rts/cts,既由訊號線rts/cts自動進行流量控制(常用)。 

3兩者皆可。 

設定或返回硬體握手協議,指的是pc機modem之間為了控制流速而約定的內部協議。 

portopen 

true/false可以開啟/關閉埠。 

開啟或關閉埠。 

outbuffersize 

傳輸緩衝區的位元組數,如選1024。 

設定或返回傳輸緩衝區大小。 

output 

variant型變數。 

向傳輸緩衝區寫資料流。 

傳輸文字資料時,應將string型資料放入variant變數,傳輸二進位制資料(即按位元組)時,應將byte型陣列資料放入variant變數 

inbuffersize 

接收緩衝區的位元組數,如選1024。 

設定或返回接收緩衝區大小。 

inputmode 

0用input屬性接收文字型資料。 

1用input屬性接收二進位制資料。 

設定或返回接收資料的資料型別。 

inbuffercount 

integer型 

返回接收緩衝區中已傳到但還未取走的字元個數。 

input 

當inputmode屬性值為0(文字模式)時,變數中含string型資料。 

當inputmode屬性值為1(二進位制模式)時,變數中含byte型陣列資料。 

將接收緩衝區中收到的資料讀入變數。 

dtrenabled 

rtsenabled 

dsrholding 

ctsholding 

cdholding 

均取值true/false 

用於讀取或控制pc機與modem之間的互動狀態。需運用好。例如,應在讀取到dsrholding屬性值為true時再向modem發出命令。應當在載波檢測到以後(cdholding屬性為true)時再向modem傳送資料。 

三、mscomm控制項的觸發事件 

mscomm控制項只使用乙個事件oncomm,用屬性commevent的十七個值來區分不同的觸發時機。主要有以下幾個: 

(1)commevent=1時:傳輸緩衝區中的字元個數已少於sthreshold(可設定的屬性值)個。 

(2)commevent=2時:接收緩衝區中收到hreshold(可設定的屬性值)個個字元,利用此事件可編寫接收資料的過程。 

(3)commevent=3時:cts線發生變化。 

(4)commevent=4時:dsr線發生變化。 

(5)commevent=5時:cd線發生變化。 

(6)commevent=6時:檢測到振鈴訊號。 

另外十種情況是通訊錯誤時產生,即錯誤**。 

四、通訊軟體程式實現 

1、首先是通訊引數設定,主要就是可以設定埠號,波特率,資料位,停止位,奇偶校驗位及設定硬體握手協議,這些設定較為簡單。 

2、向modem發出dtr(已準備好)訊號,如下例程: 

if mscomm1.portopen then 

mscomm1.dtrenable=true 

else 

mscomm1.dtrenable=false 

endif 

3、開啟時向modem發出一些命令來設定引數,其中s0=n(n>=1)自動應答.n為響鈴次數;e0/e1關閉/開啟命令字元回應;q0/q1modem返回/不返回結果碼;m0/m1關閉/開啟modem揚聲器,例程如下: 

if mscomm1.portopen then 

do while not mscomm1.ctsholding : loop 

outstring="ats0=1e1q0m0"+chr(13) 

mscomm1.output=outstring 

end if 

4、進行撥號設計,需向modem發出atdt命令,如下語句: 

mscomm1.output="atdt"+trim(「**號碼」)+chr(13) 

5、撥號以後傳送資料檔案,程式要迴圈等待並隨時判定是否接通。如果modem向pc的回應字串中含有"connect"或cdholding屬性值變為true(檢測出載波),則表示已與遠方modem連機了,此時可以傳輸資料。 

程式設計傳送及接收程式時,需要以下定義: 

s_filename = "name" + chr(5) + chr(13) + chr(10) 

s_filelen = "lenth" + chr(5) + chr(13) + chr(10) 

s_filesend = "begin" + chr(5) + chr(13) + chr(10) 

sub openfiletosend() '開啟乙個欲傳送的檔案 

hsend = freefile 

open sendfn for binary as hsend 'sendfn中含有由使用者選定的要傳送的檔名。 

lf&=lof(hsend) '檔案長度為lf& 

'開始傳送檔名,檔案長度,檔案開始等資訊字串。 

dim data as vrait 

data = s_filename 

mscomm1.output=data '發出"filename"檔名字串的提示資訊 

data = sendfn +chr(13)+chr(10) 

mscomm1.output=data '發出檔名 

data = s_filelen 

mscomm1.output=data '發出"filelen"提示字串 

data = trim(str(lf&))+chr(13)+chr(10) 

mscomm1.output=data '發出檔案大小 

data = s_filestar 

mscomm1.output=data '發出"filestart"提示資訊,表示下面檔案開始。 

dim sendarr() as byte '定義位元組型陣列 

sum=0 '記錄累計傳送的位元組數 

bsize=mscomm1.outbuffersize '每次傳送的塊大小 

redim sendarr(1 to bsize) '重新定義讀取緩衝 

do while sum

基礎軟體開發技巧

陽曆2019年11月9日 1 svpwm是乙個非常強大的調製工具。將直流的母線電壓轉為所需要的形狀的三相電壓。2 做電子實驗和嵌入式開發,一定要擅長使用測量工具,比如示波器。很多問題只有通過示波器才能快速找到答案,而不是靠猜。3 使用晶元可以支援的dma完成非同步操作。比如,使用spi和dma配合使...

軟體開發工程方法 技術與工具

方法與技術 工具需求開發與管理 rose requisitepro,doors uml與物件導向分析設計 rose rose xde together visio ea tau 統一過程 rup 軟體測試 teamtest,pufify plus robot testmanager,xde test...

軟體開發工程方法,技術與工具

軟體開發工程方法,技術與工具 方法與技術 工具需求開發與管理 rose requisitepro,doors uml與物件導向分析設計 rose rose xde together visio ea tau 統一過程 rup 軟體測試 teamtest,pufify plus robot testm...