| 作者 | 主题 |
|---|---|
|
Setrarin 侠士 经验值:1749 发帖数:139 精华帖:4 |
楼主
主题:IN_OUT引脚使用探讨 前段时间在项目上遇到一个问题,今天我把它抽象一个小程序,大家一块探讨下问题的奥秘。 1. 建立一个非优化的数据块,内容如图: 2.建立FB,在in_out引脚填写与数据块相同的变量,然后编写程序,分布通过inout引脚和直接访问的方式对数据块的变量进行赋值。 3。OB1调用FB, 引脚赋值 我先请大家预测下结果并测试下,看看结果与你的预期是否一致。
但行好事,莫问前程
|
|
mkas 侠士 经验值:1080 发帖数:125 精华帖:2 |
9楼
主题:回复:IN_OUT引脚使用探讨请看下面的解释: 优化访问块和标准访问块之间的参数传送 如果在块调用过程中将结构作为 in/out 参数传送到被调用块中,则系统默认将这些结构传 送为指针(引用调用)。 但如果这两个块的优化设置不同,则不适用:如果一个块的属性为“优化访问”(Optimized access),而另一个块的属性为“标准访问”(Standard access),则所有参数都始终作为副 本传送(传值调用)。 如果块包含大量结构化参数,这会很快导致临时存储区(局部数据堆栈)溢出。 如果异步过程(如 HMI 访问或中断 OB)原始操作数发生变更,则可能会导致错误发送。 如果在块处理后重新将副本复制回原操作数中,则将覆盖原操作数中因块调用过程中创建 副本而发生的异步更改。 通过将两个块设置为相同的访问方式,或者先将异步访问结果写入一个单独存储区,然后 再在适当的时间同步复制该区域,可有效避免这种错误的发生。
好好学习,天天向上
|