2
January 2009EPICS Workshop RRCAT2 Acknowledgements and References This talk is based on the following talks: Andrew Johnson - USPAS 2007 EPICS Course Database Theory – Most of this talk based on this Database Practice Go to EPICS home page and look for Documents/Training Bob Dalesio - Introduction to asynDriver EPICS Meeting April 2007 at DESY Hamburg Germany Marty Kraimer SSRF2008 and INFN2008 References IOC Application Developer's Guide Describes device and driver support in detail See the latest EPICS base release for link Record Reference Manual Go to EPICS home page, then Wiki, then User Documentation Andrew says that volunteers to correct mistakes are welcome!!!

4
January 2009EPICS Workshop RRCAT4 Database = Records + Fields + Links A control system using EPICS will contain one or more IOCs  IOC – Input Output Controller  Responsible for monitoring and control of attached hardware Each IOC loads one or more Databases telling it what to do A Database is a collection of Records of various types A Record is an object with: A unique name A behaviour defined by its record type (class)‏ Controllable properties (fields)‏ Link – link to something outside the record Soft – Link to another record Hard - hardware I/O (device support)‏ Link Field Names  INP and OUT can be soft or hard Have associated device support  Other link fields, e.g. FLNK and SDIS Can only be soft Are handled by dbProcess or by record support

5
January 2009EPICS Workshop RRCAT5 Record Activity Records are active — they do things when asked to “process” Get data from other records or from hardware Perform calculations Check that values are in range and raise alarms Put data to other records or to hardware Activate or disable other records Wait for hardware signals (interrupts)‏ What a record does depends upon The record type Each record type has A set of fields common to all record types (dbCommon)‏ A set of record specific fields An associated record support module: Implements interface RSET Initialization methods are called by iocInit Method process is called dbProcess. The field settings of the record instance

6
January 2009EPICS Workshop RRCAT6 How is a Record implemented? A ‘C’ structure with a data member for each record field Header file generated automatically from DBD file All records start with a standard set of fields (dbCommon)‏ A record instance definition provides Record name The record’s type Values for each design field A record type provides Definitions of all the fields Code which implements the record behaviour

7
January 2009EPICS Workshop RRCAT7 Record Types Analog and digital: ai, ao, bi, bo, mbbi, mbbo, and more expression calculator: calc, calcOut, sub array: waveform, subArray, compress, histogram and more logic: fanout, permissive, sel, seq, scan, and more motor scalar And more See wiki page for Record Reference Manual Many come with base Many come with synApps Others are also available If you have others add to wiki page

11
January 2009EPICS Workshop RRCAT11 Fields are for... Configuration, i.e. design What causes a record to process Where to get/put data How to turn raw I/O data into a numeric engineering value Limits indicating when to report an alarm When to post value changes for clients monitoring the record A Processing algorithm Anything else which needs to be set for each record of a given type Run-time data Input or output values Alarm status, severity and acknowledgements Timestamp Other data for internal use

12
January 2009EPICS Workshop RRCAT12 Field types Integers char, short or long signed or unsigned Floating-point numbers float or double Fixed length strings maximum useful length is 40 characters Enumerated/menu choices select one of up to 16 strings stored as a short integer Arrays of any of the above types Links to other records in this or other IOC to hardware signals (device support)‏ Other private data not accessible remotely

14
January 2009EPICS Workshop RRCAT14 All Records have these Run-time fields PROC Force processing PACT Process active STAT Alarm status DISA Actual disable value: If DISA=DISV record is disabled SEVR Alarm severity TPRO Trace processing UDF Non-zero if record value undefined TIME Time when record was last processed

15
January 2009EPICS Workshop RRCAT15 Record Scanning SCAN field is a menu choice from Periodic — 0.1 seconds.. 10 seconds I/O Interrupt (if device supports this)‏ Soft event — EVNT field Passive (default)‏ The PHAS field determines processing order within a scan set Records with PHAS=0 are processed first Then those with PHAS=1, PHAS=2 etc. Records with PINI=YES are processed once at startup PRIO field selects Low/Medium/High priority for Soft event and I/O Interrupts A record is also processed whenever any value is written to its PROC field

22
January 2009EPICS Workshop RRCAT22 Passive Binary Output Binary Output “Solenoid” Controls Xycom XY220 Digital output Card 0 Signal 12 Record is only processed by Channel Access ‘put’ to a PP field (e.g..VAL )‏ Another record writes to a PP field Forward Link from another record Another record reads this with PP

23
January 2009EPICS Workshop RRCAT23 Links A link is a type of field, and is one of Input link Fetches data Output link Writes data Forward link Points to the record to be processed once this record finishes processing

24
January 2009EPICS Workshop RRCAT24 Input and Output links may be... Constant numeric value, e.g.: 0 3.1415926536 -1.6e-19 Hardware link – Must be INP or OUT A hardware I/O signal selector The format depends on the device support layer Process Variable link — the name of a record, which is resolved into Database link - Named record is in this IOC Channel Access link - Named record not found in this IOC

