24
1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

Embed Size (px)

Citation preview

Page 1: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

12001: Beijing State Notation Language

EPICS

State Notation Language (SNL)

Ned D. ArnoldAPS

(Ron ChestnutSLAC)

Page 2: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

22001: Beijing State Notation Language

EPICSState Notation Compiler and Sequencer

Allows programming of sequential state-oriented operations to run in the IOC

The program interacts with the run-time database(s) via channel access

Latest manual : http://mesa53.lanl.gov/lansce8/Epics/sequencer/snl_1.9_man.htmlhttp://mesa53.lanl.gov/lansce8/Epics/sequencer/snl-1.9.ps

Page 3: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

32001: Beijing State Notation Language

EPICS

Uses

State machines Startup sequences Enforce prudent operational procedures Watch for likely fault modes that are hard to

detect via alarms Implement complex closed loop control schemes Coordinate control of multiple devices

Page 4: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

42001: Beijing State Notation Language

EPICS

Advantages

Can implement complicated algorithms Can stop, reload, restart a sequence program

without rebooting (VxWorks property) Interact with the operator through string

records and mbbo records C code can be embedded as part of the

sequence All Channel Access details are taken care of for

you File access can be implemented as part of the

sequence

Page 5: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

52001: Beijing State Notation Language

EPICSTo be compared with …

CALC records – single equation, interpreted Database programming – complex networks Subroutine Records – arbitrary code

10 input/outputsdbGet….dbNameToAddr

Straight “C” code

Page 6: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

62001: Beijing State Notation Language

EPICS

Definitions

SNL : State Notation Language SNC : State Notation Compiler sequencer : The tool within the IOC that

executes the compiled SNL code Program : A complete SNL application

consisting of declarations and one or more state sets

State Set : A set of states that make a complete finite state machine

State : A particular mode of the state set in which it remains until one of its transition conditions is evaluated to be TRUE

Page 7: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

72001: Beijing State Notation Language

EPICS

Basics The SNL code structure follows a state transition diagram format

state light_off { when (v > 5.0){ light = TRUE; pvPut(light); } state light_on }

state light_on { when (v < 5.0){ light = FALSE; pvPut(light); } state light_off }

light_Off state

light_On state

V > 5Turn light on

V < 5Turn light off

Page 8: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

82001: Beijing State Notation Language

EPICS

Basics (cont …)

Each state has one or more when statements which specify which state to enter next if their condition is met

Action statements are executed during the transition from one state to another

Access to Process Variables via channel access is accomplished by simply assigning a PV to a sequence variable

Page 9: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

92001: Beijing State Notation Language

EPICSA Complete State Program

(with 2 state sets) program level_check

float v; assign v to "ts1:ai1"; monitor v;

short light; assign light to "ts1:bo1";

float vout; float delta; assign vout to "ts1:ai1";

ss volt_check {

state light_off { when (v > 5.0) { /* turn light on */ light = TRUE; pvPut(light); } state light_on }

state light_on { when (v < 5.0) { /* turn light off */ light = FALSE; pvPut(light); } state light_off }

}

ss generate_voltage {

state init { when ( ) { vout = 0.0; pvPut(vout); delta = 0.2; } state ramp }

state ramp { when (delay(0.1) { if ((delta > 0.0 && vout >= 11.0) || (delta < 0.0 && vout <= -11.0) ) delta = -delta; /* change direction */ vout += delta; } state ramp; }

}

Page 10: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

102001: Beijing State Notation Language

EPICSMore Basics ...

A state can have multiple when statements. The first one to be evaluated to be TRUE will be executed. This allows conditional branching within the sequence program.

When entering a state, all when conditions are evaluated in the order given in the source code

If no when condition is true, the sequence program task pends until an event occurs, which causes all when conditions to be re-evaluated

It is easy to create a loop and consume all available CPU time When this happens, all CA clients connected to this IOC

will disconnect

Page 11: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

112001: Beijing State Notation Language

EPICSExit{} and Entry{}

Extra Clauses which are triggered on ENTRY or EXIT from a state

Default behavior is execution ONLY when making a transition to another state

Default behavior overridden by options (-x and –e)

Page 12: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

122001: Beijing State Notation Language

EPICSEntry and Exit example

State ramp_width

option –x;

{

entry{internal_state=RAMP_WIDTH; pvPut(internal_state); ramp_done=0;}

when(ramp_done==1)

{ issue message; } state running

when(delay(.1))

{ do stuff to ramp; check for being done (ramp_done=1) } state ramp_width

exit {publish information on ongoing ramp; taskDelay(1);}

}

Page 13: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

132001: Beijing State Notation Language

EPICSState Timers (delay())

The delay(seconds) function will test TRUE after seconds delay.

The timer starts each time the state is entered The option –t causes the timer NOT to reset upon

reentry to the same statestate one

option –t;

{

when(delay(10.5)) {timer has expired} state two

when(reset==1) {do something; reset=0; pvPut(reset);} state one

}

state two {}

Page 14: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

142001: Beijing State Notation Language

EPICSExample of “Multiple whens”

when(interlockChasPwrBI && (gunLocal==0) && gunInterlocksRdyCC) { gunAutoStart = 0; pvPut(gunAutoStart); gunAutoStop = 0; pvPut(gunAutoStop); sprintf(seqMsg1, "Push Auto-Start to begin autostart ..."); pvPut(seqMsg1); sprintf(seqMsg2, "Push Auto-Stop to begin autostop ..."); pvPut(seqMsg2);%% taskDelay(60); } state waitForRequest }

state initialChecks { when(delay(2.0)) { sprintf(seqMsg1, "Initial Checks"); pvPut(seqMsg1); sprintf(seqMsg2, ""); pvPut(seqMsg2);%% taskDelay(60); } state checks }

