调用FC2如下,输出采用临时变量没问题
FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
ADDRESS : INT ;
END_VAR
VAR_OUTPUT
OUT : DWORD ;
END_VAR
VAR_TEMP
ADDRESS_1 : DINT ;
END_VAR
BEGIN
NETWORK
TITLE =
L #ADDRESS;
SLD 3;
T #ADDRESS_1;
L ID [#ADDRESS_1];
T #OUT;
END_FUNCTION
ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
TEMP0 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
L #OB1_SCAN_1;
L 3;
= "first scan";
CLR ;
= "always 0";
SET ;
= "always 1";
NETWORK
TITLE =
CALL FC 2 (
ADDRESS := 10,
OUT := #TEMP0);
LAR1 P##TEMP0;
L D [AR1,P#0.0];
T MD 300;
END_ORGANIZATION_BLOCK
但是#TEMP0改为MD200,CPU就会报错停止
VAR_INPUT
ADDRESS : INT ;
END_VAR
VAR_OUTPUT
OUT : DWORD ;
END_VAR
VAR_TEMP
ADDRESS_1 : DINT ;
END_VAR
BEGIN
NETWORK
TITLE =
L #ADDRESS;
SLD 3;
T #ADDRESS_1;
L ID [#ADDRESS_1];
T #OUT;
END_FUNCTION
ORGANIZATION_BLOCK OB 1
TITLE = "Main Program Sweep (Cycle)"
VERSION : 0.1
VAR_TEMP
OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
OB1_PRIORITY : BYTE ; //Priority of OB Execution
OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
OB1_RESERVED_1 : BYTE ; //Reserved for system
OB1_RESERVED_2 : BYTE ; //Reserved for system
OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
TEMP0 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
CALL FC 2 (
ADDRESS := 10,
OUT := MD 200);
LAR1 MD 200;
L D [AR1,P#0.0];
T MD 300;
END_ORGANIZATION_BLOCK
请高手解释一下,谢谢!