上位机上不知道你用的是不是modbus调试助手还是自己编写的调试软件,如果是调试助手的话那就是你的下位机的程序问题了,但如果是你自己编写的软件那就不好说了,所以在你调试的时候一定要保证调试的一端或者被调试的一端中有一端是正常的,否则很难确定问题的所在。
通信超时最终还是你的下位机没有响应,就是你的单片机没有向外发送数据,所以你就要看看你的下位机在什么时候才满足发送数据的条件(前提是你的下位机通信是正常的,不管是不是MODBUS协议下,可以先用串口调试助手来检验一下你的下位机是不是通的,如果下位机收发都正常,那就得看看你的下位机的程序是如何处理该协议的了),你可以先去掉对接收数据的判断语句,让下位机接收完数据后不用任何判断直接发送几个数据,看看上位机能不能收到,这样一步一步查找问题的所在,我也编写过51单片机MODBUS的程序,并且和s7-200通信正常,有问题可以交流一下。。。。。。。。
MODBUS写命令分为5号单写位,15号多个位写,6号单寄存器,16号多寄存器写。如果读命令响应正确,但是写命令超时,很有可能是下位机仅支持单独的位或寄存器写操作,不支持多寄存器操作。
地址不对或者线路不通