looks quite interesting. I am still trying to decode the entire template, but I didn't see any type of protection to avoid the slit arms from overlapping? I imagine I could
probably implement it in the CLC_ expressions. We currently have two approaches:
- use a calc to set up a mask and then use this mask to trigger the move commands in a particular order: used mostly in asymmetrical devices with different arms for each direction
- use calcs to limit the gap/center motion, but it was quite annoying to have the set points update when an arm reaches a limit switch (that was before I had learned about the transform
record)
If you have a soft motor record for the gap and center then using the soft limits in those records can provide a way to prevent a gap or center set point outside a range. Once the slits are calibrated, so that 0 gap is with the slits just touching, you can
set the gap DLLM to something like 0.01 mm (or however close you want).
In some cases, if you have small gap sizes, you also need your first option in order to prevent collisions at the beginning of the move if the motors start moving at slightly different times.
Also, I assume the limit switch indicators don't really work on the virtual motors, correct?
Correct.
The motor record already contains so many fields, but I wonder if it would be helpful to have an INLINK to set these limits (whether the RHLS/RLLS or LLS/HLS, I am not sure).
That’s something I’ve wanted to do in the past as well. For example, if we have a PLC controlled motor, it would typically be integrated using separate records for the setpoint, readback, low limit switch, high limit switch, etc. And it would be nice to
just layer a soft motor record on top and have the limit switch indicators work. The way around this is to develop a Asyn motor driver that can talk to the PLC directly (like any other motor controller driver). But having both options available would be nice.
I don’t think there’s a technical reason why we couldn’t implement this, it’s just an edge case that no one has gotten round to yet.
An alternative approach (which I’ve implement widely at our site) is to have a separate motor ‘status’ record and display it on the user level screen next to the high level gap/center motors. That could combine the various status fields from the soft motors
and the underlying real motors.
Cheers,
Matt
[EXTERNAL] This email originated from outside of FRIB
We heavily use Tim’s other 2-slit database at our beamlines:
optics/opticsApp/Db/2slit.db
at master · epics-modules/optics (github.com)
Mark
Hej Pedro,
If you are working with a slit, it may be useful to look at a slit system
developed by Tim Mooney:
<https://github.com/epics-modules/optics/blob/master/opticsApp/Db/2slit_soft.vdb>
I had stolen that once, redone stuff and tested.
<https://github.com/EuropeanSpallationSource/m-epics-ethercatmc/blob/master/ethercatmcApp/Db/ethercatmcslit_soft.template>
But I don’t know, what the actual status is,
at the end, we decided to do the slit code inside the motion controller.
To be honest, we are not there fully yet, handling all the corner cases.
Which controller do you use ?
My suggestion would be to simulate the motor controller.
And not using the sim-motor.
I any way, it seems as if everybody (“tm”) uses 4 motors :
2 logical (Soft Motor in EPICS speech) for gap and center and then
2 physical motors (the blades, or arms)
Of course, for a typical slit system you need to duplicate the setup:
gap and center for horizontal and gap and center for vertical….
Hope that things work out, please let us know, how it goes
😉
Hi,
I am working on creating virtual motors to control some slits. One problem I have is that I couldn't find a way to set the HLS/LLS/RHLS/RLLS fields. Is there a way to control these (whether
having an input link to these values or a writing them directly with a calcout or bo record)?
Thank you very much
Pedro Nariyoshi
Software Controls Engineer
Facility for Rare Isotope Beams
Michigan State University
640 South Shaw Lane
East Lansing, MI 48824, USA
Tel. 517-908-7352
Email:
nariyosh at frib.msu.edu
|
![1633986722804](jpgfC8SAP7Re4.jpg)
|