不想去成爲一個偉大的程序員,只想成爲一個具有良好習慣的優秀程序員。
前言
最近在做研發一個基於alios平臺的項目,這兩天在實現一個與modbus設備交互的功能,在基於alios提供的modbus接口開發時也有一些想法還有發現了一個bug,編寫這篇文章來記錄一下。
正文
1.關於alios中modbus接口的一個bug
在調試過程中,由於採用的是modbus rtu比起ascll模式不穩定些,因爲RTU是通過字符間隔時間來判斷一幀的完整性。
當在出現響應幀錯誤時, alios提供的modbus雖然提示“frame is too short or CRC error”但是mbmaster_read_holding_reginster接口返回的是成功的,結果應用層調用認爲是正常的,所以導致邏輯錯誤。
原因如下:
原因是modbus解包函數adu_disassemble函數沒有進行錯誤的判斷,當你解包錯誤後不返回響應幀錯誤,然後判斷接收數據不是異常碼就認爲響應正常。
解包的接口如下:
2.提供的功能碼有限
modbus的接口只提供了線圈以及寄存器的讀寫,一些其它的功能碼你需要自己處理,這個根alios本身的定位有關,它是用modbus對接一些modbus傳感器設備,操作線圈與寄存器即可。
文章每週持續更新,原創雖短,確不容易,歡迎大家點贊關注,一起交流技術一起提升成長。