Experimental Physics and Industrial Control System
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.
Mike
- Replies:
- Re: snc/seq enhancements ... local-variable access Tim Mooney
- Re: snc/seq enhancements ... local-variable access J. Lewis Muir
- Navigate by Date:
- Prev:
EPICS Training Course, Cambridge, England. July 2006 Philip Taylor
- Next:
RE: snc/seq enhancements ... local-variable access Dalesio, Leo `Bob`
- 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:
EPICS Training Course, Cambridge, England. July 2006 Philip Taylor
- Next:
Re: snc/seq enhancements ... local-variable access Tim Mooney
- 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