tickit
An event-based multi-device simulation framework providing configuration and orchestration of complex multi-device simulations.
PyPI |
|
Source code |
|
Documentation |
|
Changelog |
https://github.com/dls-controls/tickit/blob/master/CHANGELOG.rst |
An example device which emits a random value between 0 and 255 whenever
called and asks to be called again once the simulation has progressed by the
callback_period
:
class RandomTrampoline(ConfigurableDevice):
Inputs: TypedDict = TypedDict("Inputs", {})
Outputs: TypedDict = TypedDict("Outputs", {"output": int})
def __init__(self, callback_period: int = int(1e9)) -> None:
self.callback_period = SimTime(callback_period)
def update(self, time: SimTime, inputs: Inputs) -> DeviceUpdate[Outputs]:
output = randint(0, 255)
LOGGER.debug(
"Boing! (delta: {}, inputs: {}, output: {})".format(time, inputs, output)
)
return DeviceUpdate(
RandomTrampoline.Outputs(output=output),
SimTime(time + self.callback_period),
)
An example simulation defines a RemoteControlled device named tcp_contr and a Sink device named contr_sink. The observed output of tcp_contr is wired to the input input of contr_sink. Additionally, extenal control of tcp_contr is afforded by a RemoteControlledAdapter which is exposed extenally through a TCPServer:
- tickit.core.components.device_simulation.DeviceSimulation:
adapters:
- examples.devices.remote_controlled.RemoteControlledAdapter:
server:
tickit.adapters.servers.tcp.TcpServer:
format: "%b\r\n"
device:
examples.devices.remote_controlled.RemoteControlled: {}
inputs: {}
name: tcp_contr
- tickit.core.components.device_simulation.DeviceSimulation:
adapters: []
device:
tickit.devices.sink.Sink: {}
inputs:
input: tcp_contr:observed
name: contr_sink
How the documentation is structured
Documentation is split into four categories, accessible from links in the side-bar.
Tutorials
Tutorials for installation, library and commandline usage. New users start here.
How-to Guides
Practical step-by-step guides for the more experienced user.
Explanations
Explanation of how the library works and why it works that way.
Reference
Technical reference material, for classes, methods, APIs, commands, and contributing to the project.