|
用了一個(gè)星期的時(shí)間,現(xiàn)學(xué)了另外一種GUI設(shè)計(jì)工具,把軟件重寫(xiě)了一番,使它能夠在Windows上面工作。
繪圖時(shí)調(diào)用的是matplotlib,這是一個(gè)基于Python的開(kāi)源項(xiàng)目,旨在為Python提供一個(gè)數(shù)據(jù)繪圖包,差不多可以當(dāng)成MATLAB用。手頭暫時(shí)還沒(méi)有傳感器,先用Arduino UNO模擬了一下。
寫(xiě)完進(jìn)行測(cè)試的時(shí)候,軟件不僅卡頓,還時(shí)不時(shí)拋出異常。畢竟幾乎軟件的每個(gè)過(guò)程都依賴著經(jīng)由串口回傳的數(shù)據(jù),數(shù)據(jù)一出問(wèn)題,牽扯太多。經(jīng)過(guò)一番優(yōu)化,異;疽呀(jīng)處理掉了,卡頓也有了些許改善。盡管可以用于測(cè)量,但繪圖的時(shí)候還是讓人看得揪心。
大概是當(dāng)初的設(shè)計(jì)思路就有問(wèn)題。目前的工作過(guò)程是這樣:上位機(jī)(電腦)下達(dá)一個(gè)命令,下位機(jī)(單片機(jī))就驅(qū)動(dòng)相應(yīng)的傳感器測(cè)量數(shù)據(jù),然后回傳;上位機(jī)再下達(dá)另一命令,下位機(jī)繼續(xù)測(cè)量、回傳。十二個(gè)都接上的話,一個(gè)循環(huán)電腦就要下達(dá)12次命令,要等待接收12次數(shù)據(jù)。這樣的話,再加上實(shí)時(shí)更新圖象、訪問(wèn)數(shù)據(jù)庫(kù),軟件就比較忙。而且只要下位機(jī)回傳一個(gè)錯(cuò)誤數(shù)據(jù),上位機(jī)軟件測(cè)量進(jìn)程就會(huì)停止。
改進(jìn)的話大概可以這樣設(shè)計(jì):上位機(jī)軟件只下達(dá)一次命令,然后下位機(jī)逐個(gè)驅(qū)動(dòng)接在上面的傳感器進(jìn)行測(cè)量,一個(gè)周期后,一次性回傳數(shù)據(jù)。上位機(jī)軟件只需要在線程里面檢測(cè)數(shù)據(jù)緩存區(qū)就可以了,負(fù)擔(dān)大大減輕。這樣設(shè)計(jì)的話,容錯(cuò)的能力也會(huì)好很多。甚至還想過(guò)下位機(jī)直接用Arduino,但是,幾乎就是推倒重來(lái)……況且,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)保存到excel中的腳本才剛寫(xiě)好,還沒(méi)整合進(jìn)軟件,加之windows這邊的軟件打包也需要時(shí)間去學(xué)習(xí),估計(jì)我是不會(huì)再去弄一遍了。
最開(kāi)始只有一個(gè)傳感器,目的也比較簡(jiǎn)單,能讀出數(shù)據(jù)就可以了。也是邊用邊學(xué),所以,目的簡(jiǎn)單,過(guò)程不簡(jiǎn)單。后來(lái)有了三個(gè),按照原來(lái)的思路,軟件不用負(fù)擔(dān)太多,繪圖也只是簡(jiǎn)簡(jiǎn)單單一股腦把所有傳感器的數(shù)據(jù)在一張圖上畫(huà)出來(lái),沒(méi)有坐標(biāo)的變化,所以只能從圖上看到一段時(shí)間內(nèi)的變化趨勢(shì)。再加上設(shè)計(jì)硬件,幾乎也就沒(méi)考慮過(guò)軟件的問(wèn)題了。現(xiàn)在要接入12個(gè),繪圖也開(kāi)始單獨(dú)處理數(shù)據(jù)了,切換的時(shí)候,卡頓現(xiàn)象嚴(yán)重。
自主學(xué)習(xí)新知識(shí)的習(xí)慣是需要用到才學(xué)、邊用邊學(xué)。這樣的話會(huì)走好多彎路,目的達(dá)成后,一反思盡是郁悶。畢竟,更多的時(shí)候想做的是一個(gè)系統(tǒng),盡管比較小,但也不是僅僅習(xí)得一方面的知識(shí)能夠完成的。所以,盡管覺(jué)得這種習(xí)慣或者方法不好,但是囿于時(shí)間、精力,甚至是積極性,估計(jì)以后還是會(huì)保持下去。
貼張圖。
|
|