回复:1500/1200中的Modbus TCP(MB_CLIENT)可以轮询吗

yzs

  • 帖子

    436
  • 精华

    7
  • 被关注

    47

论坛等级:侠圣

注册时间:2013-12-27

黄金 黄金 如何晋级?

发布于 2019-09-11 11:50:32

6楼

经过测试,在MB_CLIENT的功能块中接收数据时只要数据符和Modbus规约即认为接收数据成功,并没有辨认该数据是否为当前所请求的数据。如发03 03 00 0D 00 22 55 F2,此时接的是01 03 02 43 6A 09 5B那么MB_CLIENT也是认为接收的数据是正确的。

因此如果需要确保轮询正确就需要保证在一个通讯周期内只发送一次数据,接收完成后或者通讯超时后再发送下一次数据。

经过一段时间的模拟测试,MB_CLIENT功能块如果需要进行轮询编程时需要注意以下几点问题。

1.     MODBUS从站地址MB_Unit_ID需要进行一个通讯超时自动轮询下一个地址的设定,简单的可以采用一个定时器进行一个自加1的控制,延时建议为500MS。如果有设备通讯(DONE)成功则自加1,定时器重新计时。

2.       REQ必须采用脉冲控制,当MB_Unit_ID改变时REQ置1,经过MB_CLIENT功能块后复位。

3.       Rcv_Timeout默认2S,需要改成0.5S和通讯超时定时器时间设置一致。

4.       如果轮询的设备数据的长度不一致时建议每次通讯成功后将MB_DATA_PTR数据清0。

经过以上设置可实现通讯超时500MS,通讯成功时立刻进行下个设备通讯。由于保证了每个通讯周期只发送一次数据请求,那么在该通讯周期中接收的数据必然是正确的数据。



评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10590条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。