Laznovsky, Michael wrote:
Greetings EPICS fans- I'm sending this email to solicit suggestions and comments
for some snc/seq enhancements I'm working on, in this case support for access to
local variables within sequence code.
Access is provided by show/get/put functions, and also via special PVs when a
small database is added to the IOC. Progress thus far includes snc producing
the required data structures and the aformentioned seq functions. For example,
the following illustrates a set of declarations in a source file and the output
of a series of "seqVarShow" calls:
char errmsg[256];
char *pbuf;
char *pbuf2;
short n;
int xyz[5][10];
unsigned int m;
long foo;
float a;
double z;
.....
Get thread ID:
epics> seqShow
Program Name Thread ID Thread Name SS Name
zz99Control 1e7a80 zz99seq zz99_ctrl
"seqVarShow" with no arguments displays all local variables in all state
programs (or you can provide the thread id as an argument to limit output):
epics> seqVarShow
Program: zz99Control
Name Type [n][n] Address Value
-----------------------------------------------------------
errmsg char [256] 1e5334 "0"
pbuf char * 1e5434 (NULL)
pbuf2 char * 1e5438 192270 -> "90 0 34 ..."
n short 1e5448 "-77"
xyz int [5][10] 1e5536 "3"
m unsigned int 1e544c "1"
foo long 1e5330 "0"
a float 1e543c "1.0"
z double 1e5328 "0.1873811581904769"
"seqVarGet" with thread ID and variable name displays just that variable:
epics> seqVarGet 1e7a80,"z"
"0.9685835438816328"
"seqVarPut" with thread ID, variable name, and value (as string) modifies
the variable:
epics> seqVarPut 1e7a80,"m","33"
epics> seqVarGet 1e7a80,"m"
"33"
Things to note (all preliminary at this point):
Both reentrant and non-reentrant cases are properly handled.
Variables of type "pointer" are resolved, so that the objects pointed to are
get/put, rather than the pointers themselves (unless the pointer is NULL).
Maybe provide a way to alter the pointer itself?
Character arrays (strings) are displayed/entered as numeric byte sequences
(could be selectable?).
Need a general way to get at arbitrary array elements. Currently only the
first element is accessible.
While local variables are file-scoped (and thus shared by all state sets within
a given source file) the only way I see to uniquely identify a collection of
them is via a "thread ID"... "program name", "thread name", and "SS name"
are all potentially subject to collisions when multiple sequences are loaded
and/or invoked.
Short-term future plans include database and EDM display infrastructure to support
run-time debugging of state programs, including state single-stepping and forced
out-of-order transitions.
Feedback welcomed.
Single stepping would be very cool. I'm not sure what you mean by "forced
out-of-order transitions", but it sounds promising.
The improvement I've heard people wish for most is syntax that would allow
them to change the next state from within a when clause. Is this what you
mean, or is this anywhere on the list of plannedimprovements?
To be clear, I'm thinking it would be nice to be able to write something
like this:
when (<event>) {
if (trouble) nextState = B /* go there after when clause is done */
} state A /* default if 'nextState' is not set */
I've looked at the code to see if this is even a possibility, and aside from
one thing, it does seem achievable. The one thing is that the sequencer sets
up event flags for the next state before it even starts executing a when clause.
I don't know if this is really necessary, though.
--
Tim Mooney ([email protected]) (630)252-5417
Beamline Controls & Data Acquisition Group
Advanced Photon Source, Argonne National Lab.
- References:
- snc/seq enhancements ... local-variable access Laznovsky, Michael
- Navigate by Date:
- Prev:
RE: snc/seq enhancements ... local-variable access Dalesio, Leo `Bob`
- Next:
Re: snc/seq enhancements ... local-variable access J. Lewis Muir
- 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:
snc/seq enhancements ... local-variable access Laznovsky, Michael
- Next:
Re: snc/seq enhancements ... local-variable access J. Lewis Muir
- 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
|