Aircraft checklists: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 90: Line 90:


As of version 3.5, [[FlightGear]] can automate the execution of various sequences of aircraft checklists using the autochecklist.nas script in $FGDATA/Aircraft/Generic. This can be used to an create autostart menu but is not restricted to autostart; any checklist sequence can be run from any piece of Nasal code.
As of version 3.5, [[FlightGear]] can automate the execution of various sequences of aircraft checklists using the autochecklist.nas script in $FGDATA/Aircraft/Generic. This can be used to an create autostart menu but is not restricted to autostart; any checklist sequence can be run from any piece of Nasal code.
The advantage of this approach is that the checklist files become the source of checklists, tutorials and autostart. If the checklists change, so do the tutorials and autostart.
Automated checklists may not work for more complex aircraft startup sequences, but they are so easy to set up that it's worth trying alongside the development of the aircraft startup process. If it works, great! If it doesn't, you haven't wasted your time because you have made a start on your checklists.


=== Background ===
=== Background ===


The script relies on a comprehensive set of checklists that have complete sets of bindings to take the aircraft from one state to another. For autostart, for example, you need to be able to start the aircraft solely by pressing the binding buttons on the right side of the checklist.
The script relies on the aircraft having a set of checklists that have complete sets of bindings to take the aircraft from one state to another. For autostart, for example, you need to be able to start the aircraft solely by pressing the binding buttons on the right side of the checklist.


To use the script, you define a named sequence of checklists to be run on demand. For example, you could define a sequence called "startup" that runs the sequence of checklists: "Before Starting Engines" and "Start Engines". You could also define a sequence of checklists called "shutdown" that runs a sequence containing a single checklist "Parking and Secure".
To use the script, define a named sequence of checklists to be run on demand. For example, you could define a sequence called "startup" that runs the sequence of checklists: "Before Starting Engines" and "Start Engines". You could also define a sequence of checklists called "shutdown" that runs a sequence containing a single checklist "Parking and Secure".


When you invoke the autochecklist script, it executes the checklists defined in the sequence in the order that they are defined. Starting with the first item in the first checklist, it checks the condition associated with the checklist item. If false, it runs the binding. It then moves onto the next item and checks if the condition from the previous item has been satisfied. If not it waits (maybe the binding was interpolated or the condition is waiting for something to start, e.g. APU spooling up). Once the condition from the previous item is satisfied, it looks at the condition on the current item and runs the binding if the condition is false. Execution continues like this until all checklist items have their bindings satisfied.
When you invoke the autochecklist script, it executes the checklists defined in the sequence in the order that they are listed. Starting with the first item in the first checklist, it checks the condition associated with the checklist item. If false, it runs the binding. It then moves onto the next item and checks if the condition from the previous item has been satisfied. If not it waits for a number of seconds (maybe the binding was interpolated or the condition is waiting for something to start, e.g. APU spooling up). Once the condition from the previous item is satisfied, it looks at the condition on the current item and runs the binding if the condition is false. Execution continues like this until all checklist items have their bindings satisfied.


In some cases, e.g. checks on maximum takeoff weight, bindings will never cause the condition to be satisfied. To cover these cases, the script will consider the checklist to have failed if the condition associated with a checklist item does not become true within a timeout period. In these cases, the pilot needs to review the checklist manually and work out why the aircraft will not start. Once the condition has been corrected, e.g. they removed some fuel or payload to get below MTOW, the checklists can be executed again and should be successful. Because the script checks the condition of each item before running the binding, the automated execution is re-entrant; it just picks up where it left off and does only what needs to be done.
In some cases, e.g. checks on maximum takeoff weight, bindings will never cause the condition to be satisfied. To cover these cases, the script will consider the checklist to have failed if the condition associated with a checklist item does not become true within a timeout period. In these cases, the pilot needs to review the checklist manually and work out why the aircraft will not start. Once the condition has been corrected, e.g. they removed some fuel or payload to get below MTOW, the checklists can be executed again and should be successful. Because the script checks the condition of each item before running the binding, the automated execution is re-entrant; it just picks up where it left off and does only what needs to be done.
Line 103: Line 107:
=== Add the script ===
=== Add the script ===


Add autochecklist.nas to the aircraft -set.xml file (or equivalent):
Add <tt>autochecklist.nas</tt> to the aircraft's <tt>-set.xml</tt> file (or equivalent):


<nasal>
<syntaxhighlight lang="xml">
  &lt;!-- Other scripts here ... --&gt;
<nasal>
  <autochecklist>
  <!-- Other scripts here ... -->
    <file>Aircraft/Generic/autochecklist.nas</file>
  <autochecklist>
  </autochecklist>
    <file>Aircraft/Generic/autochecklist.nas</file>
</nasal>
  </autochecklist>
</nasal>
</syntaxhighlight>


=== Define checklist sequences ===
=== Define checklist sequences ===


Create one or more named checklist sequences that specify ordered lists of checklists to execute.
In the aircraft's <tt>-set.xml</tt> file, create one or more named checklist sequences that specify ordered lists of checklists to execute.


For example, to run checklists with indexes 0 and 1 for startup and checklist 9 for shutdown:
For example, to run checklists with indexes 0 and 1 for startup and checklist 9 for shutdown:


<checklists>
<syntaxhighlight lang="xml">
  <checklist include="Checklists/before-starting-engines.xml"/>
