今日記錄一些smallmodbus 創建新的slave 從機 的過程,以及使用的關鍵點.
目錄
創建新的從機對應操作函數與buffer
創建新的從機線程與操作代碼:
slave使用的要點:
完整的slave代碼:
能正常通信:
創建新的從機對應操作函數與buffer
最主要的部分就是從 board_virtual.c 文件抽象新建出新的從機對應的操作函數:
可以看到,他原本就包含一系列線圈buffer以及對這些buffer的操作函數:
后續操作就是直接復制他們函數的本體,然后直接更改其調用的buffer 以及 宏定義最大下標的名稱,就行了。
最終 為了額外定義出一個slave 底層操作的函數與數組宏:
而復制改寫的函數與數組 、宏 效果如下:(寫在 board_virtual.h 文件)
例舉其對應函數,對照修改對比如下:
其余函數 與 數組 、 宏 基本都是如此修改 就行了:
新增這些操作函數后,給新定義的從機實例進行調用就行了,一般是在從機回調函數:
創建新的從機線程與操作代碼:
slave使用的要點:
1. 從機的線程要與給它填充buffer的線程分開
2. 定義modbus的地址在從機回調函數中 同時?注意數組下標的計算
3.write寫線圈函數是給主機master用的,從機更新線圈與寄存器是update
4.修改地址范圍同步修改board_virtual.c文件中定義的數組最大下標宏
5.modbus_slave_wait_handle();函數最后一個傳參,不能調用MODBUS_WAITFO_REVER詞根,否則從機只會回復一次! 要使用MODBUS_WAITFO_NO
6.
完整的slave代碼:
這段需要注意以下,我這個G4_485_EN();函數用于485使能腳,但這里我用的TTL通信,所以注釋了對使能腳的操作!
對線程的創建是有倆個線程,一個是slave線程,一個是flush更新寄存器的線程
最后別忘了在主函數main.c初始化線程: