Mark,
Thanks for your patience. By using the Phoebus displays, where I see the changes in enums immediately, it is clearer what is happening.
Switching between software and external trigger modes works fine until one changes ExposureMode to TriggerWidth
Then TriggerMode -> N.A. and the TriggerSource choices 'Software' and 'Line1' disappear,
However, changing ExposureMode back to Timed, the TriggerMode and TriggerSources reappear.
Working with the MEDM screens obscured this.
Additional quirks:
TriggerSource = Software and TriggerMode = On produces no triggers.
With extermal trigger selected (i.e. TriggerSource = Line0) the AcquireTime and AcquirePeriod should be set to numbers smaller than those corresponding to the external trigger parameters. Otherwise the AcquireTime or AcquirePeriod settings will override the
external trigger characteristics.
John
From: Mark Rivers <rivers at cars.uchicago.edu>
Sent: Wednesday, June 26, 2024 3:09 PM
To: John Dobbins <john.dobbins at cornell.edu>; tech-talk at aps.anl.gov <tech-talk at aps.anl.gov>
Subject: RE: mbbo fields don't match db definitions ???
John,
Your output on the right lists TriggerMode as “Not available”. I believe that is because the camera is currently acquiring, and you cannot change that feature
while it is acquiring. If you stop acquisition does TriggerMode become “Available”? If so, once it is Available can you change it to “Off” and see if the enums for TriggerSource change?
Mark
From: John Dobbins <john.dobbins at cornell.edu>
Sent: Wednesday, June 26, 2024 1:14 PM
To: Mark Rivers <rivers at cars.uchicago.edu>; tech-talk at aps.anl.gov
Subject: Re: mbbo fields don't match db definitions ???
Mark,
Below are the enum values for TriggerSource and TriggerMode as read by asynReport. The left column shows the enums after a Factory reset. I then select TriggerSource
= Line0 and TriggerMode = On [both are required to make externa l trigger work] after which the enums take on the values on the right. There doesn't seem to be a way to undo the external trigger choice.
I tried an older FLIR GigE camera (13S2M) and it does not have this behavior.
John
Node name: TriggerSource
value: Software
asynIndex: 100
asynName: GC_TRIGGER_SOURCE
asynType: 1
isImplemented: true
isAvailable: true
isReadable: true
isWritable: true
enums: 31: Software
0: Line0
2: Line2
3: Line3
4: UserOutput0
5: UserOutput1
6: UserOutput2
7: UserOutput3
12: Counter0Start
13: Counter1Start
16: Counter0End
17: Counter1End
20: LogicBlock0
21: LogicBlock1
|
Node name: TriggerSource
value: Line0
asynIndex: 100
asynName: GC_TRIGGER_SOURCE
asynType: 1
isImplemented: true
isAvailable: true
isReadable: true
isWritable: true
enums: 0: Line0
2: Line2
3: Line3
4: UserOutput0
5: UserOutput1
6: UserOutput2
7: UserOutput3
12: Counter0Start
13: Counter1Start
16: Counter0End
17: Counter1End
20: LogicBlock0
21: LogicBlock1
|
Node name: TriggerMode
value: Off
asynIndex: 302
asynName: GC_E_TriggerMode
asynType: 1
isImplemented: true
isAvailable: true
isReadable: true
isWritable: true
enums: 0: Off
1: On
|
Node name: TriggerMode
value: Not available
asynIndex: 302
asynName: GC_E_TriggerMode
asynType: 1
isImplemented: true
isAvailable: false
isReadable: false
isWritable: false
enums: 0: N.A.
|
Hi John,
- As I am using MEDM, I have to restart MEDM to see that this is happened.
Another way to see the enum choices is with this iocsh command:
asynReport 2 SP1
where SP1 is the name of the camera port driver. That will produce a complete list of all the camera features with full details in
alphabetical order. For enum records it prints the currently valid choices. You will need to scroll back in the output to find the feature you are interested in. Here is an example of TriggerSource for a FLIR BlackFlyS camera:
Node name: TriggerSource
value: Software
asynIndex: 97
asynName: GC_TRIGGER_SOURCE
asynType: 1
isImplemented: true
isAvailable: true
isReadable: true
isWritable: true
enums: 31: Software
0: Line0
2: Line2
3: Line3
4: UserOutput0
5: UserOutput1
6: UserOutput2
7: UserOutput3
12: Counter0Start
13: Counter1Start
16: Counter0End
17: Counter1End
20: LogicBlock0
21: LogicBlock1
27: Action0
I should add an iocsh command to print the information for a single feature, avoiding the need for lots of scrolling, e.g.
genicamShowFeature TriggerSource
-
Once I restart MEDM, I don't see a way to get back to software trigger.
Does setting TriggerMode=Off do it?
-
Can you point me to a script to start phoebus with the needed substitutions and paths to the other areaDetector opi screens?
The way I do it for both Phoebus and medm is to run a script that copies all the files from the support/ tree into a single directory.
Then I can just open the top-level screen in that directory and it finds all of the other screens.
This is the script for Phoebus. It copies the files to both /home/epics/bob on the Linux machine and also to a Windows server, cars5:/Users/epics/bob.
[epics@viper bin]$ more sync_bobs
cars5dir=/home/epics/cars5/Users/epics
cars5bobdir=$cars5dir/bob/
bobdir=/home/epics/bob/
bobpath='/home/epics/support'
find $bobpath -name '*.bob' -exec cp -f -p {} $bobdir \;
# copy to cars5
if [ -e $cars5bobdir ] && [ -d $cars5bobdir ] ; then
echo 'copying bob files to ' $cars5bobdir
cp -pr $bobdir $cars5bobdir/.
else
echo 'cannot find cars5 directory'
fi
Mark
Mark,
More clarity - once I put the camera in external trigger mode, the menu choices change. As I am using MEDM, I have to restart MEDM to see that this is happened.
Once I restart MEDM, I don't see a way to get back to software trigger.
Can you point me to a script to start phoebus with the needed substitutions and paths to the other areaDetector opi screens?
John
Mark,
I have found that I can reproducibly get things into a strange state by exiting the IOC while the camera is using an external trigger. I will continue to investigate.
John
Mark,
I did a Factory Reset on the camera and deleted settings in autosave. This got the camera back to the state I expected. I will proceed carefully.
Thanks,
John
Thanks Mark. I shall investigate. John
- Previously, 'Software' was a trigger choice. So something in the camera changed so that this is not now a choice?
Yes, I think some other parameter in the camera has changed so that software is no longer a valid choice.
Note that at run-time you actually have 2 fewer choices than in the template file. The template file has 15 choices, i.e. TTxx (13) and FTxx (14) are valid.
But at run-time TTxx and FTxx are not valid.
It appears that the missing (invalid) entries are Software and Line1.
Mark
Mark,
Previously, 'Software' was a trigger choice. So something in the camera changed so that this is not now a choice?
John
John,
What you are seeing is completely normal.
The template file is created by the Python script using the camera’s XML file. That XML file contains all possible choices for each enum. However, not all of those choices are
necessarily available at run time, depending on the camera state. The enum choices in the record at run-time are dynamic, based on which choices are actually available for the current camera configuration.
Note that with older OPIs like medm you will need to close and re-open the window to see the new enum choices. On newer OPIs like Phoebus the enum choices update in the display when
they are changed without needing to close and re-open the window.
Mark
All,
I am using a FLIR camera with base-7.0.6, areaDetector-R3-13, ADGeniCam-R1-9, ADSpinnake-R3-5 on Alma 9.
This IOC has been running normally but after a restart of the IOC I am seeing a strange problem I have not encountered before. On
start-up the IOC loads an mmbo record from FLIR_BFS_U3_161S7M.template but the fields in the instantiated record don't match the database file. [ this doesn't appear to be the only affected record ]
The instantiated record has 13 states where I expect 14. The first state has been lost and all the others are shifted down one with
respect to the definition in the template file.
I could imagine the record being over-written later by another db file. I don't see how that would come about when it was ok previously.
Is there a way to tell if this is happening?
Any thoughts,
John Dobbins
Research Support Specialist
Cornell High Energy Synchrotron Source
Cornell University
www.chess.cornell.edu
dbLoadRecords("/nfs/chess/epics/det/support_flir/areaDetector-R3-13/ADGenICam/db/FLIR_BFS_U3_161S7M.template", "P=BFS1:,R=cam1:,PORT=SP1")
epics> dbpr BFS1:cam1:GC_TriggerSource 4
[0/376]
ACKS: NO_ALARM ACKT: YES AMSG: ASG :
ASP : PTR (nil) BKLNK: ELL 0 [(nil) .. (nil)] BKPT: 00
COSV: NO_ALARM DESC: DISA: 0 DISP: 0
DISS: NO_ALARM DISV: 1 DOL : CONSTANT 31 DPVT: PTR 0x53c4dc0
DSET: PTR 0x7f9ca58af220 DTYP: asynInt32 EIST: Counter1Start
EISV: NO_ALARM EIVL: 0xd ELST: LogicBlock0 ELSV: NO_ALARM
ELVL: 0x14 EVNT: FFST: FFSV: NO_ALARM
FFVL: 0x0 FLNK: CONSTANT FRST: UserOutput1 FRSV: NO_ALARM
FRVL: 0x5 FTST: FTSV: NO_ALARM FTVL: 0x0
FVST: UserOutput2 FVSV: NO_ALARM FVVL: 0x6
IVOA: Continue normally IVOV: 0 LALM: 0
LCNT: 0 LSET: PTR 0x45da5d0 MASK: 4294967295
MLIS: ELL 0 [(nil) .. (nil)] MLOK: a0 51 71 04 00 00 00 00
MLST: 0 NAME: BFS1:cam1:GC_TriggerSource NAMSG:
NIST: Counter0End NISV: NO_ALARM NIVL: 0x10 NOBT: 0
NSEV: NO_ALARM NSTA: NO_ALARM OLDSIMM: NO OMSL: supervisory
ONST: Line2 ONSV: NO_ALARM ONVL: 0x2 ORAW: 0
ORBV: 0 OUT : INST_IO @asyn(SP1,0,1)GC_E_TriggerSource
PACT: 0 PHAS: 0 PINI: NO PPN : PTR (nil)
PPNR: PTR (nil) PRIO: LOW PROC: 0 PUTF: 0
RBV : 0 RDES: PTR 0x22fcdb0 RPRO: 0
RSET: PTR 0x7f9ca571d260 RVAL: 0 SCAN: Passive
SDEF: 1 SDIS: CONSTANT SDLY: -1 SEVR: NO_ALARM
SHFT: 0 SIML: CONSTANT SIMM: NO SIMPVT: PTR (nil)
SIMS: NO_ALARM SIOL: CONSTANT SPVT: PTR (nil) SSCN: <nil>
STAT: NO_ALARM SVST: Counter0Start SVSV: NO_ALARM SVVL: 0xc
SXST: UserOutput3 SXSV: NO_ALARM SXVL: 0x7 TEST: Counter1End
TESV: NO_ALARM TEVL: 0x11 THST: UserOutput0 THSV: NO_ALARM
THVL: 0x4 TIME: 2024-06-21 15:16:03.150013012 TPRO: 0
TSE : 0 TSEL: CONSTANT TTST: TTSV: NO_ALARM
TTVL: 0x0 TVST: LogicBlock1 TVSV: NO_ALARM TVVL: 0x15
TWST: Line3 TWSV: NO_ALARM TWVL: 0x3 UDF : 0
UDFS: INVALID UNSV: NO_ALARM UTAG: 0 VAL : 0
ZRST: Line0 ZRSV: NO_ALARM ZRVL: 0x0
record(mbbo, "$(P)$(R)GC_TriggerSource") {
field(DTYP, "asynInt32")
field(OUT, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))GC_E_TriggerSource")
field(DOL, "31")
field(ZRST, "Software")
field(ZRVL, "31")
field(ONST, "Line0")
field(ONVL, "0")
field(TWST, "Line1")
field(TWVL, "1")
field(THST, "Line2")
field(THVL, "2")
field(FRST, "Line3")
field(FRVL, "3")
field(FVST, "UserOutput0")
field(FVVL, "4")
field(SXST, "UserOutput1")
field(SXVL, "5")
field(SVST, "UserOutput2")
field(SVVL, "6")
field(EIST, "UserOutput3")
field(EIVL, "7")
field(NIST, "Counter0Start")
field(NIVL, "12")
field(TEST, "Counter1Start")
field(TEVL, "13")
field(ELST, "Counter0End")
field(ELVL, "16")
field(TVST, "Counter1End")
field(TVVL, "17")
field(TTST, "LogicBlock0")
field(TTVL, "20")
field(FTST, "LogicBlock1")
field(FTVL, "21")
field(DISA, "0")
}
|