C 中串列埠通訊程式設計

2021-05-22 10:54:25 字數 4304 閱讀 2466

visual studio 6.0

中編寫串列埠通訊程式,一般都使用

microsoft communication control

(簡稱mscomm

)的通訊控制項,只要通

過對此控制項的屬性和事件進行相應程式設計操作,就可以輕鬆地實現串列埠通訊。但在

microsoft.net

技術廣泛應用的今天,

visual studio.net

沒有將此控制項加入控制項庫,所以人們採用了許多方法在

visual studio.net

來編寫串列埠通訊程式:

第一種方法是通過採用

visual studio 6.0

中原來的

mscomm

控制項這是最簡單的,最方便的方法,但需要註冊;第二種方法是採用微軟在

.net

推出了乙個串列埠控制項,基於

.net

的p/invoke

呼叫方法實現;第三種方法是自己用

api寫串列埠通訊,雖然難度高,但可以方便實現自己想要的各種功能。

現在微軟推出了最新版本的

visual studio 2005

開發工具,可以不再採用第三方控制項的方法來設計串列埠通訊程式。

net framework 2.0

類庫包含了

serialport 類,

方便地實現了所需要串列埠通訊的多種功能,為了使

mscomm

程式設計方法快速轉換到以

serialport

類為核心的串列埠通訊的設計方法,本文著重討論了

visual studio 6.0

的mscomm

控制項和serialport

類設計方法的異同點。

二.serialport常用屬性、方法和事件

1.命名空間

system.io.ports

命名空間包含了控制串列埠重要的

serialport

類,該類提供了

同步i/o

和事件驅動的

i/o、對管腳和中斷狀態的訪問以及對序列驅動程式屬性的訪問,所以在程式**起始位置需加入

using system.io.ports。

2.串列埠的通訊引數

串列埠通訊最常用的引數就是

通訊埠號及通訊格式

(波特率、資料位、停止位和校驗位),在

mscomm

中相關的屬性是

commport

和settings

。serialport

類與mscomm

有一些區別:

a.通訊埠號

[portname]

屬性獲取或設定通訊埠,包括但不限於所有可用的

com

埠,請注意該屬性返回型別為

string

,不是mscomm.commport

的short

型別。通常情況下,

portname

正常返回的值為

com1

、com2

……,serialport

類最大支援的埠數突破了

commport

控制項中commport

屬性不能超過

16的限止,大大方便了使用者串列埠裝置的配置。

b. 通訊格式

serialport

類對分別用

[baudrate]

、[parity]

、[databits]

、[stopbits]

屬性設定通訊格式中的波特率、資料位、停止位和校驗位,其中

[parity]

和[stopbits]

分別是列舉型別

parity

、stopbits

,parity

型別中列舉了

odd(奇)

、even(偶)

、mark

、none

、space

,parity

列舉了none

、one

、onepointfive

、two。

serialport

類提供了七個過載的建構函式,既

可以對已經例項化的

serialport

物件設定上述相關

屬性的值,也可以

使用指定的埠名稱、波特率和奇偶校驗位資料位和停止位直接初始化

serialport

類的新例項。

3.串列埠的開啟和關閉

serialport

類沒有採用

mscomm.portopen=true/false

設定屬性值開啟關閉串列埠,相應的是呼叫類的

open()

和close()

方法。

4. 資料的傳送和讀取

serial

類呼叫過載的

write

和writeline

方法傳送資料,其中

writeline

可傳送字串並在字串末尾加入換行符,讀取串列埠緩衝區的方法有許多,其中除了

readexisting

和readto,其餘的方法都是同步呼叫,執行緒被阻塞直到緩衝區有相應的資料或大於readtimeout屬性設定的時間值後,引發readexisting異常。

5.datareceived事件

該事件類似於

mscomm

控制項中的

oncomm

事件,datareceived

事件在接收到了

[receivedbytesthreshold]

設定的字元個數或接收到了檔案結束字元並將其放入了輸入緩衝區時被觸發。其中

[receivedbytesthreshold]

相當於mscomm

控制項的[rthreshold]

屬性,該事件的用法與

mscomm

控制項的oncomm

事件在commevent

comevsendcomeveof時是一致的。  

三.serialport的使用

對於熟悉

mscomm

控制項的程式設計者,

serialport

類是相當容易上手的。在進行串列埠通訊時,一般的流程是設定

通訊埠號及波特率、資料位、停止位和校驗位,再開啟埠連線,傳送資料,接收資料,最後關閉埠連線這樣幾個步驟。

資料接收的設計方法在這裡比較重要,採用輪詢的方法比較浪費時間,在

visual basic

中的延時方法中一般會呼叫

api並用

doevents

方法來處理,但程式不易控制,建議採用

datareceived

事件觸發的方法,合理的設定

receivedbytesthreshold

的值,若接收的是定長的資料,則將

receivedbytesthreshold

設為接收資料的長度,若接收資料的結尾是固定的字元或字串則可採用

readto

的方法或在

datareceived

事件中判斷接收的字元是否滿足條件。

serialport

類讀取資料的許多方法是同步阻塞呼叫,盡量避免在主線程中呼叫,可以使用非同步處理或執行緒間處理呼叫這些讀取資料的方法。

由於datareceived

事件在輔線程被引發,當收到完整的一條資料,返回主線程處理或在窗體上顯示時,請注意跨執行緒的處理,

c#可採用控制項非同步委託的方法

control.begininvoke

及同步委託的方法

invoke。

四.結束語

.net

平台下熟練使用

serialport

類,可以很好地開發出串列埠通訊類程式,對於過去使用

mscomm

控制項設計了一些通訊程式,也可以將

mscomm

控制項替換為

serialport

類,當然為了避免對以前的專案做大的改動,可以使用

serialport

類設計一些與

mscomm

控制項具有相同介面的類,在今後工業控制中,

serialport

類將廣泛地應用於串列埠通訊程式的設計中,發揮著與

mscomm

控制項一樣的作用。

c wifi串列埠通訊 C 中的串列埠通訊

序列介面 serial port 又稱 串列埠 主要用於序列式逐位資料傳輸。常見的有一般電腦應用的rs 232 使用 25 針或 9 針聯結器 和工業電腦應用的半雙工rs 485與全雙工rs 422。序列介面按電氣標準及協議來分,包括rs 232 c rs 422 rs485 usb等。rs 232...

C 串列埠程式設計 寫串列埠 同步通訊方式

char buf native string int len strlen buf byte wchar byte buf 將char轉換成byte writechar wchar,len 寫串列埠,串列埠一開啟,將串列埠一的資訊wchar寫到串列埠二中。bool writechar byte m ...

C 串列埠介紹以及簡單串列埠通訊程式設計實現

週末,沒事幹,寫個簡單的串列埠通訊工具,也算是本週末曾來過,廢話不多,直接到主題 工業領域使用較多,比如 資料採集,裝置控制等等,好多都是用串列埠通訊來實現!你要是細心的話,你會發現,目前家用國網智慧型電能表就具備rs485通訊匯流排 序列匯流排的一種 與rs232可以相互轉化 當然一般,非專業的誰...