发布于 2011-09-14 15:06:06
2楼
这个可以编译成功。是Struct参数定义的问题,结构中元素的符号名称必须要用原块定义的符号,而不光是长度一致。
//************ Symbol table definition ************
//DB1 DB 1 DB 1
//RD_SINFO SFC 6 SFC 6 Read OB Start Information
//************ Symbol table definition ************
//************
TYPE UDT1 :
STRUCT
EV_CLASS:BYTE;
EV_NUM:BYTE;
PRIORITY:BYTE;
NUM:BYTE;
TYP2_3:BYTE;
TYP1:BYTE;
ZI1:WORD;
ZI2_3:DWORD;
END_STRUCT
END_TYPE
//************
DATA_BLOCK DB1
STRUCT
S1 : UDT1;
S2 : UDT1;
END_STRUCT
BEGIN
END_DATA_BLOCK
//************
FUNCTION_BLOCK FB100
VAR
// Temporary Variables
TOP_SI1: UDT1;
START_UP_SI1: UDT1;
ERR:INT;
TOP_SI2: STRUCT
EV_CLASS:BYTE;
EV_NUM:BYTE;
PRIORITY:BYTE;
NUM:BYTE;
TYP2_3:BYTE;
TYP1:BYTE;
ZI1:WORD;
ZI2_3:DWORD;
END_STRUCT;
START_UP_SI2: STRUCT
EV_CLASS:BYTE;
EV_NUM:BYTE;
PRIORITY:BYTE;
NUM:BYTE;
TYP2_3:BYTE;
TYP1:BYTE;
ZI1:WORD;
ZI2_3:DWORD;
END_STRUCT;
END_VAR
begin
ERR := "RD_SINFO"( TOP_SI:= "DB1".S1,
START_UP_SI:= "DB1".S2 );
ERR :="RD_SINFO"( TOP_SI:= TOP_SI1,
START_UP_SI:= START_UP_SI1 );
ERR :="RD_SINFO"( TOP_SI:= TOP_SI2,
START_UP_SI:= START_UP_SI2 );
END_FUNCTION_BLOCK