Hi Mark,
If I have the following:
float request_move_to_absolute_position;
assign request_move_to_absolute_position to
"{IFO}:{DRIVER}_REQUEST_MOVE_TO_ABS_POS_{AXIS}";
monitor request_move_to_absolute_position;
evflag request_move_to_absolute_positionEvent;
sync request_move_to_absolute_position
request_move_to_absolute_positionEvent;
...
pvGet(request_move_to_absolute_position);
efClear(request_move_to_absolute_positionEvent);
Will the pvGet set the request_move_to_absolute_positionEvent flag? If
so, is it possible that even with the efClear, the flag will remain set
at the end of the code, because the pvGet will not have completed before
the efClear is encountered? But if
pvGet(request_move_to_absolute_position, SYNC) is used, will this
guarantee that the efClear will clear the flag?
Thank you,
Patrick
Mark Rivers wrote:
Patrick,
Event flags can be explicitly set, which is typically used to allow
communication between state sets. Or event flags can be synced to a PV,
and will be set whenever a monitor is received for that PV, as in the
example I sent you.
You can use the efTest() function outside of a when statement, just like
any other function.
Mark
-----Original Message-----
From: Patrick Thomas [mailto:[email protected]]
Sent: Thursday, October 01, 2009 5:20 PM
To: Mark Rivers
Cc: [email protected]
Subject: Re: state notation code flags
Hi Mark,
Are the flags on a monitored variable set whenever the monitored
variable is used in the code, including a pvPut, pvGet, assignment,
calculation, or print statement? Is there a way to test if the flag is
set besides an efTest in a when statement?
Thank you,
Patrick
Mark Rivers wrote:
Hio Patrick,
Here are some code snippets from one of my SNL programs. It has a
variable nelements assigned to a PV, and a monitor on that PV. It has
an event flag, nelementsMon that is synced to nelements. Whenever
nelements changes the event flag will be set. In the init state I clear
the event flag, just to be sure it is clear when the SNL code starts
running (after all PVs connect). I then use efTestAndClear in a when
statement to take actions when that event flag is set, and to clear it.
This works fine for me.
int nelements; assign nelements to "{P}{R}Nelements.VAL";
monitor nelements;
evflag nelementsMon; sync nelements nelementsMon;
/* Initialize things when first starting */
state init {
when() {
/* Clear all event flags */
...
efClear(nelementsMon);
} state monitor_inputs
}
...
state monitor_inputs {
...
when(efTestAndClear(nelementsMon) && (nelements>=1)) {
/* If nelements changes, then change endPulses to this
value,
* since this is what the user normally wants. endPulses
can be
* changed again after changing nelements if this is
desired. */
if (moveMode == MOVE_MODE_RELATIVE)
endPulses = nelements;
else
endPulses = nelements-1;
pvPut(endPulses);
} state monitor_inputs
}
Mark
________________________________
From: [email protected] on behalf of Patrick Thomas
Sent: Wed 9/30/2009 10:35 PM
To: [email protected]
Subject: state notation code flags
Hi,
I was wondering if there is a way to track at what point in the state
notation code evflags are getting set and cleared, or if someone could
clarify under what conditions they get set. I'm having trouble with
them
getting set somewhere and not being cleared, but I'm not sure where.
Thank you,
Patrick
- Replies:
- RE: state notation code flags Mark Rivers
- References:
- state notation code flags Patrick Thomas
- RE: state notation code flags Mark Rivers
- Re: state notation code flags Patrick Thomas
- RE: state notation code flags Mark Rivers
- Navigate by Date:
- Prev:
Re: EPICS Python client application survey Andrew Johnson
- Next:
Re: Channel access and ca_element_count Benjamin Franksen
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
<2009>
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
RE: state notation code flags Mark Rivers
- Next:
RE: state notation code flags Mark Rivers
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
<2009>
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
|