#Fast Dual-Type Airlock Control Script v7
# by SemlerPDX Nov2023/Feb2025
# glass doors (East) and composite doors (West)
#This style Airlock system expects dedicated active
# vents for each phase of the cycle:
# (Vent out to World) (Vent out to Base) (Vent in from Base)
# Doors should be pre-set to Logic Mode (1)
# Active Vents should also be pre-set to appropriate mode respectively
# === Stack Loading Section ===
define GlassDoors -324331872 #(change as needed per airlock)
define CompositeDoors -793837322 #(change as needed per airlock)
define Lights 797794350 #long thin (change as needed)
push HASH("VentMarsWest")
push HASH("VentOutWest")
push HASH("VentInWest")
push HASH("PowerStationWest") #this airlock light & gas sensor name
push Lights #this airlock light type
push HASH("Airlock West") #DoorOutWest
push HASH("Power Station") #DoorInWest
push CompositeDoors
push HASH("VentMarsEast")
push HASH("VentOutEast")
push HASH("VentInEast")
push HASH("PowerStationEast") #this airlock light & gas sensor name
push Lights #this airlock light type
push HASH("DoorOutEast")
push HASH("DoorInEast")
push GlassDoors
s db Setting sp
#(these are just example device names above, from my Power Station)
# Stack loading section above could be on a different script to fit more lines
# -just export the stack loader script, run it, then export control script
# === Airlock Control Section ===
define ActiveVents -1129453144
define GasSensors -1252983604
define SensorIn HASH("GasSensorIn")
alias ThisDoor r3
alias ThisVent r4
alias FirstDoor r5
alias SecondDoor r6
alias ThisVentMars r7
alias ThisVentOut r8
alias ThisVentIn r9
alias ThisAirlock r10
alias ThisLightType r11
alias ThisDoorOut r12
alias ThisDoorIn r13
alias ThisDoorType r14
alias STACK r15
define PressureMin 15 #kPa (for CanAirlock)
l STACK db Setting
start:
move sp STACK
yield
checkAirlocks:
pop ThisDoorType
pop ThisDoorIn
pop ThisDoorOut
pop ThisLightType
pop ThisAirlock
pop ThisVentIn
pop ThisVentOut
pop ThisVentMars
move ThisDoor ThisDoorIn
jal checkDoors #check interior door
move ThisDoor ThisDoorOut
jal checkDoors #check exterior door
bge sp 8 checkAirlocks
j start
checkDoors:
lbn r0 ThisDoorType ThisDoor Setting Maximum
lbn r1 ThisDoorType ThisDoor Open Maximum
beq r0 r1 ra
#Check the Outer Door to determine which direction to cycle
lbn r0 ThisDoorType ThisDoorOut Open Maximum
select ThisVent r0 ThisVentMars ThisVentOut
select FirstDoor r0 ThisDoorOut ThisDoorIn
select SecondDoor r0 ThisDoorIn ThisDoorOut
#Cycle this Airlock (or just the doors)
sbn ThisDoorType FirstDoor Open 0
sbn ThisLightType ThisAirlock On 1
sleep 1
#Check if we CAN cycle the airlock, or just the doors
lbn r0 GasSensors SensorIn Pressure Average
blt r0 PressureMin cycleComplete
#A simple sub-loop to de-pressurize the Airlock
sbn ActiveVents ThisVent On 1
yield
lbn r0 GasSensors ThisAirlock Pressure Maximum
brgtz r0 -2
sleep 1
sbn ActiveVents ThisVent On 0
beq ThisVent ThisVentOut cycleComplete
#A simple sub-loop to pressurize the Airlock
sbn ActiveVents ThisVentIn On 1
yield
lbn r0 GasSensors ThisAirlock Pressure Maximum
lbn r1 GasSensors SensorIn Pressure Average
sub r1 r1 5
brlt r0 r1 -4
sbn ActiveVents ThisVentIn On 0
cycleComplete:
sbn ThisDoorType SecondDoor Open 1
sbn ThisLightType ThisAirlock On 0
j start
Comments