精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

上位機制作方案

汽車電子技術 ? 來源:物聯網知識 ? 作者: 跋扈洋 ? 2023-01-20 16:25 ? 次閱讀

需求

我們在平時使用單片機制作項目時,總是希望能夠實時顯示一些數據,并將這些數據進行處理,從而進行使用。那么上位機就必不可少了。上位機是指可以直接發出操控命令的計算機,一般是PC屏幕上顯示各種信號變化。下位機是直接控制設備獲取設備狀況的計算機,一般是單片機之類的。上位機發出的命令首先給下位機,下位機再根據此命令解釋成相應時序信號直接控制相應設備。下位機不時讀取設備狀態數據(一般為模擬量),轉換成數字信號反饋給上位機。簡言之如此,實際情況千差萬別,但萬變不離其宗:上下位機都需要編程,都有專門的開發系統。

在概念上,控制者和提供服務者是上位機,被控制者和被服務者是下位機,也可以理解為主機和從機的關系,但上位機和下位機是可以轉換的。

那么我今天就來制作這樣一款上位機,主要用來實現獲取開發板的數據,并進行判別,顯示不同的提示。還可以發送給單片機相關數據。

準備

  1. 帶串口的單片機(用來進行測試,沒有也行)
  2. Visual Studio 2019
  3. 設置波特率等串口參數
  4. 打開串口
  5. 檢測串口
  6. 發送數據
  7. 接收數據
  8. 調整格式
  9. 檢測收發數據的字節總量
  10. 清空接收區和發送區
  11. 對收到的數據進行處理
  12. 設置串口數據緩沖等待時間

界面設計

微信截圖_20230105161930.png

關鍵程序

打開串口

if (cbbComList.Items.Count <= 0)
            {
                MessageBox.Show("沒有發現串口,請檢查線路!");
                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, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                btnOpen.Text = "關閉串口";
                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, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                btnOpen.Text = "打開串口";
                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;

發送數據

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

接收數據

//等待緩沖區數據
            Thread.Sleep(time);


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


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

實現頁面

微信截圖_20230105161930.png

微信截圖_20230105161930.png

微信截圖_20230105161930.png

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

    關注

    6032

    文章

    44525

    瀏覽量

    633257
  • 上位機
    +關注

    關注

    27

    文章

    930

    瀏覽量

    54738
  • 下位機
    +關注

    關注

    0

    文章

    93

    瀏覽量

    18730
收藏 人收藏

    評論

    相關推薦

    如圖,關于上位機制作

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

    求助 零基礎 想學基于COM通訊(scpi指令)的上位機制作

    求助 零基礎 想學基于COM通訊(scpi指令)的上位機制作有什么好的資料學習
    發表于 12-28 15:49

    電流檢測裝置樣機制作

    想用磁場傳感器設計制作一個電流監測裝置,有基本原理,要在哪里找技術支撐來實現樣機制作
    發表于 04-16 21:16

    單片機制作的高頻正弦波逆變器

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

    使用Stellaris(群星)單片機制作自動小車

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

    807膽機制作電路圖

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

    電魚機制作線路圖

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

    簡易鉆孔機制作

    簡易鉆孔機制作
    發表于 09-08 17:15 ?1539次閱讀
    簡易鉆孔<b class='flag-5'>機制作</b>

    單片機制作繼電器 【匯編版】

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

    單片機制作繼電器 【C語言版】

    單片機制作繼電器 【C語言版】單片機制作繼電器 【C語言版】單片機制作繼電器 【C語言版】單片機制作繼電器 【C語言版】
    發表于 12-29 13:53 ?0次下載

    單片機制作譯碼器實驗程序+文檔

    單片機制作譯碼器實驗程序+文檔 單片機制作譯碼器實驗程序+文檔 單片機制作譯碼器實驗程序+文檔
    發表于 12-29 15:51 ?3次下載

    高頻電魚機制作

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

    少年收音機制作

    少年收音機制作
    發表于 07-08 12:00 ?57次下載

    礦石收音機制作詳解

    礦石收音機制作詳解
    發表于 12-27 17:52 ?63次下載

    使用visual studio制作上位

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