C#串口通信工具類的封裝_第1頁(yè)
C#串口通信工具類的封裝_第2頁(yè)
C#串口通信工具類的封裝_第3頁(yè)
C#串口通信工具類的封裝_第4頁(yè)
C#串口通信工具類的封裝_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第C#串口通信工具類的封裝本文實(shí)例為大家分享了C#串口通信工具類的封裝代碼,供大家參考,具體內(nèi)容如下

1、SerialPortHelper串口工具類封裝

usingSystem;

usingSystem.Collections.Generic;

usingSystem.IO.Ports;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.Timers;

namespacepublic.Util

///summary

///串口操作助手類

////summary

classSerialPortHelper

{

///summary

///串口是否已打開

////summary

publicboolIsOpen{get;set;}

///summary

///初始化串行端口資源

////summary

privateSerialPortmySerialPort=newSerialPort();

///summary

///串口接收數(shù)據(jù)位置

////summary

privatestaticintpSerialPortRecv=0;

///summary

///緩存區(qū)大小的長(zhǎng)度

///緩沖區(qū)可調(diào)大

///(接收數(shù)據(jù)處理定時(shí)器內(nèi)接收數(shù)據(jù)量小于下面設(shè)置的值即可)

////summary

privatestaticintbyteLength=40960;

///summary

///串口接收字節(jié)緩存區(qū)大小

////summary

privatebyte[]byteSerialPortRecv=newbyte[byteLength];

///summary

///串口接收數(shù)據(jù)處理定時(shí)器

////summary

privateTimerSerialPortRecvTimer;

///summary

///廣播收到的數(shù)據(jù)事件

////summary

publiceventEventHandlerSerialPortRecvEventArgsReceivedDataEvent;

///summary

///廣播收到的數(shù)據(jù)

////summary

publicclassSerialPortRecvEventArgs:EventArgs

{

///summary

///廣播收到的串口數(shù)據(jù)

////summary

publicreadonlybyte[]RecvData=newbyte[byteLength];

///summary

///收到數(shù)據(jù)的長(zhǎng)度

////summary

publicreadonlyintRecvDataLength;

///summary

///將收到的數(shù)據(jù)轉(zhuǎn)化成待廣播的數(shù)據(jù)

////summary

publicSerialPortRecvEventArgs(byte[]recvData,intrecvDataLength)

{

recvData.CopyTo(RecvData,0);

RecvDataLength=recvDataLength;

}

}

///summary

///初始化

////summary

publicSerialPortHelper()

{

IsOpen=false;

}

///summary

///設(shè)置串口配置

////summary

///paramname="portName"串口號(hào)/param

///paramname="baudRate"波特率/param

///paramname="parity"校驗(yàn)位/param

///paramname="dataBits"數(shù)據(jù)位/param

///paramname="stopBits"停止位/param

privatevoidSetSerialPortConfig(stringportName,intbaudRate,intparity,intdataBits,intstopBits)

{

//串口參數(shù)設(shè)置

mySerialPort.PortName=portName;

mySerialPort.BaudRate=baudRate;

switch(parity)

{

case0:

default:

mySerialPort.Parity=Parity.None;

break;

case1:

mySerialPort.Parity=Parity.Odd;

break;

case2:

mySerialPort.Parity=Parity.Even;

break;

case3:

mySerialPort.Parity=Parity.Mark;

break;

case4:

mySerialPort.Parity=Parity.Space;

break;

}

mySerialPort.DataBits=((4dataBits)(dataBits9))dataBits:8;

switch(stopBits)

{

case0:

mySerialPort.StopBits=StopBits.None;

break;

case1:

default:

mySerialPort.StopBits=StopBits.One;

break;

case2:

mySerialPort.StopBits=StopBits.OnePointFive;

break;

case3:

mySerialPort.StopBits=StopBits.Two;

break;

}

mySerialPort.ReadTimeout=-1;

mySerialPort.RtsEnable=true;

mySerialPort.DataReceived+=newSerialDataReceivedEventHandler(DataReceived);

//串口接收數(shù)據(jù)處理定時(shí)器參數(shù)設(shè)置

SerialPortRecvTimer=newSystem.Timers.Timer();

SerialPortRecvTimer.Interval=100;

SerialPortRecvTimer.AutoReset=false;

SerialPortRecvTimer.Elapsed+=newElapsedEventHandler(SPRecvTimer_Tick);

}

///summary

///打開串口

////summary

///paramname="portName"串口號(hào)/param

///paramname="baudRate"波特率/param

///paramname="parity"校驗(yàn)位/param

///paramname="dataBits"數(shù)據(jù)位/param

///paramname="stopBits"停止位/param

publicvoidOpenSerialPort(stringportName,intbaudRate,intparity,intdataBits,intstopBits)

{

try

{

SetSerialPortConfig(portName,baudRate,parity,dataBits,stopBits);

mySerialPort.Open();

IsOpen=true;

}

catch(System.Exception)

{

IsOpen=false;

throw;

}

}

///summary

///關(guān)閉串口

////summary

publicvoidCloseSerialPort()

{

try

{

mySerialPort.Close();

IsOpen=false;

}

catch(System.Exception)

{

IsOpen=false;

throw;

}

}

///summary

///串口數(shù)據(jù)發(fā)送

////summary

///paramname="content"byte類型數(shù)據(jù)/param

publicvoidSendData(byte[]content)

{

try

{

mySerialPort.Write(content,0,content.Length);

}

catch(System.Exception)

{

throw;

}

}

///summary

///串口數(shù)據(jù)發(fā)送

////summary

///paramname="strContent"字符串?dāng)?shù)據(jù)/param

///paramname="encoding"編碼規(guī)則/param

publicvoidSendData(stringstrContent,Encodingencoding)

{

try

{

byte[]content=encoding.GetBytes(strContent);

mySerialPort.Write(content,0,content.Length);

}

catch(System.Exception)

{

throw;

}

}

///summary

///數(shù)據(jù)處理定時(shí)器

///定時(shí)檢查緩沖區(qū)是否有數(shù)據(jù),如果有數(shù)據(jù)則將數(shù)據(jù)處理并廣播。

////summary

///paramname="sender"/param

///paramname="e"/param

privatevoidSPRecvTimer_Tick(objectsender,EventArgse)

{

byte[]TemporaryData=newbyte[byteLength];

intTemporaryDataLength=0;

if(ReceivedDataEvent!=null)

{

byteSerialPortRecv.CopyTo(TemporaryData,0);

TemporaryDataLength=pSerialPortRecv;

ReceivedDataEvent.Invoke(this,newSerialPortRecvEventArgs(TemporaryData,TemporaryDataLength));

//數(shù)據(jù)處理完后,將指針指向數(shù)據(jù)頭,等待接收新的數(shù)據(jù)

pSerialPortRecv=0;

}

}

///summary

///數(shù)據(jù)接收事件

///串口收到數(shù)據(jù)后,關(guān)閉定時(shí)器,將收到的數(shù)據(jù)填入緩沖區(qū),數(shù)據(jù)填入完畢后,開啟定時(shí)器,等待下一次數(shù)據(jù)接收

////summary

///paramname="sender"/param

///paramname="e"/param

privatevoidDataReceived(objectsender,SerialDataReceivedEventArgse)

{

try

{

SerialPortRecvTimer.Stop();

byte[]ReadBuf=newbyte[mySerialPort.BytesToRead];

mySerialPort.Read(ReadBuf,0,ReadBuf.Length);

ReadBuf.CopyTo(byteSerialPortRecv,pSerialPortRecv);

pSerialPortRecv+=ReadBuf.Length;

SerialPortRecvTimer.Start();

}

catch(System.Exception)

{

throw;

}

}

///summary

///獲取當(dāng)前可用PortName

////summary

///returns/returns

publicstaticListSerialPortParamstringGetPortList()

{

try

{

ListSerialPortParamstringlst_sParameterClass=newListSerialPortParamstring();

foreach(stringdatainSerialPort.GetPortNames())

{

SerialPortParamstringi_sParameterClass=newSerialPortParamstring

i_sParameterClass.Name=data;

i_sParameterClass.Value=data;

lst_sParameterClass.Add(i_sParameterClass);

}

returnlst_sParameterClass;

}

catch(Exception)

{

throw;

}

}

///summary

///設(shè)置波特率

////summary

///returns/returns

publicstaticListSerialPortParamintSetBaudRateValues()

{

try

{

ListSerialPortParamintlst_sParameterClass=newListSerialPortParamint();

foreach(SerialPortBaudRatesrateinEnum.GetValues(typeof(SerialPortBaudRates)))

{

SerialPortParaminti_sParameterClass=newSerialPortParamint

i_sParameterClass.Name=((int)rate).ToString();

i_sParameterClass.Value=(int)rate;

lst_sParameterClass.Add(i_sParameterClass);

}

returnlst_sParameterClass;

}

catch(Exception)

{

throw;

}

}

}

///summary

///設(shè)置串口助手參數(shù)類,如:波特率

////summary

publicclassSerialPortParamT{

///summary

///顯示值

////summary

stringname;

///summary

///顯示值

////summary

publicstringName

{

get{returnname;}

set{name=value;}

}

///summary

///值

////summary

Tvalue;

///summary

///值

////summary

publicTValue

{

get{returnthis.value;}

set{this.value=value;}

}

}

///summary

///串口波特率列表。

///75,110,150,300,600,1200,2400,4800,9600,14400,19200,28800,38400,56000,57600,

///115200,128000,230400,256000

////summary

publicenumSerialPortBaudRates

{

BaudRate_75=75,

BaudRate_110=110,

BaudRate_150=150,

BaudRate_300=300,

BaudRate_600=600,

BaudRate_1200=1200,

BaudRate_2400=2400,

BaudRate_4800=4800,

BaudRate_9600=9600,

BaudRate_14400=14400,

BaudRate_19200=19200,

BaudRate_28800=28800,

BaudRate_38400=3

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論