发布于 2011-10-09 10:53:29
6楼
研究了一下,感觉SCL还真是方便!一行代码就能完成很多功能
简单测试SCL代码如下:
TYPE Data_Struct
STRUCT
Vrs:REAL;
Dsa:WORD;
Ala:BOOL;
Inp:BOOL;
Rst:BOOL;
LivCou:INT;
END_STRUCT;
END_TYPE
FUNCTION FC101: INT
// Block Parameters
VAR_INPUT
// Input Parameters
i:INT;
LastStructur:Data_Struct;
DataAry:ARRAY[1..20] OF Data_Struct;//定义结构数组
END_VAR
VAR_IN_OUT
// I/O Parameters
FirstStructur:Data_Struct;
END_VAR
VAR_TEMP
// Temporary Variables
ptr:Data_Struct;
END_VAR
IF (i<1) AND (i>20) THEN RETURN;END_IF;//数组上下限检查
ptr.vrs:=DataAry[i].vrs;
FC101 := 100;
END_FUNCTION
对应STL代码如下:
SET
SAVE
= L 10.1
L #i
L 1
<I
L #i
L 20
= L 10.2
>I
A L 10.2
JCN A7d0
A L 10.1
SAVE
BEU //以上为数组上,下限检查
A7d0: L #i
ITD
L L#-1
+D
L L#80
*D
L L#0
+D
L P##DataAry
LAR1
TAK
T LD 12
TAK
L W [AR1,P#0.0]
T LW 16
OPN DB [LW 16]
L D [AR1,P#2.0]
L LD 12
+D
LAR1
L D [AR1,P#0.0]
T #ptr.Vrs
L 100
T #RET_VAL
CLR
A L 10.1
SAVE
BESET
SAVE
= L 10.1
L #i
L 1
<I
L #i
L 20
= L 10.2
>I
A L 10.2
JCN A7d0
A L 10.1
SAVE
BEU
A7d0: L #i
ITD
L L#-1
+D
L L#80
*D
L L#0
+D
L P##DataAry
LAR1
TAK
T LD 12
TAK
L W [AR1,P#0.0]
T LW 16
OPN DB [LW 16]
L D [AR1,P#2.0]
L LD 12
+D
LAR1
L D [AR1,P#0.0]
T #ptr.Vrs
L 100
T #RET_VAL
CLR
A L 10.1
SAVE
BE
在OB1里调用
CALL FC 101
i :="index"
LastStructur :=DB1.DATA1[20]
DataAry :=DB1.DATA1
RET_VAL :=MW0
FirstStructur:=DB1.DATA1[1]
实际的STL代码和楼主贴的STL代码还是有些象的。