Hi:
The accuracy of what you describe is of course determined by how you can ‘wait’ on each LLRF IOC for the scheduled time, but in general I think what you describe would work.
As for he error reporting, you can look into supporting put-callback.
When you write to the LLRF_x:myWriteTimeCmd, that could wait until it actually executes the command, and then perform the put-callback. If the time has already passed, i.e. not “enough time”, it can perform the put-callback right away with an
error.
Your LLRF_ALL:myWriteCmd could then trigger a sequence that accesses all the individual LLRF_x:myWriteTimeCmd with put-callback, checking the results.
Thanks,
Kay
Hi everybody,
For the IFMIF/EVEDA project we are using White Rabbit to synchronize our different LLRF modules.
Now we would like to be able to send a PV command that should be executed at the same instant in all our modules.
So we have 8 LLRF modules with 8 independent IOCs that are synced to the same time reference.
I was thinking to:
- Create a new "Fake" IOC to run on one of the 8 modules (LLRF_ALL)
- Send a command LLRF_ALL:myWriteCmd from CSS/GUI
- When this command is received by the LLRF_ALL,
- Get the timestamp when this command was received (rcvTimestamp)
- and forward to the 8 modules other LLRF ioc modules:
- LLRF_x:myWriteTimeStamp= rcvTimestamp+2s (The 2 extra seconds are added to be sure that we have enough time to receive the message at all the other IOCs)
- LLRF_x:myWriteTimeCmd=LLRF_ALL:myWriteCmd
- Then on each IOC of the 8 module (LLRF_x when x=[1-8])
- Receive the two PV values forwarded by the Fake IOC
- Wait until LLRF_x:myWriteTimeStamp to execute the command LLRF_x:myWriteTimeCmd on our device.
I try to search if something similar was already done but did not find anything that fit my exact need.
Another nice feature would be to know if all the LLRF have correctly received the instruction with enough time in order to execute it. However this might be more complex.
|