在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

串口通訊的術語解釋

jf_78858299 ? 來源:工控PLC技術 ? 作者:工控PLC技術 ? 2023-04-23 11:14 ? 次閱讀

關于串口通訊的術語解釋

最近在研究串口通訊,其中有幾個比較重要的概念,RS-232這種適配于上位機和PC端進行連接,RS-232只限于PC串口和設備間點對點的通信。它很簡單的就可以進行連接,由于串口通訊是異步的,也就是說你可以同時向兩端或者更多進行數據發送,它們之間的傳輸數據類型是byte,串口通信最重要的參數是波特率、數據位、停止位和奇偶校驗。對于兩個進行通信的端口,這些參數必須匹配。接下來先解釋一下幾個關于串口通訊的術語:

第一個波特率,這個東西在不同領域都有涉及,在串口通訊中兩個串口之間通訊之間的信號單元叫做碼元,每分鐘傳遞的信號(碼元)也就是波特率;

第二個數據位、停止位:這個聽名字就知道是啥意思了,在傳遞數據過程之前,機器會識別你的數據是個啥,然后根據這個類型,去調整不同的起始位、停止位。

第三個奇偶校驗:就是想知道你這個數據有多大,多長,因為傳輸都是1 和 0 ,具體校驗方法如下:

奇校驗:就是讓原有數據序列中(包括你要加上的一位)1的個數為奇數 ---- 1000110(0)你必須添0這樣原來有3個1已經是奇數了所以你添上0之后1的個數還是奇數個。

偶校驗:就是讓原有數據序列中(包括你要加上的一位)1的個數為偶數 ---- 1000110(1)你就必須加1了這樣原來有3個1要想1的個數為偶數就只能添1了。

串口模擬工具免費下載

如果想要在C#中玩轉串口通訊或者模擬串口,你必須先搞個硬件,當然我們是在模擬,那你就弄個模擬的工具唄,

安裝好了之后,桌面會有圖標,然后打開,添加一個串口,具體請看下圖:

圖片

串口通訊代碼的編寫

下面我們就開始代碼的實現了,創建一個.NET Fwk的 Winform 項目,然后開始我們的代碼:

SerialPort sp1 = new SerialPort();
public Form1()
        {
            InitializeComponent();
        }


private void Form1_Load(object sender, EventArgs e)
        {
string[] strCom = SerialPort.GetPortNames();
if (strCom == null)
            {
                MessageBox.Show("本機沒有串口!", "Error");
return;
            }
foreach (string com in System.IO.Ports.SerialPort.GetPortNames())
            {
                cbCom.Items.Add(com);
            }
            cbCom.SelectedIndex = 0;
            sp1.BaudRate = 9600;
            Control.CheckForIllegalCrossThreadCalls = false;
            sp1.DataReceived += Sp1_DataReceived;


            sp1.DtrEnable = true;
            sp1.RtsEnable = true;
            sp1.ReadTimeout = 1000;
            sp1.Close();
        }

在窗體加載中,我們嘗試獲取了本機的所有串口,通過 SerialPort.GetPortNames() 方法,會返回一個字符串數組,如果沒有就返回null,在其中,我們還設置了波特率,通過SerialPort類下的 DataReceived 方法,來監聽我們的數據回傳,還啟用了DTR\\DTS請求方式,通過 ReadTimeOut 對數據讀取超時進行了控制。

既然我們監聽了數據回傳,那么在這個方法中,通過 ReadTimeOut.Read 進行了讀取,直接從0到最后,截取完畢。

private void Sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
if (sp1.IsOpen)     //判斷是否打開串口
            {
//輸出當前時間
                DateTime dt = DateTime.Now;
                txtReceived.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\\r\\n";
                Byte[] receivedData = new Byte[sp1.BytesToRead];        //創建接收字節數組
                sp1.Read(receivedData, 0, receivedData.Length);         //讀取數據
                AddContent(new UTF8Encoding().GetString(receivedData));
            }
else
            {
                MessageBox.Show("請打開某個串口", "錯誤提示");
            }
        }


private void AddContent(string v)
        {
this.BeginInvoke(new MethodInvoker(delegate
            {
                txtReceived.AppendText(v);
                txtReceived.AppendText("\\r\\n");
            }));
        }

