0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

上位機(jī)制作方案

汽車(chē)電子技術(shù) ? 來(lái)源:物聯(lián)網(wǎng)知識(shí) ? 作者: 跋扈洋 ? 2023-01-20 16:25 ? 次閱讀

需求

我們?cè)谄綍r(shí)使用單片機(jī)制作項(xiàng)目時(shí),總是希望能夠?qū)崟r(shí)顯示一些數(shù)據(jù),并將這些數(shù)據(jù)進(jìn)行處理,從而進(jìn)行使用。那么上位機(jī)就必不可少了。上位機(jī)是指可以直接發(fā)出操控命令的計(jì)算機(jī),一般是PC屏幕上顯示各種信號(hào)變化。下位機(jī)是直接控制設(shè)備獲取設(shè)備狀況的計(jì)算機(jī),一般是單片機(jī)之類的。上位機(jī)發(fā)出的命令首先給下位機(jī),下位機(jī)再根據(jù)此命令解釋成相應(yīng)時(shí)序信號(hào)直接控制相應(yīng)設(shè)備。下位機(jī)不時(shí)讀取設(shè)備狀態(tài)數(shù)據(jù)(一般為模擬量),轉(zhuǎn)換成數(shù)字信號(hào)反饋給上位機(jī)。簡(jiǎn)言之如此,實(shí)際情況千差萬(wàn)別,但萬(wàn)變不離其宗:上下位機(jī)都需要編程,都有專門(mén)的開(kāi)發(fā)系統(tǒng)。

在概念上,控制者和提供服務(wù)者是上位機(jī),被控制者和被服務(wù)者是下位機(jī),也可以理解為主機(jī)和從機(jī)的關(guān)系,但上位機(jī)和下位機(jī)是可以轉(zhuǎn)換的。

那么我今天就來(lái)制作這樣一款上位機(jī),主要用來(lái)實(shí)現(xiàn)獲取開(kāi)發(fā)板的數(shù)據(jù),并進(jìn)行判別,顯示不同的提示。還可以發(fā)送給單片機(jī)相關(guān)數(shù)據(jù)。

準(zhǔn)備

  1. 帶串口的單片機(jī)(用來(lái)進(jìn)行測(cè)試,沒(méi)有也行)
  2. Visual Studio 2019
  3. 設(shè)置波特率等串口參數(shù)
  4. 打開(kāi)串口
  5. 檢測(cè)串口
  6. 發(fā)送數(shù)據(jù)
  7. 接收數(shù)據(jù)
  8. 調(diào)整格式
  9. 檢測(cè)收發(fā)數(shù)據(jù)的字節(jié)總量
  10. 清空接收區(qū)和發(fā)送區(qū)
  11. 對(duì)收到的數(shù)據(jù)進(jìn)行處理
  12. 設(shè)置串口數(shù)據(jù)緩沖等待時(shí)間

界面設(shè)計(jì)

微信截圖_20230105161930.png

關(guān)鍵程序

打開(kāi)串口

