最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# SerialPort實(shí)現(xiàn)串口通訊的代碼詳解

 更新時(shí)間:2024年06月24日 10:27:01   作者:碼農(nóng)浩克  
在.NET平臺(tái)下創(chuàng)建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空間是System.IO.Ports,這個(gè)新的框架不但可以訪問(wèn)計(jì)算機(jī)上的串口,還可以和串口設(shè)備進(jìn)行通信,本文給大家介紹了C# SerialPort實(shí)現(xiàn)串口通訊,需要的朋友可以參考下

串口通信

在.NET平臺(tái)下創(chuàng)建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空間是System.IO.Ports。這個(gè)新的框架不但可以訪問(wèn)計(jì)算機(jī)上的串口,還可以和串口設(shè)備進(jìn)行通信。

創(chuàng)建C#串口通信程序之命名空間 System.IO.Ports命名空間中最重用的是SerialPort 類(lèi)。 創(chuàng)建C#串口通信程序之創(chuàng)建SerialPort 對(duì)象 通過(guò)創(chuàng)建SerialPort 對(duì)象,我們可以在程序中控制串口通信的全過(guò)程。

正文

屬性

BaseStream獲取 Stream 對(duì)象的基礎(chǔ) SerialPort 對(duì)象。
BaudRate獲取或設(shè)置串行波特率。
BreakState獲取或設(shè)置中斷信號(hào)狀態(tài)。
BytesToRead獲取接收緩沖區(qū)中數(shù)據(jù)的字節(jié)數(shù)。
BytesToWrite獲取發(fā)送緩沖區(qū)中數(shù)據(jù)的字節(jié)數(shù)。
CDHolding獲取端口的載波檢測(cè)行的狀態(tài)。
CtsHolding獲取“可以發(fā)送”行的狀態(tài)。
DataBits獲取或設(shè)置每個(gè)字節(jié)的標(biāo)準(zhǔn)數(shù)據(jù)位長(zhǎng)度。
DiscardNull獲取或設(shè)置一個(gè)值,該值指示 null 字節(jié)在端口和接收緩沖區(qū)之間傳輸時(shí)是否被忽略。
DsrHolding獲取數(shù)據(jù)設(shè)置就緒 (DSR) 信號(hào)的狀態(tài)。
DtrEnable獲取或設(shè)置一個(gè)值,該值在串行通信過(guò)程中啟用數(shù)據(jù)終端就緒 (DTR) 信號(hào)。
Encoding獲取或設(shè)置傳輸前后文本轉(zhuǎn)換的字節(jié)編碼。
Handshake使用 Handshake 中的值獲取或設(shè)置串行端口數(shù)據(jù)傳輸?shù)奈帐謪f(xié)議。
IsOpen獲取一個(gè)值,該值指示 SerialPort 對(duì)象的打開(kāi)或關(guān)閉狀態(tài)。
NewLine獲取或設(shè)置用于解釋 ReadLine() 和 WriteLine(String) 方法調(diào)用結(jié)束的值。
Parity獲取或設(shè)置奇偶校驗(yàn)檢查協(xié)議。
ParityReplace獲取或設(shè)置一個(gè)字節(jié),該字節(jié)在發(fā)生奇偶校驗(yàn)錯(cuò)誤時(shí)替換數(shù)據(jù)流中的無(wú)效字節(jié)。
PortName獲取或設(shè)置通信端口,包括但不限于所有可用的 COM 端口。
ReadBufferSize獲取或設(shè)置 SerialPort 輸入緩沖區(qū)的大小。
ReadTimeout獲取或設(shè)置讀取操作未完成時(shí)發(fā)生超時(shí)之前的毫秒數(shù)。
ReceivedBytesThreshold獲取或設(shè)置 DataReceived 事件發(fā)生前內(nèi)部輸入緩沖區(qū)中的字節(jié)數(shù)。
RtsEnable獲取或設(shè)置一個(gè)值,該值指示在串行通信中是否啟用請(qǐng)求發(fā)送 (RTS) 信號(hào)。
StopBits獲取或設(shè)置每個(gè)字節(jié)的標(biāo)準(zhǔn)停止位數(shù)。
WriteBufferSize獲取或設(shè)置串行端口輸出緩沖區(qū)的大小。
WriteTimeout獲取或設(shè)置寫(xiě)入操作未完成時(shí)發(fā)生超時(shí)之前的毫秒數(shù)。

