Skip to content
Snippets Groups Projects
Commit 959b3a46 authored by benjamin.franksen's avatar benjamin.franksen
Browse files

docs: added a section about shell commands to the reference

parent 826370a4
No related branches found
No related tags found
No related merge requests found
...@@ -1633,6 +1633,207 @@ the specified macro name. If the macro does not exist, it returns ...@@ -1633,6 +1633,207 @@ the specified macro name. If the macro does not exist, it returns
``NULL``. ``NULL``.
Shell Commands
--------------
These are commands to be issued from the IOC shell or VxWorks shell.
They can also be called from C (and therefore SNL) code.
Some of these routines behave slightly different depending on whether
run under iocsh or a VxWorks shell. This mostly concerns the
``threadID`` argument: under iocsh, this can in fact be a *thread
name* instead of a thread ID. Note, however, that this is
unreliable if you have more than one instance of the same program
running, since the thread names are identical for all instances. The
VxWorks shell version directly takes an epicsThreadID argument and
thus does not recognize thread names.
.. c:function::
void seq(seqProgram *program, const char *macros, unsigned stacksize)
Start the given program with the given set of macro expansions and
stack size. If stacksize is zero or is omitted, then use a default
(EPICS "small" stack). If macros is zero or the last two arguments are
omitted, the no macros are defined. Otherwise macros should be a string
that gives program parameters as specified in :ref:`run time parameters`.
See also :token:`program_param`.
.. c:function::
void seqShow()
void seqShow(epicsThreadId threadID)
The first form shows a table of all programs, program instances, and
state sets, e.g. ::
epics> seqShow
Program Name Thread ID Thread Name SS Name
------------ --------- ----------- -------
demo 0x807e628 demo light
0x809fbc8 demo_1 ramp
0x809fcd8 demo_2 limit
------------ --------- ----------- -------
demo 0x807fd98 demo light
0xb7100470 demo_1 ramp
0xb7100580 demo_2 limit
------------ --------- ----------- -------
demo 0x80814e0 demo light
0x809fe68 demo_1 ramp
0x809ff78 demo_2 limit
Note that in this example we have three running instances of a single
program named 'demo', each of which consists of three state sets
running in its own thread.
The second form displays the internal state of a running program
instance. The threadID parameter must be one of the program's state
set thread IDs as listed in the above table.
For instance, for the above example we might get ::
epics> seqShow 0x807e628
State Program: "demo"
thread priority = 50
number of state sets = 3
number of syncQ queues = 0
number of channels = 6
number of channels assigned = 6
number of channels connected = 6
number of channels monitored = 5
options: async=0, debug=0, newef=1, reent=1, conn=1, main=0
user variables: address = 0x807d158, length = 44
State Set: "light"
thread name = demo; Thread id = 0x807e628
First state = "START"
Current state = "LIGHT_OFF"
Previous state = "START"
Elapsed time since state was entered = 3.0 seconds
Get in progress = [000000]
Put in progress = [000000]
Queued time delays:
State Set: "ramp"
thread name = demo_1; Thread id = 0x809fbc8
First state = "START"
Current state = "RAMP_UP"
Previous state = "RAMP_UP"
Elapsed time since state was entered = 0.1 seconds
Get in progress = [000000]
Put in progress = [000000]
Queued time delays:
delay[0]=0.100000
State Set: "limit"
thread name = demo_2; Thread id = 0x809fcd8
First state = "START"
Current state = "START"
Previous state = ""
Elapsed time since state was entered = 3.0 seconds
Get in progress = [000000]
Put in progress = [000000]
Queued time delays:
.. c:function::
void seqChanShow(epicsThreadId threadID)
void seqChanShow(epicsThreadId threadID, const char *)
Display channel information for the program instance specified
by the given threadID. If a second argument is given, it is
interpreted as part of a channel name. Only channels whose name
contains the given string as substring are displayed. The name
can be preceded by a single "-" or "+" sign, signifying that only
disconnected ("-") or connected ("+") channels should be
displayed.
The procedure displays one channel at a time, starting with the
first matching one, and then asks the user
for input. This input can be
a (signed) integer:
increase / decrease current channel number by the given amount,
then display the current channel
minus sign ("-"):
same as "-1"
plus sign ("+"), empty string (return):
same as "+1"
anything else:
quit, i.e. back to the shell
If user interaction causes the channel number to leave the range
(i.e. less than zero, greater or equal to number of channels),
the command quits, too.
.. c:function::
void seqQueueShow(epicsThreadId threadID)
Display information about queued channels. For example ::
epics> seqShow
Program Name Thread ID Thread Name SS Name
------------ --------- ----------- -------
syncqTest 0x8053e60 syncqTest get
(nil) (no thread) get1
(nil) (no thread) put
(nil) (no thread) flush
epics> seqQueueShow 0x8053e60
State Program: "syncqTest"
Number of queues = 2
Queue #0: numElems=5, used=0, elemSize=136
Next? (+/- skip count, q=quit)
Queue #1: numElems=5, used=0, elemSize=56
Next? (+/- skip count, q=quit)
The command is interactive and accepts the same inputs as
:c:func:`seqChanShow`.
.. c:function::
void seqcar(int level)
The name stands for "sequencer channel access report". It displays
channel connection information. If level <= 1, or no level argument
is given, only a summary line is displayed, for example ::
Total programs=3, channels=18, connected=18, disconnected=0
For level > 1, connection information is displayed for all channels
of all running programs. For instance ::
epics> seqcar 2
Program "demo"
Variable "light" connected to PV "demo1:light"
Variable "lightOn" connected to PV "demo1:lightOn"
Variable "lightOff" connected to PV "demo1:lightOff"
Variable "voltage" connected to PV "demo1:voltage"
Variable "loLimit" connected to PV "demo1:loLimit"
Variable "hiLimit" connected to PV "demo1:hiLimit"
Program "demo"
Variable "light" connected to PV "demo2:light"
Variable "lightOn" connected to PV "demo2:lightOn"
Variable "lightOff" connected to PV "demo2:lightOff"
Variable "voltage" connected to PV "demo2:voltage"
Variable "loLimit" connected to PV "demo2:loLimit"
Variable "hiLimit" connected to PV "demo2:hiLimit"
Program "demo"
Variable "light" connected to PV "demo3:light"
Variable "lightOn" connected to PV "demo3:lightOn"
Variable "lightOff" connected to PV "demo3:lightOff"
Variable "voltage" connected to PV "demo3:voltage"
Variable "loLimit" connected to PV "demo3:loLimit"
Variable "hiLimit" connected to PV "demo3:hiLimit"
Total programs=3, channels=18, connected=18, disconnected=0
.. c:function::
void seqStop(epicsThreadId threadID)
Initiate a clean program exit. Running state transitions are
completed, then all state set threads exit, all channels are
disconnected, and finally allocated resources are freed.
.. _safe mode: .. _safe mode:
Safe Mode Safe Mode
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment