发布于 2011-10-08 21:03:06
3楼
多谢N侠回复!
我的积分不够,不能贴附件!只能把大段程序直接附上,请版主和各位老师原谅!
VAR_INPUT
LastStructur : STRUCT
Vrs : REAL ;
Dsa : WORD ;
Ala : BOOL ;
Inp : BOOL ;
Rst : BOOL ;
LivCou : INT ;
END_STRUCT ;
END_VAR
VAR_IN_OUT
FirstStructur : STRUCT
Vrs : REAL ;
Dsa : WORD ;
Ala : BOOL ;
Inp : BOOL ;
Rst : BOOL ;
LivCou : INT ;
END_STRUCT ;
END_VAR
VAR_TEMP
ptr : STRUCT
Vrs : REAL ;
Dsa : WORD ;
Ala : BOOL ;
Inp : BOOL ;
Rst : BOOL ;
LivCou : INT ;
END_STRUCT ;
Number : INT ;
i : INT ; //Run variable
alaSum : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =SCL network
//compiled by SCL compiler version: SCLCOMP K05.03.05.00_01.03.00.01 release
SET ;
SAVE ;
= L 14.2;
CLR ;
= #alaSum;
L DW#16#1002000A;
T LD 16;
L P##FirstStructur;
LAR1 ;
L W [AR1,P#0.0];
T LW 20;
L P##FirstStructur;
LAR1 ;
L D [AR1,P#2.0];
T LD 22;
L DW#16#1002000A;
T LD 26;
L P##LastStructur;
LAR1 ;
L W [AR1,P#0.0];
T LW 30;
L P##LastStructur;
LAR1 ;
L D [AR1,P#2.0];
T LD 32;
UC "libTOOLS_NumOf" {
P#L 16.0,
P#L 26.0,
P#L 10.0};
L #Number;
L #Number;
L 1;
-I ;
L 0;
T #i;
TAK ;
T LW 16;
TAK ;
A7d0: L #i;
L LW 16;
<=I ;
JCN A7d1;
L #i;
ITD ;
L L#0;
+D ;
L L#80;
*D ;
L P##FirstStructur;
LAR1 ;
TAK ;
T LD 18;
TAK ;
L W [AR1,P#0.0];
T LW 22;
OPN DB [LW 22];
L D [AR1,P#2.0];
L LD 18;
+D ;
LAR1 ;
L D [AR1,P#0.0];
T #ptr.Vrs;
L P##FirstStructur;
LAR1 ;
L W [AR1,P#0.0];
T LW 22;
OPN DB [LW 22];
L D [AR1,P#2.0];
L LD 18;
+D ;
LAR1 ;
L D [AR1,P#4.0];
T LD 4;
L P##FirstStructur;
LAR1 ;
L W [AR1,P#0.0];
T LW 22;
OPN DB [LW 22];
L D [AR1,P#2.0];
L LD 18;
+D ;
LAR1 ;
L W [AR1,P#8.0];
T #ptr.LivCou;
L 1.010000e+000;
T #ptr.Vrs;
L #ptr.Dsa;
L W#16#0;
==I ;
= L 14.3;
A #ptr.Inp;
NOT ;
A L 14.3;
= L 14.3;
A #ptr.Rst;
CLR ;
A #ptr.Ala;
UC "libTOOLS_FltInp" {
P#L 14.3,
P#L 6.2,
P#L 6.0};
CLR ;
= #ptr.Rst;
A #ptr.Ala;
JCN A7d2;
SET ;
= #alaSum;
A7d2: L #ptr.LivCou;
T LW 18;
UC "libTOOLS_LiveCounter" {
P#L 8.0,
P#L 18.0};
L LW 18;
T #ptr.LivCou;
L #i;
ITD ;
L L#0;
+D ;
L L#80;
*D ;
L #ptr.Vrs;
T LD 22;
TAK ;
T LD 26;
TAK ;
L P##FirstStructur;
LAR1 ;
L W [AR1,P#0.0];
T LW 30;
OPN DB [LW 30];
L D [AR1,P#2.0];
L LD 26;
+D ;
LAR1 ;
L LD 22;
T D [AR1,P#0.0];
L LD 4;
T LD 22;
L P##FirstStructur;
LAR1 ;
L W [AR1,P#0.0];
T LW 30;
OPN DB [LW 30];
L D [AR1,P#2.0];
L LD 26;
+D ;
LAR1 ;
L LD 22;
T D [AR1,P#4.0];
L #ptr.LivCou;
T LD 22;
L P##FirstStructur;
LAR1 ;
L W [AR1,P#0.0];
T LW 30;
OPN DB [LW 30];
L D [AR1,P#2.0];
L LD 26;
+D ;
LAR1 ;
L LD 22;
T W [AR1,P#8.0];
L #i;
L 1;
+I ;
T #i;
JU A7d0;
A7d1: CLR ;
A #alaSum;
= #RET_VAL;
A L 14.2;
SAVE ;
BE ;
END_FUNCTION
以上是完整的程序,其中"libTOOLS_NumOf"是用于求FirstStructur和LastStructur之间有多少个结构体。
input,in_out, temp 中只有结构体定义,没有ANY定义,结构体的DBNO和Address无法获得!
程序风格很像是结构体直接赋值,ptr:=FirstStructur,但是,其他的结构体如何赋给ptr呢?!