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
. Additionally, extenal control of RandomTrampoline is
afforded by a RemoteControlledAdapter which is exposed extenally through
a TCPServer:
@dataclass
class RandomTrampoline(ComponentConfig):
def __call__(self) -> Component: # noqa: D102
return DeviceSimulation(
name=self.name,
device=RandomTrampolineDevice(),
adapters=[RemoteControlledAdapter(server=TcpServer(format="%b\r\n"))])
class RandomTrampolineDevice(Device):
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:
- examples.devices.remote_controlled.RemoteControlled: {}
name: tcp_contr
inputs: {}
- tickit.devices.sink.Sink: {}
name: contr_sink
inputs:
input: tcp_contr:observed
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.