For a whole accelerator system – you might want to look at interfacing to something like the Matlab accelerator toolbox. I understand it can simulate a number
of different 3rd generation storage rings. But you probably need a tame physicist or six to help set it all up.
http://www.slac.stanford.edu/grp/ssrl/spear/at/
There are most likely a number of models of other devices somewhere too.
Richard
From: [email protected] [mailto:[email protected]]
On Behalf Of Pavel Maslov
Sent: Thursday, August 29, 2013 8:11 AM
To: Steiner, Mathias; EPICS Tech Talk
Subject: Re: Hardware simulator
Hi Mathias,
Thanks for your reply! For simple (serial-based) devices such as power supplies, function generators, etc you can write a "software simulator" (written in Java, Python). One could also use a soft IOC like the one you are using. But my concern
is more about complex devices and the whole subsystems (e.g., Ion Source), which you want to simulate as close to real operation as possible. I am wondering if anybody is practicing such "hardware simulation" and if not, whether or not it would be useful in
the existing physics facilities.
--
Regards,
Pavel Maslov, MS
On Thu, Aug 29, 2013 at 2:40 PM, Steiner, Mathias <[email protected]> wrote:
Pavel,
This may be different than what you're looking for but..
I've found it helpful to have simulated power supplies with which to play before the real things are installed.
I've attached them below on the off-chance that they could be useful to someone.
Four records per PS provide "command set", "readback of set point", "readback of actual current", plus a helper calcout for ramping and noise.
Cheers -Mathias
# simulated power supply records for quadrupole magnets
record(ao, "$(sys)_$(sub):$(psnam)_$(inst):I_CSET")
{
field(DESC, "magnet power supply")
field(EGU, "A")
field(PREC, "1")
field(VAL, "0.0")
}
record(calc, "$(sys)_$(sub):$(psnam)_$(inst):I_RSET")
{
field(DESC, "simulated p/s set pt")
field(EGU, "A")
field(PREC, "1")
field(INPA, "$(sys)_$(sub):$(psnam)_$(inst):I_CSET PP NMS")
field(CALC, "A")
}
record(ai, "$(sys)_$(sub):$(psnam)_$(inst):I_RD")
{
field(DESC, "magnet power supply")
field(EGU, "A")
field(PREC, "1")
field(VAL, "0.0")
}
record(calcout, "$(sys)_$(sub):$(psnam)_$(inst):I_LAG")
{
field(DESC, "co mimics ramping ps")
field(EGU, "A")
field(PREC, "4")
field(INPA, "$(sys)_$(sub):$(psnam)_$(inst):I_CSET PP NMS")
field(INPB, "$(sys)_$(sub):$(psnam)_$(inst):I_RD PP NMS")
field(C, "5") # this determines how fast the p/s ramps..
field(CALC, "ABS(A-B)>C?B+(A-B)/ABS(A-B)*C:A+RNDM-.5")
# 1234567890123456789B123456789C123456789D beware the 40char(?) limit
field(DOPT, "Use CALC")
field(OUT, "$(sys)_$(sub):$(psnam)_$(inst):I_RD PP NMS")
field(SCAN, "1 second")
field(PINI, "1")
field(FLNK, "$(sys)_$(sub):$(psnam)_$(inst):I_RSET.PROC")
}
|