.NET Framework串口通信詳細內(nèi)容介紹
.NET Framework為程序員提供了一個WEB應用程序部署環(huán)境,它的推出就是為了能夠幫助程序員提供一個良好的開發(fā)環(huán)境,提高代碼編寫效率。在Wince和Windows Mobile下,很多設備以串口(Serial Port/Com Port)的方式提供訪問接口,例如可以通過串口訪問GPS的receiver,從而接收NMEA Data。#t#
在CF.NET2.0開始,MS把串口操作封裝了到System.IO.Ports.SerialPort里面,大大簡便了對串口的操作,不再需要P/Invoke就可以直接操作.NET Framework串口通信。
下面展現(xiàn)兩個.NET Framework串口通信類,一個負責發(fā)生,一個負責接收,兩個類分別在不要的設備上運行。
- public class ReceiverPort : IDisposable
- {
- private readonly System.IO.Ports.
SerialPort serialPort; - public ReceiverPort()
- {
- serialPort = new System.IO.Ports.
SerialPort("COM1", 4800, - System.IO.Ports.Parity.None, 8,
- System.IO.Ports.StopBits.One);
- serialPort.Handshake = System.IO.
Ports.Handshake.None; - try
- {
- serialPort.DataReceived += new
- System.IO.Ports.SerialDataReceived
EventHandler(this.serialPort_DataReceived); - serialPort.Open();
- if (serialPort.IsOpen)
- {
- Console.WriteLine("Open the serial
port successful"); - }
- else
- {
- Console.WriteLine("Fail to open the
serial port"); - }
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- }
- public void Dispose()
- {
- if (serialPort.IsOpen)
- {
- serialPort.Close();
- }
- serialPort.Dispose();
- }
- private void serialPort_Data
Received(object sender, - System.IO.Ports.SerialDataReceived
EventArgs e) - {
- Console.WriteLine("RECEIVED:" +
serialPort.ReadLine()); - }
- }
- public class SenderPort : IDisposable
- {
- private readonly System.IO.Ports.
SerialPort serialPort; - public SenderPort()
- {
- serialPort = new System.IO.Ports.
SerialPort("COM1", 4800, - System.IO.Ports.Parity.None, 8,
- System.IO.Ports.StopBits.One);
- serialPort.Handshake = System.IO.
Ports.Handshake.None; - try
- {
- serialPort.Open();
- if (serialPort.IsOpen)
- {
- Console.WriteLine("Open the serial
port successful"); - }
- else
- {
- Console.WriteLine("Fail to open
the serial port"); - }
- }
- catch (Exception e)
- {
- Console.WriteLine(e.Message);
- }
- }
- public void Dispose()
- {
- if (serialPort.IsOpen)
- {
- serialPort.Close();
- }
- serialPort.Dispose();
- }
- public bool Send(string str)
- {
- try
- {
- if (serialPort.IsOpen)
- {
- Console.WriteLine("SENT:" + str);
- serialPort.WriteLine(str + "\r");
- return true;
- }
- else
- {
- return false;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- return false;
- }
- }
- }
進行.NET Framework串口通信,需要通信雙方執(zhí)行共同的協(xié)議,所謂共同的協(xié)議就是通信的參數(shù)相同,通信參數(shù)包括BaudRate,Parity,DataBits,StopBits和Handshake。比較關鍵的是波特率(BaudRate),通信想法BaudRate應該一樣。
SerialPort的構造函數(shù)***個參數(shù)是端口號,端口號一般由'COM'加上數(shù)字組成,例如例子上的COM1。
所有的串口操作都是基于logic serial port(邏輯串口),并不是physical serial port(物理串口),邏輯串口到物理串口是有驅(qū)動程序進行映射到,也就是在使用的設備上安裝相應的驅(qū)動程序,這個邏輯串口就存在,對這個邏輯串口操作并不是說可以正常通信,還需要檢查硬件連接。對邏輯串口操作有一個好處是同樣的程序可以對物理的串口或者虛擬的串口進行操作。
在ReceiverPort需要注冊一個接收函數(shù)serialPort_DataReceived到delegate,這樣當接收到數(shù)據(jù)時就回調(diào)這個處理函數(shù)。
由于.NET Framework串口通信操作是唯一,排他和獨占的操作,因此使用后***Dispose。


2011-07-01 09:56:19