state checks { when(interlockChasPwrBI==0) { sprintf(seqMsg1, "Electron Gun not ready ..."); pvPut(seqMsg1); sprintf(seqMsg2, "Gun Interlock Chassis off "); pvPut(seqMsg2); } state initialChecks

when(gunLocal) { sprintf(seqMsg1, "Electron Gun not ready ..."); pvPut(seqMsg1); sprintf(seqMsg2,"Egun in local control "); pvPut(seqMsg2); } state initialChecks

when(gunInterlocksRdyCC==0) { sprintf(seqMsg1, "Electron Gun not ready ..."); pvPut(seqMsg1); sprintf(seqMsg2, "Interlocks not OK "); pvPut(seqMsg2); } state initialChecks

Page 15: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

152001: Beijing State Notation Language

EPICSOther Features

Assignment of macros at program startup for multiple copies of same sequence (must specify +r compiler flag)

program level_check ("unit=ts1")

float v; assign v to "{unit}:ai1";

short light; assign light to "{unit}:bo1";

Arrays (each element can be assigned to a PV) Built-In functions (pg 17 of SNL Manual) Dynamic assignment of PVs to variables Connection Management and status

In startup script …

ld < level_check.o

seq &level_check, "unit=ts1" seq &level_check, "unit=ts2"

Page 16: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

162001: Beijing State Notation Language

EPICSOther Features

Event Flags (used to sync state sets and monitors) evflag name;

synch PV_name name;monitor PV_name;

efSet(name), efTest(name), efClear(name), efTestAndClear(name)

Escape to C code %% escapes a single line %{ }% escapes a block of code

Log errors to a log file

Page 17: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

172001: Beijing State Notation Language

EPICSWarnings on Events and Escaped Code

Escaped declarations are file scoped!(even if you use the +r option to create a reentrant program)

If you wish to access variables mapped to PVs in escaped code, you must say pvar->variable_name. Look at the generated “c” code if this is confusing.

Event flags are mapped to #define statementsevflag namex; evflag namey; map to#define namex 1#define namey 2

These events are shared within one task; i.e. one seq & invocation.

Page 18: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

182001: Beijing State Notation Language

EPICSSome TIME warnings

%% TS_STAMP start_time; TS_STAMP current_time;double elapsed_time;

pvGet(pv_name);current_time = pvTimeStamp(pv_name);TsDiffAsDouble(elapsed_time,&current_time,

&start_time); Even if the code is reentrant (option +r), start_time and

current_time are file-scoped. seq &prog.o,[one parameter set]

seq &prog.o,[other parameter set]

Will share these variables.

Page 19: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

192001: Beijing State Notation Language

EPICS

Debugging

seqShow

ioc> seqShowProgram Name Task ID Task Name SS Name

xx_RF_Cond 10854616 xx_RF_Cond l1AutoConditioning

bpmTraject 10838832 bpmTrajectory bpmTrajectorySS

xx_autoPha 10680172 xx_autoPhasing autoPhasing 10573424 xx_autoPha_1 updatePresets

xx_autoRfT 10589876 xx_autoRfTiming autoRfTiming

value = 0 = 0x0

Page 20: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

202001: Beijing State Notation Language

EPICS

Debugging

seqShow <taskId>ioc> seqShow 10838832State Program: "bpmTraject" initial task id=10838832=0xa56330 task priority=100 number of state sets=1 number of channels=56 number of channels assigned=56 number of channels connected=56 options: async=0, debug=0, newef=0, reent=0, conn=0 log file fd=3 log file name="/tyCo/0"

State Set: "bpmTrajectorySS" task name=bpmTrajectory; task id=10838832=0xa56330 First state = "init" Current state = "waitToPlot" Previous state = "plotWithBeam" Elapsed time since state was entered = 0.4 seconds)

value = 0 = 0x0

Page 21: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

212001: Beijing State Notation Language

EPICS

Debugging

seqChanShow <taskId>,[“PV_name” or “-”] ioc> seqChanShow 10838832State Program: "bpmTraject"Number of channels=56

#1 of 56:Channel name: "L1:PG1:PM1:BPM.XPOS" Unexpanded (assigned) name: "L1:PG1:PM1:BPM.XPOS" Variable name: "L1PG1PM1_X" address = 11931404 = 0xb60f0c type = float count = 1 Value = 0 Monitor flag=1 Monitored Assigned Connected Get not completed or no get issued Status=11 Severity=2 Time stamp = 05/21/99 16:43:35.085407596Next? (+/- skip count)

Page 22: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

222001: Beijing State Notation Language

EPICS

Debugging

printf("Here I am in state xyz \n"); string seqMsg1;

assign seqMsg1 to “[PV_name]”;sprintf(seqMsg1, "Here I am in state xyz");

pvPut(seqMsg1); Reload and restart

seqShow td xxxxxx ld < my_sequence_program.o seq &my_sequence_program.o,[parameters]

Page 23: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

232001: Beijing State Notation Language

EPICSSequencer programs run also on Hosts

(Re)implemented by APS Main program generated by +m option Option –s on startup creates iocsh, which allows

seqShow, etc. ExampleApp supplied with 3.14 release describes

some details

Page 24: 1 2001: Beijing State Notation Language EPICS State Notation Language (SNL) Ned D. Arnold APS (Ron Chestnut SLAC)

242001: Beijing State Notation Language

EPICS

Examples

Control filling of PEP-II ring Provide handshake between accelerator and

experiment Manage controlled ramping of RF processing Manage shift summaries Compensate for Attenuator Phase Shift when adjusted Automatically check timing of BPM’s E-gun startup Modulator startup Automatic Test Sequences (240 Inputs to the MPS) BPM Trajectory Plot