请大家帮我看下这个间接寻址做的报警程序问题出在哪,想了好久没想通,程序是从另一个版主加精的帖子里复制的,按说应该没问题啊
报警STL.pdf
然后在诊断缓冲区里点击打开块,光标就定位在如下所示的位置:
FP DBX [#PT2]
程序如下:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
AlarmDB : BLOCK_DB ;
AlarmCount : INT ;
AlarmReset : BOOL ;
HornReset : BOOL ;
FlashBit : BOOL ;
END_VAR
VAR_OUTPUT
AlarmLight : BOOL ;
AlarmHorn : BOOL ;
END_VAR
VAR_TEMP
LoopNum : INT ;
PT1 : DWORD ;
PT2 : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
SET ;
SAVE ;
OPN #AlarmDB;
L P#4.0;
T #PT1;
L P#8.0;
T #PT2;
L 0;
T DBW 2;
SET ;
R DBX 0.2;
NETWORK
TITLE =
L #AlarmCount;
NEXT: T #LoopNum;
//计算总的报警条目
A DBX [#PT1];
S DBX 0.0;
JNB M001;
L DBW 2;
L 1;
+I ;
T DBW 2;
M001: NOP 0;
//如果没有报警,则复位报警汇总标记位
L DBW 2;
L 0;
==I ;
R DBX 0.0;
R DBX 0.1;
R DBX 0.2;
//判断是否有新报警发生
A DBX [#PT1];
FP DBX [#PT2];
JNB M002;
SET ;
S DBX 0.2;
M002: NOP 0;
L #PT1;
L P#0.1;
+D ;
T #PT1;
L #PT2;
L P#0.1;
+D ;
T #PT2;
L #LoopNum;
LOOP NEXT;
NETWORK
TITLE =
//如果有报警发生并按下复位按钮则置位报警复位标记
A DBX 0.0;
A #AlarmReset;
S DBX 0.1;
//报警指示灯输出
O( ;
A DBX 0.0;
AN DBX 0.1;
A #FlashBit;
) ;
O( ;
A DBX 0.0;
A DBX 0.1;
) ;
= #AlarmLight;
NETWORK
TITLE =
//如果有报警发生并按下消声按钮则置位消声标记
A DBX 0.0;
A #HornReset;
S DBX 0.3;
//如有新报警,则复位消声标记
A DBX 0.2;
R DBX 0.3;
//报警蜂鸣器输出
A DBX 0.0;
AN DBX 0.3;
= #AlarmHorn;
END_FUNCTION