由於工作需要,第一次接觸串口編程.所以不得不在網上查閱各種編程執行個體.最後結合自己的理解與實踐,最終有了如下代碼.
本代碼只經過了簡單的軟體測試,與簡單的硬體測試.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;using System.Threading;using System.IO.Ports;namespace PacketsTest{ class ComSR { private SerialPort serialPort; private bool status = false;//接受結束狀態,true為成功接收到資料. private byte[] reciveData = null;//接受到的資料存放區到這裡. public bool Status { set { status = value; } get { return status; } } public byte[] RecivedData { get { return reciveData; } } public SerialPort _SerialPort { get { return serialPort; } } public ComSR(string portName,int baudRate,int dataBits,Parity parity,StopBits stopbits) { serialPort = new SerialPort(); serialPort.PortName = portName;//設定連接埠 serialPort.BaudRate = baudRate;//設定傳輸速率 serialPort.DataBits = dataBits;//設定資料長度 serialPort.Parity = parity;//設定同位協議 serialPort.StopBits = stopbits;//停止位 serialPort.ReceivedBytesThreshold = 1;//這裡是讀事件觸發條件,1代表一個位元組 serialPort.DtrEnable = true;//啟用資料終端機就緒訊號 serialPort.RtsEnable = true;//請求發送就緒訊號 serialPort.DataReceived += new SerialDataReceivedEventHandler(Data_Recive);//綁定處理讀事件的函數. } public void SendBuff(byte[] data) { try { serialPort.Write(data, 0, data.Length);//這裡是寫 } catch (Exception e) { if (serialPort != null && serialPort.IsOpen) { status = false; //這個status是我在上層類中判斷連接埠讀寫狀態的屬性,可以去掉 serialPort.Close(); } } } void Data_Recive(object o, EventArgs e)//這個是讀連接埠,事件處理函數 { try { Thread.Sleep(3); int length = serialPort.BytesToRead; reciveData = new byte[length]; serialPort.Read(reciveData, 0, length); while (serialPort.BytesToRead != 0)//由於資料長度讀寫不一,而且時間很難確定,所以在這裡做了這樣的處理 { Thread.Sleep(1); } if (serialPort.IsOpen) { status = true; //serialPort.Close();//這裡不應該關閉,應當在更高層次的程式上關閉連接埠. } } catch (Exception ex) { if (serialPort != null && serialPort.IsOpen) { status = false; serialPort.Close(); } } } public void PortOpen() { if (!serialPort.IsOpen) { serialPort.Open(); } else { serialPort.Close(); serialPort.Open(); } } /// <summary> /// 關閉連接埠 /// </summary> public void PortClose() { if (serialPort != null && serialPort.IsOpen) { serialPort.Close(); } } }}
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。