資源描述:
《C#和232串口通信方法(SerialPort控件)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、本例程主要講解使用C#,實(shí)現(xiàn)與232串口通信。達(dá)到采集串口數(shù)據(jù),監(jiān)控,可視化處理等。一.概述在VisualStudio6.0中編寫串口通訊程序,一般都使用Microsoft?Communication?Control(簡(jiǎn)稱MSComm)的通訊控件,只要通?過對(duì)此控件的屬性和事件進(jìn)行相應(yīng)編程操作,就可以輕松地實(shí)現(xiàn)串口通訊。但在Microsoft.Net技術(shù)廣泛應(yīng)用的今天,VisualStudio.Net沒有將此控件加入控件庫(kù),所以人們采用了許多方法在VisualStudio.Net來編寫串口通訊程序:第一種方法是通過采用VisualStudio6.0中原來的MSCom
2、m控件這是最簡(jiǎn)單的,最方便的方法,但需要注冊(cè);第二種方法是采用微軟在.NET推出了一個(gè)串口控件,基于.NET的P/Invoke調(diào)用方法實(shí)現(xiàn);第三種方法是自己用API寫串口通信,雖然難度高,但可以方便實(shí)現(xiàn)自己想要的各種功能?,F(xiàn)在微軟推出了最新版本的VisualStudio2005開發(fā)工具,可以不再采用第三方控件的方法來設(shè)計(jì)串口通訊程序。NETFramework2.0類庫(kù)包含了SerialPort類,方便地實(shí)現(xiàn)了所需要串口通訊的多種功能,為了使MSComm編程方法快速轉(zhuǎn)換到以SerialPort類為核心的串口通訊的設(shè)計(jì)方法,本文著重討論了VisualStudio6.0的
3、MSComm控件和SerialPort類設(shè)計(jì)方法的異同點(diǎn)。?二.SerialPort常用屬性、方法和事件1.命名空間System.IO.Ports命名空間包含了控制串口重要的SerialPort類,該類提供了同步I/O和事件驅(qū)動(dòng)的I/O、對(duì)管腳和中斷狀態(tài)的訪問以及對(duì)串行驅(qū)動(dòng)程序?qū)傩缘脑L問,所以在程序代碼起始位置需加入U(xiǎn)singSystem.IO.Ports。2.串口的通訊參數(shù)串口通訊最常用的參數(shù)就是通訊端口號(hào)及通訊格式(波特率、數(shù)據(jù)位、停止位和校驗(yàn)位),在MSComm中相關(guān)的屬性是CommPort和Settings。SerialPort類與MSComm有一些區(qū)別:a
4、.通訊端口號(hào)[PortName]屬性獲取或設(shè)置通信端口,包括但不限于所有可用的COM端口,請(qǐng)注意該屬性返回類型為String,不是Mscomm.CommPort的short類型。通常情況下,PortName正常返回的值為COM1、COM2……,SerialPort類最大支持的端口數(shù)突破了CommPort控件中CommPort屬性不能超過16的限止,大大方便了用戶串口設(shè)備的配置。b.通訊格式SerialPort類對(duì)分別用[BaudRate]、[Parity]、[DataBits]、[StopBits]屬性設(shè)置通訊格式中的波特率、數(shù)據(jù)位、停止位和校驗(yàn)位,其中[Parit
5、y]和[StopBits]分別是枚舉類型Parity、StopBits,Parity類型中枚舉了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚舉了None、One、OnePointFive、Two。SerialPort類提供了七個(gè)重載的構(gòu)造函數(shù),既可以對(duì)已經(jīng)實(shí)例化的SerialPort對(duì)象設(shè)置上述相關(guān)屬性的值,也可以使用指定的端口名稱、波特率和奇偶校驗(yàn)位數(shù)據(jù)位和停止位直接初始化SerialPort類的新實(shí)例。3.串口的打開和關(guān)閉SerialPort類沒有采用MSComm.PortOpen=True/False設(shè)置屬性值打開關(guān)閉串口,相應(yīng)
6、的是調(diào)用類的Open()和Close()方法。4.數(shù)據(jù)的發(fā)送和讀取Serial類調(diào)用重載的Write和WriteLine方法發(fā)送數(shù)據(jù),其中WriteLine可發(fā)送字符串并在字符串末尾加入換行符,讀取串口緩沖區(qū)的方法有許多,其中除了ReadExisting和ReadTo,其余的方法都是同步調(diào)用,線程被阻塞直到緩沖區(qū)有相應(yīng)的數(shù)據(jù)或大于ReadTimeOut屬性設(shè)定的時(shí)間值后,引發(fā)ReadExisting異常。5.DataReceived事件該事件類似于MSComm控件中的OnComm事件,DataReceived事件在接收到了[ReceivedBytesThreshol
7、d]設(shè)置的字符個(gè)數(shù)或接收到了文件結(jié)束字符并將其放入了輸入緩沖區(qū)時(shí)被觸發(fā)。其中[ReceivedBytesThreshold]相當(dāng)于MSComm控件的[Rthreshold]屬性,該事件的用法與MsComm控件的OnComm事件在CommEvent為comEvSend和comEvEof時(shí)是一致的。???三.SerialPort的使用對(duì)于熟悉MSComm控件的程序設(shè)計(jì)者,SerialPort類是相當(dāng)容易上手的。在進(jìn)行串口通訊時(shí),一般的流程是設(shè)置通訊端口號(hào)及波特率、數(shù)據(jù)位、停止位和校驗(yàn)位,再打開端口連接,發(fā)送數(shù)據(jù),接收數(shù)據(jù),最后關(guān)閉端口連接這樣幾個(gè)步驟。數(shù)據(jù)接收的設(shè)計(jì)