当使用 HMI 变量作为块输入输出参数时,为什么有时会出现通过触摸屏不能修改 CPU 数据?

STEP 7 (TIA Portal) 在内部传送数据可以使用指针方式或者复制方式,取决于参数的传送区域和数据类型。

如果数据作为副本传送(值传递),块调用时操作数的值将被复制到被调用块的 Input 参数。例如,FB 的副本是存储在背景数据块,FC 的副本是存储在块堆栈区。

如果使用结构型变量(像数据类型ARRAY,STRUCT,STRING,...)作为块参数,那么 STEP7 是以指针传递数据的(引用传递)。

以下表格对比了两种数据传递方式之间的不同之处。

数据作为副本传递(值传递) 数据作为指针传递(引用传递)
块调用时,块使用的是参数的值,并不直接使用参数。 块使用参数所指向的内存地址。
写访问只改变副本,而不会改变块中的值。 写访问直接改变参数。
*副本需要额外的内存。 因为没有副本,所以不需要额外的内存。

更多的信息请查阅 Programming Guideline for S7-1200/1500 90885040

*备注

在使用 InOut 参数的情况下,即便副本并没有在块中被修改,在块结束的时候操作数的副本也将写入操作数。这意味着在块运行期间,操作数(或操作数的一部分)的异步改变(通过 HMI 写访问或者更高优先等级的运行系统)将会丢失,因为块被调用后,操作数的值会被覆盖。

补救方法
在共享数据块中定义变量,并且使用共享DB块变量作为块参数。

在 S7-1200/S7-1500 块调用中,被传递的变化的数据存储在 InOut 参数中,那么以上所述内容也会发生。例如:
一个有 “优化的块访问” 选项的功能块,调用一个没有 “优化的块访问” 选项并且包含一个使用 PLC 数据类型作为 InOut 参数的功能块。

备注
不要使用M存储区的原因如下:

  • 由于兼容性的问题,M存储区并没有被优化,所以优化的全局DB比M存储区更好用。
  • 每种控制器的M存储区大小不一样,所以使用共享 DB 块就可以随意使用在程序中。

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc322489.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论