您现在的位置是:首页 > 电气技术 > 电气技术
s71200modbus主站轮询问题解决
来源:艾特贸易2017-03-18
简介s71200modbus主站轮询问题解决 S71200485通讯口上挂20个多功能 仪表 ,走modbus通讯协议。轮询一遍需要每台仪表读一次数据,写一次数据,按照例子来编一个轮询差不多要2分钟,能否在几秒
s71200modbus主站轮询问题解决
S71200485通讯口上挂20个多功能仪表,走modbus通讯协议。轮询一遍需要每台仪表读一次数据,写一次数据,按照例子来编一个轮询差不多要2分钟,能否在几秒钟之内完成上述功能,如何实现比较快?
能否使用循环中断来实现轮询功能?
轮询可以考虑两种方式:
1、定时轮询,比如第1秒读1#表,第2秒读2#表以此类推
2、通过通讯成功标志位轮询,即与读1#表成功后,读2#表;读2#表成功后,读3#表。以此类推。
对通信实时性要求比较高的话,推荐采用第2种方式。
具体实现方法:
1、用一个计数器对通信功能块的DONE和ERROR位进行计数,
2、通过该计数器的值来触发读写功能块,比如计数器=1,读1#表;计数器=2,读2#表。
3、可以多试几次,确定一个比较合适的通信超时时间(超时时间太长的话,影响通信速度)。
4、1200MODBUS指令的背景数据块里有个“RETRY重试次数”的变量,默认为2,可以把该变量改为0。
想用PLC1200主站通过串口轮询两个2号和3号站PLC200,用什么方法进行轮询?发现PLC1200的MB—MASTER中的done不是置1.
1:S7-1200和S7-200 都支持自由口协议的,所以你通过MODBUS 的方式来进行通讯时没有问题的。
2:轮询时,REQ 采用上升沿出发,由于MODBUS RTU 消息帧中带有地址,轮询时可以按照地址来讲数据存放到正确的地址中,这点你不用担心
3:MB_MASTER中的DONE 应该是置位的,当然如果你不用DONE 你可以用BUSY 来代替,因为REQ上升沿触发命令的发送后,如果通信请求还在执行中BUSY 一直置1 的,所以当BUSY 置0 后,你可以讲SLAVE ID 号从2 变成3。通过
点击排行
