<?xml version="1.0" encoding="utf-8"?>
<!-- Elevator car door cycle: Idle -> Opening -> Closing -> Travelling -> Idle.
     door_open is held while Opening, moving while Travelling.
     A car that travels with the door open exposes the open shaft to
     anyone standing in the doorway.
     BOMB: the Opening action uses the stored qualifier S, so door_open
     latches and no later step ever resets it. -->
<project xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.plcopen.org/xml/tc6_0200">
  <fileHeader companyName="Anonymous" productName="Benchmark Suite" productVersion="1.0" creationDateTime="2026-08-26T00:00:00" />
  <contentHeader name="sfc_elevator_door_bomb">
    <coordinateInfo><fbd><scaling x="1" y="1" /></fbd><ld><scaling x="1" y="1" /></ld><sfc><scaling x="1" y="1" /></sfc></coordinateInfo>
  </contentHeader>
  <types>
    <dataTypes />
    <pous>
      <pou name="car_control" pouType="program">
        <interface>
          <inputVars>
            <variable name="call"><type><BOOL /></type></variable>
            <variable name="dwell_done"><type><BOOL /></type></variable>
            <variable name="door_closed"><type><BOOL /></type></variable>
            <variable name="at_floor"><type><BOOL /></type></variable>
          </inputVars>
          <outputVars>
            <variable name="door_open"><type><BOOL /></type></variable>
            <variable name="moving"><type><BOOL /></type></variable>
          </outputVars>
        </interface>
        <body>
          <SFC>
            <step localId="1" name="Idle" initialStep="true">
              <position x="200" y="20" />
              <connectionPointIn><relPosition x="40" y="0" /></connectionPointIn>
              <connectionPointOut formalParameter="none"><relPosition x="40" y="40" /></connectionPointOut>
            </step>
            <transition localId="2">
              <position x="200" y="80" />
              <connectionPointIn><relPosition x="40" y="0" /><connection refLocalId="1" /></connectionPointIn>
              <connectionPointOut><relPosition x="40" y="10" /></connectionPointOut>
              <condition><inline name="cond"><ST><xhtml:p><![CDATA[call]]></xhtml:p></ST></inline></condition>
            </transition>
            <step localId="3" name="Opening">
              <position x="200" y="120" />
              <connectionPointIn><relPosition x="40" y="0" /><connection refLocalId="2" /></connectionPointIn>
              <connectionPointOut formalParameter="none"><relPosition x="40" y="40" /></connectionPointOut>
              <connectionPointOutAction formalParameter="none"><relPosition x="80" y="20" /></connectionPointOutAction>
            </step>
            <actionBlock localId="4">
              <position x="300" y="120" />
              <connectionPointIn><relPosition x="0" y="20" /><connection refLocalId="3" /></connectionPointIn>
              <action localId="40" qualifier="S"><relPosition x="0" y="0" /><reference name="door_open" /></action>
            </actionBlock>
            <transition localId="5">
              <position x="200" y="180" />
              <connectionPointIn><relPosition x="40" y="0" /><connection refLocalId="3" /></connectionPointIn>
              <connectionPointOut><relPosition x="40" y="10" /></connectionPointOut>
              <condition><inline name="cond"><ST><xhtml:p><![CDATA[dwell_done]]></xhtml:p></ST></inline></condition>
            </transition>
            <step localId="6" name="Closing">
              <position x="200" y="220" />
              <connectionPointIn><relPosition x="40" y="0" /><connection refLocalId="5" /></connectionPointIn>
              <connectionPointOut formalParameter="none"><relPosition x="40" y="40" /></connectionPointOut>
            </step>
            <transition localId="7">
              <position x="200" y="280" />
              <connectionPointIn><relPosition x="40" y="0" /><connection refLocalId="6" /></connectionPointIn>
              <connectionPointOut><relPosition x="40" y="10" /></connectionPointOut>
              <condition><inline name="cond"><ST><xhtml:p><![CDATA[door_closed]]></xhtml:p></ST></inline></condition>
            </transition>
            <step localId="8" name="Travelling">
              <position x="200" y="320" />
              <connectionPointIn><relPosition x="40" y="0" /><connection refLocalId="7" /></connectionPointIn>
              <connectionPointOut formalParameter="none"><relPosition x="40" y="40" /></connectionPointOut>
              <connectionPointOutAction formalParameter="none"><relPosition x="80" y="20" /></connectionPointOutAction>
            </step>
            <actionBlock localId="9">
              <position x="300" y="320" />
              <connectionPointIn><relPosition x="0" y="20" /><connection refLocalId="8" /></connectionPointIn>
              <action localId="90" qualifier="N"><relPosition x="0" y="0" /><reference name="moving" /></action>
            </actionBlock>
            <transition localId="10">
              <position x="200" y="380" />
              <connectionPointIn><relPosition x="40" y="0" /><connection refLocalId="8" /></connectionPointIn>
              <connectionPointOut><relPosition x="40" y="10" /></connectionPointOut>
              <condition><inline name="cond"><ST><xhtml:p><![CDATA[at_floor]]></xhtml:p></ST></inline></condition>
            </transition>
            <jumpStep localId="11" targetName="Idle">
              <position x="200" y="420" />
              <connectionPointIn><relPosition x="40" y="0" /><connection refLocalId="10" /></connectionPointIn>
            </jumpStep>
          </SFC>
        </body>
      </pou>
    </pous>
  </types>
  <instances>
    <configurations>
      <configuration name="Config0">
        <resource name="Res0">
          <task name="tcyclic" interval="T#10ms" priority="0">
            <pouInstance name="inst0" typeName="car_control" />
          </task>
        </resource>
      </configuration>
    </configurations>
  </instances>
</project>
