L 0
T #noOfActAlarms // Alarm count to be 0 at begging
// Open Alarm DB
OPN #dbBlock
L DBLG
L 2
/I
T #MaxAlarmNo // Max Alarm NUmber is Byt No. / 2
L P##pAlarm // Take local FB address from pAlarm
LAR1 // Write address in address registar AR1
L D [AR1,P#2.0] // Take 4 BYTES starting from second BYTE,
LAR2 // Write address in address registar AR1
L P##pType // Take local FB address from pType
LAR1 // Write address in address registar AR1
L D [AR1,P#2.0] // Take 4 BYTES starting from second BYTE,
LAR1 // Write address in address registar AR1
L #MaxAlarmNo
Lp: T #LoopSize // For Loop
OPN #dbBlock
A [AR2,P#0.0] // Alarm & Alarm Type
A [AR1,P#0.0]
JCN end
L #noOfActAlarms // Increment active Alarms of certain Alarm type
L 1
+I
T #noOfActAlarms //#noOfActAlarms is also Alarm index into Array
L #MaxAlarmNo
L #LoopSize
-I
T #AlarmIDNo // Alarm ID Number
// Saving Alarm ID Number into corresponding array index AlarmNumbers[]
L P#0.0
LAR1
L #noOfActAlarms
L 2
*I
Lp2: T #InnerLoopSize
OPN #dbInstanceNo
+AR1 P#2.0
L #InnerLoopSize
LOOP Lp2
L #AlarmIDNo
T W [AR1,P#0.0]
//Reset pointers for outside LOOP
L P##pAlarm // Take local FB address from pAlarm
LAR1 // Write address in address registar AR1
L D [AR1,P#2.0] // Take 4 BYTES starting from second BYTE,
LAR2 // Write address in address registar AR1
L P##pType // Take local FB address from pType
LAR1 // Write address in address registar AR1
L D [AR1,P#2.0] // Take 4 BYTES starting from second BYTE,
LAR1 // Write address in address registar AR1
end: +AR2 P#2.0
+AR1 P#2.0
L #LoopSize
LOOP Lp
L #noOfActAlarms // Temp, get full number of alarms
T #AlarmTypeCount // save Temp variable to the OUTPUT variable
// If is active number of Alarm <> 1, set #AlarmTypeActive
L #AlarmTypeCount
L 0
<>I
S #AlarmTypeActive