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