.NET Compact Framework下的串列埠通訊
在Wince和Windows Mobile下,很多裝置以串列埠(Serial Port/Com Port)的方式提供訪問介面,例如可以通過串列埠訪問GPS的receiver,從而接收NMEA Data。
在CF.NET2.0開始,MS把串列埠操作封裝了到System.IO.Ports.SerialPort裡面,大大簡便了對串列埠的操作,不再需要P/Invoke就可以直接操作串列埠。
下面展現兩個串列埠通訊類,一個負責發生,一個負責接收,兩個類分別在不要的裝置上執行。
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 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.SerialDataReceivedEventHandler(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_DataReceived(object sender,
System.IO.Ports.SerialDataReceivedEventArgs 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;
}
}
}
進行串列埠通訊,需要通訊雙方執行共同的協議,所謂共同的協議就是通訊的引數相同,通訊引數包括BaudRate,Parity,DataBits,StopBits和Handshake。比較關鍵的是波特率(BaudRate),通訊想法BaudRate應該一樣。
SerialPort的建構函式第一個引數是埠號,埠號一般由'COM'加上數字組成,例如例子上的COM1。
所有的串列埠操作都是基於logic serial port(邏輯串列埠),並不是physical serial port(物理串列埠),邏輯串列埠到物理串列埠是有驅動程式進行對映到,也就是在使用的裝置上安裝相應的驅動程式,這個邏輯串列埠就存在,對這個邏輯串列埠操作並不是說可以正常通訊,還需要檢查硬體連線。對邏輯串列埠操作有一個好處是同樣的程式可以對物理的串列埠或者虛擬的串列埠進行操作。
在ReceiverPort需要註冊一個接收函式serialPort_DataReceived到delegate,這樣當接收到資料時就回撥這個處理函式。
由於串列埠操作是唯一,排他和獨佔的操作,因此使用後最好Dispose。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-586869/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 串列埠通訊串列埠
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- ROS環境下串列埠通訊ROS串列埠
- .Net Micro Framework研究—串列埠操作Framework串列埠
- 串列埠通訊 (轉)串列埠
- Arduino下的STM32的串列埠通訊UI串列埠
- linux 串列埠通訊Linux串列埠
- 串列埠通訊協議串列埠協議
- Android 串列埠通訊Android串列埠
- C# 串列埠通訊C#串列埠
- 11. 串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- 詳解linux下的串列埠通訊開發Linux串列埠
- 通過串列埠進行通訊 :串列埠
- VC++ 的串列埠通訊 (轉)C++串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- .NET Compact Framework 中的點對點訊息佇列Framework佇列
- 安卓串列埠通訊疑問安卓串列埠
- java串列埠通訊例項 -Java串列埠
- VC++ 串列埠通訊(轉)C++串列埠
- 串列埠無法正常通訊串列埠
- C#串列埠通訊遇到的坑C#串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- Android藍芽串列埠通訊Android藍芽串列埠
- STM32串列埠通訊串列埠
- android ndk 虛擬串列埠通訊Android串列埠
- C#串列埠通訊程式SerialPort類C#串列埠
- 用VB除錯串列埠通訊 (轉)除錯串列埠
- 串列埠通訊與其他通訊方式相比有什麼優勢?串列埠
- 在 .NET Compact Framework 2.0 中使用 COM InteropFramework
- .net和java串列埠通訊壓力測試對比, java完勝Java串列埠
- 串列埠通訊應用程式的解決方案 (轉)串列埠
- ros中使用serial包實現串列埠通訊ROS串列埠
- VC++串列埠通訊程式設計詳解C++串列埠程式設計
- 在VB中利用API進行串列埠通訊API串列埠
- 串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發串列埠C#
- AVR 微控制器串列埠和網口的通訊VR串列埠