Signals

A signal is sent using the -> symbol. Here a signal is sent to from a Cabin instance to its associated Door instance.

Unlock -> /R4/Door

One signal is sent to each instance in the target selection.

Take out of service -> my bank/R1/Shaft // All Shafts in the Bank are deactivated

The me keyword is used when the target of the signal is the local object.

Continue -> me  // Move self on to the next state

It is convenient to select the target instance in the same statement.

Land( Runway: designated runway ) -> Aircraft( Tail number: in.aircraft to land )
   [!target] No aircraft to land -> me

If the target is empty, no signals will be sent, but this can be checked with a guard as in the example above. The target guard is set by the signal action when a signal is addressed to at least one instance. Alternatively, the empty guard set by the selection action could have been used.

Note that guards always apply to the previous action block (enclosed in {} or on the same line).

Sending a delayed signal

You can specify a duration to wait before dispatching an event to the target instance.:

Off -> my heater after delay

Here the variable my heater (note that my is NOT a keyword) gets the event after in the delay duration. Note that after is a keyword. You can also use the @ keyword to send a signal at a specific time.

On -> the air conditioner @ afternoon

In this example a time value is stored in the afternoon variable.

Canceling a delayed signal

Use the cancel signal !-> symbol to cancel a delayed signal:

On !-> the air conditioner @ afternoon