Issue
How can an Airlock door system be implement in Continuum?
Product Line
Andover Continuum
Environment
- Continuum Cyberstation
- Continuum Net Controller II
- Continuum ACX 2 Controller
- Continuum ACX 4 Controller
Cause
Sample PE program is needed as a general guideline on how to implement an Airlock control system in Continuum.
Resolution
The use case and implementation details are documented in the comment section of the PE program.
Here is the actual PE code to implement, please note that this PE program is provided as a sample only, to serve as guidelines and proof of concept, considerable changes may be necessary to make the program adequate for your particular application and site.
Numeric Green
Numeric Red
Numeric StrikeTimer
Line INIT
Green = Unlocked
Red = Locked
'LOCK ALL 3 DOORS
PerimDrStriker = Locked
IntDr1Striker = Locked
IntDr2Striker = Locked
'MAKE ALL DOORS AVAILABLE FOR ACCESS TO THE AIRLOCK
PerimeterDoor = Green
InteriorDoor1 = Green
InteriorDoor2 = Green
'ALLOW CREDENTIAL ACCESS
PerimeterDoor DisRdrKpAccess = False
InteriorDoor1 DisRdrKpAccess = False
InteriorDoor2 DisRdrKpAccess = False
'ALLOW EXIT REQUESTS
PerimeterDoor OpenOnExitReqst = True
InteriorDoor1 OpenOnExitReqst = True
InteriorDoor2 OpenOnExitReqst = True
Goto Monitor1
Line Monitor1
If PerimeterDoor ValidAttempt or PerimeterDoor ExitRequest then 'ACCESS ATTEMPT AT PERIMETER DOOR
StrikeTimer = PerimeterDoor DoorStrikeTime 'UNLOCK THE DOOR...
Goto PerimActive 'AND MAKE THE PERIMETER DOOR ACTIVE
Endif
If InteriorDoor1 ValidAttempt or InteriorDoor1 ExitRequest then 'ACCESS ATTEMPT AT INTERIOR DOOR1
StrikeTimer = InteriorDoor1 DoorStrikeTime 'UNLOCK THE DOOR...
Goto Interior1Active 'AND MAKE THE INTERIOR DOOR1 ACTIVE
Endif
If InteriorDoor2 ValidAttempt or InteriorDoor2 ExitRequest then 'ACCESS ATTEMPT AT INTERIOR DOOR2
StrikeTimer = InteriorDoor2 DoorStrikeTime 'UNLOCK THE DOOR...
Goto Interior2Active 'AND MAKE THE INTERIOR DOOR2 ACTIVE
Endif
'CHECK FOR FORCED ENTRY
If PerimeterDoor DoorSwitch = Opened or InteriorDoor1 DoorSwitch = Opened or InteriorDoor2 DoorSwitch = Opened then Goto AirLockForced
Line AirLockForced
'MUST HANDLE FORCED ENTRY HERE DUE TO VALUE OF DOOR BEING SET TO UNLOCK TO MAKE LED GREEN
AirLockAlarm = 1 'SEND THE ALARM
'MAKE ALL DOORS UNAVAILABLE
PerimeterDoor = Red
InteriorDoor1 = Red
InteriorDoor2 = Red
If PerimeterDoor DoorSwitch = Closed and InteriorDoor1 DoorSwitch = Closed and InteriorDoor2 DoorSwitch = Closed then
'FORCED ENTRY CLEAR, RESET THE AIRLOCK
AirLockAlarm = 0
Goto INIT
Endif
Line PerimActive
'ACCESS REQUESTED AT PERIMETER DOOR, DISABLE CREDENTIAL AND REX ACCESS AT THE INTERIOR DOORS
InteriorDoor1 DisRdrKpAccess = True 'DONT ALLOW CREDENTIAL ACCESS AT THE INTERIOR DOORS
InteriorDoor2 DisRdrKpAccess = True
InteriorDoor1 OpenOnExitReqst = False 'DONT EXIT REQUESTS AT THE INTERIOR DOORS
InteriorDoor2 OpenOnExitReqst = False
InteriorDoor1 = Red
InteriorDoor2 = Red
'UNLOCK THE PERIMETER DOOR
PerimDrStriker = PerimeterDoor DoorStrikeTime
'WAIT FOR PERSON TO PHYSICALLY OPEN THE DOOR
If PerimeterDoor DoorSwitch = Opened then Goto PerimInactive
'DOOR NEVER OPENED, RESET AIRLOCK
If TS > PerimeterDoor DoorStrikeTime then Goto INIT
Line PerimInactive
'HANDLE ACCESS REQUEST WHILE DOOR OPENED, EXTENDED DOOR UNLOCK TIME
If PerimeterDoor ValidAttempt or PerimeterDoor ExitRequest then PerimDrStriker = (PerimDrStriker + 1)
If PerimeterDoor DoorSwitch = Closed then Goto INIT
'WE'VE BEEN HERE TOO LONG, SEND ALARM
If TM > 0 then AirLockAlarm = 2
Line Interior1Active
'ACCESS REQUESTED AT INTERIOR DOOR1, DISABLE CREDENTIAL AND REX ACCESS AT THE PERIMETER DOOR
PerimeterDoor DisRdrKpAccess = True
PerimeterDoor OpenOnExitReqst = False
PerimeterDoor = Red
InteriorDoor2 = Green
'UNLOCK THE INTERIOR DOOR1
IntDr1Striker = InteriorDoor1 DoorStrikeTime
'WAIT FOR PERSON TO PHYSICALLY OPEN THE DOOR
If InteriorDoor1 DoorSwitch = Opened then Goto Interior1Inactiv
'DOOR NEVER OPENED, RESET AIRLOCK
If TS > InteriorDoor1 DoorStrikeTime then Goto INIT
Line Interior1Inactiv
'HANDLE ACCESS REQUEST WHILE DOOR OPENED, EXTENDED DOOR UNLOCK TIME
If InteriorDoor1 ValidAttempt or InteriorDoor1 ExitRequest then IntDr1Striker = (IntDr1Striker + 1)
If InteriorDoor1 DoorSwitch = Closed then Goto INIT
'WE'VE BEEN HERE TOO LONG, SEND ALARM
If TM > 0 then AirLockAlarm = 3
Line Interior2Active
'ACCESS REQUESTED AT INTERIOR DOOR2, DISABLE CREDENTIAL AND REX ACCESS AT THE PERIMETER DOOR
PerimeterDoor DisRdrKpAccess = True
PerimeterDoor OpenOnExitReqst = False
PerimeterDoor = Red
InteriorDoor1 = Green
'UNLOCK THE INTERIOR DOOR2
IntDr2Striker = InteriorDoor2 DoorStrikeTime
'WAIT FOR PERSON TO PHYSICALLY OPEN THE DOOR
If InteriorDoor2 DoorSwitch = Opened then Goto Interior2Inactiv
'DOOR NEVER OPENED, RESET AIRLOCK
If TS > InteriorDoor2 DoorStrikeTime then Goto INIT
Line Interior2Inactiv
'HANDLE ACCESS REQUEST WHILE DOOR OPENED, EXTENDED DOOR UNLOCK TIME
If InteriorDoor2 ValidAttempt or InteriorDoor2 ExitRequest then IntDr2Striker = (IntDr2Striker + 1)
If InteriorDoor2 DoorSwitch = Closed then Goto INIT
'WE'VE BEEN HERE TOO LONG, SEND ALARM
If TM > 0 then AirLockAlarm = 4
Line E
If TS > 30 then Goto INIT
See also attached dump file of program code.