<checklists>
  <checklist include="Checklists/start-engines.xml"/>
  <checklist include="Checklists/before-starting-engines.xml"/>
  &lt;!-- Other checklists here ... --&gt;
  <checklist include="Checklists/start-engines.xml"/>
  <checklist include="Checklists/parking.xml"/>
  <!-- Other checklists here ... -->
  <startup>
  <checklist include="Checklists/parking.xml"/>
    <index n="0">0</index> <!-- Before starting engines -->
  <startup>
    <index n="1">1</index> <!-- Start engines -->
    <index n="0">0</index> <!-- Before starting engines -->
  </startup>
    <index n="1">1</index> <!-- Start engines -->
  <shutdown>
  </startup>
    <index n="0">9</index> <!-- Parking -->
  <shutdown>
  </startup>
    <index n="0">9</index> <!-- Parking -->
</checklists>
  </startup>
</checklists>
</syntaxhighlight>


=== Execute the checklist sequence ===
=== Execute the checklist sequence ===
Line 136: Line 144:
For the typical usage of autostart, add a Nasal binding as a menu item and execute the named checklist sequence:
For the typical usage of autostart, add a Nasal binding as a menu item and execute the named checklist sequence:


<item>
<syntaxhighlight lang="xml">
  <label>Autostart</label>
<item>
  <binding>
  <label>Autostart</label>
    <command>nasal</command>
  <binding>
    <script>autochecklist.complete_checklists("startup");</script>
    <command>nasal</command>
  </binding>
    <script>autochecklist.complete_checklists("startup");</script>
</item>
  </binding>
</item>
</syntaxhighlight>


Obviously, additional logic can be included in the binding if you want the autostart menu to toggle between autostart and shutdown.
Obviously, additional logic can be included in the binding if you want the autostart menu to toggle between autostart and shutdown.
Line 162: Line 172:
The autochecklist script can be customized by setting properties, either in the aircraft -set.xml file or at runtime:
The autochecklist script can be customized by setting properties, either in the aircraft -set.xml file or at runtime:


<checklists>
<syntaxhighlight lang="xml">
  <auto>
<checklists>
    <completed-message>Checklists complete</completed-message>
  <auto>
    <startup-message>Running checklists, please wait ...</startup-message>
    <completed-message>Checklists complete.</completed-message>
    <timeout-message>Some checks failed.</timeout-message>
    <startup-message>Running checklists, please wait ...</startup-message>
    <timeout-sec>10</timeout-sec>
    <timeout-message>Some checks failed.</timeout-message>
    <wait-sec>3</wait-sec>
    <timeout-sec>10</timeout-sec>
  <auto>
    <wait-sec>3</wait-sec>
</checklists>
  <auto>
</checklists>
</syntaxhighlight>


* sim/checklists/auto/completed-message: message displayed on successful completion of the checklist
* <code>completed-message</code> message displayed on successful completion of the checklist
* sim/checklists/auto/startup-message: message displayed prior to automated checklist execution
* <code>startup-message</code> message displayed prior to automated checklist execution
* sim/checklists/auto/timeout-message: message displayed if checklist execution times out waiting for a checklist condition to be satisfied
* <code>timeout-message</code> message displayed if checklist execution times out waiting for a checklist condition to be satisfied
* sim/checklists/auto/timeout-sec: if the previous condition is not satisfied within this timeout, the automated execution fails
* <code>timeout-sec</code> if the previous condition is not satisfied within this timeout, the automated execution fails
* sim/checklists/auto/wait-sec: time to wait before re-checking the status of the previous item if its condition is false after running the binding
* <code>wait-sec</code> time to wait before re-checking the status of the previous item if its condition is false after running the binding


Messages are displayed as copilot announcements (by setting sim/messages/copilot). They can be empty if messages are not required. Note that messages are not displayed for expedited starts.
Messages are displayed as copilot announcements (by setting <tt>sim/messages/copilot</tt>). They can be empty if messages are not required. Note that messages are not displayed for expedited starts.


=== Other features and ideas ===
=== Other features and ideas ===


Sometimes, a checklist binding will do something like display a dialog, e.g. fuel and payload dialog. It would be irritating to the pilot if these things happened during automated execution. These bindings can make use of the "sim/checklists/auto/active" property, which will be true (1) when the checklist binding is being run by the autochecklist script and false (0) otherwise.
Sometimes, a checklist binding will do something like display a dialog, e.g. fuel and payload dialog. It would be irritating to the pilot if these things happened during automated execution. These bindings can make use of the <code>sim/checklists/auto/active</code> property, which will be true (1) when the checklist binding is being run by the autochecklist script and false (0) otherwise.


Automated checklist execution is not restricted to autostart and shutdown. If you have an "After Landing" checklist that switches landing lights off, raises flaps and turns taxi lights on, for example, you could assign that to a keyboard shortcut. Rollout and taxi is a busy time on some aircraft and it's often not easy to find the switches and controls necessary to complete this kind of checklist.
Automated checklist execution is not restricted to autostart and shutdown. If you have an "After Landing" checklist that switches landing lights off, raises flaps and turns taxi lights on, for example, you could assign that to a keyboard shortcut. Rollout and taxi is a busy time on some aircraft and it's often not easy to find the switches and controls necessary to complete this kind of checklist.
For an example of using automated checklists, refer to the [[Lockheed Constellation]], for which the script was originally written. Note that you need a recent clone of <tt>FGDATA</tt>, otherwise the <tt>autochecklist.nas</tt> script will not be available.


== External link ==
== External link ==
149

edits

Navigation menu