Comments from the 07/14/05 LCLS SLC-Aware Design Review: Beam Synchronous Acquisition and Controls Presenters: Diane, Debbie Attendees: Patrick, Till, Dayle, Kristi, Stephanie, Stephen, Nancy, Mike Zelazny, Ron Chestnut, Ron Mackenzie, Greg White, Bob Fuller Specification: http://www.slac.stanford.edu/grp/lcls/controls/global/sw/slc_ioc/bsac/BSACDesign.htm Vdct drawings: (1)Markup from hardcopies (Q=1 at top of MEASCNT, PUIDCNT, LOCA = slc ioc location name, userid = user name typed into EDM for CA) (2)Change name of CheckPNET to CheckEVR (there can be 8 extra bytes for LCLS purposes aside from epicsTS) (3)Make new .db file with dirty sine wave test signal and controls for diagnostic test on/off (future) (4)Add FLNK to compress records that buffer unit data for CA clients / md (future) (5)Make a note that the drive-high (DRVH) limit for MDEF:$(LOCA):$(MD):MEASCNTMAX needs to be at least 2800 but can be made larger later if needed. (6)Document the upper limit on AVGCNTMAX. (7)In order to display the time when the meas def is setup, please add a timestamp record FLNKed from MD CTRL - it'll just be used to display the time that the meas def was activated or deactivated. (8)For bits beyond PNET that Patrick will be using, add in inclusion and exclusion masks 4 and 5 to the MDEF database and include them as inputs to CheckEVR. bsacHdlr just sets them to 0. Design doc: (1) Reformat to make printable (2) Insert updated BPM Overall.vsd (3) Note that devices other than BPMS can have on-line/off-line/maint/checkout states in epics. (4) Design/doc collection structure in BSACLrgBuffer.vsd using array indices (5) We could use a CA monitor for EPICS changes (or is it easier code-wise to keep orig bsacAsync design)? Also, need to keep the previous values of the applicable SLC database secondaries for comparison purposes. Need to log an informational message when the SLC database is changed due to an EPICS change. Document that the message is not needed for the EPICS change since ChannelWatcher will do the message. (6) Look into semaphore necessity around measdef timeout R/Ws (7) Set SCAN = Intr_IO last in sequence for measdef setup (8) Note that there is no db consistency checks between EPICS and SLC db upon initialization; immediate reply messages to SCP will complain if there are any mismatches (9) Note that SCP max nrpos = 2800; max navg = ?; we can change, if needed (10)EPICS Device Supports do a scan IO request. (Decouples; better than FLNK and having to process disabled records) (Our GO$MDs are automatically managed and placed into list) to cause GO$MD records whose SCAN = IO_Intr to process. Until the device support is ready, plan on FLNKing fanout records from the last ai/puid record to the 20 GO records and code bsacHdlr to set the GO DISV to 0 (to stop) or 1 (to start) instead of SCAN to IO_intr or Passive. (11)BPMS x, y, tmit must be processed prior to the scan IO request. (12)Pulse id, timestamp must be ready 1st before all other primaries. (13)Draw a timeline of when EVR, BPMS, other BSAC devices, FFback need to process relative to one another and the timing system (Steph). (14)Abort cases: bsacAsync timeout, bsacHdlr setting abort flag due to mismatched counters/EPICS error reporting in message, CLR_SCP command, MEAS_STOP command, user sets via CA: MEASCNTMAX = 0, any others? (15)Double check abort logic (16)No qraw is being reported for any devices. This would not have meaning to maintenance personnel anyway because it is not raw camac, (raw VME), which is not what they're used to seeing. They must go to device (ie Till's) EDM Diagnostic display instead (17)Check MDEF:USERID to see if measdef is brand new or if it replaces this scp's current measdef. (18)Document that we assume one location name per IOC. That IOCs cannot span multiple locations (ie, one IOC cannot span both the injector and LINAC sector 21). (19)Document that the task that processes your 120hz records must run at a high priority. (20)Document that the PUID processing will be 360hz (the PP match will fail for the unused time slots). (21)Add diagnostic fields to bsacMD_ts structure. Add iocsh routines that dump bsacMD_ts and any interesting internal arrays/linked lists. (22)For the bsacHdlr normal processing loop description, make sure the immediate reply back to the SCP is done only after the large reply buffer is allocated, the pointers and counters are set up, and all dbPut operations are complete. The SCP needs to know if there is any error on any of these operations and the measurement never started. (23)The "abort flag" in the BSAC_DATA and BSAC_DONE message processing detects nrpos inconsistencies (like too many messages reported/unit). An error can be logged for that unit in that processing. MEASCNTMAX be set to 0 for an abort. (24)For BSAC_DATA, BSAC_DONE, and BSAC_ABORT, also update diagnostics kept in bsacMD_ts. (25)Move the last bullet under BSAC_DONE processing to BPMO_GETREMDAT processing. (26)If any message to the bsacHdlr is missed, the measurement will eventually timeout. There will be an overall counter/measDef that will tabulate DONE messages for units; it's max = #units * nrpos. This will quickly tell us, during the DONE processing, when our measDef has completed the cycle. (27)For XTOL, ANGL, and OFFS, don't do any coding for them in bsacAsync - make it all TBD. (28)Add ability to simulate BPM data. Don't need Toroid etc. X,Y, and TMIT are needed, since high level apps will assume the data is bad unless tmit is reasonable. Other than non-0 tmit the fake data need not be especially believable - a sine function with some error would be ideal. Using the record simulation features will probably work. The simulation can be turned on/off without rebooting the IOC and still be driven by Till's triggers and use the incoming EVR patterns.