上位機采用的是組態(tài)王這款監(jiān)控軟件,單片機采用的是STM32,系統(tǒng)的總框架分為4層:
服務(wù)器(組態(tài)王)——網(wǎng)關(guān)2——網(wǎng)關(guān)1——節(jié)點
通信過程中遇到的問題如下:
1. 將單片機與組態(tài)王連接完成后,組態(tài)王上沒顯示
(1)首先檢查電路有沒有連接正確(已經(jīng)確定連接無誤)
(2)利用串口查看網(wǎng)關(guān)1跟網(wǎng)關(guān)2打印出來的數(shù)據(jù)(對照代碼中的內(nèi)容,確定運行到每一步應(yīng)有什么標(biāo)志,可以通過打印不同的數(shù)據(jù)來監(jiān)測運行到哪一步)
2. 網(wǎng)關(guān)2打印的數(shù)據(jù)總是顯示網(wǎng)關(guān)2已經(jīng)給網(wǎng)關(guān)1下發(fā)查詢命令了,但是卻沒有收到網(wǎng)關(guān)1給它回復(fù)的數(shù)據(jù),而且網(wǎng)關(guān)1也沒有數(shù)據(jù)打印
分析可以知道網(wǎng)關(guān)2已經(jīng)給網(wǎng)關(guān)1下發(fā)查詢命令了,但是可能它的命令沒有下發(fā)成功卡在485那塊,導(dǎo)致網(wǎng)關(guān)1沒有接收到命令所以沒有打印數(shù)據(jù),或者是網(wǎng)關(guān)2已經(jīng)成功發(fā)送出去,只是網(wǎng)關(guān)1不接收而已,又或者是網(wǎng)關(guān)1已經(jīng)接收到了但沒有解包執(zhí)行。
出現(xiàn)這種現(xiàn)象,原因有以下幾種:
(1)程序跑死了
(2)485有問題
(3)硬件問題
因為這程序在之前一直跑得沒問題,所以暫時先排除代碼問題,先檢查485那塊的線路
檢查結(jié)果:線路沒連錯,但是485線那塊的RX,TX,GND這3根線裸露在空氣中,而且有幾根是相互接觸了,用絕緣膠布包好之后,再一次通訊,這時網(wǎng)關(guān)1和2都有數(shù)據(jù)了,但是組態(tài)王還是沒有顯示
(網(wǎng)關(guān)2)
由我這個網(wǎng)關(guān)2打印的數(shù)據(jù)對照通信協(xié)議可知,網(wǎng)關(guān)2已經(jīng)把節(jié)點上報的所有數(shù)據(jù)都上傳給組態(tài)王了,而且打印出來的數(shù)據(jù)都是正確的,因為由系統(tǒng)的框架可知,節(jié)點的數(shù)據(jù)是通過485線傳給相應(yīng)的網(wǎng)關(guān)1的,網(wǎng)關(guān)1再將接收到的數(shù)據(jù)傳給網(wǎng)關(guān)2,網(wǎng)關(guān)2再將所有的數(shù)據(jù)打包上報給上位機組態(tài)王,每個網(wǎng)關(guān)1打印的數(shù)據(jù)都跟它底下連著的節(jié)點狀態(tài)一樣,所以網(wǎng)關(guān)1和網(wǎng)關(guān)2都沒問題。
3. 但是網(wǎng)關(guān)2已經(jīng)把網(wǎng)關(guān)1上傳的所有節(jié)點信息都上報給組態(tài)王的,但是組態(tài)王依然沒有顯示。
因為網(wǎng)關(guān)2跟組態(tài)王連接是通過一根USB轉(zhuǎn)RS232線,會不會是這根線有問題?
換一根,果然,組態(tài)王有顯示且顯示各實驗室的狀態(tài)都正確。
后來由于我們要弄一套試驗版,所以我們又得焊一套新的電源管理板子,一個網(wǎng)關(guān)2板子,一個網(wǎng)關(guān)1板子和五個節(jié)點板子。
4. 焊完之后,我們把各自的程序下進去,發(fā)現(xiàn)用不了,網(wǎng)關(guān)2和網(wǎng)關(guān)1都沒數(shù)據(jù)
后來我們采用替換法,用舊的那套網(wǎng)關(guān)1和節(jié)點板子替換新的,目的是檢測是否是新網(wǎng)關(guān)2出問題。
5. 替換之后發(fā)現(xiàn)網(wǎng)關(guān)2還是沒有打印出數(shù)據(jù),不用說組態(tài)王肯定也沒有顯示
我們先檢測硬件問題,發(fā)現(xiàn)網(wǎng)關(guān)2的器件不小心焊錯了,換回來之后,發(fā)現(xiàn)還是不行,后來我們自己寫個485調(diào)試的程序(含有對串口2的調(diào)用),發(fā)現(xiàn)這個程序跑不了,我們定位是板子的主芯片STM32F103有問題,先排除是不是芯片引腳虛焊,然后發(fā)現(xiàn)是這個芯片壞了(不過一般情況下芯片很少會壞的),換個新的芯片后,程序能跑了。而且網(wǎng)關(guān)1和2都打印出正確的數(shù)據(jù),組態(tài)王也顯示正確。
噢,還有一個補充的是,之前那套舊的板子,曾出現(xiàn)過這么一個情況:時而有數(shù)據(jù)打印,時而沒有。我們之前還以為是所處的環(huán)境干擾太大(有很多大型服務(wù)器在周圍),其實是串口排針焊接不良導(dǎo)致的。(那時還沒發(fā)現(xiàn)是USB轉(zhuǎn)232線損壞,所以網(wǎng)關(guān)有數(shù)據(jù),組態(tài)王沒顯示)
?所以綜合目前所出現(xiàn)的所有情況可以得出:上位機與單片機通信的問題大多都是出現(xiàn)在硬件問題上。
一、是否電路都連接正確?
二、是否焊接不良? 這步可以利用萬用表來一步步地檢測
三、485通信的那三根485線RX,TX,GND是否有接觸?
四、與上位機相連的那個USB轉(zhuǎn)232線是否損壞? ?數(shù)據(jù)傳送的過程可以用示波器來檢測,便于查看數(shù)據(jù)傳送到哪一步卡住了
在整個調(diào)試的過程中,我們得出一個很好的習(xí)慣,就是寫代碼的時候,最好加上一些標(biāo)志,比如程序運行到哪一步就會打印出哪些提示或者數(shù)據(jù),然后制成一個通信協(xié)議,方便以后出問題可以對照通信協(xié)議來找出問題所在。還有就是懂得利用一些相關(guān)的儀器來檢測問題。
評論
查看更多