方法

Close()關(guān)閉端口連接,將 IsOpen 屬性設(shè)置為 false,并釋放內(nèi)部 Stream 對(duì)象。
DiscardInBuffer()丟棄來(lái)自串行驅(qū)動(dòng)程序的接收緩沖區(qū)的數(shù)據(jù)。
DiscardOutBuffer()丟棄來(lái)自串行驅(qū)動(dòng)程序的傳輸緩沖區(qū)的數(shù)據(jù)。
GetPortNames()獲取當(dāng)前計(jì)算機(jī)的串行端口名的數(shù)組。
Open()打開(kāi)一個(gè)新的串行端口連接。
Read(Byte[], Int32, Int32)從 SerialPort 輸入緩沖區(qū)讀取一些字節(jié)并將那些字節(jié)寫(xiě)入字節(jié)數(shù)組中指定的偏移量處。
Read(Char[], Int32, Int32)從 SerialPort 輸入緩沖區(qū)中讀取一些字符,然后將這些字符寫(xiě)入字符數(shù)組中指定的偏移量處。
ReadByte()從 SerialPort 輸入緩沖區(qū)中同步讀取一個(gè)字節(jié)。
ReadChar()從 SerialPort 輸入緩沖區(qū)中同步讀取一個(gè)字符。
ReadExisting()在編碼的基礎(chǔ)上,讀取 SerialPort 對(duì)象的流和輸入緩沖區(qū)中所有立即可用的字節(jié)。
ReadLine()一直讀取到輸入緩沖區(qū)中的 NewLine 值。
ReadTo(String)一直讀取到輸入緩沖區(qū)中的指定 value 的字符串。
Write(Byte[], Int32, Int32)使用緩沖區(qū)中的數(shù)據(jù)將指定數(shù)量的字節(jié)寫(xiě)入串行端口。
Write(Char[], Int32, Int32)使用緩沖區(qū)中的數(shù)據(jù)將指定數(shù)量的字符寫(xiě)入串行端口。
Write(String)將指定的字符串寫(xiě)入串行端口。
WriteLine(String)將指定的字符串和 NewLine 值寫(xiě)入輸出緩沖區(qū)。

Nuget 安裝System.IO.Ports

圖片

串口寫(xiě)

private void btnWrite_Click(object sender, EventArgs e)
{
    SerialPort serialPort = new SerialPort();
    serialPort.PortName = "COM1";//串口名稱(chēng)
    serialPort.BaudRate = 9600; //獲取或設(shè)置波特率
    serialPort.Parity = Parity.Even;//獲取或設(shè)置校驗(yàn)位
    serialPort.DataBits = 8;//獲取或設(shè)置數(shù)據(jù)位默認(rèn)值8
    serialPort.StopBits = StopBits.One;// 停止位
    serialPort.Open();
    serialPort.Write("A");
    serialPort.Close();
}

串口讀

SerialPort serialPort = new SerialPort();
private void btnRead_Click(object sender, EventArgs e)
{


    byte[] a = System.Text.Encoding.ASCII.GetBytes(" ");
    serialPort.PortName = "COM1";//串口名稱(chēng)
    serialPort.BaudRate = 9600; //獲取或設(shè)置波特率
    serialPort.Parity = Parity.None;//獲取或設(shè)置校驗(yàn)位
    serialPort.DataBits = 8;//獲取或設(shè)置數(shù)據(jù)位默認(rèn)值8
    serialPort.StopBits = StopBits.One;// 停止位
    serialPort.DataReceived += SerialPort_DataReceived;
    serialPort.Open();
}


private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    byte[] b = new byte[8];
    int A = serialPort.Read(b, 0, 8);
    this.Invoke(() =>
    {
        string s = ByteToHex(b);
        txtValue.Text += s+System.Environment.NewLine;
    });
}


