Event-based device simulation framework
Project description
An event-based multi-device simulation framework providing configuration and orchestration of complex multi-device simulations.
PyPI |
pip install tickit |
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
See https://dls-controls.github.io/tickit for more detailed documentation.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.