APP下载
报价宝  ›  科技  › 

如何通过不同方式在SCL/CFC中访问资料块?

报价宝 来源:baojiabao.com 发布时间:2019-06-30 21:49:00 09月11日更新
报价宝综合消息如何通过不同方式在SCL/CFC中访问资料块?

可以通过不同方式在SCL/CFC中访问资料块。

可以在块中访问资料块号,输入管脚填起始地址。如果使用的是BLOCK_DB资料型别,也可以直接连线资料块。优点是,CFC中可以直接显示符号名。 可以将资料块与一个ANY指标相连。优点是,可以连线资料块中的某个变数,这个变数可以作为访问资料的起始点。例程包括这两种情况的SCL程式码。以下是程式中使用的资料块。

通过资料块号访问

注意,BLOCK_DB资料型别仅针对于输入引数。如果要使用输出引数或者输入输出引数,必须使用不同的资料型别,并通过转换功能块后再访问资料。(比如 INT_TO_BLOCK_DB)。

通过ANY指标访问

ANY指标格式在STEP 7线上帮助中有具体说明(标题: "Format of the ANY parameter type")。

FUNCTION_BLOCK FB602

VAR_INPUT

DB_ANY : ANY; // Any-Pointer of the Data-Block

AnyPointer AT DB_ANY : STRUCT

BYTE0 :BYTE; // Byte 0

TYP :BYTE; // Byte 1 Data-/Parametertype

ANZ :WORD; // Byte 2+3 Lenth of data

DBNO :WORD; // Byte 4+5 DB-Number

BZ :DWORD; // Byte 6 to 10 Pointer

END_STRUCT;

tmpAnyPointer AT DB_ANY : ARRAY [0..9] OF BYTE;

END_VAR

VAR_OUTPUT

Q_DB : INT;

Q_INT1 : INT;

Q_REAL1 : REAL;

Q_WORD1 : WORD;

Q_BOOL1 : BOOL;

END_VAR

VAR_TEMP

MEM_AREA : BYTE;

Offset : INT;

END_VAR

MEM_AREA := tmpAnyPointer[6]; // this Byte contains the memory area

IF (MEM_AREA 16#84) THEN

RETURN; // quit block in case the area isn't DB

END_IF;

Offset := DWORD_TO_INT(SHR (IN:=AnyPointer.BZ, N:=3)); // Offset address

Q_DB := WORD_TO_INT (AnyPointer.DBNO);

// absolute addressing from Offset address

Q_INT1 := WORD_TO_INT (WORD_TO_BLOCK_DB (AnyPointer.DBNO).DW[Offset + 0]);

Q_REAL1 := DINT_TO_REAL (DWORD_TO_DINT(WORD_TO_BLOCK_DB (AnyPointer.DBNO).DD[Offset + 2]));

Q_WORD1 := WORD_TO_BLOCK_DB (AnyPointer.DBNO).DW[Offset + 6];

Q_BOOL1 := WORD_TO_BLOCK_DB (AnyPointer.DBNO).DX[Offset + 8,0];

END_FUNCTION_BLOCK

下图是CFC图表中的功能块。

资料块号在第一个块中引数化。STRT_ADD是定义了访问资料块的起始地址,在此例中是第一个结构变数的起始地址。

资料块与第二个功能块相连线。STRT_ADD引数定义了第二个结构变数作为起始地址。在第三个块中,ANY指标直接和第二个结构变数的起始地址相连。

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 数码相机价格 汽车价格 笔记本价格 小米手机价格 华为手机价格