當然以上的操作都必須在打開串口之后才能進行,打開串口這個還是比較費勁的,因為要設置各種參數,也就是我剛才說的那幾個概念,如果不對,你讓其他的端口來訪問就找不到了。

private void button2_Click(object sender, EventArgs e)
        {
if (!sp1.IsOpen)
            {
try
                { 
string serialName = cbCom.SelectedItem.ToString();
                    sp1.PortName = serialName;
string strBaudRate = cbBaudRate.Text;
string strDateBits = cbDataBits.Text;
string strStopBits = cbStop.Text;
                    Int32 iBaudRate = Convert.ToInt32(strBaudRate);
                    Int32 iDateBits = Convert.ToInt32(strDateBits);
                    sp1.BaudRate = iBaudRate;       //波特率
                    sp1.DataBits = iDateBits;       //數據位
switch (cbStop.Text)            //停止位
                    {
case "1":
                            sp1.StopBits = StopBits.One;
break;
case "1.5":
                            sp1.StopBits = StopBits.OnePointFive;
break;
case "2":
                            sp1.StopBits = StopBits.Two;
break;
default:
                            MessageBox.Show("Error:參數不正確!", "Error");
break;
                    }
switch (cbCheck.Text)             //校驗位
                    {
case "無":
                            sp1.Parity = Parity.None;
break;
case "奇校驗":
                            sp1.Parity = Parity.Odd;
break;
case "偶校驗":
                            sp1.Parity = Parity.Even;
break;
default:
                            MessageBox.Show("Error:參數不正確!", "Error");
break;
                    }


if (sp1.IsOpen == true)
                    {
                        sp1.Close();
                    }


//設置必要控件不可用
                    cbCom.Enabled = false;
                    cbBaudRate.Enabled = false;
                    cbDataBits.Enabled = false;
                    cbStop.Enabled = false;
                    cbCheck.Enabled = false;
                    sp1.Open();     //打開串口
                    button2.Text = "關閉串口";
                }
catch (System.Exception ex)
                {
                    MessageBox.Show("Error:" + ex.Message, "Error");
return;
                }
            }
else
            {
                cbCom.Enabled = true;
                cbBaudRate.Enabled = true;
                cbDataBits.Enabled = true;
                cbStop.Enabled = true;
                cbCheck.Enabled = true;
                sp1.Close();                    //關閉串口
                button2.Text = "打開串口";
            }
        }

最后也就是發送了,剛才我們接收使用Read,發送也當然很簡單,是Write...

private void button1_Click(object sender, EventArgs e)
        {
byte[] sendData = null;
if (!sp1.IsOpen) //如果沒打開
            {
                MessageBox.Show("請先打開串口!", "Error");
return;
            }
            String strSend = txtSendStr.Text;
try
            {
                sendData = Encoding.UTF8.GetBytes(txtSendStr.Text.Trim());
                sp1.Write(sendData, 0, sendData.Length);
            }
catch (Exception ex)
            {
                MessageBox.Show("Error:" + ex.Message, "Error");
            }


        }
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RS-232
    +關注

    關注

    0

    文章

    394

    瀏覽量

    50400
  • 串口通信
    +關注

    關注

    34

    文章

    1633

    瀏覽量

    56355
  • 上位機
    +關注

    關注

    27

    文章

    952

    瀏覽量

    55456
