回复:Modbus_RTU多站“轮询”,是说这个站的信号没有读写结束,就不能去读写下一站的数据吗?还是......

昔日如诗

  • 帖子

    826
  • 精华

    3
  • 被关注

    10

论坛等级:侠圣

注册时间:2018-04-17

白金 白金 如何晋级?

发布于 2019-09-20 23:24:43

5楼

展开查看
以下是引用宝冬在2019-09-20 23:14:41的发言 >4楼

1、通常每一次读或写的通信操作的结局要么是Done,要么是Error。无论是哪一个,都代表本次通信结束了,都用来触发下一个读写操作。超出时限是Error的一种情况。

2、MB_Comm_Load是用来设置PLC的485端口参数的,这配置通常运行中是不变的,所以一般上电后一个端口初始化一次就完了。这指令是给端口用的和站点无关,一个端口带10个站点,也只用一次。

3、MB_Master指令是用来执行读写操作的,轮询就是依次反复的使用这个指令。使用这条指令有如下两种风格。(A)每一次读写都单独使用一个MB_Master指令。如果是10次读写的轮询,那就在程序中写了10个MB_Master指令,每个指令的变量都单独配置。(B)无论有多少次读写,程序中只用一个MB_Master指令。这个指令的变量是采用参数化的方式,每一次调用前,变量内容都会更新,以完成不同的读写操作。

4、在3的基础上,可以对MB_Master指令进行进一步封装,形成通用的站点通信FB。对于任意一个给定站点的、任意次数的、各种类型的、类型和数量可以动态变更的读写操作,该模块都可以完成。与站点通信相关的所有参数和信息,和通信后各种信息的处理,需要有另外的FC或FB,与站点通信FB进行流水线式的配合和调度,以完成若干不同站点的依次通信。

5、在4的基础上,可以对各个站点的通信质量进行监控,包括错误率、错误代码、每个站点的通信队列执行时间等。通信差的可以淘汰,改善后可以召回,或者强制召回。为了提高效率,写入成功后,就不再继续写入,直到下一次需要写入的数据发生变化。如果有必要,485端口可以在运行中重新初始化,有些应用中可以支持485模块在线插拔。


自己知道的Modbus-RTU使用的套路也就这些供参考。博途中Modbus-RTU指令有新旧两套,我一直用旧的。新的功能多一点。

受益非浅。谢谢!

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15371条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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