public string ByteToHex(byte[] Bytes)
{
    string str = string.Empty;
    foreach (byte Byte in Bytes)
    {
        str += String.Format("{0:X2}", Byte) + " ";
    }
    return str.Trim();
}

圖片

一個(gè)完整例子

圖片

using System.IO.Ports;


namespace SCOM
{
    public partial class FrmMain : Form
    {
        SerialPort serialPort;
        public FrmMain()
        {
            InitializeComponent();
            Init();
        }


        private void LoadPorts()
        {
            cboPort.Items.Clear();
            string[] port = System.IO.Ports.SerialPort.GetPortNames();
            foreach (var item in port)
            {
                cboPort.Items.Add(item);
            }
            cboPort.SelectedIndex = 0;
        }


        private void Init()
        {
            LoadPorts();
            object[] baudRate = { 4800, 9600, 19200, 38400, 57600, 115200, 230400 };
            cboBaudRate.Items.AddRange(baudRate);
            cboBaudRate.SelectedIndex = 1;


            cboDataBits.Items.Add(7);
            cboDataBits.Items.Add(8);
            cboDataBits.SelectedIndex = 1;


            cboStopBits.Items.Add("One");
            cboStopBits.Items.Add("OnePointFive");
            cboStopBits.Items.Add("Two");
            cboStopBits.SelectedIndex = 0;


            //Parity
            cboParity.Items.Add("None");
            cboParity.Items.Add("Even");
            cboParity.Items.Add("Mark");
            cboParity.Items.Add("Odd");
            cboParity.Items.Add("Space");
            cboParity.SelectedIndex = 0;


            cboHandshaking.Items.Add("None");
            cboHandshaking.Items.Add("XOnXOff");
            cboHandshaking.Items.Add("RequestToSend");
            cboHandshaking.Items.Add("RequestToSendXOnXOff");
            cboHandshaking.SelectedIndex = 0;
            btnClosePort.Enabled = false;
        }


        private void btnRefresh_Click(object sender, EventArgs e)
        {
            LoadPorts();
        }


        private void btnOpenPort_Click(object sender, EventArgs e)
        {
            if (serialPort == null)
            {
                serialPort = new SerialPort();
            }
            serialPort.PortName = cboPort.Text;//串口名稱(chēng)
            serialPort.BaudRate = int.Parse(cboBaudRate.Text); //獲取或設(shè)置波特率
            serialPort.Parity = (Parity)Enum.Parse(typeof(Parity), cboParity.Text);//獲取或設(shè)置校驗(yàn)位
            serialPort.DataBits = int.Parse(cboDataBits.Text);//獲取或設(shè)置數(shù)據(jù)位默認(rèn)值8
            serialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cboStopBits.Text);// 停止位
            serialPort.Handshake = (Handshake)Enum.Parse(typeof(Handshake), cboHandshaking.Text);// 握手協(xié)議
            serialPort.DataReceived += SerialPort_DataReceived;
            serialPort.Open();
            stsMain_lblStatus.Text = "端口已打開(kāi)";
            btnOpenPort.Enabled = false;
            btnClosePort.Enabled = true;
        }


        private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            this.Invoke(new Action(() =>
            {
                byte[] b = new byte[8];
                int A = serialPort.Read(b, 0, 8);
                string s = "";
                if (rdoHex.Checked)
                {
                    s = ByteToHex(b);
                }
                else
                {
                    s = System.Text.Encoding.Default.GetString(b);
                }
                txtReceive.AppendText(System.Environment.NewLine+ s);
            }));
        }


        private void btnClosePort_Click(object sender, EventArgs e)
        {
            if (serialPort != null && serialPort.IsOpen)
            {
                serialPort.DataReceived -= SerialPort_DataReceived;
                serialPort.Close();
                stsMain_lblStatus.Text = "端口已關(guān)閉";
                btnOpenPort.Enabled = true;
                btnClosePort.Enabled = false;
            }
        }


        private void btnSend_Click(object sender, EventArgs e)
        {
            if (serialPort == null || !serialPort.IsOpen)
            {
                return;
            }
            serialPort.Write(txtSend.Text);
        }


        private string ByteToHex(byte[] Bytes)
        {
            string str = string.Empty;
            foreach (byte Byte in Bytes)
            {
                str += String.Format("{0:X2}", Byte) + " ";
            }
            return str.Trim();
        }
    }
}



