今日记录一些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初始化线程: