Upload
sharon-cunningham
View
228
Download
3
Tags:
Embed Size (px)
Citation preview
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,
elseif, 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:DEV00 is off
turn G:DEV00 on
endif
Example 2
! Turn Booster low level RF curves off
turn B:BIAS2 off ! sends off command to old bias curveturn B:BIASON off ! sends off to the new DSP bias curveturn B:APGC off ! sends off to the anode program curveturn B:CIGC off ! sends off to the cascode curvenegative B:VDFSM1 ! switches polarity to (-) for DC operation
! for the frequency curve on DSP VXI
Example 3
! Test a C460 module for the copy time to G(I) bug
while (1 = 1) ! loop forever
wait/event/delay=1000 5 ! wait for event 05 plus 1 second
print "Event detected!“
camac/select/node=ncamac/crate=2/slot=13 ! select module
camac/fa=26:10 ! restore G(I) table
endwhile
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 (D136)– place to edit scripts used in Lex SA
– requires special permission to write files
• ACL file launcher– supports launching a predefined ACL script (S69)
• 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