回复:为什么MB_Client块可以使用同一个背景数据块多次调用,如何实现的?

已锁定

Setrarin

  • 帖子

    139
  • 精华

    4
  • 被关注

    101

论坛等级:侠士

注册时间:2016-08-10

普通 普通 如何晋级?

发布于 2022-07-05 10:09:10

12楼

展开查看
以下是引用yming在2022-07-05 09:20:48的发言 >11楼

内部有个机制,每次调用,需要比较所有输入。

只有所有输入没有变化的那个被激活的调用,才会执行输出。


这也是要求调用期间,输入保持一致性的一个原因吧。

以下是引用Setrarin在2022-07-04 17:24:26的发言 >8楼:那第三次调用被触发...

引用8楼详细内容:

那第三次调用被触发之后,怎么输出不落在第一个调用引脚,而刚好输出在第三个呢?

以下是引用yming在2022-07-04 16:56:40的发言 >6楼:这个MB_CLIEN...

引用6楼详细内容:

这个MB_CLIENT功能块的背景数据块,可以认为是Modbus TCP通讯处理器的数据缓冲块。

当REQ上升沿出现时,将所有输入接口参数,传送到背景数据块中;然后激活此协议的通讯处理过程。

这是异步通讯,BUSY=1;经过N个扫描周期,内部通讯任务才能完成。即:BUSY=0;Done/ERR=1(仅置位1个扫描周期。你必须在此周期内,处理、移动完成了的数据。)

若此时,REQ仍然=1;将开始下一次完全相同的通讯过程。(连续读或写);

此例中,利用上一次的Done/ERR,将此MB_CLIENT的REQ置一,把输入传送到它的背景数据块;启动通讯过程。BUSY=1;经过数个扫描周期等待,直到完成Done或者出错ERR。


早期的MB_CLIENT这样写法是不允许的。它要求在通讯期间,REQ上升沿激活后 - Done/ERR完成前,功能块的调用期间,输入应保持不变。

可能新版本有所改变?




以下是引用Setrarin在2022-07-04 09:27:10的发言 >3楼:那第三次的调用结...

引用3楼详细内容:

那第三次的调用结果为什么刚好输出给第三次呢?难道块知道同一周期被调用的次数?

以下是引用史德利古尔在2022-07-04 08:39:08的发言 >2楼:指令执行之后要几...

引用2楼详细内容:

指令执行之后要几个周期才会给出完成信号

yming大神说的有道理,我看了关于异步指令的帮助部分,里面也明确说明

“使用指令的作业标识输入参数。在异步指令的执行过程中,这些输入参数必须与执行

过程中的各调用相匹配。”

还有个疑问是第一个调用和第三个调用的参数是一样的,但是结果仍然可以正常完成,说明程序块不止使用参数做比较。

如果前三个调用块的参数都一样的,也是以上一个Done来顺序调用,就只有第三个块有输出。猜测还使用了参数堆栈之类的方法,而且程序还知道每次的执行是不是在同一个周期内。


但行好事,莫问前程
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10575条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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