if (cbbComList.Items.Count <= 0)
            {
                MessageBox.Show("沒(méi)有發(fā)現(xiàn)串口,請(qǐng)檢查線路!");
                return;
            }


            if (ComDevice.IsOpen == false)
            {
                ComDevice.PortName = cbbComList.SelectedItem.ToString();
                //ComDevice.BaudRate = Convert.ToInt32(cbbBaudRate.SelectedItem.ToString());
                ComDevice.BaudRate = Convert.ToInt32(cbbBaudRate.Text.ToString());
                ComDevice.Parity = (Parity)Convert.ToInt32(cbbParity.SelectedIndex.ToString());
                ComDevice.DataBits = Convert.ToInt32(cbbDataBits.SelectedItem.ToString());
                ComDevice.StopBits = (StopBits)Convert.ToInt32(cbbStopBits.SelectedItem.ToString());
                time = Convert.ToInt32(cbBox_time.Text.Trim());
                try
                {
                    ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);
                    ComDevice.Open();
                    btnSend.Enabled = true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                btnOpen.Text = "關(guān)閉串口";
                pictureBox1.BackgroundImage = Properties.Resources.green;
            }
            else
            {
                try
                {
                    ComDevice.DataReceived -= new SerialDataReceivedEventHandler(Com_DataReceived);//取消綁定COM接收
                    Thread.Sleep(1000);
                    ComDevice.Close();
                    btnSend.Enabled = false;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                btnOpen.Text = "打開(kāi)串口";
                pictureBox1.BackgroundImage = Properties.Resources.red;
            }
            cbbComList.Enabled = !ComDevice.IsOpen;
            cbbBaudRate.Enabled = !ComDevice.IsOpen;
            cbbParity.Enabled = !ComDevice.IsOpen;
            cbbDataBits.Enabled = !ComDevice.IsOpen;
            cbbStopBits.Enabled = !ComDevice.IsOpen;
            cbBox_time.Enabled = !ComDevice.IsOpen;

發(fā)送數(shù)據(jù)

if (ComDevice.IsOpen)
            {
                try
                {
                    ComDevice.Write(data, 0, data.Length);//發(fā)送數(shù)據(jù)
                    return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("串口未打開(kāi)", "錯(cuò)誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return false;

接收數(shù)據(jù)

//等待緩沖區(qū)數(shù)據(jù)
            Thread.Sleep(time);


            byte[] ReDatas = new byte[ComDevice.BytesToRead];
            byte[] DIY = new byte[ComDevice.BytesToRead];
            DIY[0] =0x6F;
            ComDevice.Read(ReDatas, 0, ReDatas.Length);//讀取數(shù)據(jù)
            if (ReDatas[0] ==0x63 )
            {
                MessageBox.Show("正確");
            }
            else
                MessageBox.Show("錯(cuò)誤");
            //丟棄接收緩沖區(qū)數(shù)據(jù)
            ComDevice.DiscardInBuffer();


            this.AddData(ReDatas);//輸出數(shù)據(jù)

實(shí)現(xiàn)頁(yè)面

微信截圖_20230105161930.png

微信截圖_20230105161930.png

微信截圖_20230105161930.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6030

    文章

    44489

    瀏覽量

    631990
  • 上位機(jī)
    +關(guān)注

    關(guān)注

    27

    文章

    930

    瀏覽量

    54696
  • 下位機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    18716
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如圖,關(guān)于上位機(jī)制作

    像這種上位機(jī)的軟件是怎樣制作的。
    發(fā)表于 02-07 13:10

    無(wú)源收音機(jī)制作

    無(wú)源收音機(jī)制作
    發(fā)表于 07-18 16:50

    求助 零基礎(chǔ) 想學(xué)基于COM通訊(scpi指令)的上位機(jī)制作

    求助 零基礎(chǔ) 想學(xué)基于COM通訊(scpi指令)的上位機(jī)制作有什么好的資料學(xué)習(xí)
    發(fā)表于 12-28 15:49

    單片機(jī)制作的高頻正弦波逆變器

    單片機(jī)制作的高頻正弦波逆變器方案
    發(fā)表于 09-21 07:13

    使用Stellaris(群星)單片機(jī)制作自動(dòng)小車(chē)

    使用Stellaris(群星)單片機(jī)制作自動(dòng)小車(chē) 本文講述如何使用Stellaris(群星)單片機(jī)制作自動(dòng)小車(chē)
    發(fā)表于 04-06 17:28 ?25次下載

    807膽機(jī)制作電路圖

    807膽機(jī)制作電路圖
    發(fā)表于 02-03 17:02 ?1.1w次閱讀
    807膽<b class='flag-5'>機(jī)制作</b>電路圖

    電魚(yú)機(jī)制作線路圖

    電魚(yú)機(jī)制作線路圖
    發(fā)表于 07-30 17:21 ?7.1w次閱讀
    電魚(yú)<b class='flag-5'>機(jī)制作</b>線路圖

    簡(jiǎn)易鉆孔機(jī)制作

    簡(jiǎn)易鉆孔機(jī)制作
    發(fā)表于 09-08 17:15 ?1536次閱讀
    簡(jiǎn)易鉆孔<b class='flag-5'>機(jī)制作</b>

    單片機(jī)制作繼電器 【匯編版】

    單片機(jī)制作繼電器 【匯編版】單片機(jī)制作繼電器 【匯編版】單片機(jī)制作繼電器 【匯編版】
    發(fā)表于 12-29 13:50 ?0次下載

    單片機(jī)制作繼電器 【C語(yǔ)言版】

    單片機(jī)制作繼電器 【C語(yǔ)言版】單片機(jī)制作繼電器 【C語(yǔ)言版】單片機(jī)制作繼電器 【C語(yǔ)言版】單片機(jī)制作繼電器 【C語(yǔ)言版】
    發(fā)表于 12-29 13:53 ?0次下載

    單片機(jī)制作譯碼器實(shí)驗(yàn)程序+文檔

    單片機(jī)制作譯碼器實(shí)驗(yàn)程序+文檔 單片機(jī)制作譯碼器實(shí)驗(yàn)程序+文檔 單片機(jī)制作譯碼器實(shí)驗(yàn)程序+文檔
    發(fā)表于 12-29 15:51 ?3次下載

    高頻電魚(yú)機(jī)制作

    本文介紹高頻電魚(yú)機(jī)制作方法,包含高頻電魚(yú)機(jī)電路圖以及高頻電魚(yú)機(jī)元器件清單。
    發(fā)表于 08-27 17:10 ?2.2w次閱讀
    高頻電魚(yú)<b class='flag-5'>機(jī)制作</b>

    少年收音機(jī)制作

    少年收音機(jī)制作
    發(fā)表于 07-08 12:00 ?57次下載

    礦石收音機(jī)制作詳解

    礦石收音機(jī)制作詳解
    發(fā)表于 12-27 17:52 ?63次下載

    使用visual studio制作上位機(jī)

    使用visual studio 制作上位機(jī)使用visual studio 制作上位機(jī) 1.新建工程 2.放置組件,組件,按鈕等 3.放置串口,放置定時(shí)器! 4.串口相關(guān)設(shè)置 搜索串口
    發(fā)表于 05-10 11:00 ?11次下載
    使用visual studio<b class='flag-5'>制作</b><b class='flag-5'>上位</b>機(jī)