《alios things開發系列》關於alios中modbus的開發記錄

不想去成爲一個偉大的程序員,只想成爲一個具有良好習慣的優秀程序員。

前言

最近在做研發一個基於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傳感器設備,操作線圈與寄存器即可。

文章每週持續更新,原創雖短,確不容易,歡迎大家點贊關注,一起交流技術一起提升成長。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章