XSMP Schedule (.xsmpsed)¶
Schedule files define tasks, task activities and time- or event-driven activations.
They are used to describe when tasks run, where they run, and which operations, properties, transfers or global events are part of the execution flow.
Document comments and metadata¶
Schedule files use the shared document-comment rules described in Shared Syntax: Comments, Paths, Templates and Values.
Use a leading documentation comment with the shared root-level tags @title, @date, @creator and @version when you want to enrich exported SMP metadata.
Example:
/**
* Mission schedule.
* @title Mission Schedule
* @creator alice
* @date 2026-03-27T08:00:00Z
* @version 1.0
*/
schedule MissionPlan
Root structure¶
A Schedule declares one reusable schedule, optional timing origins, then a set of tasks and event activations.
Syntax¶
schedule [<template-parameter>[, <template-parameter>]*] <name>
[epoch "<time>"] [mission "<time>"]
<task-or-event>*
Required:
schedule- the schedule name
Optional:
- template parameters
epoch "<time>"mission "<time>"- tasks
- events
Important note:
- if both
epochandmissionare present, you may write them in either order
Example:
schedule <Root = "platform"> MissionPlan epoch "2025-01-01T00:00:00Z"
Template parameters¶
Template Parameters let one schedule definition be reused with different string or integer settings.
Schedules support:
- string parameters
int32parameters
Schedules use the shared template-parameter forms documented in Template parameters and placeholders.
Examples:
<Root: string>
<Root: string = "platform">
<Cycles: int32 = 3>
Tasks¶
A Task defines one reusable execution body made of task activities.
Syntax¶
task <name> [on <component-or-assembly>]
{
<activity>*
}
Required:
task- the task name
- one block body
Optional:
on <component-or-assembly>
Behavior:
on <component-or-assembly>states which component or assembly context the task body is written against- when an assembly context is used, relative activity paths and task roots may reuse that assembly's template parameters
- a task may contain zero or more activities
Example:
task Bootstrap on demo.orbit.OrbitalPlatform
{
trig run
}
Activities¶
Activities are the executable statements that make up a task body.
Tasks may contain:
callpropertytransfertrigexecuteemit
call¶
A Call Activity invokes one operation in the current task execution context.
Syntax¶
call <operation-path>( [<parameter-name> = <simple-value>[, ...]] )
Required:
call- one operation path
- parentheses
Optional:
- named parameters
Example:
call avionics.apply(requestedMode = demo.foundation.Mode.Nominal)
property¶
A Property Activity writes one simple value through a property setter.
Syntax¶
property <property-path> = <simple-value>
Required:
property- one property path
- one simple value
Example:
property mode = demo.foundation.Mode.Nominal
transfer¶
A Transfer Activity copies data from one output field to one input field.
Syntax¶
transfer <output-field-path> -> <input-field-path>
Required:
transfer- one output field path
->- one input field path
Example:
transfer bus.outValue -> router.incomingBus
trig¶
A Trigger Activity triggers one entry point.
Syntax¶
trig <entrypoint-path>
Required:
trig- one entrypoint path
Example:
trig avionics.step
execute¶
An Execute Activity calls another task, optionally with template arguments and a different execution root.
Syntax¶
execute <task>
[<template-argument>[, <template-argument>]*]
[at <root-path>]
Required:
execute- the called task
Optional:
- template arguments
at <root-path>
Behavior:
atchanges the execution root for the called task- template arguments are used when the called task belongs to a templated schedule context
Examples:
execute PowerBalance at avionics
execute OrbitTick<Root = "/platform", Cycles = 3> at orbital
emit¶
An Emit Activity publishes one global event, optionally asynchronously.
Syntax¶
[async] emit "<event-name>"
Required:
emit- one global event name
Optional:
async
Example:
async emit "PlatformReady"
Template arguments¶
Template Arguments provide concrete values to a templated task invocation.
Schedules support:
- string arguments
int32arguments
Syntax:
<parameter-name> = "<value>"
<parameter-name> = <integer>
Required:
- one parameter name
=- one concrete argument value
Optional:
- additional arguments separated by commas
Behavior:
- arguments are matched by parameter name
- argument types are checked against the called task template parameters
Example:
<Root = "/system", Cycles = 3>
Events¶
Events define when tasks start running, whether from time origins or from global events.
Schedules support five event forms:
- mission-relative
- epoch-based
- simulation-relative
- zulu-based
- global-event-triggered
Mission event¶
A Mission Event starts a task relative to the mission clock.
Syntax¶
event <task> mission "<time>" [cycle "<time>" [repeat <count>]]
Required:
event- the task name
mission- one mission-relative time value
Optional:
cyclerepeat
Example:
event Bootstrap mission "PT10S"
Epoch event¶
An Epoch Event starts a task at an absolute epoch-based instant.
Syntax¶
event <task> epoch "<time>" [cycle "<time>" [repeat <count>]]
Required:
event- the task name
epoch- one absolute epoch value
Optional:
cyclerepeat
Example:
event Bootstrap epoch "2025-01-01T00:00:10Z"
Simulation event¶
A Simulation Event starts a task relative to simulation time.
Syntax¶
event <task> simulation "<time>" [cycle "<time>" [repeat <count>]]
Required:
event- the task name
simulation- one simulation-relative time value
Optional:
cyclerepeat
Example:
event Worker simulation "PT45S"
Zulu event¶
A Zulu Event starts a task using an absolute UTC-like timestamp.
Syntax¶
event <task> zulu "<time>" [cycle "<time>" [repeat <count>]]
Required:
event- the task name
zulu- one zulu timestamp
Optional:
cyclerepeat
Example:
event Bootstrap zulu "2025-01-01T00:00:10Z"
Global-event-triggered event¶
A Global-Event-Triggered Event starts a task when one named global event is emitted.
Syntax¶
event <task> on "<start-event>"
[until "<stop-event>"]
[using <time-kind>]
[delay "<time>"]
[cycle "<time>" [repeat <count>]]
Time kinds:
missionepochsimulationzulu
Required:
event- the task
on "<start-event>"
Optional:
untilusingdelaycyclerepeat
Example:
event Observe on "PlatformReady" using mission delay "PT5S" cycle "PT30S" repeat 3
Paths¶
A Schedule Path identifies the members and instances used by task activities.
Schedule paths are used in:
callpropertytransfertrigexecute ... at ...
Schedule paths use the shared path model described in Shared Syntax: Comments, Paths, Templates and Values, the shared unsafe behavior documented in unsafe, and the shared placeholder forms described in Template parameters and placeholders.
Behavior:
- a relative path starts from the current task execution context
- an absolute path starts from the root execution context
- the last segment is interpreted according to the activity that uses the path
Examples:
avionics.apply
bus.outValue
../router
payloads[0]
{ConsoleMember}.log
unsafe legacy.reset
Simple values¶
Simple Values are the scalar literals accepted by schedule activities for arguments and property assignments.
Schedule activities use the shared scalar literal rules documented in Shared Syntax: Comments, Paths, Templates and Values and Numeric suffixes.
Unlike configurations and assemblies, schedules accept simple values only. They do not use array or structure literals in activities.
Examples:
call controller.setRetryCount(count = 3u16)
property mode = 1lit
call controller.setTimeout(timeout = "PT10S"d)
When the target type is already clear from the called parameter or property, you may also write plain integers and plain floating-point values.
Examples:
property mode = demo.foundation.Mode.Nominal
call controller.setTimeout(timeout = "PT10S"d)
Minimal complete example¶
/**
* @title Mission Schedule
* @creator alice
* @date 2026-03-27T08:00:00Z
* @version 1.0
*/
schedule <Root = "/system", Cycles = 3> MissionSchedule epoch "2025-01-01T01:00:00Z"
task Dispatch on demo.mission.MissionSystemRoot
{
call ground.log(message = "mission dispatch")
execute OrbitalTick<Root = "/system/orbital"> at orbital
async emit "MissionReady"
}
task OrbitalTick on demo.orbit.OrbitalPlatform
{
trig run
}
event Dispatch mission "PT15S"
event OrbitalTick simulation "PT20S"