以上就是C# SerialPort實(shí)現(xiàn)串口通訊的代碼詳解的詳細(xì)內(nèi)容,更多關(guān)于C# SerialPort串口通訊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 輕松學(xué)習(xí)C#的抽象類(lèi)

    輕松學(xué)習(xí)C#的抽象類(lèi)

    輕松學(xué)習(xí)C#的抽象類(lèi),對(duì)C#的抽象類(lèi)感興趣的朋友可以參考本篇文章,幫助大家更靈活的運(yùn)用C#的抽象類(lèi)
    2015-11-11
  • WPF使用Accord實(shí)現(xiàn)屏幕錄制功能

    WPF使用Accord實(shí)現(xiàn)屏幕錄制功能

    這篇文章主要為大家詳細(xì)介紹了WPF如何使用Accord實(shí)現(xiàn)屏幕錄制,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2024-03-03
  • C# 給PPT中的圖表添加趨勢(shì)線(xiàn)的方法

    C# 給PPT中的圖表添加趨勢(shì)線(xiàn)的方法

    本文內(nèi)容分享通過(guò)C#程序代碼給PPT文檔中的圖表添加數(shù)據(jù)趨勢(shì)線(xiàn)的方法,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • c#使用linq技術(shù)創(chuàng)建xml文件的小例子

    c#使用linq技術(shù)創(chuàng)建xml文件的小例子

    c#使用linq技術(shù)創(chuàng)建xml文件的小例子,需要的朋友可以參考一下
    2013-03-03
  • C#面向?qū)ο蟮?3種設(shè)計(jì)模式介紹

    C#面向?qū)ο蟮?3種設(shè)計(jì)模式介紹

    這篇文章介紹了C#面向?qū)ο蟮?3種設(shè)計(jì)模式,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C#代碼操作XML進(jìn)行增、刪、改操作

    C#代碼操作XML進(jìn)行增、刪、改操作

    這篇文章主要為大家詳細(xì)介紹了C# 代碼操作XML進(jìn)行增、刪、改操作,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C# 可空類(lèi)型的實(shí)現(xiàn)示例

    C# 可空類(lèi)型的實(shí)現(xiàn)示例

    本文主要介紹了C#中的可空類(lèi)型,包含單問(wèn)號(hào)(?)和雙問(wèn)號(hào)(??),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • C#如何使用Task執(zhí)行異步操作

    C#如何使用Task執(zhí)行異步操作

    這篇文章主要介紹了C#如何使用Task執(zhí)行異步操作,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-05-05
  • 基于C#實(shí)現(xiàn)文檔打印功能

    基于C#實(shí)現(xiàn)文檔打印功能

    在軟件開(kāi)發(fā)過(guò)程中,文檔打印是一個(gè)常見(jiàn)的功能需求,本文將詳細(xì)介紹如何在C#中實(shí)現(xiàn)文檔打印,并通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定幫助,需要的朋友可以參考下
    2024-10-10
  • Unity實(shí)現(xiàn)物體跟隨鼠標(biāo)移動(dòng)

    Unity實(shí)現(xiàn)物體跟隨鼠標(biāo)移動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體跟隨鼠標(biāo)移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論

弋阳县| 锦州市| 扶余县| 瑞丽市| 东安县| 德州市| 翼城县| 赫章县| 青岛市| 兴隆县| 双牌县| 棋牌| 仙居县| 沅陵县| 双牌县| 宜丰县| 车致| 方城县| 墨脱县| 日土县| 福建省| 江口县| 普安县| 舞阳县| 凤凰县| 博罗县| 昭通市| 长沙县| 德格县| 越西县| 遵义市| 惠东县| 福清市| 临漳县| 磐石市| 视频| 夏邑县| 乌鲁木齐县| 安仁县| 胶州市| 克东县|