25
January 2009EPICS Workshop RRCAT25 Database link: link to record in Same IOC A database link has the following syntax:: The name of a record in this IOC myDb:myRecord An optional field name.VAL (default)‏ Process Passive flag NPP (default), or PP Maximize Severity flag NMS (default), or MS For example: “M1:current.RBV NPP MS” Note: An input database link with the PP flag set that is pointing to an asynchronous input record will not wait for the new value from that record

26
January 2009EPICS Workshop RRCAT26 Channel Access links Specified like a database link Name specifies a record not found in this IOC Use Channel Access protocol to communicate with remote IOC May include a field name (default.VAL )‏ PP Link flags are ignored: Input links are always NPP Output links follow PP attribute of destination field This behaviour is identical to all other CA clients MS Link flags apply to Input links: Input links honor a given NMS (default) or MS flag Output links are always NMS Additional flags for CA links: CA Forces a “local” link to use CA CP On input link, process this record on CA monitor event CPP Like CP but only process if SCAN is Process Passive

28
January 2009EPICS Workshop RRCAT28 Device Support Records do not access hardware directly The Device Support layer performs I/O operations on request A particular device support provides I/O for a single record type The DTYP field determines which device support to use The INP or OUT field provides configuration information The device support selected determines the format of the link Record Support defines an interface Device Support implements the interface Record Support uses the interface Device support may call other software Driver Support – Old way AsynDriver STREAMS

30
January 2009EPICS Workshop RRCAT30 Synchronous vs Asynchronous I/O EPICS rules do not allow device support to busy-wait (i.e. delay record processing while waiting for the results of a slow I/O operation)‏ Fast I/O can be handled synchronously Slow operations must operate asynchronously Register-based VME cards usually give an immediate response: synchronous When called, synchronous device support performs all I/O before returning Serial and field-bus I/O takes a long time (>10ms) to return data: asynchronous Asynchronous device support starts an I/O operation when the record calls it, flagging it as incomplete by setting PACT to true before returning Once results are available (CPU interrupt), the device support calls the record’s process() routine to finish the record processing operations

32
January 2009EPICS Workshop RRCAT32 Forward links Usually a Database link,i.e. a link to to a record in same IOC No flags ( PP, MS etc.), although VDCT includes them erroneously Destination record is only processed if its SCAN field is Passive Does not pass a value, just causes subsequent processing Forward linking to another IOC via Channel Access is possible, but the link must explicitly name the PROC field of the remote record In this case, the remote record does not have to be SCAN Passive

34
January 2009EPICS Workshop RRCAT34 Which record is never processed?

35
January 2009EPICS Workshop RRCAT35 The PACT field Every record has a boolean run-time field called PACT (Process Active)‏ PACT breaks loops of linked records It is set to true early in the act of processing the record PACT is true whenever a link in that record is used to get/put a value PACT is set to false after record I/O and forward link processing are finished A PP link can never make a record process if it has PACT true Input links take the current value Output links just put their value

37
January 2009EPICS Workshop RRCAT37 Order of Operations (Synchronous I/O)‏ Every 0.1 seconds, iocCore will attempt to process the Output_1 record The Output_1.PACT field is currently False, so the record is quiescent and can be processed If set, the Output_1.SDIS link would be read into Output_1.DISA Since DISA≠DISV, the ao record type's process() routine is called

38
January 2009EPICS Workshop RRCAT38 Order of Operations (Synchronous I/O)‏ The ao's process() routine checks the Output_1.OMSL field; it is closed_loop, so It sets Output_1.PACT to True, then Reads a value through the Output_1.DOL link The Output_1.DOL link contains Calculation_1.VAL PP so a request is made to process the Calculation_1 record

39
January 2009EPICS Workshop RRCAT39 Order of Operations (Synchronous I/O)‏ The Calculation_1.SCAN field is Passive and Calculation_1.PACT is False, so processing is possible If set, the Calculation_1.SDIS link would be read into DISA Since DISA≠DISV, the calc record type's process() routine is called

40
January 2009EPICS Workshop RRCAT40 Order of Operations (Synchronous I/O)‏ The calc's process() routine sets Calculation_1.PACT to True, then Starts a loop to read values from the links INPA through INPL The Calculation_1.INPA link is set to Input_1.VAL PP so a request is made to process the Input_1 record

41
January 2009EPICS Workshop RRCAT41 Order of Operations (Synchronous I/O)‏ The Input_1.SCAN field is Passive and Input_1.PACT is False, so processing is possible If set, the Input_1.SDIS link is read into the Input_1.DISA field Since DISA≠DISV, the ai record type's process() routine is called The ai process() calls the associated device support to read a value from the hardware it's attached to

42
January 2009EPICS Workshop RRCAT42 Order of Operations (Synchronous I/O)‏ The device support is synchronous, so it puts the hardware input value into the Input_1.RVAL field and returns to the ai record's process() code The Input_1.PACT field is set to True The record's timestamp field Input_1.TIME is set to the current time The raw value in Input_1.RVAL is converted to engineering units, smoothed, and the result put into the Input_1.VAL field

