把一个DB块连续地址的WORD类型数据转成REAL类型存于另一个DB块,程序已经仿真验证。
1、STL 程序
FC块程序
VAR_INPUT
DB_Source : Word;
DB_Target : Word;
END_VAR
VAR_IN_OUT
Loop_Counter : Int;
END_VAR
VAR_TEMP
TEMP1 : Word;
TEMP2 : Word;
END_VAR
BEGIN
NETWORK
TITLE =
L #DB_Source;
T #TEMP1;
OPN DB[ #TEMP1];
L #DB_Target;
T #TEMP2;
OPN DI[ #TEMP2];
LAR1 P#0.0;
LAR2 P#0.0;
L 6;
COND: T #Loop_Counter;
L DBW[ AR1, P#0.0];
AD 16#FFFF;
DTR;
T DID[ AR2, P#0.0];
+AR1 P#2.0;
+AR2 P#4.0;
L #Loop_Counter;
LOOP COND;
END_FUNCTION
OB1程序
BEGIN
NETWORK
TITLE =
CALL "FC_STL_WORD_TO_REAL"
( DB_Source := 16#3 ,
DB_Target := 16#4 ,
Loop_Counter := "Value"
);
NETWORK
TITLE =
END_ORGANIZATION_BLOCK
仿真结果如下:
2、SCL程序
FC块程序
VAR_INPUT
DB_Source_NO : Int;
DB_Source_Address : Int;
DB_Target_NO : Int;
DB_Target_Address : Int;
END_VAR
VAR_TEMP
i : Int;
END_VAR
BEGIN
FOR #i := 0 TO 5 DO
WORD_TO_BLOCK_DB(INT_TO_WORD(#DB_Target_NO)).DD(#DB_Target_Address + #i * 4) :=
REAL_TO_DWORD(DINT_TO_REAL(DWORD_TO_DINT(WORD_TO_BLOCK_DB(INT_TO_WORD(#DB_Source_NO)).DW(#DB_Source_Address + #i * 2) AND DW#16#FFFF)));
END_FOR;
END_FUNCTION
OB1程序
BEGIN
"S7-300_SCL_WORD_TO_REAL"(DB_Source_NO:=3,
DB_Source_Address:=0,
DB_Target_NO:=4,
DB_Target_Address:=0);
END_ORGANIZATION_BLOCK