1.只要仪表能支持一直读写的就可以采用这种方式,特别是仪表寄存器要支持一直写的状态。
2.需要明确指针指向的是接收数据还是要发送数据
3.程序代码如下
3.1初始化请求位[请求通讯位]清零,modbusRTU重试次数为0
3.2初始化指针
3.3 主站MBUS_CTRL完成后,下一扫描周期置位请求位,也可以网络4,再下一扫描周期同样可以置位请求位
3.4 进行从站的读写操作,同时提取出MBUS_MSG的通讯错误到存储通讯码寄存器内
3.5MBUS_MSG完成后,指针移位更新,准备下一MBUS_MSG读写数据
3.6本例是设定的是对从站3个读写操作,对从站数量清零,从头再轮询
3.7 数据块的数据如下
VB0 1
VB1 0
VD2 40001
VW6 2
VB8 2
VB9 0
VD10 40001
VW14 2
VB16 3
VB17 0
VD18 40001
VW22 4
3.8用软件作从站,测试结果如下
总结:本程序结构简单,对多仪表的读取数据程序修改很方便,缺点是指针地址理解稍有点难度,同时对所要写的数据没做判定,一直都在写操作。