前段時間做單片機系統、電路板、控制器、儀器、物聯網、工控、電子產品、軟件開發項目時“接診”了一個“病人”:是一臺裝置,它的主控板實現了控制3臺泵,采集傳感器信息,主控板的一個串口用TTL電平與自帶的一個觸摸屏A通信,主控板的另一個串口用485 & Modbus RTU協議與觸摸屏B通信,觸摸屏B帶2臺裝置,出現問題是其中一臺裝置的一個數據在觸摸屏B上顯示延遲。
1、系統詳細信息
主控板處理器是STC單片機,觸摸屏A是淘晶馳7寸屏,觸摸屏B是昆侖通態10寸屏,泵是直流12V/13W的隔膜泵,系統電源用的是12V/5A的電源適配器。
2、出現了什么問題?
在啟動裝置后,各個裝置與自帶的觸屏A參數顯示與控制正常,各個裝置與連接的觸摸屏B控制功能正常,但是在觸摸屏B上參數顯示有一個裝置(如裝置2)的一個數據不正常,出現很長時間數據不更新的情況。
3、可能的原因
懷疑泵的電機導致485信號干擾:
由于在每一臺裝置里布置了3臺12V直流電機,電機在運行時可能產生電磁干擾導致485電平錯誤。
那么,先采取的解決方法是將裝置內外的485電纜由并線改為雙絞線,并串磁珠,這在理論上是可以降低電磁干擾對485信號的影響。
那就試一試,不過盡管采取了換雙絞線串磁珠的的措施,但是數據不更新的現象依然存在,那么把485芯片和單片機也換了,但是問題也沒解決。
既然不是硬件問題,那么看看程序:
由于在昆侖通態觸摸屏組態Modbus RTU協議時數據更新是查詢反饋法,就是觸摸屏發送讀指令,主控板需根據要求反饋數據。
是不是在主控板里觸摸屏的讀指令多了被覆蓋了?那么在主控板的程序里除了收到觸屏的讀指令后反饋之外,再加個定時發送數據給觸屏。但是經測試,觸屏上數據長時間不更新的現象還是存在,看來這也不是主要問題。
最后到觸屏組態界面,發現“通訊等待時間”為200毫秒,疑似有點問題,“通訊等待時間”是觸屏發送指令后收到返回幀的允許等待時間,超過這個時間數據會被丟棄。
而在本案里主控板里收到觸屏的讀指令之后可能不會馬上反饋數據,要等到while循環到了處理觸屏指令時才會向觸屏發送數據,這里在while循環里執行的代碼還有點多,有可能會超過200毫秒才會回復數據。
那么把“通訊等待時間”改為600試一試:見證奇跡的時刻到來了,把觸屏的這個參數改了之后,觸屏B與兩個裝置之間通信無比“絲滑”,觸屏上數據響應非常及時,問題解決,那么這個系統就“治好了”。
其實這真是一個小細節,“通訊等待時間”200是默認值一般無需修改,但是在不同的通信對應方可能會有不同的情況,這個參數也要根據系統情況做修改設置。這雖小,但也夠折騰,難在意想不到,項目經驗就是一步一步積累的。
一點小總結分享,全文完。
沙鷗 成都 2024年3月13日