Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017 
<== Date ==> <== Thread ==>

Subject: snc/seq enhancements ... local-variable access
From: "Laznovsky, Michael" <lazmo@slac.stanford.edu>
To: <tech-talk@aps.anl.gov>
Cc: "Laznovsky, Michael" <lazmo@slac.stanford.edu>
Date: Tue, 4 Apr 2006 00:00:38 -0700
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  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017 
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  <20062007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017 
ANJ, 02 Sep 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·