43
January 2009EPICS Workshop RRCAT43 Order of Operations (Synchronous I/O)‏ The Input_1.VAL is checked against alarm limits and monitor dead-bands, and appropriate actions is taken if these are exceeded If the Forward Link field Input_1.FLNK is set, an attempt is made to process the record it points to The Input_1.PACT field is set to False, and the process() routine returns control to the Calculation_1 record

44
January 2009EPICS Workshop RRCAT44 Order of Operations (Synchronous I/O)‏ The value read through the Calculation_1.INPA link is copied into the Calculation_1.A field The Calculation record type's process() routine continues to loop, reading its input links In this example only the INPA link is set, so the routine finishes the loop and evaluates the Calculation_1.CALC expression (not shown)‏ The result of the expression is put in the Calculation_1.VAL field

45
January 2009EPICS Workshop RRCAT45 Order of Operations (Synchronous I/O)‏ The record's timestamp field Calculation_1.TIME is set to the current time Calculation_1.VAL is checked against alarm limits and monitor dead-bands, and appropriate action is taken if these are exceeded If the Forward Link field Calculation_1.FLNK is set, an attempt is made to process the record it points to The Calculation_1.PACT field is set to False, and the process() routine returns control to the Output_1 record

46
January 2009EPICS Workshop RRCAT46 Order of Operations (Synchronous I/O)‏ The value read through the Output_1.DOL link would now be forced into the range DRVL..DRVH if those fields were set, but they aren't so it's copied to the Output_1.VAL field unchanged The Output_1.VAL value is converted from engineering to raw units and placed in Output_1.RVAL Output_1.VAL is checked against alarm limits and monitor dead-bands, and appropriate action is taken if these are exceeded The associated device support is called to write the value to the hardware

47
January 2009EPICS Workshop RRCAT47 Order of Operations (Synchronous I/O)‏ The device support is synchronous, so it outputs the value to the attached hardware and returns The record's timestamp field Output_1.TIME is set to the current time If the Forward Link field Output_1.FLNK is set, an attempt is made to process the record it points to The Output_1.PACT field is set to False, and the process() routine returns

48
January 2009EPICS Workshop RRCAT48 How are records given CPU time? Several IOC tasks are used: callback (3 priorities)  I/O Interrupt  Event — Soft Event Periodic A separate task is used for each scan period Faster scan rates are given a higher task priority (if supported by the IOC’s Operating System)‏ Channel Access tasks use lower priority than record processing If a CPU spends all its time doing I/O and record processing, you may be unable to control or monitor the IOC via the network

50
January 2009EPICS Workshop RRCAT50 Lock-sets A lock-set is a group of records interconnected by database links: Output links Forward links Input links which are PP or MS Any link transporting an Array Lock-sets are determined automatically by the IOC at start-up whenever a database link is added, deleted or modified You can split a lock set with Channel Access links, using CA flag Prevent a record from being processed simultaneously from two scan tasks Database links which are both NPP and NMS

51
January 2009EPICS Workshop RRCAT51 Alarms Every record has the fields SEVR Alarm Severity NONE, MINOR, MAJOR, INVALID STAT Alarm Status (reason)‏ READ, WRITE, UDF, HIGH, LOW, STATE, COS, CALC, DISABLE, etc. Most numeric records check VAL against HIHI, HIGH, LOW and LOLO fields after the value has been determined The HYST field prevents alarm chattering A separate severity can be set for each numeric limit ( HHSV, HSV, LSV, LLSV )‏ Discrete (binary) records can raise alarms on entering a particular state, or on a change of state (COS)‏

54
January 2009EPICS Workshop RRCAT54 Simulation Input and output record types often allow simulation of hardware interfaces SIML Simulation mode link SIMM Simulation mode value SIOL Simulation input link SIMS Simulation alarm severity Before using its device support, a record reads SIMM through the SIML link If SIMM=YES, device support is ignored; record I/O uses the SIOL link instead An alarm severity can be set whenever simulating, given by SIMS field

55
January 2009EPICS Workshop RRCAT55 Access Security In EPICS, security is enforced by the CA server typically the IOC PV Gateway A record is placed in the Access Security Group named in field ASG DEFAULT is used if no group name is given Rules for each group determine whether a CA client can read or write to records in the group, based on Client user ID Client IP address Access Security Level of the field addressed Values read from the database A networked control system must have the ability to enforce security rules Who can do what from where, and when?

57
January 2009EPICS Workshop RRCAT57 Database Summary The database provides a mechanism to implement closed-loop control and data acquisition without programming in a traditional language. However, as the database describes process flow and data flow, it has much of the complexity of a program. Some records are provided to implement simple sequential control logic and for loop type operation (SCAN and SEQUENCE records). These are fine to use for a limited scope problem. Database designs can be greatly complicated by not understanding the way each record functions and the features that it supports. This can be mitigated by having group reviews. These go a long way to producing a common style - or at least an understanding of what others are doing. The set of records supported is expendable. If you have a problem that could be encapsulated into a record type and is used in many instances, consider this as an option.