C#上位機系列教程零基礎入門-串口收發(fā)
歡迎來到C#上位機教程的零基礎入門!本教程將幫助你從零開始學習C#編程,并使用C#構建上位機應用程序,本教程將以經(jīng)典的串口工具開發(fā)為Demo,講述一個項目如何去實現(xiàn),本節(jié)內容將講述串口的收發(fā)
1、首先介紹在SerialPort 類中,串口數(shù)據(jù)發(fā)送的幾個方法
public void Write(byte[] buffer,int offset,int count);
public void Write(string text);
public void Write(char[] buffer, int offset,int count);
public void WriteLine(string text);
2、串口數(shù)據(jù)的接收方法
public int Read(byte[] buffer, int offset, int count);
public int Read(char[] buffer, int offset, int count);
public int ReadByte();
public string ReadExisting();
public string ReadLine();
public string ReadTo(string value);
public event SerialDataReceivedEventHandler DataReceived;
以上方法可以在SerialPort 類中找到,并可以嘗試使用,并加強理解
3、本節(jié)主要實現(xiàn)的目標是實現(xiàn)串口工具數(shù)據(jù)的發(fā)送和接收件,具體功能下圖:
配置好虛擬串口后分別打開兩個串口工具實例,并各自打開COM2,和COM3,當在實例1的發(fā)送區(qū)中填入內容后點擊手動發(fā)送,實例2的接收區(qū)能夠接收到實例1發(fā)送的內容,當在實例2的發(fā)送區(qū)中填入內容點擊手動發(fā)送,實例1的接收區(qū)能夠接收實例2發(fā)送的內容。具體實現(xiàn)代碼如下:
當實例1發(fā)送區(qū)的"手動發(fā)送"按鈕產(chǎn)生一個"Click"事件時將調用以下代碼:
private void send_btn_Click(object sender, EventArgs e)
{
// 如果發(fā)送的數(shù)據(jù)不為空且串口已經(jīng)打開,則發(fā)送
if (this.send_rtb.Text != "" && serialPort1.IsOpen)
{
//this.recive_rtb.AppendText(this.send_rtb.Text);
serialPort1.Write(send_rtb.Text);
}
else
{
MessageBox.Show("請先輸入發(fā)送數(shù)據(jù)!");
}
}
如果發(fā)送區(qū)的內容不為空且串口已經(jīng)打開,則調用實例serialPort1的Write方法將指定的字符串寫入串行端口。
串口數(shù)據(jù)的接收我們需要先定義一個serialPort1對象的DataReceived事件
具體操作如下:
單擊seralPort1對象DataReceived事件中定serialPort1_DataReceived方法,代碼如下:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string dataRecive = serialPort1.ReadExisting();
recive_rtb.AppendText(dataRecive);
}
SerialPort.ReadExisting 方法會讀取 SerialPort 對象的流和輸入緩沖區(qū)中所有立即可用的字節(jié),并返回string類型的數(shù)據(jù)。接收區(qū)對象通過AppendText方法添加返回的String并在接收區(qū)的文本框顯示。當 SerialPort 對象表示的端口接收了數(shù)據(jù)后會觸發(fā)DataReceived事件,同時會調用serialPort1_DataReceived方法。