共享数据块(DB)
与逻辑块不同,在数据块中没有STEP 7的指令。它们用于存放用户数据,换句话说,数据块中存放用户程序工作时所需的变量数据。共享数据块用于存放所有其它块都可以访问的用户数据。
DB的大小可以不同。关于所允许的最大尺寸,请参考用户所用CPU的描述。
用户可以用任意方式来建立数据块的结构,以适合其不同的需求。
在用户程序中的共享数据块
如果某个逻辑块(FC,FB或OB)被调用,则它可以临时占用临时本地数据区的空间(L堆栈)。除了这个本地数据区,逻辑块还可以打开一个DB形式的存储区。与局域数据区中的数据不同,当相应的逻辑块运行结束从而DB关闭时,在DB中的数据不会被删除。
每个FB、FC或OB可从共享DB中读取数据,或将数据写入共享DB。当该DB退出时,这些数据保持在DB中。
一个共享DB和一个背景DB可同时打开。下图所示为访问数据块的不同方法。
数据块的结构化存取
Structured Access to Data Blocks
结构化存取使用在数据块中声明的变量的标识符。能够将变量赋值给任何同类型的变量。
通过指定DB名和用点分隔的简单变量和名字来引用在数据块中的变量。
简单变量表示在DB的声明中指定为基本或复杂数据类型的变量。
如果使用一个BLOCK_DB类型的参数或转换函数WORD_TO_BLOCK_DB的结果来初始存取数据块,只通顺是绝对方式或索引方式存取,不能用结构方式存取。
例子(Example)
//在FB10的声明部分:
VAR
Result: STRUCT RES1 : INT;
RES2 : WORD;
END_STRUCT
END_VAR
//用户定义数据类型UDT1
TYPE UDT1 STRUCT RES1 : INT;
RES2 : WORD;
END_STRUCT
//带用户定义数据类型的DB20:
DB20
UDT1
BEGIN 。。。
//不带用户定义数据类型的DB30:
DB30 STRUCT RES1 : INT;
RES2 : WORD;
END_STRUCT
BEGIN 。。。
//用以下存取的功能块:
。。
FB10.DB10();
RESWORD_A := DB10.Result.RES2;
RESWORD_B := DB20.RES2;
RESWORD_C := DB30.RES2;
编辑:jq
全部0条评论
快来发表一下你的评论吧 !