搜索
写经验 领红包
 > 职场

优化的块访问是什么(优化块的访问从哪里勾选)

导语:程序块的优化访问

一般全局数据块的优化访问都知道,实际在程序块,如OB,FC,FB也都存在优化访问性能。

Main程序OB1,默认就是优化访问。

而新建的FCFB等,则在默认优化的基础上可以进行手动更改。

一、程序块优化访问的优势:

西门子资料

优化访问方式的优点:

1、DB本身就是数据区,优化后,提高了访问性能,每个变量可以单独设置保持特性,没有绝对地址,只能符号访问。符号访问的具体地址,这是操作系统实时分配,优化访问,使占用资源优化。

2、对于代码块,优化后,优化主要体现在临时堆栈保存的临时变量,对于FB优化后调用时产生的实例DB也是优化的,特性与优化的全局DB基本一致。

3、优化后的代码块中,局部堆栈采用优化方式存储,没有了便宜了信息,与优化DB一致,另外调用时,临时变量会自动初始化,避免数据的不确定性,减少程序漏洞。

4、OB会生成优化启动信息,是一些输入形参,不再占用局部堆栈空间。

二、局部数据堆栈分配机制

西门子资料

局部数据堆栈分配机制:

上图是描述程序执行时,局部数据堆栈的分配机制。

调用含有临时变量的块时,系统会分配所需的局部堆栈存储空间,如果块程序嵌套了其他块,调用时,会在原有堆栈存储区继续叠加存储空间,例如图中的2、3步。当块内指令执行结束,分配的局部堆栈资源释放,返回主调程序块继续执行,例如4步。如果再调用其他块会使用之前别的块释放的空间,例如图5步,局部堆栈的存储空间是公用的,物理地址和变量不一一对应,所以不能跨周期读取数据。但是我们看到,FC17的局部堆栈占用空间是固定的,且没有其他块使用,数据即便跨周期也能读到。但是一旦程序调整,OB2中调用的其他块。FC17将不能正确读到跨周期的临时变量数据。如果编程不规范,就会产生隐患。

对于每个程序执行级别或优先级(如OB1,其包含所调用所有块),均预留一个单独的局部数据堆栈。也就是说,CPU的L堆栈上预留了一个具有定义大小的段(存储器空间的分配或预留)。

OB1的局部变量/操作数以及在OB1中或由OB1调用的块的局部,临时变量(函数和函数块)都存储在该局部数据堆栈中。

可以使用引用数据(reference data)工具来显示程序结构(Program Structure), 以查看S7程序给局部数据堆栈产生的负荷大小。

三、临时变量初始化

优化后,临时变量的调用会自动初始化。

对于优化的代码块,局部堆栈分配的存储空间,在块调用时能自动初始化。而非优化的FCFB中的临时变量,则变量值不确定,需要在程序开始部分手动编程进行初始化。 这样对于不规范的编程,肯定读不到预期的效果,消除了程序的不确定性,防止漏洞的产生。

注:资料来自西门子,如有问题请告知删除。

本文内容由小若整理编辑!