20
Managed by UT-Battelle for the Department of Energy EPICS Sequencer Kay Kasemir, SNS/ORNL Many slides from Andrew Johnson, APS/ANL Feb. 2013

EPICS Sequencer

  • Upload
    finola

  • View
    90

  • Download
    3

Embed Size (px)

DESCRIPTION

EPICS Sequencer. Kay Kasemir, SNS/ORNL Many slides from Andrew Johnson, APS/ANL Feb. 2013. IOC. LAN. Channel Access. IOC. Database: Data Flow, mostly periodic processing Sequencer: State machine, mostly on- demand Optional: Sequencer can actually run as standalone CA-Client. Sequencer. - PowerPoint PPT Presentation

Citation preview

Page 1: EPICS Sequencer

Managed by UT-Battellefor the Department of Energy

EPICS Sequencer

Kay Kasemir,

SNS/ORNL

Many slides from Andrew Johnson, APS/ANL

Feb. 2013

Page 2: EPICS Sequencer

2 Managed by UT-Battellefor the Department of Energy 2

IOC

Channel Access

LAN

Sequencer

Device Support

I/O Hardware

IOC

Database

Database:Data Flow,mostly periodicprocessing

Sequencer:State machine,mostlyon-demand

Optional: Sequencer can actually run as standalone CA-Client

CA Client

Sequencer

Page 3: EPICS Sequencer

3 Managed by UT-Battellefor the Department of Energy 3

State Machine 101

State A

State B

EventAction

TransitionA to B

.. Is in some State

Events trigger transitions

Actions are performed on transition

Page 4: EPICS Sequencer

4 Managed by UT-Battellefor the Department of Energy 4

Example

Start

Low vacuum

High vacuum

pressure < 5.1 uTorr

Open the valve, update pumps, …

pressure > 4.9 uTorr

Close the valve, update pumps, …

Page 5: EPICS Sequencer

5 Managed by UT-Battellefor the Department of Energy 5

Example State Notation Language

state start{

when (pressure > .0000051) {

RoughPump = 1;pvPut(RoughPump);CryoPump = 0;pvPut(CryoPump);Valve = 0;pvPut(Valve);

} state low_vacuumwhen (pressure <= .0000049)

{RoughPump = 0;pvPut(RoughPump);CryoPump = 1;pvPut(CryoPump);Valve = 1;pvPut(Valve);

} state high_vacuum}state low_vacuum{ …

Page 6: EPICS Sequencer

6 Managed by UT-Battellefor the Department of Energy

How it works

State Notation Language

C Code

C Compiler

“SNC”Pre-compiler

Object code

Page 7: EPICS Sequencer

7 Managed by UT-Battellefor the Department of Energy

Advantage

Compiled code. Fast.

Can call any C(++) code– Use #define to create macros, …

Easy connection to Channel Access, Records– Compared to custom CA client, device support, …

Skeleton for event-driven State Machine– Handles threading, event handling, …

Page 8: EPICS Sequencer

8 Managed by UT-Battellefor the Department of Energy 8

1-s1;5PARK

1

23 4

9

10

11

5

6

7

8

12

13

14

15

16

17Initialising

ParkedMisaligned

Stopped

M1STATE = OTHER / M1STATE = NOT_DOWN & EXTENDED /

M1STATE = DOWN & CENTRED & RETRACTED /

UNPARK_CMD /REJECT_CMD

PARK_CMD /

FaultM1STATE = RETRACTED & NOT_DOWN /

Raising

Deflating

Depressurising

Post-Parked

Manual-Mode

PRE-PARK_CHECKS = PASS /PSS = OFF;RETRACT_AXIAL_SUPPORTS

PARK_CMD /PSS = ON;MOVE_TO_PRE-PARK

POST-PARK_CHECKS = FAIL /UNPARK_ALARM

PRE-PARK_CHECKS = FAIL /PARK_ALARM

PARK-CMD /PSS = ON;AOS = OFF;MOVE_TO_PRE-PARK

UNPARK_CMD /REJECT_CMD

PARK_CMD /PSS = ON;MOVE_TO_PRE_PARK

Operating

UNPARK_CMD /PSS = ON;INFLATE_SEALS;

UNPARK_CMD /MOVE_TO_NOP ;INFLATE_SEALS;

Realigning

POST-PARK_CHECKS = PASS /PSS = ON;MOVE_TO_NOP ;INFLATE_SEALS;

Inflating

Pressurising

Pre-Parked

Lowering

SEALS = INFLATED /APSS = ON

APSS = PESSURISED /AOS = ON ;PARK-CMD /

AOS = OFF;MOVE_TO_PRE-PARK

APSS = DEPRESSURISED /DEFLATE_SEALS

SEALS = DEFLATED /

IN_PRE-PARK_POSN /

IN_POST-PARK_POSN /

UNPARK_CMD /PSS = ON;MOVE_TO_POST-PARK

M1STATE = DOWN & CENTRED & RETRACTED /

INTERLOCK_RXD /STOP_SUPPORTS

Interlocked INTERLOCK_REMOVED /

PSS_ON_CMD /PSS =ON

PSS_OFF_CMD /PSS =OFF

When to use the sequencer For sequencing complex events E.g. parking and unparking a

telescope mirror

Photograph courtesy of the Gemini Telescopes project

Page 9: EPICS Sequencer

9 Managed by UT-Battellefor the Department of Energy

SNL

Disadvantage Limited runtime debugging

– See current state, values of variables.

Can call any C(++) code– and shoot yourself in the foot

Pre-compiler. SNL error SNC creates nonsense C code Totally cryptic C compiler messages

Statistically, 95% ofall SNL code1. Starts out easy

2. Evolves

3. Ends up like this

Thom Holwerda,http://www.osnews.com/comics

Page 10: EPICS Sequencer

10 Managed by UT-Battellefor the Department of Energy 10

Should I Use the Sequencer?

START

CAN I DO THIS IN A

DB?

Y

N

CAN I DO THIS IN A

DB?

Y

N

USE THE SEQUENCER

USE A DATABASE

END

Page 11: EPICS Sequencer

11 Managed by UT-Battellefor the Department of Energy

If you really want to use SNL

Read the manualhttp://www-csr.bessy.de/control/SoftDist/sequencer/

Implement in small steps–Code a little

–Compile, test

–Code a little more

–Compile, test

Page 12: EPICS Sequencer

12 Managed by UT-Battellefor the Department of Energy

Walk through the SNL from makeBaseApp –t example

Page 13: EPICS Sequencer

13 Managed by UT-Battellefor the Department of Energy

Structure

program SomeName

/* Variables */

/* State Sets */

Page 14: EPICS Sequencer

14 Managed by UT-Battellefor the Department of Energy

Variables

double pressure;assign pressure to "Tank1Coupler1PressureRB";monitor pressure;

short RoughPump;assign RoughPump to "Tank1Coupler1RoughPump";

String CurrentState;assign CurrentState to "Tank1Coupler1VacuumState";

Page 15: EPICS Sequencer

15 Managed by UT-Battellefor the Department of Energy

State Sets

ss coupler_control{

state first{when (pressure > .0000051){} state low_vacuumwhen (pressure <= .0000049){} state high_vacuum

}state high_vacuum{

when (pressure > .0000051){} state low_vacuum

}state low_vacuum{

when (pressure <= .0000049){} state high_vacuumwhen (delay(600.0)){} state fault

}state fault {}

}

Page 16: EPICS Sequencer

16 Managed by UT-Battellefor the Department of Energy

Events

Variables used in events should be ‘monitor’ed!

when (pressure > .0000051) { /* Actions … */ } state low_vacuum

when (pressure < 0.000051 && whatever > 7) { } state high_vacuum

This is not a wait(10 seconds)! It means: After entering the state, if none of the other when(..) events occur within 10 seconds, do this: when (delay(10.0)) { } state timeout

Page 17: EPICS Sequencer

17 Managed by UT-Battellefor the Department of Energy

Actions

when (pressure > .0000051){ /* Set variable, then write to associated PV */

RoughPump = 1;pvPut(RoughPump);

/* Can call most other C code */ printf("Set pump to %d\n",RoughPump);} state low_vacuum

Action statements are almost C code. Above, RoughPump is a state machine variable. The SNL is transformed to printf("Set pump to %d\n", pVar->RoughPump);

SNC will add the “pVar->” to all state machine variables that it recognizes.

Sometimes it will be necessary to%{ /* Escape C code so that it’s not transformed */ static void some_method_that_I_like_to_define(double x);}%

Page 18: EPICS Sequencer

18 Managed by UT-Battellefor the Department of Energy

Sequencer Commands

seq NameOfSequence– Start sequence

seqShow– List all sequences with their ID

seqShow 0x12334– Detail of seq.

seqChanShow 0x12334– List variables of seq.

seqChanShow 0x12334, “-”– List variables of seq.

seqStop 0x12334– Stop a sequence

Page 19: EPICS Sequencer

19 Managed by UT-Battellefor the Department of Energy

How to Document SNL

Use /* Comments */

Manually draw corresponding state diagrams

Maybe try http://ics-web.sns.ornl.gov/kasemir/snl_diags

Page 20: EPICS Sequencer

20 Managed by UT-Battellefor the Department of Energy

Summary

Sorry, this was more sermon than tutorial

SNL can be useful

Read the SNL manual, be careful