串列埠是序列介面的縮寫,是電子裝置之間通訊常用的全雙工擴充套件介面。 RS-232 標準通常用於計算機和外部裝置(帶有 25 針或 9 針聯結器)之間的資料傳輸。 如今,我們基本上已經看不到電腦中的串列埠了,我們可以使用USB介面卡將COM口轉換為USB介面進行連線。 今天我們就來一探究竟。.NET 如何用 C 編寫實現與這些裝置的通訊。 序列通訊包括通訊時序、通訊速率和資料傳輸。 常用的通訊速率有2400bps、4800bps、9600bps、19200bps、38400bps和115200bps。 我們通過下圖對串列埠的通訊時序有乙個簡單的了解,它由起始位、資料位、校驗位和停止位組成。
下表描述了計時元件。 NET Framework 庫提供了 SerialPort 類,該類可用於配置和管理串列埠的屬性,串列埠可用於傳送和接收資料。 SerialPort 類的常見屬性包括埠名、波特率、奇偶校驗、資料位、停止位、握手、readtimeout 和 writetimeout。 這些屬性用於指定串列埠名稱、波特率、校驗位、資料位、停止位、握手協議以及讀寫資料時的超時時間。 屬性。
紅色是類的公共屬性,當我們使用該類時,該屬性是根據所連線裝置的情況進行配置的。
方法。 我們先配置一下類的屬性,然後用 open() 方法開啟串列埠,用 write() 方法傳送資料,用 read() 方法讀取資料,用 close() 方法關閉串列埠。
事件。 在傳送和接收資料時,我們還可以使用事件來處理資料的到達和完成。
我們首先定義兩種列舉型別:波特率和資料位
波特率。我正在將序列埠上的操作包裝在乙個類中。serializable]
public enum baudrates
資料位。
serializable]
public enum databits
using system;如何稱呼:using system.collections;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using system.io.ports;
namespace fountain.net.core.com
字串空操作。
public class operationserialportset
private baudrates _baudrate = baudrates.baud9600;
波特率。
public baudrates baudrateset
private parity _parity = parity.none;
校驗位。
public parity parityset
private stopbits _stopbits = stopbits.one;
停止位。
public stopbits stopbitsset
private databits _databits = databits.bit8;
資料位。
public databits databitsset
無引數建構函式。
public operationserialport()
繫結事件。
private void boundevents()
儲存接收到的用於分析的位元組。
list _storereceivedbytes = new list();
接收資料。
private void serialport_datareceived(object sender, serialdatareceivedeventargs e)
catch 錯誤處理程式。
private void serialport_errorreceived(object sender, serialerrorreceivedeventargs e)
埠是否已開啟。
public bool isopen
開啟埠。
public void open()
this._serialport.portname = this._portname;
this._serialport.baudrate = (int)this._baudrate;
this._serialport.parity = this._parity;
this._serialport.databits = (int)this._databits;
this._serialport.stopbits = this._stopbits;
this._serialport.open();
catch (exception ex)
關閉埠。
public void close()
catch (exception ex)
public void discardbuffer()
寫入資料。
位元組陣列。
public void write(byte writebuffer, int offset, int count)
this._serialport.write(writebuffer, offset, count);
catch (exception ex)
寫入資料。
位元組陣列。
public void write(byte writebuffer)
this._serialport.write(writebuffer, 0, writebuffer.length);
catch (exception ex)
序列埠名稱。
public static list getportnames()
return portnamelist;
catch(exception ex)
獲取波特率。
public static list getbaurates()
return baudrateslist;
catch (exception ex)
獲取校驗位。
public static list getparitys()
return parityslist;
catch (exception ex)
獲取資料位。
public static list getdatabits(ilist obj)
return databitslist;
catch (exception ex)
獲取停止位。
public static list getstopbits()
return stopbitlist;
catch (exception ex)
using fountain.net.core.com;SerialPort 是乙個非常方便的庫,用於與串列埠裝置通訊,從事硬體對接開發和嵌入式開發的人難免會使用這個類。using system.io.ports;
using system.text;
namespace fountain.net.com.demo
public partial class formserialport : form
private void formserialport_load(object sender, eventargs e)catch
private void initialcombox()
catch (exception ex)
串列埠接收資料處理。
private void initialport()
this.begininvoke(new action(()=> )
catch (exception ex)
開啟。 private void btnopen_click(object sender, eventargs e)
catch (exception ex)
關閉。 private void btnclose_click(object sender, eventargs e)
catch (exception ex)
清除收到的內容。
private void btnclean_click(object sender, eventargs e)
catch (exception exception)