Paradigm | Multi-paradigm |
---|---|
Designed by | NASA |
First appeared | 2005 |
Typing discipline | Static, unsafe, nominative |
OS | Linux, Mac OS |
License | Open source |
Website | http://plexil.sourceforge.net/ |
Major implementations | |
Robotics, Space missions |
PLEXIL (Plan Execution Interchange Language) is an open source technology for automation, created and currently in development by NASA.
PLEXIL is a programming language for representing plans for automation.
PLEXIL is used in automation technologies such as the NASA K10 rover, Mars Curiosity rover's percussion drill, Deep Space Habitat and Habitat Demonstration Unit, Edison Demonstration of Smallsat Networks, LADEE, Autonomy Operating System (AOS) and procedure automation for the International Space Station. [1] [2] [3]
The PLEXIL Executive is an execution engine that implements PLEXIL and can be interfaced (using a provided software framework) with external systems to be controlled and/or queried. PLEXIL has been used to demonstrate automation technologies targeted at future NASA space missions.
The binaries and documentation are widely available as BSD licensed open source from SourceForge.net. [4]
The fundamental programming unit of PLEXIL is the Node. A node is a data structure formed of two primary components: a set of conditions that drive the execution of the node and another set which specifies what the node accomplishes after execution.
A hierarchical composition of nodes is called a plan. A plan is a tree divided in nodes close to the root (high level nodes) and leaf nodes that represent primitive actions such as variable assignments or the sending of commands to the external system.
Node Types:
As of September 2008 NASA has implemented seven types of nodes.
Node states:
Each node can be in only one state. They are:
Nodes transitions:
In digital computers, an interrupt is a request for the processor to interrupt currently executing code, so that the event can be processed in a timely manner. If the request is accepted, the processor will suspend its current activities, save its state, and execute a function called an interrupt handler to deal with the event. This interruption is often temporary, allowing the software to resume normal activities after the interrupt handler finishes, although the interrupt could instead indicate a fatal error.
In computer programming, an infinite loop is a sequence of instructions that, as written, will continue endlessly, unless an external intervention occurs, such as turning off power via a switch or pulling a plug. It may be intentional.
In computer science, control flow is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an imperative programming language from a declarative programming language.
Verilog, standardized as IEEE 1364, is a hardware description language (HDL) used to model electronic systems. It is most commonly used in the design and verification of digital circuits, with the highest level of abstraction being at the register-transfer level. It is also used in the verification of analog circuits and mixed-signal circuits, as well as in the design of genetic circuits. In 2009, the Verilog standard was merged into the SystemVerilog standard, creating IEEE Standard 1800-2009. Since then, Verilog has been officially part of the SystemVerilog language. The current version is IEEE standard 1800-2023.
AppleScript is a scripting language created by Apple Inc. that facilitates automated control over scriptable Mac applications. First introduced in System 7, it is currently included in all versions of macOS as part of a package of system automation tools. The term "AppleScript" may refer to the language itself, to an individual script written in the language, or, informally, to the macOS Open Scripting Architecture that underlies the language.
A state diagram is used in computer science and related fields to describe the behavior of systems. State diagrams require that the system is composed of a finite number of states. Sometimes, this is indeed the case, while at other times this is a reasonable abstraction. Many forms of state diagrams exist, which differ slightly and have different semantics.
In computer programming, specifically when using the imperative programming paradigm, an assertion is a predicate connected to a point in the program, that always should evaluate to true at that point in code execution. Assertions can help a programmer read the code, help a compiler compile it, or help the program detect its own defects.
In computer science, conditionals are programming language constructs that perform different computations or actions or return different values depending on the value of a Boolean expression, called a condition.
Short-circuit evaluation, minimal evaluation, or McCarthy evaluation is the semantics of some Boolean operators in some programming languages in which the second argument is executed or evaluated only if the first argument does not suffice to determine the value of the expression: when the first argument of the AND
function evaluates to false
, the overall value must be false
; and when the first argument of the OR
function evaluates to true
, the overall value must be true
.
The Guarded Command Language (GCL) is a programming language defined by Edsger Dijkstra for predicate transformer semantics in EWD472. It combines programming concepts in a compact way. It makes it easier to develop a program and its proof hand-in-hand, with the proof ideas leading the way; moreover, parts of a program can actually be calculated.
Signals are standardized messages sent to a running program to trigger specific behavior, such as quitting or error handling. They are a limited form of inter-process communication (IPC), typically used in Unix, Unix-like, and other POSIX-compliant operating systems.
In concurrent programming, a monitor is a synchronization construct that prevents threads from concurrently accessing a shared object's state and allows them to wait for the state to change. They provide a mechanism for threads to temporarily give up exclusive access in order to wait for some condition to be met, before regaining exclusive access and resuming their task. A monitor consists of a mutex (lock) and at least one condition variable. A condition variable is explicitly 'signalled' when the object's state is modified, temporarily passing the mutex to another thread 'waiting' on the condition variable.
Predicate transformer semantics were introduced by Edsger Dijkstra in his seminal paper "Guarded commands, nondeterminacy and formal derivation of programs". They define the semantics of an imperative programming paradigm by assigning to each statement in this language a corresponding predicate transformer: a total function between two predicates on the state space of the statement. In this sense, predicate transformer semantics are a kind of denotational semantics. Actually, in guarded commands, Dijkstra uses only one kind of predicate transformer: the well-known weakest preconditions.
In computer science, software transactional memory (STM) is a concurrency control mechanism analogous to database transactions for controlling access to shared memory in concurrent computing. It is an alternative to lock-based synchronization. STM is a strategy implemented in software, rather than as a hardware component. A transaction in this context occurs when a piece of code executes a series of reads and writes to shared memory. These reads and writes logically occur at a single instant in time; intermediate states are not visible to other (successful) transactions. The idea of providing hardware support for transactions originated in a 1986 paper by Tom Knight. The idea was popularized by Maurice Herlihy and J. Eliot B. Moss. In 1995, Nir Shavit and Dan Touitou extended this idea to software-only transactional memory (STM). Since 2005, STM has been the focus of intense research and support for practical implementations is growing.
In computer programming, an entry point is the place in a program where the execution of a program begins, and where the program has access to command line arguments.
Query optimization is a feature of many relational database management systems and other databases such as NoSQL and graph databases. The query optimizer attempts to determine the most efficient way to execute a given query by considering the possible query plans.
Real-time Control System (RCS) is a reference model architecture, suitable for many software-intensive, real-time computing control problem domains. It defines the types of functions needed in a real-time intelligent control system, and how these functions relate to each other.
UML state machine, formerly known as UML statechart, is an extension of the mathematical concept of a finite automaton in computer science applications as expressed in the Unified Modeling Language (UML) notation.
A spacecraft command language is a computer command language for commanding spacecraft mission systems. Ultimately such languages are used to command remote spacecraft with telecommands, but they are also used for development and verification of onboard systems, and of ground systems, prior to launch.
The Crew Dragon In-Flight Abort Test was a successful test of the SpaceX Dragon 2 abort system, conducted on 19 January 2020. It was the final assessment for the Crew Dragon capsule and Falcon 9 launch system before they would be certified to carry humans into space. Booster B1046.4 and an uncrewed capsule C205 were launched from Launch Complex 39A (LC-39A) on a suborbital trajectory, followed by an in-flight abort of the capsule at max Q and supersonic speed. The test was carried out successfully: the capsule pulled itself away from the booster after launch control commanded the abort, and landed safely.