您现在的位置是:首页 > PLC技术 > PLC技术

STL编程语言的暂态局部数据

来源:艾特贸易2017-06-05

简介用户使用暂态局部数据来完成在块处理期间产生的结果的中间存储。暂态局部数据只在块处理过程中有效,在块终止之后,其数据就丢失了。 暂态局部数据是 CPU 系统存储器中位于局部

    用户使用暂态局部数据来完成在块处理期间产生的结果的中间存储。暂态局部数据只在块处理过程中有效,在块终止之后,其数据就丢失了。

    暂态局部数据是CPU系统存储器中位于局部数据栈(L栈)的地址。当调用代码块时,CPU的操作系统为每个代码块提供暂态局部数据。当调用块时,L栈中的数值是半随机的。为了能够合理使用局部数据,必须在读以前先写入数据。当该块终止时,L栈分配给下一个被调用的块使用。

    块所需要的暂态局部数据字节数显示在块标题中,当调用块时,以这种方式,操作系统可获悉在L栈中有多少字节是有效的,也可以在块标题的入口处得知该块需要多少局部数据字节(在块打开时,在编辑器中利用FileProperties或当选择块时,在SIMATIC管理器中每一次利用“Genera1 - Part 2”选项卡的EditObject Properties)

    1.暂态局部数据的声明

    在代码块的声明部分声明暂态局部数据:

    ■在“temp”下,利用递增式编程。

    ■在面向源的编程情况下,利用VAR_TEMPEND_VAR

    18-2给出了声明暂态局部数据的例子,变量temp1位于暂态局部数据中,并且是INT数据类型;变量temp2REAL数据类型。

    暂态局部数据存储在L栈中的顺序与它们在数据类型声明时的一致。

功能块中局部数据声明的例子

    18-2    功能块中局部数据声明的例子

    2.暂态局部数据的符号寻址

    用户通过符号名称来寻址暂态局部数据,给这些符号分配名称要与块局部符号的规定一致。

    所有允许存储位的操作都允许用于暂态局部数据。但要注意,暂态局部数据位对于边沿存储器位是不适合的,因为它不能在相关块的外部维持其信号状态。

    用户只能在块中访问这个块的暂态局部数据(例外:调用块的暂态局部数据可以通过块参数来访问)。

    3L栈的容量

    L栈总的容量与CPU的型号有关。一个组织块程序里,在一个优先级中,暂态局部数据字节的有效数也是固定的。在S7-300(除了CPU 318)中暂态局部数据字节数是固定的。例如CPU 314,每个优先级是256个字节。在S7-400以及CPU 318中,当预置CPU时,用户可以根据需要设定暂态局部数据的字节数,这些字节数必须在相关组织块中被调用的块和这些块中依次被调用的块之间共享。

    艾特贸易网提示:编辑器也使用暂态局部数据,例如当传递块参数时。在编程界面将看不到这些暂态局部数据。

    4.启动信息

    当调用一个组织块时,CPU操作系统在暂态局部数据中传递启动信息。对于每个组织块,该启动信息包括20个字节,对所有的组织块几乎都是相同的结构。

    在每个所使用的优先级中,这20个字节的信息必须总是有效的。当为计算同步错误编写程序时(编程和存取错误),为这些错误组织块的启动信息至少要考虑附加20个字节,因为这些错误组织块(OB)属于相同的优先级。

    当为组织块编写块程序时,要声明该组织块的启动信息。该信息是强制性的。在“StandardLibrary”(标准库)中“OrganizationBlocks”(组织块)下有英文的声明样本。如果用户不需要启动信息,声明最初的20个字节就足够了,例如一个信息组(显示在图18-3中)。

在组织块中暂态局部数据声明举例

    18-3    在组织块中暂态局部数据声明举例

    5.暂态局部数据的绝对寻址

    通常情况下,用户通过符号寻址来访问暂态局部数据,使用绝对寻址的情况例外。如果对L栈中的数据存储方式很熟悉,则可以通过计算得到静态局部数据所在地址,同时可在已编译的块变量声明表中看到地址列表。

    暂态局部数据的地址标识符是L,位寻址用L、字节寻址用LB、字寻址用LW、双字寻址用LD

    举例:对于绝对寻址,用户想要保存16字节的暂态局部数据,并通过字节和位两种方式访问这些字节中的数值。为此,在局部数据区域的开头先创建一个字段,寻址便从0开始。在一个组织块中,启动信息声明后紧跟该字段声明,此时寻址是从20开始的。

    艾特贸易网提示:暂态局部数据的绝对寻址只在基础语言STLLADFBD中适用。对于SCL暂态局部数据,只能用符号寻址。

    6ANY数据类型

    尽管是一个特例,暂态局部数据中的变量可以作为ANY数据类型声明。

    利用STL,用户可以创建一个ANY指针,该指针在运行时可以修改。

    利用SCL,在运行时用户可以把另外一个(复杂)变量的地址分配给暂态ANY变量。