单片机裸机编程,作为modbus主设备,每秒发送十多帧固定数据。原设想发送间隔固定几毫秒,不做从设备返回数据的接收判断。
现在想了想,这样的话,发送下一帧数据时,可能正好从设备响应上一帧数据正好也要发送数据,这样就冲突了吧?
离线
是的,会冲突;主设备会收不到从设备的回复
离线
@海石生风
用的是rs485,一直是用一个单片机io口管脚控制/rd和de管脚的,没法实现同时发送和接收...
我还是想想办法,发送后就等待串口接收吧,或者等到超时。
离线
既然做主设备那么就不用考虑总线冲突的问题。因为总线数据通讯是由主设备决定的。
不判断从设备回传,那么假设一个回传延时就好了,在这段时间之后再发第二个数据包。
离线
既然做主设备那么就不用考虑总线冲突的问题。因为总线数据通讯是由主设备决定的。
不判断从设备回传,那么假设一个回传延时就好了,在这段时间之后再发第二个数据包。
主要是这个回传时间不确定,我板子和pc上的ModbusSlave工具通信,通过串口监控软件监控。
发送时间间隔一开始设置10ms,发现有些就返回就没看到。
设置100ms间隔吧,我想每1s秒执行一遍modbus发送,但是有20多帧,100ms间隔就超了。
离线
Modbus协议, 通信控制是由主控端控制的.
从端只有在收到主控端的通信帧时, 才向主控端发送应答帧, 没收到主控发来的通信帧后, 从端不可以乱发数据.
因为主控端发送的通信帧, 是包含从端 地址的, 地址对不上的从端, 别乱发数据.
从始至终, 从主控端看来, 一个时刻都只与一个从端通信, 所以不存在冲突的问题.
唯一的问题是, 主控端发送完通信帧后, 要等待一定的时间, 等待接收从端发来的数据, 这个时间控制不好,是有可能丢帧的.
离线
楼主问题是从机回传数据延迟大,加大单节点超时等待时间,整个轮询周期过长?能否加多主机端口,一个端口轮询一部分?
离线
测试了下,给modbus从设备发送命令到返回数据,大概时30ms左右。那么我现在发送间隔设为50ms,发送12帧,大概600ms多,在1秒内可以发完。
离线