Hi, Ralph, thanks for the help!
I added the record
record(bo, "DISBOOT") {
field(DESC, "Disable on IOC boot")
field(ONAM, "DISABLE")
field(ZNAM, "ENABLE")
field(VAL, "1")
field(PINI, "RUNNING")
field(HIGH, "5")
}
And the field
field(SDIS, "DISBOOT")
To the forwarder record (Not the local nor the global one) and it solved the problem.
It bothers me a bit to add a magic sleep time in the IOC instead of waiting for a known state to complete, but it's the best solution so far without removing the functionality of having hundreds of Local records following what is set in a single global record
- without needing at least tens of fanouts or dfanouts.
Also, if I'm not mistaken even if I had fanouts I would still have this same process-at-initialization problem to solve.
Well, the IOC works without changing the hardware state at boot time now.
Thanks a lot!
Marco
From: Tech-talk <tech-talk-bounces at aps.anl.gov> on behalf of Ralph Lange via Tech-talk <tech-talk at aps.anl.gov>
Sent: Wednesday, September 17, 2025 20:42
To: EPICS Tech Talk <tech-talk at aps.anl.gov>
Subject: Re: Help with bumpless IOC reboot, record linking and initialization concepts
Every CP/CPP input link sets up a local CA monitor.
When you create a CA monitor, you get an initial update when the connection is made.
That initial update on CP/CPP input links processes the record (as CP/CPP means "process on every update").
Multiple CP/CPP input links (e.g., on a calc record) process the record multiple times. (!)
Using the disable mechanism is a possible workaround. Point all the records that you want to quiet down with their SDIS links to a single disable-after-boot control record, and have that control record enable the others after the CP/CPP links have connected
- time-based (= after a little while) is the simplest way.
Cheers,
~Ralph
|