#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) move sp 0 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