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

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

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

简介静态局部数据是功能块存储在它的实例数据块中的地址。 静态局部数据是功能块的“存储器”,其中的数据一直保留到程序来改变它们,就像在全局数据块中的数据地址。 静态局部数

    静态局部数据是功能块存储在它的实例数据块中的地址。

    静态局部数据是功能块的“存储器”,其中的数据一直保留到程序来改变它们,就像在全局数据块中的数据地址。

    静态局部数据字节数是由变量的数据类型和不同CPU规定的数据块长度限定的。

    1.静态局部数据的声明

    在功能块的声明部分声明静态局部数据:

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

    ■在VAREND_VAR之间,采用面向源的编程。

    首先声明块参数,然后是静态局部数据,最后是暂态局部数据。

    静态局部数据按照声明顺序存储在块参数之后的实例数据块中,并且与其数据类型一致。26.2节详细描述了数据块中数据存储的信息。

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

    通过符号名称来访问静态局部数据,要根据块局部符号规定给这些符号分配名称。

    在全局数据块中,连接数据地址所使用的全部操作都可以访问静态局部数据。

    举例,功能块“Totalizer”把一个输入值加到静态局部数据中一个存储的数值上,且将和( Total)存储在静态局部数据中,下次调用时,输入值再次加到这个总和上,依此类推(如图18-4所示)。

   Total是数据块“TotalizerData”中的变量,是“Totalizer”功能块的实例数据块(用户可以在符号表中自行定义所有块的名称,但必须坚持可应用的规则)。实例数据块具有功能块的数据结构,例子中包含两个INT变量,名称为In(输入)和Total(和)。

    3.在功能块外存取(访问)静态数据

    通常,静态局部数据仅在功能块内部处理,但由于它们存储在数据块中,所以可以利用“DataBlockName.AddressName随时存取静态局部数据,与访问一个全局数据块变量的方式相同。

静态局部数据和局部实例的举例

    18-4    静态局部数据和局部实例的举例

    在下列简短的例子中,数据块叫做“TotalizerData”,数据操地址称为Total,正确的存取指令如下:

   L    "TotalizerData".Total;

   T    MW  20;

   L    0;

   T    "TotalizerData".Total;

    4.局部实例

    当调用一个功能块时,用户通常要为调用指定实例数据块,然后功能块将其块参数和静态局部数据存储在此实例数据块中。

    STEP 7 V2版开始,可以产生“多个实例”,也就是在另一个功能块中调用功能块。被调用的功能块的静态局部数据(和块参数)是调用块静态局部数据的一个子集,前提条件是调用功能块和被调用功能块两个都是块版本2,也就是两个都有“多个实例能力”,这允许用户嵌套功能块调用多至8层。

    举例(如图18-4下所示):在功能块“evaluation”静态局部数据中声明变量Memory,该变量与功能块“Totalizer”相对应且与其数据结构相同。现在可以通过变量Memory调用功能块“Totalizer”,但没有一个指定的数据块,因为Memory的数据是“块局部地”存储在静态局部数据中的(Memory是功能块“Totalizer”的局部实例)。

    存取在功能块“evaluation”的程序中Memory的静态局部数据,与通过指定结构名称(Memory)和组件名称(Total)存取结构组件方法相同。

    实例数据块“evaluationData”包含变量MemoryInMemory.Total,可以作为全局变量寻址,例如“evaluationData”.MemoryTotal

    在本书所附的磁盘中,在“Program Flow Control”(程序流程控制)程序部分的功能块FB 6FB 7FB 8中可以找到局部实例的应用示例。

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

    通常,静态局部数据是符号寻址的,绝对寻址是个例外。在功能块中,实例数据块是通过DI寄存器打开的。该数据块中的地址用DI作为地址标识符,它包含静态局部数据以及块参数。位寻址用DIX,字节寻址用DIB,字寻址用DIW,双字用DID进行寻址。

    如果用户熟悉数据块中的数据是如何存储的,则可以自己计算静态局部数据存储的地址。也可以在已编译块的变量声明表中看到地址,但是一定要小心!这些地址是与实例的起始地址相关联的,它们仅仅在用数据块调用功能块时才有效。如果调用功能块作为局部实例,其局部数据正好位于调用功能块的实例数据块的中间。例如,用户可以在包含全部局部实例的已编译的实例数据块中纵览绝对地址。如果想要读出单个局部数据的地址,选择ViewData View即可。

    参考所举的例子,如果用数据块调用功能块“Totalizer”,可以利用DIW2在功能块“Totalizer”中存取变量Total(见在DBTotalizerData”数据块中的地址分配);而且,如果功能块“Totalizer”在功能块。evaluate”中作为局部实例被调用,可以利用DIW6存取变量Total(见在DBevaluateData”数据块中的地址分配)。

    但是,如果编程一个功能块而不知道该块是否用数据块来调用或是否作为局部实例,即其是否为“多个实例能力”,那么用户该如何为该静态局部数据分配绝对地址呢?简单的处理是将变量的地址加到来自地址寄存器AR2的局部实例的偏移量上。

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