恭喜,你发布的帖子
发布于 2019-09-20 23:24:43
5楼
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指令有新旧两套,我一直用旧的。新的功能多一点。
受益非浅。谢谢!
请填写推广理由:
分享
只看
楼主