收藏 人收藏

    評論

    相關推薦

    LED燈帶常用規格術語解釋

    下面就把LED燈帶常用的5種規格術語進行一下解釋和分享,同時也供采購朋友們參考:
    發表于 04-20 15:11 ?4.4w次閱讀

    FPGA 英文術語解釋

    FPGA 英文術語解釋,對初學者很有裨益。
    發表于 06-14 23:28

    光電開關的分類和術語解釋

    光電開關介紹及術語解釋
    發表于 05-13 09:56

    電子類縮略語-專業術語解釋

    電子類縮略語及專業術語解釋。
    發表于 07-05 15:48 ?0次下載

    紅外線光電開關術語解釋

    紅外線光電開關術語解釋
    發表于 06-30 19:42 ?1236次閱讀

    Allegro做padstack時的術語解釋

    Allegro做padstack時的術語解釋 做padstack的一些問題:在本圖片中的 regular pad , thermal relief , anti pad 在做padstack中的具體區別是什么麻煩大嚇幫我詳細解說一下
    發表于 03-22 16:39 ?3375次閱讀
    Allegro做padstack時的<b class='flag-5'>術語</b><b class='flag-5'>解釋</b>

    手機常用名詞術語解釋

    手機常用名詞術語解釋 從結構類型上來看,主要有如下五種:  直板式 Candybar 折疊式 Clamshell 滑蓋
    發表于 06-21 22:58 ?3440次閱讀

    MP3術語解釋

    MP3術語解釋 時下許多人都擁有了自己的MP3隨身聽,但是面對眼花繚亂的MP3術語眾多MP3小蟲們還是不知所措。也許在以后購買MP3時JP們
    發表于 02-02 14:07 ?904次閱讀

    軟板(FPC)相關術語解釋

    軟板(FPC)相關術語解釋 1、Access Hole 露出孔(穿露孔,露底孔)常指軟板外表的保護層 Coverlay(須先沖切出的穿露孔),用以貼合在軟板線路表面做
    發表于 02-21 10:29 ?4464次閱讀

    LED專業術語解釋

    LED專業術語解釋VF、IV、WL、IR 解釋及光通量換算關系,LED的Vf值是什么意思?它的大小對LED有什么影響?
    發表于 01-06 15:34 ?5935次閱讀

    太陽能光伏術語和名詞解釋(齊全)

    電子發燒友為大家整理了相關的太陽能光伏術語和名詞解釋(齊全)
    發表于 04-23 11:23 ?9307次閱讀

    LED專業術語解釋

    LED專業術語解釋,LED燈飾入門知識。
    發表于 03-04 14:15 ?0次下載

    科普:示波器常用的術語解釋

    科普:示波器常用的術語解釋
    發表于 07-15 18:55 ?3次下載
    科普:示波器常用的<b class='flag-5'>術語</b><b class='flag-5'>解釋</b>

    關于串口通訊術語解釋及代碼的編寫

    在窗體加載中,我們嘗試獲取了本機的所有串口,通過 SerialPort.GetPortNames() 方法,會返回一個字符串數組,如果沒有就返回null,在其中,我們還設置了波特率,通過SerialPort類下的 DataReceived 方法
    發表于 02-22 11:42 ?809次閱讀

    電磁兼容基本術語和定義的應用與解釋.zip

    電磁兼容基本術語和定義的應用與解釋
    發表于 12-30 09:21 ?2次下載
    主站蜘蛛池模板: 在线a免费 | 色视频色露露永久免费观看 | 色吧欧美| 伊人网综合在线观看 | 五月天丁香婷婷开心激情五月 | 欧美ol丝袜高跟秘书在线观看 | 国产精品一区二区三 | 人人射人人爽 | 国产三片高清在线观看 | xxx色xxx性| 国内精品久久久久影 | 久久综合九色综合97婷婷群聊 | 最黄毛片| 国内外精品免费视频 | 亚洲一区中文字幕在线 | 人人澡人人人人夜夜爽 | 久久综合九色综合欧洲色 | 一二三区乱码一区二区三区码 | 欧美性淫爽www视频播放 | 久久影院午夜伦手机不四虎卡 | 国产黄色精品 | 午夜寂寞影视 | 成人亚洲网 | 五月激情电影 | 国产性夜夜性夜夜爽91 | 视频免费观看网址 | 久久久久综合中文字幕 | 久久亚洲国产成人精品性色 | 国产精品麻豆va在线播放 | 日本免费一区二区老鸭窝 | 经典三级第一页 | 人人插97 | 久久手机看片你懂的日韩1024 | 亚洲午夜久久久久国产 | 在线观看黄网 | 黄蓉吕文德欲乱系列小说 | 国产激烈无遮挡免费床戏视频 | 四虎影院大全 | 日本人视频-jlzz jlzz jlzz | 高h道具触手play肉男男 | 国产成人mv在线观看入口视频 |