个位大侠帮忙看一下这段源程序,这是一个FIFO功能的程序,总是编译不过去,不知道到怎么修改,还说是西门经过测试
FUNCTION_BLOCK FB 100
TITLE =
//此功能块用了完成20字节的FIFO功能
AUTHOR : Hylotus
VERSION : 0.1
KNOW_HOW_PROTECT
VAR_INPUT
SOURCE_DB : BLOCK_DB ;
INPUT : BOOL ;
OUTPUT : BOOL ;
SIZE : INT ;
END_VAR
VAR_OUTPUT
DONE_IN : BOOL ;
DONE_OUT : BOOL ;
ERROR : BOOL ;
FULL : BOOL ;
EMPTY : BOOL ;
END_VAR
VAR_IN_OUT
LOCATION : INT ;
END_VAR
VAR
IN_START : BOOL ;
IN_ACTIVE : BOOL ;
OUT_START : BOOL ;
OUT_ACTIVE : BOOL ;
COUNT : INT ;
RET_VAL1 : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
A #INPUT;
AN #IN_ACTIVE;
= #IN_START;
A #INPUT;
= #IN_ACTIVE;
A #OUTPUT;
AN #OUT_ACTIVE;
= #OUT_START;
A #OUTPUT;
= #OUT_ACTIVE;
AN #INPUT;
AN #OUTPUT;
JC END1;
NETWORK
TITLE =OUTPUT FIFO
//20字节的数据从FIFO存储区域中读出
AN #OUTPUT;
O #DONE_OUT;
JC IN_1;
AN #OUT_START;
JC OP_1;
OPN #SOURCE_DB;
L DW#16#0;
T DBD 40;
T DBD 44;
T DBD 48;
T DBD 52;
T DBD 56;
T DBD 60;
T DBD 64;
T DBD 68;
T DBD 72;
T DBD 76;
L #LOCATION;
L 0;
<=I ;
S #EMPTY;
JC EROR;
OPN #SOURCE_DB;
CALL "BLKMOV" (
SRCBLK := P#DBX 80.0 BYTE 40,
RET_VAL := #RET_VAL1,
DSTBLK := P#DBX 40.0 BYTE 40);
L #RET_VAL1;
L 0;
<>I ;
JC EROR;
L 0;
T #COUNT;
OP_1: L #LOCATION;
L 0;
<=I ;
JC EROR;
L #LOCATION;
L #COUNT;
<=I ;
JC OP_3;
L #COUNT;
L 2;
+I ;
ITD ;
L P#40.0;
*D ;
LAR1 ;
OPN #SOURCE_DB;
L DBD [AR1,P#40.0];
T DBD [AR1,P#0.0];
L DBD [AR1,P#44.0];
T DBD [AR1,P#4.0];
L DBD [AR1,P#48.0];
T DBD [AR1,P#8.0];
L DBD [AR1,P#52.0];
T DBD [AR1,P#12.0];
L DBD [AR1,P#56.0];
T DBD [AR1,P#16.0];
L DBD [AR1,P#60.0];
T DBD [AR1,P#20.0];
L DBD [AR1,P#64.0];
T DBD [AR1,P#24.0];
L DBD [AR1,P#68.0];
T DBD [AR1,P#28.0];
L DBD [AR1,P#72.0];
T DBD [AR1,P#32.0];
L DBD [AR1,P#76.0];
T DBD [AR1,P#36.0];
L #COUNT;
L 1;
+I ;
T #COUNT;
L #SIZE;
L -1;
+I ;
L #COUNT;
<=I ;
JC OP_2;
JU END2;
OP_2: L W#16#0;
T DBD [AR1,P#40.0];
T DBD [AR1,P#44.0];
T DBD [AR1,P#48.0];
T DBD [AR1,P#52.0];
T DBD [AR1,P#56.0];
T DBD [AR1,P#60.0];
T DBD [AR1,P#64.0];
T DBD [AR1,P#68.0];
T DBD [AR1,P#72.0];
T DBD [AR1,P#76.0];
OP_3: SET ;
S #DONE_OUT;
L #LOCATION;
L -1;
+I ;
T #LOCATION;
JU END2;
NETWORK
TITLE =INPUT FIFO
//20字节的数据写入FIFO存储区表中
IN_1: AN #IN_START;
JC END2;
L #LOCATION;
L #SIZE;
>=I ;
S #FULL;
JC EROR;
L #LOCATION;
L 2;
+I ;
ITD ;
L P#40.0;
*D ;
LAR1 ;
OPN #SOURCE_DB;
L DBD 0;
T DBD [AR1,P#0.0];
L DBD 4;
T DBD [AR1,P#4.0];
L DBD 8;
T DBD [AR1,P#8.0];
L DBD 12;
T DBD [AR1,P#12.0];
L DBD 16;
T DBD [AR1,P#16.0];
L DBD 20;
T DBD [AR1,P#20.0];
L DBD 24;
T DBD [AR1,P#24.0];
L DBD 28;
T DBD [AR1,P#28.0];
L DBD 32;
T DBD [AR1,P#32.0];
L DBD 36;
T DBD [AR1,P#36.0];
L #LOCATION;
L 1;
+I ;
T #LOCATION;
SET ;
S #DONE_IN;
JU END2;
NETWORK
TITLE =
EROR: SET ;
= #ERROR;
JU END2;
END1: CLR ;
= #DONE_IN;
= #DONE_OUT;
= #ERROR;
= #EMPTY;
= #FULL;
END2: NOP 0;
END_FUNCTION_BLOCK