.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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 串列埠通訊串列埠
- ROS環境下串列埠通訊ROS串列埠
- Arduino下的STM32的串列埠通訊UI串列埠
- Android 串列埠通訊Android串列埠
- linux 串列埠通訊Linux串列埠
- 11. 串列埠通訊串列埠
- (10)uart串列埠通訊串列埠
- 串列埠通訊型別串列埠型別
- 串列埠通訊協議串列埠協議
- 通過串列埠進行通訊 :串列埠
- 串列埠資料抓取及串列埠通訊模擬串列埠
- 串列埠無法正常通訊串列埠
- C# SerialPort 串列埠通訊C#串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 安卓串列埠通訊疑問安卓串列埠
- 串列埠通訊gui介面顯示串列埠GUI
- 小型plc串列埠通訊簡介串列埠
- C# 串列埠通訊利器 SerialPortStream庫C#串列埠
- STM32串列埠通訊串列埠
- .net和java串列埠通訊壓力測試對比, java完勝Java串列埠
- STMF4串列埠通訊使用串列埠
- 基於WebSocket的modbus通訊(三)- websocket和串列埠Web串列埠
- 串列埠通訊與其他通訊方式相比有什麼優勢?串列埠
- 串列埠通訊利器:SerialPortStream庫詳解,輕鬆實現C#串列埠開發串列埠C#
- ros中使用serial包實現串列埠通訊ROS串列埠
- 打工筆記--------------------------c#實現串列埠通訊筆記C#串列埠
- C#實現掃碼槍串列埠通訊C#串列埠
- 有沒有大佬玩過串列埠通訊啊?串列埠
- 串列埠通訊常見的錯誤和故障排除方法串列埠
- 樹莓派已經通過網路連線通過串列埠通訊在串列埠除錯小助手列印與操作樹莓派串列埠除錯
- 張高興的 MicroPython 入門指南:(三)使用串列埠通訊Python串列埠
- 超級乾貨!Air780E的串列埠通訊分享AI串列埠
- 初步使用Ardunio IDE實現STM32的串列埠通訊IDE串列埠
- 串列埠通訊上位機資料傳輸協議串列埠協議
- Java實現RS485串列埠通訊Java串列埠
- .NET Framework 工具下載Framework
- 一種MODBUS RTU擴充套件串列埠通訊協議套件串列埠協議
- 定位模組LuatOS快速入門:源UART串列埠通訊串列埠
- 使用Modbus4J進行RTU模式串列埠通訊模式串列埠