做了一个,简单测试了一下。如果有被过滤请下载压缩包。
按Zane如下要求做的:(报警数最大为8x1024,应该够用了)
1.不用考虑报警标志位的置位与复位,只考虑检测报警标志位,任意多条。
2.有新报警到,报警等亮,报警声响;报警不消除,灯不能灭;报警声可灭,新报警重新激发;
3.按复位按钮,报警位不消除,灯不能灭(也不允许闪断);如果报警位已消除,可消声。
4.按消声按钮仅能消声
5.程序的输入1.报警位数据块2.复位按钮3.消音按钮;输出1.灯报警 2.声报警(不允许其他的变量)
FUNCTION_BLOCK FB 6
TITLE =
VERSION : 0.1
VAR_INPUT
Alarm_DB : BLOCK_DB ; //Sorce DB of faults
Reset : BOOL ;
Silence : BOOL ;
END_VAR
VAR_OUTPUT
Alarm_Lamp : BOOL ;
Alarm_Buzzer : BOOL ;
END_VAR
VAR
Buffer : ARRAY [1 .. 1024 ] OF WORD ;
END_VAR
BEGIN
NETWORK
TITLE =
A #Reset;
R #Alarm_Lamp;
R #Alarm_Buzzer;
A #Silence;
R #Alarm_Buzzer;
L 0;
T LD 0;
L 48;
T LD 4;
OPN #Alarm_DB;
L DBLG;
next: T LW 8;
L 0;
L DBB [LD 0];
==I ;
JC _001;
S #Alarm_Lamp;
L DIB [LD 4];
XOW ;
L DBB [LD 0];
AW ;
L 0;
==I ;
JC _001;
S #Alarm_Buzzer;
_001: L DBB [LD 0];
T DIB [LD 4];
L LD 0;
+ L#8;
T LD 0;
L LD 4;
+ L#8;
T LD 4;
L LW 8;
LOOP next;
END_FUNCTION_BLOCK
点击此处查看附件