|
Hi, all. One more question about asyn:READBACK:
I have an IOC with two array records (one aai and one aao):
record(aao, "$(P)$(R)$(RING)$(NODE)$(HYB)$(VMM)$(CH)-S") {
field(DESC, "Set $(CH) channels array")
field(DTYP, "asynInt8ArrayOut")
field(NELM, "64")
field(FTVL, "CHAR")
field(SDIS, "$(P)$(R)#$(RING)$(NODE)$(HYB)CalcDISA")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_$(VMM)_$(CH)")
#info(asyn:READBACK, "1")
info(autosaveFields, "VAL")
}
record(aai, "$(P)$(R)$(RING)$(NODE)$(HYB)$(VMM)$(CH)-R") {
field(DESC, "Get $(CH) channels array")
field(DTYP, "asynInt8ArrayIn")
field(NELM, "64")
field(FTVL, "CHAR")
field(SCAN, "I/O Intr")
field(PINI, "YES")
field(SDIS, "$(P)$(R)$(RING)$(NODE)Acquire-R")
field(PHAS, "1")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_$(VMM)_$(CH)")
}
And they seem to work out fine. However, when adding asyn:READBACK to the setpoint and putting a SCAN period of 1 second to the readback, I get a few weird behaviors.
First, the setpoint record starts processing every second (which doesn't happen for other non-array records with READBACK tag):
dbpf LAB-MARCO:NDet-VMM:000000SC-S.TPRO 1
DBF_UCHAR: 1 = 0x1
scanOnce: dbProcess of Disabled 'LAB-MARCO:NDet-VMM:000000SC-S'
spare-ipc-02-3293375 > scanOnce: dbProcess of 'LAB-MARCO:NDet-VMM:000000SC-S'
scanOnce: dbProcess of 'LAB-MARCO:NDet-VMM:000000SC-S'
Second, and harder to describe, is that after a process called by my device API (which should have no interference in the EPICS module/driver) the arrays seem to become unresponsive: if I try to put values into it, they are immediately overwriten by the old
values:
$ caput -a LAB-MARCO:NDet-VMM:000000SC-S 4 1 1 1 1
Old : LAB-MARCO:NDet-VMM:000000SC-S 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
New : LAB-MARCO:NDet-VMM:000000SC-S 64 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
(vmm) marcofilho@spare-ipc-02:~$ caget LAB-MARCO:NDet-VMM:000000SC-R
LAB-MARCO:NDet-VMM:000000SC-R 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
What is happening here? Is there a more proper way of doing this?
I tried changing the records to waveforms but didn't have much success...
Thanks in advance for any help,
Marco
|