天天看點

溫度采集系統上位機設計

上一次我們講到了多點溫度采集系統的設計,為此,特意開發了一個上位機用于顯示溫度,這一節就是來說一下上位機的開發。

當然,目前來說由于水準有限,這個上位機的功能比較簡單,隻是可以實時顯示三路的溫度資訊,日後再去完善它。

先來看一下它的界面:

溫度采集系統上位機設計

來簡單介紹一下它的功能:

1、最重要的,能夠實時顯示溫度資訊。這裡增加了兩種顯示格式,一種十進制,一種十六進制。十六進制主要是在調試中會使用,這裡有些雞肋。

2、當溫度超過一定值(這裡設定為40)時,會彈出提示框報警。

3、當超過一定時間(這裡設定為5s)沒有接收到資料時,彈出提示框報警,下一次如果需要接收資料,必須先點選重新整理按鈕。

溫度采集系統上位機設計

下面簡單說一下它的開發流程。省略一些初始的步驟,可以參考之前寫的文章:使用C#開發第一個應用程式

開發平台:Microsoft visual studio 2019

開發語言:c#

(1)選擇好使用到的控件

本次使用到的控件主要有:

按鈕:button

下拉框:ComboBox

單選框:radio button

文本:label

序列槽:serial port

定時器:timer

(2)設定屬性

主要是設定各個控件的初始值之類的。比如剛啟動軟體時下拉框的值是多少,單選框選的是哪個,文本顯示什麼,序列槽的序列槽号和波特率,定時器定時間隔這些,都可以在控件的屬性裡面設定。

(3)編寫代碼

最核心的部分就是要從序列槽那裡讀出資料,然後把它放在label文本處,裡面有一些細節,比如數字與字元串之間的轉化,十進制與十六進制的轉化,序列槽号那裡采用了掃描的方式,可以自動掃描出有用的序列槽。另外還設計了當5s之内沒有收到資料就彈出提示框發出警告,這個是靠定時器做到的。

這裡就簡要介紹一下核心部分,其他的細節就不多說了。

a、序列槽讀出資料,并且顯示

data = (byte)serialPort1.ReadByte();//字元串方式讀
           

複制

b、區分不同采樣點的信号來顯示

這裡是通過一次連發兩個位元組來實作的,第一個位元組用來标記是哪一路信号,第二個位元組是真正的溫度資料。

if (data == 0x03)
                    {
                        data = (byte)serialPort1.ReadByte();//字元串方式讀
                        if(data>40)
                        {
                            System.Media.SystemSounds.Asterisk.Play();//發出警告聲音
                            MessageBox.Show("溫度太高了!!!", "警告!!");//彈出提示框
                        }
                        string str = Convert.ToString(data, 10);
                        label4.Text = str + "℃";
                    }
           

複制

c、當一定時間未檢測到資料,彈出提示框

private void timer1_Tick(object sender, EventArgs e)
        {
            count++;
            if(count>=50)      //定時5s鐘
            {
                count = 0;
                label4.Text = "--";
                label5.Text = "--";
                label6.Text = "--";
                timer1.Stop();
                System.Media.SystemSounds.Asterisk.Play();//發出警告聲音
                MessageBox.Show("溫度接收不正常!!!", "警告!!");//彈出提示框
            }
        }
           

複制

這是通過定時器來實作的,定時器每隔100ms進入定時器事件,然後在定時器事件函數裡面對count值加1,當加到50,即5s鐘時,就彈出提示框,并且關掉定時器。另外在序列槽接收事件裡,隻要接收到新資料,就對count值清0,這樣就可以實作要求了。另外還需要注意的就是在計時到了之後,要關掉定時器,否則一直計時,可能會出現下面這種bug

溫度采集系統上位機設計

關掉定時器就可以解決這個問題,但是這會帶來另一個問題,那就是定時器關了,那麼這個功能不就沒了嗎?是以必須要在合适的時候再開啟定時器,本來是希望在序列槽接收事件裡面打開定時器的,但是發現沒有用,于是,就單獨設計一個重新整理按鈕,用來打開定時器。

在定時器關了之後,必須要點選重新整理按鈕,才有資料顯示,否則不顯示,這樣有一個好處就是,如果沒有設計這個功能,那麼當你長時間沒有收到新的資料的時候,它上面還保留着上一次顯示的内容,這會給人帶來誤會,而加上這個功能,則保證了顯示的資料是最新接收到的。

另外還有序列槽掃描功能,實作的思路也就是在初始化的時候去挨個試能打開的序列槽,如果能打開就把序列槽号顯示一下,之後再關閉,否則不顯示,這樣顯示出來的就是目前可用的序列槽。

其他的細節就自己注意一下就行了。以後關于上位機的介紹也是隻介紹最核心的部分,其他的細節就不多說了。

背景回複“溫度采集系統上位機”擷取源碼