ACL An Introduction Brian Hendricks What Does ACL
ACL – An Introduction Brian Hendricks
What Does ACL Stand For, Anyway? • Originally, Accelerator Command Language • Also, ACNET Command Language • Sometimes, ACNET Control Language (not by me)
What is ACL? • “Simple” script language – borrows concepts from other languages • Interpreted, not compiled – runtime compilation available • Supports ACNET device notation • Implemented in ASCII text files and database text files • Built into CLIB
What is ACL Used For? • Lex SA (script object) – originally to provide control – also supports display scripts • Sequencer – eliminates the need for most new commands • Parameter page (also parameter window) – supports complicated settings, etc. • Command line interface (general use)
How Can I Use ACL? • Call it from your program using CLIB interface • Command line interface (type in ‘acl’) • Program tools IDE (‘ACL Edit/Run’) • Parameter page and parameter window • Web – http: //adcon. fnal. gov/cgi-bin/acl? acl={insert ACL code here}
Language Components • Commands – roughly 100 • Variables – expire when the current script ends • Symbols – expire when the calling program ends – names start with a dollar sign • Operators • Device expressions
ACL Commands • Device oriented – read, list, show, set, on, off, turn, reset, positive, negative , toggle, delta_set , increment, decrement, compare, copy, download, restore, fill, ramp, enable, disable, bypass, activate, deactivate, search, logger_get • Program control – loop, endloop, exitloop, while, endwhile, continue, if, else, endif, exit , on_error, gosub, return, retry, break • Special support – camac, gpib, timer_event, trigger, step_motor
ACL Commands (continued) • Input/output – print, output, input • Environmental control – timeout, ftd, data_event, data_source • System information – setting_log, alarm_log, event_log, state_log, node_info, node, event_info, mdat_info, program_info, user_info, error_text
ACL Commands (continued) • Variable control – declare, resize • run – runs other programs including other ACL scripts • wait – pauses the script for a period of time or until a clock event or state event occurs
ACL Operators • Arithmetic – +, -, *, /, ^, %, >>, <<, plus, minus, times • Logical – &&, ||, and, or, . xor. • Comparison – <, >, <=, >=, =, ==, equals
ACL Special Operators • is (isnot) – device status – on, off, ready, tripped, remote, local, positive negative, ramping, dc, good, alarming, enabled, disabled, bypassed, active, inactive, defined, undefined • has (doesnt_have) – database attribute – reading, setting, status, control, analog_alarm, digital_alarm, reset_control, on_control, off_control, positive_control, negative_control, on_status, ready_status, remote_status, polarity_status
Device Expressions • Property specification – : and ? -> reading, _ -> setting, | -> basic status, & -> basic control, @ -> analog alarm, $ -> digital alarm • Array notation [begin_index: end_index] – T: SBDASS[0: 36] or T: SBDASS[] • Length/offset notation {offset: length} – T: SBDASS{0: 148}
Device Modifiers • src – data source – dp (default), db, sr: {file}, sda: {file}: {case}: {set}, dl: {date}: {node} • scaling type – scaled (default), raw, primary • ftd=(FTD string}
Device Field Specifiers • Only used for alarm properties • Normal dot notation • Examples – min, max, nominal, mask, limit_data_type, etc. – read M: OUTTMP. min
Device Display Types • ascii – display reading as ASCII text • state_text – display as state text • bit_status – display basic status with bit descriptions • node – display reading as an ACNET node value • acnet_error – display reading as an ACNET error value
Device List Specifiers • name={string} (uses standard SQL wildcards) • node={node name} • type={device type string or number} • family={family device} • file={file name} • Many more…
Substitution Options • Substitute devices – G: DEVnnn – used anywhere a device expression can be used • Substitute strings – stringnnn – literal string substitution
ACL’s Special Characters • Comment – ‘#’ and the dreaded ‘!’ – ‘!’ can also be used in ‘!=‘ and ‘!exists(variable)’ – comments text to end of line • End of line – ‘; ’ – allows multiple commands per line • Line continuation – ‘’ – better than Windows’ ‘^’ • Execute an ACL file – ‘@’
Example 1 ! Conditionally turn on a device if G: DEV 00 is off turn G: DEV 00 on endif
Example 2 ! Turn Booster low level RF curves off turn B: BIAS 2 off turn B: BIASON off turn B: APGC off turn B: CIGC off negative B: VDFSM 1 ! sends off command to old bias curve ! sends off to the new DSP bias curve ! sends off to the anode program curve ! sends off to the cascode curve ! switches polarity to (-) for DC operation ! for the frequency curve on DSP VXI
Example 3 ! Test a C 460 module for the copy time to G(I) bug while (1 = 1) wait/event/delay=1000 5 ! loop forever ! wait for event 05 plus 1 second print "Event detected!“ camac/select/node=ncamac/crate=2/slot=13 camac/fa=26: 10 ! restore G(I) table ! select module
Help for ACL • Command line interface – ‘help’ for general help – ‘help {command}’ for command help • Program Tools interface – ‘ACL Help’ for general help – ‘ACL Command Help’ for command help • Web document – http: //adcon. fnal. gov/controls/clib/intro_acl. html • Me
Other ACL Tools • ACL database file editor (D 136) – place to edit scripts used in Lex SA – requires special permission to write files • ACL file launcher – supports launching a predefined ACL script (S 69) • ACL spawn – supports asynchronous execution of ACL scripts
Summary • Utilized in many environments – Sequencer – Lex SA – testing (new damper, CAMAC debugging, front end debugging) – examining the control system • Empowers end users • Has grown to meet the needs of those users
- Slides: 29