1 / 44

State Notation Language (SNL) and Sequencer

State Notation Language (SNL) and Sequencer. April 23, 2012 Kukhee Kim ICD Software SLAC National Accelerator Laboratory. Contents. State Notation Language / Sequencer Definition of Terms State Transition Diagram Example 1: Simple Switch ON/OFF SNL General Syntax & Structures

favian
Download Presentation

State Notation Language (SNL) and Sequencer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. State Notation Language (SNL) and Sequencer April 23, 2012 Kukhee Kim ICD Software SLAC National Accelerator Laboratory

  2. Contents • State Notation Language / Sequencer • Definition of Terms • State Transition Diagram • Example 1: Simple Switch ON/OFF • SNL General Syntax & Structures • Declaration for Variable, Assigment, and Event Flags • Event • Action • Example 2: Life Game • SNL Variables and its Lifetime and Scopes • Dynamic PV assignment • Building SNL code • Runtime Sequencer • Executing SNL Program • Debugging • Additional Features • Advantage of SNL Program

  3. SNL and Sequencer • SNL is “C” like language for programming sequential operations • The sequencer runs program which written in the SNL • Fast execution using compiled code • Common uses • automated start-up and sequencing • fault recovery or transition to safe state • automatic calibration

  4. Sequencer in an IOC LAN Channel Access IOC Sequencer Database Device Support I/O Hardware

  5. Sequencer at CA Client side Tools MEDM Client Client Client MEDM Sequencer LAN Server IOC IOC IOC Meter Power Supply Camera

  6. Definitions • SNL: State Notation Language • SNC: State Notation Compiler • Sequencer: The tool that executes the compiled SNL code • Program: A complete SNL application, consisting 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 evaluates to TRUE

  7. State Transition Diagram SNL- A tool to implement State Transition Diagram State A Event Transition A to B Action State B

  8. Example 1 – On/Off switch State transition to ON signal Initialize No transition Thresholdto ON State transition to OFF State ON Thresholdto OFF Event: time Action: turn off the light on on off off off State OFF Event: Action: turn on the light

  9. Example 1 – Sneak Look Initialize State ON Event: Action: turn off the light State OFF Event: Action: turn on the light

  10. Example 1 – Sneak Look

  11. SNL: General Structure & Syntax programprogram_name declarations ssstate_set_name { statestate_name { entry { entry action statements } when (event) { action statements } statenext_state_name when (event) { ... } statenext_state_name exit{ exit action statements } } statestate_name{ ... } }

  12. SNL: General Structure & Syntax programname A program may contain multiple state sets. The program name is used as a handle to the sequencer manager for state programs. ssname { Each state set becomes a separate task or thread. statename { A state is somewhere the task waits for events. When an event occurs it checks to see which action it should execute. The first state defined in a state set is the initial state. optionflag; A state-specific option. when (event) { Define events for which this state waits. } statenext Specifies the state to go to when these actions are complete. entry {actions} Actions to do on entering this state. With option -e; it will do these actions even if it enters from the same state. exit {actions} Actions to do on exiting this state. With option -x; it will do these actions even if it exits to the same state.

  13. Declaration: Variables • Appear before a state set and have a scope of the entire program. • Scalar variables intvar_name; shortvar_name; longvar_name; charvar_name; floatvar_name; doublevar_name; stringvar_name; /* 40 characters */ • Array variables: 1 or 2 dimensions, no strings intvar_name[num_elements]; shortvar_name[num_elements]; longvar_name[num_elements]; charvar_name[num_elements]; floatvar_name[num_elements]; doublevar_name[num_elements];

  14. Declaration: Assignments • Assignment connects a variable to a channel access PV name float pressure; assign pressure to "CouplerPressureRB1"; double pressures[3]; assign pressures to {"CouplerPressureRB1", "CouplerPressureRB2", " CouplerPressureRB3"}; • To use these channels in when clauses, they must be monitored monitor pressure; monitor pressures; • Use preprocessor macros to aid readability: #define varMon(t,n,c) t n; assign n to c; monitor n; varMon(float, pressure, "PressureRB1")

  15. Declaration: Event Flags • Event flags are used to communicate events between state sets, or to receive explicit event notifications from Channel Access • Declare them like this: evflagevent_flag_name; • An event flag can be synchronized with a monitored variable syncvar_nameevent_flag_name; • The flag will then be set when a monitor notification arrives, e.g. evflagpressure_event; Sync pressure pressure_event;

  16. Event Event: A specific condition on which associated actions are run and a state transition is made. Possible events: • Change in value of a variable that is being monitored: when (achan < 10.0) • A timer event (this is not a task delay!): when (delay(1.5)) • The delay time is in seconds and is a double; literal constant arguments to the delay function must contain a decimal point. • The timer starts when the state containing it was entered. • Use the state specific option -t; to stop it from being reset when transitioning to the same state.

  17. Event (continued) • The state of an event flag: when (efTestAndClear(myflag)) when (efTest(myflag)) • efTest() does not clear the flag. efClear()must be called sometime later to avoid an infinite loop. • If the flag is synced to a monitored variable, it will be set when the channel sends a value update • The event flag can also be set by any state set in the program using efSet(event_flag_name) • Any change in the channel access connection status: when (pvConnectCount() < pvChannelCount()) when (pvConnected(mychan)) • Any combination of the above event types

  18. Action • Built-in action function, e.g. : • pvPut(var_name); • pvGet(var_name); • efSet(event_flag_name); • efClear(event_flag_name); • Almost any valid C statement • switch() is not implemented and code using it must be escaped. %% escapes one line of C code %{ escape any number of lines of C code }%

  19. Example 2: Life Game

  20. Example 2: Life Game • Basic Rule of Life Game • Rule 1: Any live cell with fewer than two live neighbors died, • as caused by under population. • Rule 2: Any live cell with two or three live neighbors lives • on to the next generation. • Rule 3: Any live cell with more than three live neighbors died, • as if the overcrowding. • Rule 4: Any dead cell with exactly three live neighbors become • a live cell, as if production

  21. Example 2 - Continued • Requirements • 20x20 Bo records to represents cells • Adjustable Initial population density (Ao record, operation range [0. to 1.] • If the initial population density is changed, then starts new game • Initialize cells with random number generator + constraint for the initial population density • Evolution to next generation few times in a second • Provides basic statistics: number of live cells and number of dead cells • Additional Requirement • Monitor the live cell counter in the statistics • If the system reaches to thermal equilibrium (the counter values is not changed during 5 seconds) then, start new game. • To start new game, apply a slight change on the initial population density (use, random walk, init_pop += small random number();)

  22. Example 2 – State Diagram Init Entry: dynamic assignment for 20x20 PVs Event: if the initial population has been changed Entry: Initialize work space with random + initial population density InitArray Exit: Copy work space to the PV assigned variables Make statistics for the current generation Update PVs for display Event: if the initial population has been changed Event: always Run Entry: evolutes cells for next generation Exit: Copy work space to the PV assigned variables Update PV for display Event: if timer has been expired

  23. Example 2: C escapes

  24. Example 2: C escapes

  25. Example 2: Declarations

  26. Example 2: Init State

  27. Example 2: initArray State

  28. Example 2: run State

  29. Example 2: Additional State Set State Set: main_loop State Set: new_game INIT loop Event: expired timer Action: random walk on the initial population Event: changed live cell counter Action: update previous live cell counter to current Live cell counter PV Initial Population

  30. Example 2: Additional State Set

  31. SNL Variable and Scope • Global Variables • lifetime/scope: entire program • Memory allocation by sequencerwith option +r; • Static variable in C with option –r; • Local Variables • State Set • Memory allocation by Sequencer • State • Memory allocation by Sequencer • Entry/Exit/Action function • Stack variable program mySNL option +r; double a; assign a to pvA; monitor a; ssmy_state_set { double b; state low { inti=0; when(a>0.5) { int j ; b = a; i++; for(j=-0;j<MAX;j++) {

  32. SNL Variable’s Scope and Lifetime with Reentrance

  33. SNL Variable’s Scope and Lifetime with Non-Reentrance

  34. Dynamic PV assignments • To allow PV assignment/re-assignment at runtime • Requires an initial assigment (or NULL assignment) in the Declaration Section • for single variables • for array variables double myVar; assign myVar to “”; . . . . . . pvAssign(myVar, “PV_MYVAR”); double myVar[MAX]; assign myVar to { “” }; . . . . . . for(i=0;i<MAX;i++) pvAssign(myVar[i], str_pvName[i]);

  35. Building an SNL Program • Use editor to build the source file. File name must end with“.st” or “.stt”, e.g. “example.st” • “make” automates these steps: • Runs the C preprocessor on “.st” files, but not on “.stt” files. • Compiles the state program with SNC to produce C code: • snc example.st -> example.c • Compiles the resulting C code with the C compiler: • cc example.c -> example.o • The object file example.o becomes part of the application library, ready to be linked into an IOC binary. • The executable file “example” can be created instead.

  36. .st vs. .stt .stt .stt Define Macro in C escape program ex1 Option –r; %{ #define MAX 20 --- nip --- for(i=0;i<MAX;++) { --- }% double myArray[MAX]; ssmyStateSet { state myState { when(index>= MAX) { program ex1 option –r; #define MAX 20 double myArray[MAX]; ssmyStateSet { state myState { when(index>= MAX) { Syntax errorin SNL Illegal to usethe macro in the declaration OK! to usemacro in the C escapeand the SNL code both

  37. .st vs. .stt - continued .st program ex1 option –r; #define MAX 20 %{ --- nip --- for(i=0;i<MAX;++) { --- }% double myArray[MAX]; double my2DArray[MAX*MAX] ssmyStateSet { state myState { when(index>= MAX) { double a[MAX*MAX]; C preprocessing program ex1 option –r; /* #define MAX 20 */ %{ --- nip --- for(i=0;i<20;++) { --- }% double myArray[20]; double my2DArray[20*20] ssmyStateSet { state myState { when(index>= 20) { double a[20*20]; Illegal, becausethe SNC doesn’t have compile time arithmetic OK to use in the local variable inaction/entry/exit function. C compiler does the compile time arithmetic

  38. Runtime Sequencer • The sequencer executes the state program • It is implemented as an event-driven application; no polling is needed • Each state set becomes an operating system thread • The sequencer manages connections to database channels through Channel Access • It provides support for channel access get, put, and monitor operations • It supports asynchronous execution of delays, event flag, pv put and pv get functions • Only one copy of the sequencer code is required to run multiple programs • Commands are provided to display information about the state programs currently executing

  39. Executing SNL Program From an IOC console • On vxWorks: seq &vacuum_control • On RTEMS • seq(&vacuum_control) • On other operating systems: seqvacuum_control • To stop the program • seqStop "vacuum_control"

  40. Debugging • Use the sequencer's query commands: seqShow displays information on all running state programs seqShow vacuum_control displays detailed information on program seqChanShow vacuum_control displays information on all channels seqChanShow vacuum_control,"-" displays information on all disconnected channels seqcar displays information on all channel access channels

  41. Additional Features • Connection management: when (pvConnectCount() != pvChannelCount()) when (pvConnected(Vin)) • Macros: assignVoutto "{unit}:OutputV"; • must use the +r compiler options for this if more than one copy of the sequence is running on the same ioc seq &example, "unit=HV01" • Some common SNC program options: • +r make program reentrant (default is -r) • -c don't wait for all channel connections (default is +c) • +a asynchronous pvGet() (default is -a) • -w don't print compiler warnings (default is +w)

  42. Additional Features – Cont’d • Access to channel alarm status and severity: pvStatus(var_name) pvSeverity(var_name) • Queued monitors save CA monitor events in a queue in the order they come in, rather than discarding older values when the program is busy syncQvar_nametoevent_flag_name [queue_length] pvGetQ(var_name) • removes oldest value from variable's monitor queue. Remains true until queue is empty. pvFreeQ(var_name)

  43. Advantage of SNL Program • Can implement complicated algorithms • Can stop, reload, restart a sequence program without rebooting • 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

  44. Acknowledgements • Andrew Johnson, AES basic EPICS Training – January 2011 • Benjamin Franksen, new Seq modules

More Related