发布于 2015-05-11 21:59:48
1楼
兄弟,你的程序好像不对,不知道这是不是你的全部程序?还是说截图了一部分?
1、你靠时间1s轮询一次,你可以根据DONE位来轮询;
理由:如果你要是设定按照时间轮询,那么从站即使在20ms内已经完成应答,你还得继续等待980ms才能继续轮询下一个从站,有点浪费时间吧,一般从站的应答时间(变频器)为10~20ms,按照你的程序你轮询1个站的时间基本相当于轮询了几十站,
如果你从站是变频器,那么你把MBUS_CTRL初始化的那个Timeout 设置为30ms~50ms(考虑通讯质量偶尔干扰有延时),然后依靠done位来激活MBUS_MSG,这样正常通讯情况下每个从站的轮询时间大概也就20ms不到,即使其中有的从站通讯失败,那么主站最多等待3×50=90ms时间也会把done位置1,90ms时间对于一般的控制可以忽略的,你采用MODBUS肯定是要去实时性不需要太高的,
你好好看下西门子举的例子,就知道怎么轮询了
2、还有,看你贴出来的程序根本就没有循环起来啊,难道只需要读写一次吗?