西门子SCL读写DB数据

时间:2021-06-21 16:00:26

数据块间接寻址方式,仅供参考。

STATUS_1:= DB11.DW[COUNTER]; //字节间接寻址
STATUS_2:= DB12.DX[WNO, BITNO]; //位间接寻址,用户改变WNO,BITNO数值即可
STATUS_1:= Database1.DW[COUNTER]; // Database1为DB类型的本地变量
STATUS_2:= Database2.DX[WNO, BITNO];
STATUS_1:= WORD_TO_BLOCK_DB(INDEX).DW[COUNTER];
//INDEX被定义为 BLOCK_DB 数据类型,COUNTER为整数数据类型,这样可以实现/数据块编号,
字节地址同时间接寻址,此功能是一种功能很强间接寻址方式。

数据块直接寻址方式,仅供参考。

STATUSBYTE :=DB101.DB10; //字节直接寻址格式
STATUS_3 :=DB30.D1.1; //位直接寻址格式
MEASVAL :=DB25.DW20; //字直接寻址格式
STATUSBYTE :=Status_data.DB10;
STATUS_3 :="New data".D1.1;
MEASVAL :=Measdata.DW20;
STATUS_1 :=WORD_TO_BLOCK_DB (INDEX).DW10;

BLOCK_DB类型使用。

1. copy the individual variables:
In this case every variable is read one by one from the user data blocks. The addressing in the data blocks is
absolutely. This is particularly suitable for small amounts of data.
1. Kopieren der einzelnen Variablen:
In diesem Fall wird jede Variable einzeln aus dem Anwenderdatenbaustein gelesen. Die Adressierung im
Datenbaustein erfolgt absolut. Dies ist besonders für kleine Datenmengen geeignet.
addressing with Block-number / Adressierung über DB-Nummer
FUNCTION_BLOCK FB1
VAR_INPUT
DB_NO : BLOCK_DB; //Number of the Data-Block / DB-Nummer先声明一个BLOCK_DB类型
END_VAR
VAR
S : STRUCT
// internal structure / interne Struktur
VALUE1 : WORD;
VALUE2 : REAL;
VALUE3 : BYTE;
VALUE4 : BYTE;
END_STRUCT;
END_VAR
S.VALUE1 := DB_NO.DW8;//对于WORD类型的,直接这样访问即可
S.VALUE2 := DWORD_TO_REAL(DB_NO.DD10);//对于其它类型的数据,由于DB_N0的块号不定,
//系统不知道DD10是什么数据类型,前边要用双字转成实数类型的语句,不能直接用DB_NO.xxx访问,
//否则会报无效的数据类型
S.VALUE3 := DB_NO.DBB14 ;
S.VALUE4 := DB_NO.DBB15;
END_FUNCTION_BLOCK
addressing with Any-pointer / Adressierung über Any-Pointer
FUNCTION_BLOCK FB2
VAR_INPUT
DB_ANY : ANY; // Any-Pointer of the Data-Block / Any-pointer für DB
AnyPointer AT DB_ANY: STRUCT
BYTE0 :BYTE; // Byte 0
TYP :BYTE; // Byte 1 Data-/Parametertype / Byte 1 Daten- / Parametertyp
ANZ :WORD; // Byte 2+3 Lenth of data / Byte 2-3 Datenlnge
DBNO :WORD; // Byte 4+5 DB-Number / Byte 4+5 DB-Nummer
BZ :DWORD; // Byte 6 to 10 Pointer / Byte 6 bis 10 Bereichszeiger
END_STRUCT;
END_VAR
VAR
S : STRUCT
//internal stucture / interne Struktur
VALUE1 : WORD;
VALUE2 : REAL;
VALUE3 : BYTE;
VALUE4 : BYTE;
END_STRUCT;
END_VAR
S.VALUE1 := WORD_TO_BLOCK_DB(AnyPointer.DBNO).DW8;
S.VALUE2 := DWORD_TO_REAL(WORD_TO_BLOCK_DB(AnyPointer.DBNO).DD10);
S.VALUE3 := WORD_TO_BLOCK_DB(AnyPointer.DBNO).DBB14 ;

http://www.360doc.com/content/12/0505/13/7023119_208807550.shtml