Manual copied from ANSTO branch and committed to RELEASE-3_0 branch.

This directory was accidentally omitted from the merge-release branch during the PSI code merge.
This commit is contained in:
Nick Hauser
2013-10-28 11:22:59 +11:00
parent c1f724c246
commit cbcd98c10c
67 changed files with 15311 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info>
<title>SICS Installation Manual</title>
<subtitle>DRAFT ANSTO version 0.1</subtitle>
<date>20th May 2009</date>
<author><personname>Ferdi Francheschini</personname></author>
<author><personname>Nick Hauser</personname></author>
</info>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch22_installation.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</book>

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info><title>UNDER CONSTRUCTION User Guide for Small Angle Scattering. Quokka
Edition</title><subtitle>ANSTO version 0.2. May 2013</subtitle>
<date/>
<author><personname>Katy Wood</personname></author><author><personname>Nick
Hauser</personname></author>
<bibliosource>Manually maintained from this source ie. can't Xinclude a book into a book.
</bibliosource>
<cover>
<para>This is a cover </para>
<para>This guide is not intended to replace your local contact, but to jog your memory
if you are operating independently. Anything strange, call your local
contact…</para>
</cover>
</info>
<part>
<title>QUICK START</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5quickstart_quokka.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5sics_login.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part>
<title>DETAIL</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch26_magnet_11T.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part>
<title>SAMPLE ENVIRONMENT</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch18_programmer_overview.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part>
<title>CONFIGURATION AND TROUBLESHOOTING</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch23_extraconfig.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
</book>

View File

@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info><title>User Guide for Triple Axis Spectrometer. Taipan Edition</title><subtitle>ANSTO
version 0.2. May 2013</subtitle>
<date/>
<author><personname>Kirrily Rule</personname></author>
<cover>
<para>This is a cover. Does not appear in the pdf or HTML versions. Why???</para>
<para>This guide is not intended to replace your local contact, but to jog your memory
if you are operating independently. Anything strange, call your local
contact…</para>
</cover>
<bibliosource>Manually maintained from this source ie. can't Xinclude a book into a book.
</bibliosource>
</info>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5quickstart_taipan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5sics_login.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<part>
<title>EXPERIMENT</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5alignment_taipan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5experiment_taipan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="db5environment_control_taipan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part>
<title>CONFIGURATION AND TROUBLESHOOTING</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="db5environment_config_taipan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
</book>

View File

@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info>
<title>SICS User Manual for Triple Axis Spectrometers</title>
<subtitle>DRAFT ANSTO version 0.2 27 June 2012</subtitle>
<date>27 June 2012</date>
<author><personname>Mark Koennecke</personname></author>
<author><personname>Heinz Heer</personname></author>
<author><personname>Ferdi Franceschini</personname></author>
<author><personname>Nick Hauser</personname></author>
<bibliosource>db5SICSUserManual.xml plus instrument specific chapters.
Manually maintained from this source ie. can't Xinclude a book into a book. </bibliosource>
</info>
<part><title>INTRODUCTION</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch1_intro.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch17_control_and_interrupt.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch19_interrupting_sics.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch20_file_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>COMMANDS IN DETAIL</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch24_UB_matrix.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch2_motor_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch6_counters.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<!-- Taipan does not use a histogram memory server, only a beam monitor server.
Hence, the histogram memory chapter is omitted -->
<!--
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch3_histogram_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
-->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch4_simple_scan_taipan_only.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch5_batch.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch7_user_defn_scan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch8_batch_manager.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch10_tcl_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>CONFIGURATION AND TROUBLESHOOTING</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch23_extraconfig.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch9_motor_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch21_histogram_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch14_troubleshooting.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>OVERVIEW OF SICS DESIGN AND IMPLEMENTATION</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch18_programmer_overview.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
</book>

View File

@@ -0,0 +1,159 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info>
<title>SICS User Manual for Pelican TOF Polarisation spectrometer</title>
<subtitle>DRAFT ANSTO version 0.1 13 May 2013</subtitle>
<date>27 June 2012</date>
<author><personname>Mark Koennecke</personname></author>
<author><personname>Heinz Heer</personname></author>
<author><personname>Ferdi Franceschini</personname></author>
<author><personname>Jing Chen</personname></author>
<author><personname>Nick Hauser</personname></author>
<bibliosource>db5SICSUserManual.xml plus instrument specific chapters.
Manually maintained from this source ie. can't Xinclude a book into a book. </bibliosource>
</info>
<part><title>INTRODUCTION</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch1_intro.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch17_control_and_interrupt.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch19_interrupting_sics.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch20_file_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>COMMANDS IN DETAIL</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch34_fermi_chopper_shortnames.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch28_LF_amplifier.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch2_motor_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch6_counters.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch3_histogram_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch4_simple_scan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch5_batch.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch7_user_defn_scan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch8_batch_manager.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch10_tcl_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>CONFIGURATION AND TROUBLESHOOTING</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch23_extraconfig.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch9_motor_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch21_histogram_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch14_troubleshooting.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>OVERVIEW OF SICS DESIGN AND IMPLEMENTATION</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch18_programmer_overview.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
</book>

View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info>
<title>SICS User Manual for Reflectometry. Platypus Edition</title>
<subtitle>ANSTO version 0.2. 1 August 2012</subtitle>
<date>1st August 2012</date>
<author><personname>Mark Koennecke</personname></author>
<author><personname>Heinz Heer</personname></author>
<author><personname>Ferdi Franceschini</personname></author>
<author><personname>Nick Hauser</personname></author>
<bibliosource>db5SICSUserManual.xml plus instrument specific chapters.
Manually maintained from this source ie. can't Xinclude a book into a book. </bibliosource>
</info>
<part><title>INTRODUCTION</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch1_intro.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch17_control_and_interrupt.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch19_interrupting_sics.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch20_file_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>PLATYPUS SPECIFIC COMMANDS</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch32_platypus_disk_chopper.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch27_autosave.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch11_julabo.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>COMMANDS IN DETAIL</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch18_programmer_overview.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch2_motor_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch6_counters.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch3_histogram_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch4_simple_scan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch5_batch.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch7_user_defn_scan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch8_batch_manager.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch10_tcl_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>CONFIGURATION AND TROUBLESHOOTING</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch23_extraconfig.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch9_motor_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch21_histogram_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch14_troubleshooting.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
</book>

View File

@@ -0,0 +1,142 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info>
<title>SICS User Manual for Diffractometers</title>
<subtitle>DRAFT ANSTO version 0.1</subtitle>
<date>6th April 2009</date>
<author><personname>Mark Koennecke</personname></author>
<author><personname>Heinz Heer</personname></author>
<author><personname>Ferdi Franceschini</personname></author>
<author><personname>Nick Hauser</personname></author>
<bibliosource>db5SICSUserManual.xml plus instrument specific chapters.
Manually maintained from this source ie. can't Xinclude a book into a book. </bibliosource>
</info>
<part><title>INTRODUCTION</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch1_intro.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch17_control_and_interrupt.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch19_interrupting_sics.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch20_file_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>COMMANDS IN DETAIL</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch18_programmer_overview.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch2_motor_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch6_counters.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch3_histogram_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch4_simple_scan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch5_batch.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch7_user_defn_scan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch8_batch_manager.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch10_tcl_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>CONFIGURATION AND TROUBLESHOOTING</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch23_extraconfig.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch9_motor_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch21_histogram_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch14_troubleshooting.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
</book>

View File

@@ -0,0 +1,194 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info>
<title>SICS User Manual for Small Angle Scattering. Quokka Edition</title>
<subtitle>ANSTO version 0.2. 1 August 2012</subtitle>
<date>1st August 2012</date>
<author><personname>Mark Koennecke</personname></author>
<author><personname>Heinz Heer</personname></author>
<author><personname>Ferdi Franceschini</personname></author>
<author><personname>Nick Hauser</personname></author>
<bibliosource>db5SICSUserManual.xml plus instrument specific chapters.
Manually maintained from this source ie. can't Xinclude a book into a book. </bibliosource>
</info>
<part><title>INTRODUCTION</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch1_intro.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch17_control_and_interrupt.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch19_interrupting_sics.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch20_file_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>QUOKKA SPECIFIC COMMANDS</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch27_autosave.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch16_ordela_hv.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch15_beamstop.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch12_velsel.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch11_julabo.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch25_rheometer.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch26_magnet_11T.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>COMMANDS IN DETAIL</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch18_programmer_overview.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch2_motor_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch6_counters.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch3_histogram_control.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch4_simple_scan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch5_batch.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch7_user_defn_scan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch8_batch_manager.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch10_tcl_commands.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part><title>CONFIGURATION AND TROUBLESHOOTING</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch23_extraconfig.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch9_motor_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch21_histogram_configuration.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch14_troubleshooting.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
</book>

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info>
<title>SICS User Manual for Sample Environment</title>
<subtitle>DRAFT ANSTO version 0.1 30 October 2012</subtitle>
<date>30 October 2012</date>
<author><personname>Mark Koennecke</personname></author>
<author><personname>Heinz Heer</personname></author>
<author><personname>Ferdi Francheschini</personname></author>
<author><personname>Jing Chen</personname></author>
<author><personname>Nick Hauser</personname></author>
<bibliosource>db5SICSUserManual.xml plus instrument specific chapters.
Manually maintained from this source ie. can't Xinclude a book into a book. </bibliosource>
</info>
<part><title>SAMPLE ENVIRONMENT</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch11_julabo.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch25_rheometer.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch26_magnet_11T.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="dbSICSch28_LF_amplifier.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
</book>

View File

@@ -0,0 +1,412 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Preparing the spectrometer</title><author>
<personname>Kirrily Rule</personname>
</author>
<date>2013-04-09 16:47</date>
</info>
<sect1>
<title>Aligning the spectrometer</title>
<warning>
<title>12T magnet</title>
<para> When using the 12T magnet on TAIPAN, you must work in fixed Ki mode, as the
magnet is too heavy to move M2. Consider the energy transfer range required to
determine the appropriate Ei for these experiments. </para>
</warning>
<para>After discussing your instrument preferences with your local contact, they will align
the spectrometer in the following way:</para>
<itemizedlist>
<listitem>
<para>Drive the spectrometer to the required incident energy (for elastic mode) =
e.g. 14.87meV</para>
</listitem>
<listitem>
<para>Drive the analyser arm to the straight-through position (s2=0, a1=0, a2=0,
atrans=19)</para>
</listitem>
<listitem>
<para>Visually check the straight-through arm and change any motors
accordingly</para>
</listitem>
<listitem>
<para>Place the Ni sample on the sample stage, and Borated Al sheets over the
analyser collimator. (the detector saturates at ~35,000 counts/sec)</para>
</listitem>
<listitem>
<para>Check M1 alignment with a rocking scan</para>
</listitem>
<listitem>
<para>Check S2=0 alignment with a rocking scan</para>
</listitem>
<listitem>
<para>Check A2=0 alignment with a rocking scan</para>
</listitem>
<listitem>
<para>Remove the Al attenuator and insert collimators if they need changing</para>
</listitem>
<listitem>
<para>Perform the Ni powder calibration, using 5 peaks</para>
</listitem>
<listitem>
<para>From the least squares fitting of these peaks, update the new M1 offset, M2
offset and S2 offset.</para>
</listitem>
<listitem>
<para>With the spectrometer at S2=-50, and atrans=0 (to view the Vanadium incoherent
peak from the Ni sample can), perform an A1 scan and an A1/A2 scan around the
elastic position.</para>
</listitem>
<listitem>
<para>Perform an En scan (where Ei will move if Ef is fixed). Here the FWHM of the
peak will give you the resolution of your instrument.</para>
<para/>
</listitem>
</itemizedlist>
<para></para>
<para></para>
<para></para>
<para></para>
<para></para>
<para></para>
<para></para>
<para/>
<para/>
<para/>
<para/>
</sect1>
<sect1>
<title>Focusing monochromator and analyser</title>
<para> Currently the continuous focusing mechanism is not implemented on Taipan. If you wish
to use focusing for your inelastic measurement, consider the following parameters sets. </para>
<para>
<table frame="all" >
<title></title>
<tgroup cols="5">
<colspec colname="c1" colnum="1"/>
<colspec colname="c2" colnum="2"/>
<colspec colname="c3" colnum="3"/>
<colspec colname="c4" colnum="4"/>
<colspec colname="c5" colnum="5"/>
<thead>
<row>
<entry>Focus condition</entry>
<entry>mvfocus</entry>
<entry>mhfocus</entry>
<entry>avfocus</entry>
<entry>ahfocus</entry>
</row>
</thead>
<tbody>
<row>
<entry>Flat</entry>
<entry>50</entry>
<entry>220</entry>
<entry>0</entry>
<entry>0</entry>
</row>
<row>
<entry>Optimal for 14.87meV</entry>
<entry>125</entry>
<entry>155</entry>
<entry>125</entry>
<entry>80</entry>
</row>
<row>
<entry>Optimal for 30.5meV</entry>
<entry>150</entry>
<entry>170</entry>
<entry>180</entry>
<entry>65</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<warning>
<title/>
<para>When driving Ei or Ef in this stage of the setup, the software calculates a
constant-Q instrument position based on the current UB matrix (usually from the
previous experiment). This will often drive S1, S2, sgu and sgl to unexpected
positions. To constrain these so that they dont move unexpectedly, fix the motors
so they don't move. </para>
<para>Motors can be fixed (1) or unfixed (-1) and their status checked by typing the
motor name </para>
<para><command>&gt; S1 fixed 1 (fixes S1) </command></para>
<para><command>&gt; S1 fixed -1 (unfixes S1)</command></para>
<para>Alternatively you can drive vei which drives only the M1 and M2 motors this
cannot be used in a scan command. </para>
<para><command>&gt; drive vei 14.87 </command></para>
<para><command>&gt; tasub update </command></para>
<para><command>&gt; ei </command></para>
<para/>
</warning>
<warning>
<title/>
<para>You will often need to “home” the slits if they have been unplugged or removed
during the setup. The pa_left and pa_right slits can vary between -27 (open) and 0
(closed), while the pa_top and pa_bottom slits can vary between -200 (open) and 0
(closed). The same limits apply for the ps_slits. </para>
<para><command>&gt; pa_left homerun 1 </command> (this will do all of the slits)</para>
</warning>
<para/>
<para>Confirm the following setup for your experiment. </para>
<para><command>&gt; tasub ss </command> (Scattering sense = M+1, S-1, A+1) </para>
<para><command>&gt; tasub ana ss </command> (Scattering sense = M+1, S-1, A+1) </para>
<para><command>&gt; tasub outofplane </command> (Confines the scattering sense to be in the
plane) </para>
<para><command>&gt; tasub const </command> (Defines whether Ei or Ef are fixed, or if both
are fixed) </para>
<para/>
</sect1>
<sect1>
<title>Aligning your sample</title>
<para> At the beginning of an experiment load the “Experimental setup” script (in the
scripts window, right screen) to list the most important configuration identifiers for
the experiment. These should appear in the header lines in your data files. For
instance, these include: </para>
<itemizedlist>
<listitem>
<para>Proposal number and title</para>
</listitem>
<listitem>
<para>Users name, and research team present</para>
</listitem>
<listitem>
<para>Local contacts name</para>
</listitem>
<listitem>
<para>Sample information including number of samples and sample environment
requirements</para>
</listitem>
<listitem>
<para>Particular instrument setup features (scattering sense, collimation, filters,
slits etc)</para>
</listitem>
</itemizedlist>
<para>Next the UB matrix needs to be set. To do this, you need to input the cell parameters
and at least 2 reflections which will define your scattering plane. These can be
calculated for your system using the file “/home/taipan/calculatedDspaceTAIPAN.xls” or
something similar, such as the ICSD website. </para>
<variablelist>
<varlistentry>
<term><command>&gt; tasub listub</command></term>
<listitem>
<para>shows the current UB matrix, cell parameters and reference peaks</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub cell a b c alpha beta gamma</command>
</term>
<listitem>
<para> input new lattice parameters</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub addref qh qk ql</command></term>
<listitem>
<para> adds a new reflection to the list when Taipan is at the reflection</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub addref qh qk ql a3 a4 sgu sgl ei ef</command></term>
<listitem>
<para> adds a new reflection from a calculation</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub addauxref qh qk ql</command></term>
<listitem>
<para> adds a new reflection where S2 is calculated from the lattice parameters
only. This will also calculate the relative S1 positions</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub del num</command></term>
<listitem>
<para> deletes one of the previously stored reflections</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub listref</command></term>
<listitem>
<para> lists the reflections that have been input</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub makeub 1 2</command></term>
<listitem>
<para> calculates new UB matrix from reflections 1 and 2</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub calcang qh qk ql ei ef</command></term>
<listitem>
<para> calculates reflection from UB matrix be careful when changing lattice
parameters, as this command wont use them! Output: M2 S1 S2 sgu sgl
A2</para>
</listitem>
</varlistentry>
</variablelist>
<example>
<title>Sample alignment</title>
<para> For Ei = Ef = 14.87 meV</para>
<para><command>&gt; tasub cell 5.011 5.85 10.353 90 92.4 90</command>
</para>
<para><command>&gt; tasub calcang 1 0 0 14.87 14.87 (calculated S2 = 27.1) </command></para>
<para><command>&gt; tasub calcang 1 1 0 14.87 14.87 (calculated S2 = 35.9) </command></para>
<para><command>&gt; tasub calcang 0 2 0 14.87 14.87 (calculated S2 = 47.3) </command></para>
<para>Drive the instrument to the calculated S2 value of a particular peak. The other
motor positions are not correctly set at this point. This will also give you a
relative s1 position between the peaks.</para>
<para>Scan S1 until you find the peak. </para>
<para><command>&gt; bmonscan clear</command></para>
<para><command>&gt; bmonscan add S1 -10 0.2 </command> (motor name, starting point, step
size)</para>
<para><command>&gt; bmonscan run 60 timer 5 </command> (scans 60 points, for a time of 5
seconds per point)</para>
<para>OR</para>
<para><command>&gt; runscan s1 -10 0 101 time 5 </command> (motor, start, stop, # pts,
time (the mode in secs))</para>
<para>(this does not work for multiple motors yet)</para>
<para> (This step should hopefully be replaced by the differential scan, or the
rate-meter) </para>
<para>Once the peak position (S1) has been optimised, scan sgu and sgl </para>
<para><command>&gt; runscan sgl -10 10 21 time 1 </command></para>
<para><command>&gt; runscan sgu -10 10 21 time 1 </command></para>
<para>Once the peak has been optimised with SGU and SGL (and you are sitting at the peak
position!!) you can set this as one of your reference peaks, where the current motor
values define the peak position. </para>
<para><command>&gt; tasub addref 1 0 0 </command></para>
<para>Calculate the values of S1 and S2 for the next peak use the </para>
<para><command>&gt; tasub calcang qh qk ql ei ef </command></para>
<para>command to see the relative values of S1 and S2 as calculated from the lattice
parameters!</para>
<para>
</para>
<para>Repeat for at least one other peak, preferably one orthogonal to the first. </para>
<para><command>&gt; tasub addref 0 0 1 </command></para>
<para><command>&gt; tasub listref </command> (to see the observed peaks in your list
(e.g. number 4 and 5)) </para>
<para><command>&gt; tasub makeub 4 5 </command>(this used peaks 4 and 5 to calculate the
UB matrix) </para>
<para><command>&gt; tasub update </command></para>
<para><command>&gt; tasub listub </command></para>
<para>Once this has been set, then you should be able to drive your spectrometer to any
accessible qh, qk, ql and en.</para>
<warning>
<title>
</title>
<para>At the end of each change, be sure to type <command>&gt; tasub
update</command></para>
</warning>
</example>
</sect1>
<sect1>
<title>Reducing background with a slit scan</title>
<para>Once your sample has been aligned, add the PG filter to the instrument. You could test
the effectiveness of the filter by scanning a peak that will display higher order
scattering e.g. (½ 0 0) which does not exist except from higher order scattering from
the (1 0 0 ). Sometimes you might want to add an additional filter. Finally you can scan
your slits to reduce the background scattering. </para>
<para><command>&gt; runscan pa_left -15 -2 27 time 1 </command>(scans 27 points, for a time
of 1 seconds per point)</para>
<para> After this, consider if you need to add more shielding to the detector drum or any
other part of the instrument (e.g. manual slits on analyser arm, additional PG
filters).</para>
</sect1>
<sect1>
<title>Setting the (new) lattice parameters</title>
<para>During your experiment you may need to change the lattice parameters (due to a phase
transition, thermal expansion etc). If this is the case you MUST find and optimise two
new reflections to make your UB-matrix from. For example, scan a Qh peak as follows: </para>
<para><command>&gt; drive qh 4 qk 0 ql 0 en 0 </command></para>
<para><command>&gt; runscan qh 3.985 4.015 31 time 5 </command></para>
<para>The centre of this scan should be close to 4, but could be shifted. This will be the
fit value from the scan. Then you can <emphasis role="underline">change the <emphasis
role="bold">a</emphasis> lattice parameter</emphasis> accordingly in tasub </para>
<para>
a<subscript>new</subscript>=a<subscript>old</subscript>(peak<subscript>calculated</subscript>/peak<subscript>centre
from scan</subscript>) </para>
<para><inlineequation>
<mml:math xmlns:mml="http://www.w3.org/1998/Math/MathML">
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mi>e</mml:mi>
<mml:mi>w</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>a</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>old</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mrow>
<mml:mo>(</mml:mo>
<mml:mfrac>
<mml:mrow>
<mml:mo>&#x2062;</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>peak</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>calculated</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
<mml:mrow>
<mml:msub>
<mml:mrow>
<mml:mi>peak</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>centre&#x0020;from&#x0020;scan</mml:mi>
</mml:mrow>
</mml:msub>
</mml:mrow>
</mml:mfrac>
<mml:mo>)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</inlineequation></para>
<para><command>&gt; tasub cell a b c alpha beta gamma </command></para>
<para>The next peak can be aligned in the same way </para>
<para><command>&gt; drive qh 0 qk 4 ql 0 en 0 </command></para>
<para><command>&gt; runscan qk 3.985 4.015 31 time 5 </command></para>
<para>Once you have changed your unit cell parameters, you need to add the two new peaks
into your reference list, optimise the goniometers again and re-make your UB matrix with
these new peaks</para>
<para><command>&gt; tasub cell</command></para>
<para>3 9 15 90 90 90</para>
<para><command>&gt; tasub cell 2.9 8.7 14.5 90 90 90</command></para>
<para><command>&gt; tasub addauxref 0 0 4 </command></para>
<para><command>&gt; tasub addauxref 0 4 0</command></para>
<literallayout>
NO QH QK QL S1 S2 SGU SGL EI EF
1 0.00 0.00 4.00 22.62 -27.10 0.00 0.00 25.86 14.87 (old lattice parameters)
2 0.00 4.00 0.00 -65.74 -51.21 0.00 0.00 25.86 14.87 (old lattice parameters)
3 0.00 0.00 4.00 -156.85 -28.38 0.00 0.00 25.86 14.87 (new lattice parameters)
4 0.00 4.00 0.00 -66.10 -53.30 0.00 0.00 25.86 14.87 (new lattice parameters)
</literallayout>
<para>You can see already that by changing the lattice parameters the scattering angles
change. So you need to optimise these peaks again, as before and add the new reflections
to the list before re-making your UB-matrix.</para>
<para>If your sample is cubic (and remains cubic at low temperatures) and you are in the HK0
scattering plane, then the lattice parameters are best set with a peak that involved
both H and K for instance the 110 peak.</para>
<para>Make sure after you have changed your lattice parameters, and both peaks have been
added to the reference list that you remake your ub matrix! </para>
</sect1>
</chapter>

View File

@@ -0,0 +1,241 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Sample environment configuration (Local contact only)</title><author>
<personname>Kirrily Rule</personname>
</author>
<date>2013-04-09 16:47</date>
</info>
<sect1>
<title>How to edit configuration files</title>
<para>On ics1-taipan, you'll be editing SICS configuration files so that SICS will load the
driver for a device. The editor is <command>vim</command>. This process will be done
through a graphical interface in the future. </para>
<variablelist>
<title><command>vim</command> commands</title>
<varlistentry>
<term><command>:colorscheme ron </command></term>
<listitem>
<para>Change the color scheme. This make editing easier</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>/tasub</command></term>
<listitem>
<para> This searches for the string “tasub” </para>
</listitem>
</varlistentry>
<varlistentry>
<term>i</term>
<listitem>
<para>insert mode. Add text.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>r</term>
<listitem>
<para>replace. Replace a character.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>x</term>
<listitem>
<para> delete</para>
</listitem>
</varlistentry>
<varlistentry>
<term>ESC key</term>
<listitem>
<para> escape out of the current mode</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Lakeshore 340 configuration</title>
<para>When using the Lakeshore 340, various things need to be changed in the
configuration files. This should only be done by the local contact.</para>
<orderedlist>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/</para>
</listitem>
<listitem>
<para>&gt; vim extraconfig.tcl</para>
</listitem>
<listitem>
<para> Remove both the # in the following four lines </para>
<para>#catch </para>
<para>#add_sct_… </para>
<para># hsetprop </para>
<para>#}msg </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para><command>&gt; runsics stop</command></para>
</listitem>
<listitem>
<para><command>&gt; runsics start</command></para>
</listitem>
</orderedlist>
</sect1>
<sect1>
<title>High voltage configuration</title>
<para>When using the High voltage setup, various things need to be changed in the
configuration files. This should only be done by the local contact.</para>
<orderedlist>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/</para>
</listitem>
<listitem>
<para>&gt; vim extraconfig.tcl</para>
</listitem>
<listitem>
<para> Remove both the # in the four lines </para>
<para># Make AsyncP… </para>
<para># Make AsyncP… </para>
<para># pulser delay </para>
<para># pulser timeout </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para>Make sure that the IP on the function generator is set to the following:
137.157.203.149 </para>
</listitem>
<listitem>
<para>Get an electrician such as Dan Bartlett to confirm the setup is safe!
</para>
</listitem>
<listitem>
<para><command>&gt; runsics stop</command></para>
</listitem>
<listitem>
<para><command>&gt; runsics start</command></para>
</listitem>
</orderedlist>
</sect1>
<sect1>
<title>12T magnet configuration</title>
<para>When using the 12T magnet, various things need to be changed in the configuration
files. This should only be done by the local contact. </para>
<orderedlist>
<listitem>
<para>Turn on the magnet laptop check that the Ethernet cable and grey cable
are connected. </para>
</listitem>
<listitem>
<para>Click on “SICS oxford instruments” to bring up the front panel. </para>
</listitem>
<listitem>
<para>Click on ITC503 Front Panel </para>
</listitem>
<listitem>
<para>open a Putty terminal</para>
</listitem>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/server </para>
</listitem>
<listitem>
<para>&gt; sudo vim taipan_configuration.tcl </para>
</listitem>
<listitem>
<para>On line 59, remove the # from # fileeval ../aerotech.tcl </para>
</listitem>
<listitem>
<para>On line 61 is s1 in the TASUB command. Change this to vs1. </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
<para>If you made a mistake, quit without changing by typing
<command>:q!</command> and start again.</para>
</listitem>
<listitem>
<para>&gt; cd config/motors/ </para>
</listitem>
<listitem>
<para>&gt; sudo vim motor_configuration.tcl </para>
</listitem>
<listitem>
<para><command>/magnet</command>
</para>
<para>Search for the string “magnet” </para>
</listitem>
<listitem>
<para>The following {0} should change to {1} for the magnet: </para>
<para>If {0}{</para>
<para> # Convert magnet angle to s1 angle </para>
<para> VarMake vs1speed float user </para>
<para> vs1speed 1 </para>
<para></para>
<para> } } </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/</para>
</listitem>
<listitem>
<para>&gt; vim extraconfig.tcl</para>
</listitem>
<listitem>
<para>#--------------- </para>
<para># 12T magnet </para>
<para>#--------------- </para>
<para>Remove the # in the following lines (choose which temp controller method
you require running with the Mercury, or as Legacy mode) </para>
<para>#add_oxford_magnet "magnetic" 137.157.203.153 </para>
<para>#add_oxford_mercury "tc9" 137.157.203.151 7020 2.0 "\r" </para>
<para>#add_itc500 tc1 137.157.203.151 7020 2.0 "@8" This is for running in
Legacy Mode (to look like ITC500) </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para><command>&gt; runsics stop</command></para>
</listitem>
<listitem>
<para><command>&gt; runsics start</command></para>
</listitem>
</orderedlist>
</sect1>
<sect1>
<title><superscript>3</superscript>He configuration</title>
<para>When using the <superscript>3</superscript>He setup, various things need to be
changed in the configuration files. This should only be done by the local contact.</para>
<para>When using the <superscript>3</superscript>He setup, you need to switch to the
appropriate speeds and accelerations for the elongated instrument. To do this, in
the PuTTy window, go to </para>
<orderedlist>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/</para>
</listitem>
<listitem>
<para>&gt; vim taipan_setup.txt</para>
</listitem>
<listitem>
<para>Change the 0 to 1 to turn on this file </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para><command>&gt; runsics stop</command></para>
</listitem>
<listitem>
<para><command>&gt; runsics start</command></para>
</listitem>
</orderedlist>
</sect1>
</chapter>

View File

@@ -0,0 +1,207 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Sample environment control</title><author>
<personname>Kirrily Rule</personname>
</author>
<date>2013-04-09 16:47</date>
</info>
<sect1>
<title>Cryo-furnace with Lakeshore 340 controller</title>
<para>The typical closed cycle cryo-furnace used on Taipan is cryo-furnace #1 (CF1). This
uses a Lakeshore 340 controller. SICS is capable of reading and driving the temperature
on this device. The Moxa box must be installed, and connected to the Lakeshore hardware.
In the future, the Lakeshores will have a dedicated Moxa box. </para>
<variablelist>
<varlistentry>
<term>
<command>&gt; tc1_driveable2</command></term>
<listitem>
<para>shows the sample temperature from channel A </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; run tc1_driveable 200 </command></term>
<listitem>
<para>drives the regulation temperature (B) to 200K </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; wait 600 </command></term>
<listitem>
<para>shows wait in seconds </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; drive tc1_driveable 200 </command></term>
<listitem>
<para>drives the regulation temperature (B) to 200K and waits for it to be
within 1K of this value before continuing to the next command </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt;sct_ls340_tc1 send "RANGE?" </command></term>
<listitem>
<para>this will query the heater power range 0 = off, 5 = 100W </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt;sct_ls340_tc1 send "RANGE 1" </command></term>
<listitem>
<para>this will set the heater power range. Set to a value between 0-5 </para>
</listitem>
</varlistentry>
</variablelist>
<para>The fine control of the temperature parameters, such as tolerance, heater power range,
etc, can be adjusted by clicking on the SIC Server tree view. Alternatively you can use
certain commands listed below in a batch file: </para>
<para>Check the heater power range of the closed cycle. To heat the sample relatively
quickly you need to have the heater range to 5. To reach base temperature (10K or less),
the heater range should be set to 4 or lower. </para>
<figure>
<title>Setting temperature</title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm" fileref="taipanGumtree3.jpg"
/></imageobject>
</mediaobject>
</figure>
<para> These detailed commands can be used (also in batch files) to control the temperature
parameters:</para>
<variablelist>
<varlistentry>
<term>
<command>&gt; hlist val /sics/tc1/sensor </command></term>
<listitem>
<para>shows set points and sensors etc</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hget /sics/tc1/sensor/setpoint1</command></term>
<listitem>
<para>to show the temperature</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hset /sics/tc1/sensor/setpoint1 200</command></term>
<listitem>
<para>to set the temperature to 200K there is no blockage of the drive
functions when this command is used</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; > hset /sample/tc9/Loop1/setpoint 200</command></term>
<listitem>
<para>to set the temperature of the 12T magnet to 200K</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hget /sample/tc9/Loop3/sensor</command></term>
<listitem>
<para>to read the temperature of the 12T magnet</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hset /sics/tc1/heater/heaterRange 5</command></term>
<listitem>
<para>for 100W power, or 4 for 10W power</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hset /sics/tc1/control/tolerance 1 5</command></term>
<listitem>
<para>to set the tolerance of 5K to reach desired temperature</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>High voltage control</title>
<para> Sics and gumtree can also control the high voltage rig which is also set up on CF1.
The following commands will be useful</para>
<variablelist>
<varlistentry>
<term>
<command>&gt; pulseron</command></term>
<listitem>
<para>turn on HV</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; pulseroff</command></term>
<listitem>
<para>turn off HV</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; getvolt</command></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; setvolt 100</command></term>
<listitem>
<para>sets the voltage to 100V</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>12T magnet control. Important procedures before ramping the field. </title>
<warning>
<title>Protect the slits</title>
<para>Once you have set your slits, turn the motion control <emphasis role="bold"
>OFF</emphasis> (on the same box as the shutter control) and <emphasis role="bold"
>unplug</emphasis> the 4 cables. Turn the motion control ON again. The slits are
now in a safe mode for driving the field.</para>
</warning>
<warning>
<title>Stop magnet quenching</title>
<para>To perform field ramps safely (without risk of quenching), you should put the beam
stop down. To do this, turn the motion control OFF (on the same box as the shutter
control), ramp the field into persistent mode and then turn the motion control ON
again. Once you have reached your new field, drive to a new Q-E position to ensure
that all the motors still behave correctly after the motion OFF. If not, you might
have to reset particular motors: </para>
<para><command>&gt; m1 send RS</command> (this will reset the m1 motor controller)</para>
<para>To keep the beam stop down</para>
<orderedlist>
<listitem>
<para> Turn off motion control</para>
</listitem>
<listitem>
<para>Close valve located at the base of the beam stop</para>
</listitem>
<listitem>
<para>Turn on motion control</para>
</listitem>
</orderedlist>
</warning>
</sect1>
<sect1>
<title>12T magnet control. Driving s1</title>
<para>There are two parameters you will need for driving the <command>s1</command> via the
sample stick. <command>vs1</command> drives the motor from the command line, while
<command>dummy_s1</command> is in the UB matrix and scan parameters. So use these in
the following way: </para>
<para><command>&gt; drive vs1 30</command> (in the command line this drives the motor to a
value) </para>
<para><command>&gt; runscan dummy_s1 25 35 101 time 1</command>
</para>
<para><command>&gt; runscan qh</command>
</para>
<para>When running a powder sample in the magnet, fix <command>dummy_s1</command>
</para>
<para><command>&gt; dummy_s1 fix 1</command> (&gt; dummy_s1 fix 0 to unfix)</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Running an experiment</title><author>
<personname>Kirrily Rule</personname>
</author>
<date>2013-04-09 16:47</date>
</info>
<sect1>
<title> Creating and running batch files</title>
<para>Batch files are stored in /usr/local/nbi/sics/taipan/batch and are just text files
with the extension .tcl. You can edit these in a text editor, or the editing panel
of the left window. Your file, filename.tcl can be run by dragging and dropping into
the Buffer Queue and then run by pressing the “Play” button. </para>
<para>You can also queue additional files to run by dragging and dropping them into
Batch Queue window. These will then be run sequentially. Files can be removed and
edited or replaced as desired from the Batch Queue window. Once the file has been
read into the buffer, it can no longer be edited. For this reason it is recommended
that multiple short files are created. These can be run multiple times if necessary.
</para></sect1>
<sect1><title>Synchronising validation server with control server</title>
<para>There are actual 2 version of the SICS control server running, the one that does the
control, and one that you use to validate scripts, known as the validation server. The
validation server doesn't control real hardware. The hardware is virtual. Motors move
instantaneously. It is used to check that a batch file that you have written doesn't
violate the limits of motion, and to check that you haven't made syntactic errors. </para>
<para>With Taipan, the UB matrix has to be shared between the 2 versions of the server. To
do this, in the SICS validation terminal type:</para>
<para><command>&gt; sync </command></para>
<para>Note that this is not the SICS control terminal. You'll need to open a connection to
SICS on port 60013 via a putty session. </para>
<para>Later versions of Gumtree for Taipan will include a button that synchronises the
servers. </para>
<para>Sync'ing may take some time. To ensure that you know when the sync has finished, you
can type</para>
<para><command>&gt; getlog command </command></para>
<para><command>&gt; getlog value </command></para>
<para><command>&gt; sync </command></para>
<para>You will see something like the following feedback on the validator connection as the
sync command is running:</para>
<para><literallayout>
Executing -> sync &lt;- from socket 16
Executing -> restore ../script_validator//log/status.tcl &lt;- from dummy socket
pa_top = -102.499977
pa_bottom = -104.000000
pa_top = -102.499977
pa_bottom = -104.000000
pa_top = -102.499977
pa_bottom = -104.000000
pa_left = -24.699976
….
New en position: 46.434
New qm position: 6.048
Simulation Server has SYNCHRONIZED!
Fixed motors may not have correct positions</literallayout></para>
<para>Then
when the synchronisation is complete issue </para>
<para><command>&gt; getlog kill</command></para>
<para>to kill the feedback, otherwise
you will see log messages for the commands that run when you validate the script, but
maybe thats desirable. </para>
</sect1>
<sect1>
<title>Validation of scans</title>
<para>To check your script, you can validate it using the Validation tab in the Buffer
Queue. Drag your file into the Validate window and click on Validate. Information
about your file will scroll through the log screen. Use this to see if any errors or
motor limits have been reached. </para>
</sect1>
<sect1>
<title>Example experiment script</title>
<para>
<literallayout>
# This is a comment and will not be executed
drive qh 2.5 qk 0 ql 3.5 en 32
bmonscan clear
bmonscan add qh 2.5 0.1
bmonscan run 31 monitor 1000000
# This is another comment with important information
drive qh -2.5 qk 0 ql 3.5 en 32
bmonscan clear
bmonscan add s2 -55 -0.1
bmonscan run 31 monitor 1000000
clientput [m2 absenc] # (prints out the m2 absolute encoder value)
</literallayout>
</para>
</sect1>
<sect1>
<title>Motor errors</title>
<warning>
<title/>
<para>If you ever see the following error message:</para>
<para><command>&gt; ERROR: THREAD ZERO NOT RUNNING ON CONTROLLER on m1</command></para>
<para> Type the following (this is case sensitive)</para>
<para><command>&gt; m1 send RS </command></para>
<para> If you ever see the following error message:</para>
<para><command>&gt; ERROR: MOTOR CONTROLLER RUN ERROR: -102 on m2 </command></para>
<para>Type the following (this is case sensitive)</para>
<para><command>&gt; m2 send MG RUNF</command> and if this is a number not 0 or 1,
then:</para>
<para><command>&gt; m2 send RUNF=0</command></para>
</warning>
</sect1>
<sect1>
<title>Creating and accessing log files</title>
<para>There are new log files written for each experiment. These are located in:
<computeroutput>J:\data\current\reports\exp#\LogFile.txt</computeroutput> on the
Microsoft Windows DAV computer. These will be updated as the experiment progresses
and should include both commands from the command line window and the batch file. </para>
<para>Use a program such as WinSCP to transfer files to your computer. The files will be
in
<computeroutput>/experiments/taipan/data/current/reports/exp#/LogFile.txt</computeroutput>.
These files are archived to a proposal directory at the end of each cycle e.g.
<computeroutput>/experiments/taipan/data/proposal/proposal#/reports/exp#/LogFile.txt</computeroutput>
</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Quick Start Guide</title><author>
<personname>Katy Wood</personname>
</author>
<date>2013-04-09 16:47</date>
</info>
<sect1>
<title>Running Gumtree</title>
<para>To start running Gumtree, double click on the icon on the desktop. Two windows will
automatically open and you will be logged in as “Manager”. (Why manager, why not
user???)</para>
<para>This quick start guide assume SICS is configured for your experiment, and that it is
running. If it is not, go to the section <xref linkend="status"/></para>
</sect1>
<sect1>
<title>To edit and run a batch file</title>
<figure>
<title>Script Perspective </title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm" fileref="taipanGumtree.jpg"
/></imageobject>
</mediaobject>
</figure>
<para>Open one of the previous batch files by double clicking on a .tcl file in the Project
Explorer window. This will appear in the Tree View panel above. You can edit this and
save it with a new file name (File -> Save as). </para>
<para>To run this file, drag it into the Buffer Queue. You can either press Play, or
Validate to check the file. </para>
<para>All commands listed with <emphasis>&gt;
</emphasis> should be typed into the SICS command line in Gumtree, or in the black
sicsclient window opened via PuTTy (Taipan ICS profile). Either of these will drive the
instrument. Only those commands executed from Gumtree will be printed into the Log file.
</para>
</sect1>
<sect1>
<title> Live visualisation of data</title>
<figure>
<title>Analysis Perspective </title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm" fileref="taipanGumtree1.jpg"
/></imageobject>
</mediaobject>
</figure>
<para>In the Scripting control window, choose </para>
<para><command>Load Script -> analysis -> live data</command> to show a live plot as the
counts are taken. </para>
<para>In this window, you can tick (or untick) autofit (for a Gaussian fit), and normalise
(which normalises to time) You can also change which detector you wish to see the counts
in:</para>
<para>bm1_counts = monitor </para>
<para>bm2_counts = detector </para>
<para>You can also control the fitting range in this window </para>
<para>You can add past data sets to the Plot 2 window (beneath the liveplot window).
Highlight the plots you wish to add, be sure you have the correct detector choice and
x-axis parameter selected, then click on the button “Import Data Files to Plot2”. </para>
<note><title>Stopping the instrument</title>
<para>At any time, to interrupt SICS you can click on the red button, or type >>INT1712
3</para>
</note>
</sect1>
</chapter>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Quick Start Guide</title><author>
<personname>Kirrily Rule</personname>
</author>
<date>2013-04-09 16:47</date>
</info>
<sect1>
<title>Running Gumtree</title>
<para>To start running Gumtree, double click on the icon on the desktop. Two windows will
automatically open and you will be logged in as “Manager”. (Why manager, why not
user???)</para>
<para>This quick start guide assume SICS is configured for your experiment, and that it is
running. If it is not, go to the section <xref linkend="status"/></para>
</sect1>
<sect1>
<title>To edit and run a batch file</title>
<figure>
<title>Script Perspective </title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm" fileref="taipanGumtree.jpg"
/></imageobject>
</mediaobject>
</figure>
<para>Open one of the previous batch files by double clicking on a .tcl file in the Project
Explorer window. This will appear in the Tree View panel above. You can edit this and
save it with a new file name (File -> Save as). </para>
<para>To run this file, drag it into the Buffer Queue. You can either press Play, or
Validate to check the file. </para>
<para>All commands listed with <emphasis>&gt;
</emphasis> should be typed into the SICS command line in Gumtree, or in the black
sicsclient window opened via PuTTy (Taipan ICS profile). Either of these will drive the
instrument. Only those commands executed from Gumtree will be printed into the Log file.
</para>
</sect1>
<sect1>
<title> Live visualisation of data</title>
<figure>
<title>Analysis Perspective </title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm" fileref="taipanGumtree1.jpg"
/></imageobject>
</mediaobject>
</figure>
<para>In the Scripting control window, choose </para>
<para><command>Load Script -> analysis -> live data</command> to show a live plot as the
counts are taken. </para>
<para>In this window, you can tick (or untick) autofit (for a Gaussian fit), and normalise
(which normalises to time) You can also change which detector you wish to see the counts
in:</para>
<para>bm1_counts = monitor </para>
<para>bm2_counts = detector </para>
<para>You can also control the fitting range in this window </para>
<para>You can add past data sets to the Plot 2 window (beneath the liveplot window).
Highlight the plots you wish to add, be sure you have the correct detector choice and
x-axis parameter selected, then click on the button “Import Data Files to Plot2”. </para>
<note><title>Stopping the instrument</title>
<para>At any time, to interrupt SICS you can click on the red button, or type >>INT1712
3</para>
</note>
</sect1>
</chapter>

View File

@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>SICS status and login</title><author>
<personname>Kirrily Rule</personname>
</author>
<date>2013-04-09 16:47</date>
</info>
<sect1 xml:id="status">
<title>Login to the SICS computer from a PuTTy terminal</title>
<para>Before you can control the instrument, there are 2 programs that need to be running,
SICS and Gumtree. SICS should already be configured and set running by the local
contact. This procedure allows you to check this.</para>
<orderedlist>
<listitem>
<para>On the Microsoft Windows computer in the instrument cabin, find the putty
program. <figure>
<title>PuTTy icon on the Microsoft Windows desktop </title>
<mediaobject>
<imageobject><imagedata align="left" width="30mm" fileref="putty.jpg"
/></imageobject>
</mediaobject>
</figure></para>
</listitem>
<listitem>
<para>Choose the ICS computer from the list of Saved Sessions</para>
</listitem>
<listitem>
<para>Load and open</para>
</listitem>
<listitem>
<para>Use your NBI username and password, supplied by the Bragg Institute User
Office</para>
</listitem>
<listitem>
<para>You will now have a command prompt to a Linux operating system</para>
</listitem>
</orderedlist>
</sect1>
<sect1>
<title>Check SICS status</title>
<para>Normally SICS will be running. You can check if SICS is running by using the PuTTy
window and at the Linux operating system command prompt type</para>
<para><command>&gt; runsics status</command>
</para>
<para>If the status shows that SICS is not running, or if there is a change in the SICS
configuration files e.g. a piece of sample environment has been added, you should
contact your local contact. </para>
<para>If the local contact has confirmed it is OK to restart SICS, then in the PuTTy window
type </para>
<para><command>&gt; runsics stop</command>
</para>
<para><command>&gt; runsics start</command>
</para>
</sect1>
<sect1>
<title>Login to SICS using the putty session</title>
<para>In the previous section, you logged into the ICS (instrument control server) computer
using putty. At the Linux operating system command prompt, you will run a program that
will give you a sics command prompt. </para>
<para>For most cases, you won't have to do this. A SICS command prompt is available in
Gumtree. </para>
<para>At the Linux operating system command prompt type </para>
<para><command>&gt; sicsclient</command></para>
<para>You should see <computeroutput>OK</computeroutput> on the screen.</para>
<para>You now have a SICS command prompt. It may look strange since the cursor will be on a
blank line. You will not have access to the Linux operating system command prompt until
you log off.</para>
<para>Next step is to login to sics by typing</para>
<para><command>&gt; user password</command> where user is literally the word "user" and the
password will be supplied by the local contact</para>
<para>You can replace user with spy. The spy login provides read-only access to SICS.
</para>
</sect1>
<sect1>
<title>Login to SICS from Gumtree</title>
<figure>
<title>Gumtree connected to SICS </title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm" fileref="taipanGumtree2.jpg"
/></imageobject>
</mediaobject>
</figure>
<para>Normally, Gumtree will be connected to SICS, as in the figure above. </para>
<para>In Gumtree you reconnect to SICS if you restart SICS. This is done by clicking on the
little man at the bottom of the Gumtree screen when logged in to SICS. He will be
standing still, and you will see the word Disconnected when not connected. He will be
running when connected as in the figure. You will then need to start a new Sics terminal
in Gumtree. From the left screen, in the project explorer window, Right click on SICS
and choose the option to start a new “SICS telnet terminal”. </para>
<note>
<para>Reconnection won't work properly if SICS has changed configuration e.g. you've
added a piece of sample environment. In this case, when you restart SICS you should
also restart Gumtree </para>
<para/>
</note>
</sect1>
</chapter>

View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Chapter Title</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-08-29 16:47</date>
</info>
<sect1>
<title>Configuration</title>
<para>How to get this running in SICe.g. edit</para>
<para>
<literal>/usr/local/sics/extraconfig.tcl</literal> file </para>
<para><command>select_environment_controller "11TMagnet"</command></para>
<para>Make sure that the other entries are commented out, save the file and restart SICS.</para>
<para>This will set up the lakeshore temperature controller as well as the magnet power
supply control. They will appear as <varname>tc1</varname> and <varname>ips120</varname>
under the <varname>sample</varname> group in GumTree.</para>
</sect1>
<sect1>
<title>Commands</title>
<para>General description of commands are doing.</para>
<variablelist>
<varlistentry>
<term><command>hset /sample/ips120/Control/A 0</command></term>
<listitem>
<para>What the command does</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>drive ips120_driveable </command><replaceable>n</replaceable></term>
<listitem>
<para>Drive the magnet to <replaceable>n</replaceable> Tesla</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Parameters</title>
<variablelist>
<varlistentry>
<term><command>/sample/ips120/sensor/value </command></term>
<listitem>
<para>Parameters that set the state of the command object. </para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Description</title>
<para>Explanation of what a command is doing when it is more than just setting a target
value. e.g. changing magnetic field in a superconducting magnet. </para>
</sect1>
<sect1>
<title>Known Issues</title>
<para>Alerts the user to known operational problems</para>
</sect1>
<sect1>
<title>Troubleshooting</title>
<para>What to do if things go wrong</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,209 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>TCL command language interface</title><author><personname>Ferdi
Franceschini</personname></author>
<date>2006-08-17 14:01</date></info>
<sect1>
<title>Common commands &amp; exclusions</title>
<para>From the PSI SANS documentation by Dr. Joachim Kohlbrecher and Dr. Mark Könnecke with
slight modifications.</para>
<para>The macro language implemented in the SICS server is <uri
xlink:href="http://home.pacbell.net/ouster/">John Ousterhout</uri> Tool Command
Language <uri xlink:href="http://www.tcl.tk/">TCL</uri> . Tcl has control constructs,
variables of its own, loop constructs, associative arrays and procedures. Tcl is well
<uri xlink:href="http://www.tcl.tk/doc/">documented</uri> by several books, online
tutorials and manuals.  All SICS commands are available in the macro language. </para>
<para>Some potentially harmful Tcl commands have been deleted from the standard Tcl
interpreter. These are: </para>
<para>
<command>exec</command></para>
<para><command>source</command></para>
<para><command>puts</command></para>
<para><command>vwait</command></para>
<para><command>exit</command></para>
<para><command>gets</command></para>
<para><command>socket</command></para>
<para>Below only a small subset of the most important Tcl commands like assigning variables,
evaluating expressions, control and loop constructs are described. For complete
description of Tcl commands have a look on the <uri
xlink:href="http://www.tcl.tk/man/tcl8.4/">manual pages</uri> or on one of the many
books about Tcl/Tk.</para>
<variablelist>
<varlistentry>
<term><command>set </command><replaceable> varName value</replaceable>
<command>set </command><replaceable>arrName(index) value</replaceable></term>
<listitem>
<para>Set/get scalar variables or array elements.  Arrays in Tcl are actually
associative arrays, this means that their indices are not restricted to
integers.  The following examples demonstrate setting a scalar variable and
a couple of array elements.  Note the third array example which shows that
the same array can have mixed indices (the number 1 and 'one') as well as
mixed data types (the number 10 and 'ten') in the same array.</para>
<programlisting>set a 3
set arr(1) 10
set arr(one) ten</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term><command>expr </command><replaceable>arg arg arg</replaceable></term>
<listitem>
<para>Concatenates args (adding separator spaces between them), evaluates the
result as a Tcl expression, and returns the value. The operators permitted
in Tcl expressions are a subset of the operators permitted in C expressions,
and they have the same meaning and precedence as the corresponding C
operators. Expressions almost always yield numeric results (integer or
floating-point values). For example, the expression </para>
<programlisting>expr 8.2 + 6</programlisting>
<para>evaluates to 14.2. For some examples of simple expressions, suppose the
variable a = 3 and b = 6. Then the commands shown below will produce the
value after the -&gt;
</para>
<programlisting>set a 3
set b 6
expr 3.1 + $a -&gt; 6.1
expr 2 + "$a.$b" -&gt; 5.6
expr [ splitreply [omega] ] / 2.0 -&gt;
omega axis position / 2.0</programlisting>
<para>Note the use of square brackets [] for command substitution.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Math functions</title>
<para>Tcl supports the following mathematical functions in
expressions:<?db2html element="br"?></para>
<para><informaltable>
<tgroup cols="4">
<tbody>
<row>
<entry>acos</entry>
<entry>cos </entry>
<entry>hypot </entry>
<entry>sinh </entry>
</row>
<row>
<entry>asin </entry>
<entry>cosh </entry>
<entry>log </entry>
<entry>sqrt </entry>
</row>
<row>
<entry>atan </entry>
<entry>exp </entry>
<entry>log10 </entry>
<entry>tan </entry>
</row>
<row>
<entry>atan2 </entry>
<entry>floor </entry>
<entry>pow </entry>
<entry>tanh </entry>
</row>
<row>
<entry>ceil </entry>
<entry>fmod </entry>
<entry>sin </entry>
<entry> </entry>
</row>
</tbody>
</tgroup>
</informaltable>Note you must use the <command>expr</command> command to invoke these
functions  eg,</para>
<programlisting>expr cos(0)
set pi [expr acos(-1)]
expr sin($pi)</programlisting>
<para>Each of these functions invokes the math library function of the same name; see the
manual entries for the library functions for details on what they do. Tcl also
implements the following functions for conversion between integers and floating-point
numbers and the generation of random numbers: </para>
<para><command>abs</command>(<replaceable>arg</replaceable>),
<command>double</command>(<replaceable>arg</replaceable>) ,
<command>int</command>(<replaceable>arg</replaceable>),
<command>rand</command>(<replaceable>arg</replaceable>),
<command>round</command>(<replaceable>arg</replaceable>),
<command>srand</command>(<replaceable>arg</replaceable>). </para>
</sect1>
<sect1>
<title>if - execute scripts conditionally</title>
<programlisting><command>if</command> <replaceable>expr1 </replaceable><command>then </command>
<replaceable>body1</replaceable>
<command>elseif </command><replaceable>expr2 </replaceable><command>then</command>
<replaceable>body2</replaceable>
<command>elseif</command>...
<command>else</command>
<replaceable>bodyN</replaceable>
</programlisting>
<para>The <command>if</command> command evaluates <replaceable>expr1</replaceable> as an
expression (in the same way that <command>expr</command> evaluates its argument). The
value of the expression must be a boolean (a numeric value, where 0 is false and
anything is true, or a string value such as "true" or "yes" for true and "false" or "no"
for false); if it is true then <replaceable>body1</replaceable> is executed by passing
it to the Tcl interpreter. Otherwise <replaceable>expr2</replaceable> is evaluated as an
expression and if it is true then <replaceable>body2</replaceable> is executed, and so
on. If none of the expressions evaluates to true then <replaceable>bodyN</replaceable>
is executed. The <command>then</command> and <command>else</command> arguments are
optional "noise words" to make the command easier to read. There may be any number of
<command>elseif</command> clauses, including zero. <replaceable>BodyN</replaceable>
may also be omitted as long as <command>else</command> is omitted too. The return value
from the command is the result of the body script that was executed, or an empty string
if none of the expressions was non-zero and there was no
<replaceable>bodyN</replaceable>. </para>
<example>
<title>"if"</title>
<programlisting>set a 3
if {$a == 3} {puts "a equals three"} </programlisting>
</example>
</sect1>
<sect1>
<title>for - "for" loop</title>
<programlisting><command>for </command><replaceable>start test
next
body</replaceable>
</programlisting>
<para><command>for</command> is a looping command, similar in structure to the C
<command>for</command> statement. The <replaceable>start, next</replaceable>, and
<replaceable>body</replaceable> arguments must be Tcl command strings, and
<replaceable>test</replaceable> is an expression string. If a
<command>continue</command> command is invoked within <replaceable>body</replaceable>
then any remaining commands in the current execution of <replaceable>body</replaceable>
are skipped; processing continues by invoking the Tcl interpreter on
<replaceable>next</replaceable>, then evaluating <replaceable>test</replaceable> , and
so on. If a <command>break</command> command is invoked within
<replaceable>body</replaceable> or <replaceable>next</replaceable> , then the
<command>for</command> command will return immediately. The operation of
<command>break</command> and <command>continue</command> are similar to the
corresponding statements in C. <command>for</command> returns an empty string. </para>
<example>
<title>"for"</title>
<programlisting>for {set x 0} {$x&lt;10} {incr x} {puts "x is $x"}</programlisting>
</example>
</sect1>
<sect1>
<title>while - execute script repeatedly as long as a condition is met</title>
<programlisting><command>while</command> <replaceable>test
body </replaceable></programlisting>
<para> The <command>while</command> command evaluates <replaceable>test</replaceable> as an
expression (in the same way that <command>expr</command> evaluates its argument). The
value of the expression must be a proper boolean value; if it is a true value then
<replaceable>body</replaceable> is executed by passing it to the Tcl interpreter.
Once <replaceable>body</replaceable> has been executed then
<replaceable>test</replaceable> is evaluated again, and the process repeats until
eventually <replaceable>test</replaceable> evaluates to a false boolean value.
<command>continue</command> commands may be executed inside
<replaceable>body</replaceable> to terminate the current iteration of the loop, and
<command>break</command> commands may be executed inside <command>body</command> to
cause immediate termination of the <command>while</command> command. The
<command>while</command> command always returns an empty string. </para>
<example>
<title>"while"</title>
<programlisting>set x 0
while {$x&lt;10} {
puts "x is $x"
incr x
}</programlisting>
</example>
</sect1>
</chapter>

View File

@@ -0,0 +1,279 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Julabo Temperature Control</title><author>
<personname>Nick Hauser</personname>
</author>
<date>2009-03-27 15:50</date>
</info>
<sect1>
<title>Commands</title>
<para>The Julabo temperature controller is a SICS script context object. There are 2 parts,
the script context object, which has the name <command>/sample/tc1</command> and the
driveable interface to the object, which has the name <command>tc1_driveable</command>
ie. "tee-cee-one". Note this name can change in the configuration. Hence you can
<command>drive</command> and <command>run</command>
<command>tc1_driveable</command>. To get and set other parameters use
<command>hget</command> or <command>hset /sample/tc1</command></para>
<variablelist>
<varlistentry>
<term>
<command>run tc1_driveable</command>
<replaceable>temp1</replaceable>
</term>
<listitem>
<para>Runs the temperature controller <command>tc1</command> to
<replaceable>temp1</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>drive tc1_driveable</command>
<replaceable>temp1</replaceable>
</term>
<listitem>
<para>Is the same as <command>run</command> but it blocks the client that
requested the <command>drive</command> from issuing commands until the task
has finished.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hlist /sample/tc1</command>
</term>
<listitem>
<para>Lists all the <command>tc1</command> nodes. Nodes can be get and set using
<command>hget</command> and <command>hset</command></para>
</listitem>
</varlistentry>
</variablelist>
<para>The temperature controller is usually put under the
<computeroutput>/sample</computeroutput> node in hipadaba, which is where it will be
found when using the Gumtree SICS. This complies with the NeXus standard. </para>
</sect1>
<sect1>
<title>Parameters</title>
<para>Use <command>hget </command>and <command>hset </command>on these parameters. Parameter
without <replaceable>val</replaceable> are read only and therefore cannot be set. </para>
<variablelist>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>setpoint</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Units = Celsius</para>
<para>Get/Set the temperature setpoint. If the setpoint is set, the controller
will change the temperature to this value, subject to constraints including
<command>operate remote_ctrl hitemp lotemp upperlimit lowerlimit
</command>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>overtemp_warnlimit</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Units = Celsius</para>
<para>Get/Set the controller's temperature upper limit. When the temperature is
&gt;
<replaceable>val</replaceable>, <application>SICS </application> will veto
counters until the temperature fall below <replaceable>val
</replaceable>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>subtemp_warnlimit</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Units = Celsius</para>
<para>Get/Set the controller's temperature lower limit. When the temperature is
&lt; <replaceable>val</replaceable>, <application>SICS </application> will
veto the histogram memory and counters until the temperature rises above
<replaceable>val </replaceable>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>sensor/value</command>
</term>
<listitem>
<para>Units = Celsius</para>
<para>Get the controller's temperature sensor value</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>heating_power_percent</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Units = percent</para>
<para>Get the controller's current heating power</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>operate</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set the operate state.</para>
<para>Allowed <replaceable>val</replaceable>:</para>
<para><option>0</option> Controller doesn't control temperature. Will still
report parameters</para>
<para><option>1</option> Controller provides control. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>status</command>
</term>
<listitem>
<para>Get the controller's operate state</para>
<para>Allowed <replaceable>val</replaceable>:</para>
<para><option>Busy</option> Equivalent to <replaceable>tc1</replaceable>
<command>operate</command>
<option>1</option>
</para>
<para><option>Idle</option> Equivalent to <replaceable>tc1</replaceable>
<command>operate</command>
<option>0</option>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>remote_ctrl</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set remote control enable/disable </para>
<para>Allowed <replaceable>val</replaceable>:</para>
<para><option>True</option>
<replaceable>tc1</replaceable> remote control enabled </para>
<para><option>False</option>
<replaceable>tc1</replaceable> remote control disabled </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>lh45_lasterror</command>
</term>
<listitem>
<para>Get the last error recorded on the controller. Note that this error
condition is not cleared if the error no longer exists. This value is only
overwritten by another error state. </para>
<para>Example of an error state: </para>
<para><computeroutput>-04 LOW TEMPERATURE WARNING</computeroutput>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>tolerance</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Units = Celsius</para>
<para>Get/Set <command>tolerance</command>. </para>
<para><command>overtemp_warnlimit</command> and
<command>subtemp_warnlimit</command> will be set when you use the
<command>run</command> or <command>drive</command>
<replaceable>tc1 temp1</replaceable>. Control is dependent on the
<command>overtemp_warnlimit</command> and
<command>subtemp_warnlimit</command> values, not on tolerance. Setting
<command>overtemp_warnlimit</command> or
<command>subtemp_warnlimit</command> will override
<command>tolerance</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>apply_tolerance</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set apply_tolerance <emphasis role="bold">Don't know what this
does</emphasis></para>
<para>Allowed <replaceable>val</replaceable>:</para>
<para><option>0</option>
</para>
<para><option>1</option>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>lowerlimit</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = Manager</para>
<para>Get/Set the lower limit for <command>setpoint</command>. If you try to set
<command>setpoint</command> below this value, will return.</para>
<para>ERROR: setpoint violates limits</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>upperlimit</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = Manager</para>
<para>Get/Set the lower limit for <command>setpoint</command>. If you try to set
<command>setpoint</command> above this value, will return.</para>
<para>ERROR: setpoint violates limits</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>/sample/tc1/</command><command>emon/monmode</command>
</term>
<listitem>
<para>Get emon's monitor mode <emphasis role="bold">Don't know what this
does</emphasis></para>
<para>Returned values:</para>
<para><option>monitor</option>
</para>
<para><option>???</option>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>/sample/tc1/</command><command>emon/isintol</command>
</term>
<listitem>
<para>Get if the value is within tolerance (but which tolerance?) hitemp lotemp
or tolerance</para>
<para>Returned values:</para>
<para><option>0</option> out of tolerance</para>
<para><option>1</option> in tolerance</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>/sample/tc1/</command><command>emon/errhandler</command>
</term>
<listitem>
<para>Get if the value is within tolerance (but which tolerance?) hitemp lotemp
or tolerance</para>
<para>Returned values:</para>
<para><option>pause</option> ???</para>
<para><option>???</option> ???</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,276 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Astrium Velocity Selector</title><author>
<personname>Nick Hauser</personname>
</author>
<date>2009-03-31 15:50</date>
</info>
<sect1>
<title>Commands</title>
<para>The Astrium velocity selector is a SICS script context object. There are 2 parts, the
script context object, which has the name
<command>/instrument/velocity_selector</command> and the 2 driveable interfaces to the
object, which have the names <command>nvs_speed</command> and
<command>nvs_lambda</command>. Hence you can <command>drive</command> and
<command>run</command>
<command>nvs_speed</command> and <command>nvs_lambda</command>. To get and set other
parameters use <command>hget</command> or <command>hset
/instrument/velocity_selector/</command></para>
<variablelist>
<varlistentry>
<term><command>run nvs_lambda</command>
<replaceable> wavelength</replaceable>
</term>
<listitem>
<para>Units: Angstroms</para>
<para>Runs the velocity selector to <replaceable>wavelength</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>drive nvs_lambda</command>
<replaceable> wavelength</replaceable>
</term>
<listitem>
<para>Units: Angstroms</para>
<para>Is the same as <command>run</command> but it blocks the client that
requested the <command>drive</command> from issuing commands until the task
has finished.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset /instrument/velocity_selector/setstate
</command><option>brake</option></term>
<listitem>
<para>Set the state. The state can be read using <command>hget
/instrument/velocity_selector/state</command></para>
<para>If the state is set to <command>brake </command>, then <command>hget
/instrument/velocity_selector/state</command> will return
<computeroutput>BRAKING </computeroutput>even when the rotor has
stopped.</para>
<para>You can use <command>run nvs_speed</command> to run the rotor again</para>
<para>Allowed values:</para>
<para><option>brake</option>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/state </command></term>
<listitem>
<para>Get the state. The normal operating state under SICS control is
<computeroutput>CONTROL</computeroutput></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hlist /instrument/velocity_selector</command>
</term>
<listitem>
<para>Lists all the <command>velocity_selector</command> nodes</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset
/instrument/velocity_selector/</command><replaceable>node</replaceable>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Set <replaceable>val</replaceable> on a
<replaceable>node</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/velocity_selector/</command><replaceable>node</replaceable></term>
<listitem>
<para>Get the value of a <replaceable>node</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset /instrument/velocity_selector/setspeed </command>
<replaceable>val</replaceable></term>
<listitem>
<para>Privilege = User</para>
<para>Units = rpm</para>
<para>Set the rotor set speed. </para>
<para>Once this is set, the velocity selector will attempt to run to this speed.</para>
<para>If called with no argument, will return an error</para>
</listitem>
</varlistentry>
</variablelist>
<para>The velocity selector is under the
<computeroutput>/instrument/velocity_selector</computeroutput> node in hipadaba, which
is where it will be found when using the Gumtree TableTree. This complies with the NeXus
standard. </para>
</sect1>
<sect1>
<title>Parameters</title>
<para>For more detailed description of these parameter, please see the <uri
xlink:href="http://gumtree:9080/nbicms/devices/velocity-selector/doc_ngs040.pdf/view"
>ASTRIUM velocity selector manual</uri> on ANSTOnet. </para>
<variablelist>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>wvalv</command>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get the state of the water valve. The water valve will open in once the
velocity selector has reached 3000 rpm. The valve will close again and the
selector will brake to 0 rpm if the water flow is not within tolerance.</para>
<para><option>open</option> Water valve open</para>
<para><option>clos</option> Water valve closed </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>rtemp</command>
</term>
<listitem>
<para>Privilege = User</para>
<para>Units = Celsius</para>
<para>Get the rotor temperature.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>state</command>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get the state.</para>
<para><option>IDLING</option> Is not being controlled. Should be at zero rpm.</para>
<para><option>RESET</option> A reset has been issued by the velocity selector
client program </para>
<para><option>CONTROL</option> Control has been requested by SICS or the
velocity selector client program</para>
<para><option>BRAKING</option> The velocity selector has the brake applied due
to an <command>hset setstate brake</command> request, the
<guibutton>Brake</guibutton> button applied on the velocity selector client
program, or due to a fault condition</para>
<para><option>POWERLOSS MEASUREMENT</option>
<guibutton>Powerloss measurement </guibutton>button applied on the velocity
selector client program </para>
<para><option>EMERGENCY STOP</option>
<guibutton>Emergency stop</guibutton> button applied on the velocity
selector client program </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/velocity_selector/</command><command>aspeed</command>
</term>
<listitem>
<para>Units = rpm</para>
<para>Get the actual speed</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>sspeed
</command><replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Units = rpm</para>
<para>No idea ??? </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>winlt</command>
</term>
<listitem>
<para>Units = Celsius</para>
<para>Get the cooling water inlet temperature</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>wflow</command>
</term>
<listitem>
<para>Units = litres/min</para>
<para>Get the cooling water flow rate</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>ploss</command>
</term>
<listitem>
<para>Units = Watts</para>
<para>Get the last measured power loss</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>splos</command>
</term>
<listitem>
<para>Units = rpm </para>
<para>Get the speed of the last measured power loss </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/velocity_selector/</command><command>rspeed</command>
</term>
<listitem>
<para>Units = rpm</para>
<para>Get the requested speed, set using <command>run nvs_speed
</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>woutt</command>
</term>
<listitem>
<para>Units = Celsius</para>
<para>Get the cooling water outlet temperature </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>hget /instrument/velocity_selector/</command><command>vacum</command>
</term>
<listitem>
<para>Units = 10<superscript>-3</superscript>bar</para>
<para>Get the vacuum</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>bcuun</command></term>
<listitem>
<para>Get the BCU units</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>ttang</command></term>
<listitem>
<para>Units = degrees</para>
<para>Get the turntable angle. 999.99 if not initialised</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>vibrt</command></term>
<listitem>
<para>Units = mm/s</para>
<para>Get the vibration</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>vvalv</command></term>
<listitem>
<para>Get the vacuum valve state</para>
<para>Returned values:</para>
<para><option>open</option>
</para>
<para><option>closed</option>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/velocity_selector/</command><command>aveto</command></term>
<listitem>
<para>Get the veto state</para>
<para>Returned values:</para>
<para><option>nok</option> not OK</para>
<para><option>ok</option> OK</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,234 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Echidna Motor Names</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2007-02-07 15:50</date>
</info>
<sect1>
<title>Commands</title>
<para>Motor names used in SICS.</para>
<para>
<emphasis role="b">Monochromator Motors</emphasis>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>motor</entry>
<entry>axis</entry>
</row>
</thead>
<tbody>
<row>
<entry>monochromator translation 1 (upper)</entry>
<entry>my</entry>
</row>
<row>
<entry>monochromator translation 2 (lower)</entry>
<entry>mx</entry>
</row>
<row>
<entry>monochromator tilt 1 (upper)</entry>
<entry>mphi </entry>
</row>
<row>
<entry>monochromator tilt 2 (lower) </entry>
<entry>mchi </entry>
</row>
<row>
<entry>monochromator rotate</entry>
<entry>mom</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<emphasis role="b">Sample Stage Motors</emphasis>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>motor</entry>
<entry>axis</entry>
</row>
</thead>
<tbody>
<row>
<entry>sample translation 1 (upper)</entry>
<entry>sy</entry>
</row>
<row>
<entry>sample translation 2 (lower)</entry>
<entry>sx</entry>
</row>
<row>
<entry>sample tilt 1 (upper)</entry>
<entry>sphi</entry>
</row>
<row>
<entry>sample tilt 2 (lower)</entry>
<entry>schi</entry>
</row>
<row>
<entry>sample rotate</entry>
<entry>som</entry>
</row>
</tbody>
</tgroup>
</informaltable></para>
<para>
<emphasis role="b">Detector and Sample Stage Movement</emphasis>
</para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>motor</entry>
<entry>axis</entry>
</row>
</thead>
<tbody>
<row>
<entry>Detector Rotate</entry>
<entry>stth</entry>
</row>
<row>
<entry>Sample Stage (Take-off angle)</entry>
<entry>mtth</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
</para>
<para>
<emphasis role="b">First Slit Package</emphasis>
</para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>motor</entry>
<entry>axis</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<para>Left slit blade</para>
</entry>
<entry>
<para>ss1l</para>
</entry>
</row>
<row>
<entry>
<para>Right slit blade</para>
</entry>
<entry>
<para>ss1r</para>
</entry>
</row>
<row>
<entry>
<para>Upper slit blade</para>
</entry>
<entry>
<para>ss1u</para>
</entry>
</row>
<row>
<entry>
<para>Lower slit blade</para>
</entry>
<entry>
<para>ss1d</para>
</entry>
</row>
<row>
<entry>
<para>Horizontal gap width</para>
</entry>
<entry>
<para>ss1hg</para>
</entry>
</row>
<row>
<entry>
<para>Horizontal gap offset</para>
</entry>
<entry>
<para>ss1o</para>
</entry>
</row>
<row>
<entry>
<para>Vertical gap width</para>
</entry>
<entry>
<para>ss1vg</para>
</entry>
</row>
<row>
<entry>
<para>Vertical gap offset</para>
</entry>
<entry>
<para>ss1vo</para>
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
<emphasis role="b">Second Slit Package</emphasis>
</para>
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>motor</entry>
<entry>axis</entry>
</row>
</thead>
<tbody>
<row>
<entry> Left slit blade</entry>
<entry>ss2l </entry>
</row>
<row>
<entry> Right slit blade</entry>
<entry> ss2r</entry>
</row>
<row>
<entry> Upper slit blade</entry>
<entry> ss2u</entry>
</row>
<row>
<entry> Lower slit blade</entry>
<entry> ss2d</entry>
</row>
<row>
<entry> Horizontal gap width</entry>
<entry> ss2hg</entry>
</row>
<row>
<entry> Horizontal gap offset</entry>
<entry> ss2ho</entry>
</row>
<row>
<entry> Vertical gap width</entry>
<entry> ss2vg</entry>
</row>
<row>
<entry>  Vertical gap offset</entry>
<entry> ss2vo</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Motor Troubleshooting</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2006-09-04 15:50</date>
</info>
<para>You can check for problems between SICS and the instrument by running the troubleshoot.tcl
application in the /usr/local/sics/server/common directory.The trouble-shooter constructs a
control panel from information in the SICS configuration file and from information in the
troubleshoot_setup.tcl file.  The trouble-shooter setup file specifies the expected
configuration for the motor controllers, this file should be updated whenever the motor
controller configuration is changed.</para>
<sect1>
<title>A Troubleshooting Session</title>
<warning>
<para>This chapter requires testing. nha. 1 May 2009</para>
</warning>
<para>If you have a computer with an X server then you can troubleshoot your instrument via
remote terminal session.  If you are running linux on your computer then the following
will just work.  If you are using an Apple computer you should have the X11 support
installed.  If you are running windows you will need to have something like X-Win32 or
or Cygwin (with X11) installed.  Otherwise you will have to run this on the instrument
control computer locally.</para>
</sect1>
<sect1>
<title>Starting the troubleshooter</title>
<para>First log on to the instrument control computer by entering the following in a
terminal (linux or cygwin) </para>
<programlisting>ssh -Y uname@ic-instname.nbi.ansto.gov.au</programlisting>
<para>Where uname is your ANSTO user id and instname is the name of your instrument (eg
echidna, wombat).</para>
<para>Once you have logged in, go to the sics server directory,</para>
<programlisting>cd /usr/local/sics/server</programlisting>
<para>There should be a troubleshoot.tcl script and troubleshoot_setup.tcl file in this
directory, check this by listing the directory contents with the 'ls' command.</para>
</sect1>
<sect1>
<title>An example showing failures</title>
<para>This example uses the following troubleshoot_setup.tcl file for Echidna.  </para>
<programlisting># ECHIDNA setupset configFileName "hrpd_configuration.tcl"# These subroutines should be installed on the controllersset contSubs(dmc2280_controller1) "#AUTO #ABC #LIMSWI #SOLCTRL #TCPERR"set contSubs(dmc2280_controller2) "#AUTO #LIMSWI #SOLCTRL #TCPERR"set contSubs(dmc2280_controller3) "#AUTO #HOME #LOOPER #RES #TCPERR"set contSubs(dmc2280_controller4) "#AUTO #HOME #LIMSWI #LOOPER #TCPERR"# These threads should be running on the controllers.set contThreads(dmc2280_controller1) "0"set contThreads(dmc2280_controller2) "0"set contThreads(dmc2280_controller3) "0"set contThreads(dmc2280_controller4) "0"</programlisting>
<para>Two simulated failures and one real failure are demonstrated in what follows.  I have
simulated a missing subroutine error by adding a dummy subroutine name "#ABC" to
controller one in the setup file above.  A network failure is simulated by simply
unplugging the ethernet cable from controller two.  There is a real failure on
controller three, a necessary thread was not running on that controller because a
command failed in the auto start subroutine.</para>
<para>Start the troubleshooter  with the following command</para>
<programlisting>common/troubleshoot.tcl</programlisting>
<para>You will see this dialog box which lets you specify the name of your instrument's
configuration file.</para>
<para><inlinemediaobject><imageobject><imagedata fileref="troubleshoot1.jpeg"
/></imageobject></inlinemediaobject>
</para>
<para>Note: The default file name can be set in the "troubleshoot_setup.tcl" script.</para>
<para>When you press the "Load config" button a control window will be constructed from the
information in the instrument configuration file and the "troubleshoot_setup.tcl" file.</para>
<para>
<inlinemediaobject><imageobject><imagedata fileref="troubleshoot2.jpeg" width="150mm"
/></imageobject></inlinemediaobject>
</para>
<para>There is a column for each of the motion controllers specified in the instrument
configuration file (hrpd_configuration.tcl in this example).  The control buttons allow
you to test the connection to each controller and then perform some tests on the
controllers.</para>
<para>To test the communications and motor controller status just click on the buttons in
each column from top to bottom.  If the test succeeds the button lights up green, if it
fails a message box describing the failure will pop-up.  Following are some examples of
the failure messages.</para>
</sect1>
<sect1>
<title>Motor Controller Communications Failure Example</title>
<para>When you press the connect button it should light up green if everything is OK,
otherwise you will see the following message.</para>
<para>
<inlinemediaobject><imageobject><imagedata fileref="troubleshoot3.jpeg" width="150mm"
/></imageobject></inlinemediaobject>
</para>
</sect1>
<sect1>
<title>Missing motor controller subroutine example</title>
<para>Assuming that the connection has succeeded (ie the "connect" button is now green) then
you can click on the "Check subs" button.  If the check succeeds the button will light
up green, if not you will see the following message.</para>
<para>
<inlinemediaobject><imageobject><imagedata fileref="troubleshoot4.jpeg" width="150mm"
/></imageobject></inlinemediaobject>
</para>
<para>This means the a required subroutine named "#ABC" was not found on controller
one.</para>
</sect1>
<sect1>
<title>Motor controller thread not running example</title>
<para>You can if necessary threads are running on the motor controller by clicking on the
"Check threads" button.  If the check succeeds then the button should now be green.  On
failure you will see the following message.</para>
<para>
<inlinemediaobject><imageobject><imagedata fileref="troubleshoot5.jpeg" width="150mm"
/></imageobject></inlinemediaobject>
</para>
<para>This means that something should be running in thread zero but it's not.  Typically
the #AUTO subroutine will be running an empty loop in thread zero to trigger trip points
in the controller software. </para>
</sect1>
<sect1>
<title>Final status display</title>
<para>After completing all the tests for this example you will see the following display. 
This means that controller one is missing one or more subroutines, the connection failed
on controller two, one or more required threads are not running on controller three, and
all the tests succeeded on controller four.</para>
<para>
<inlinemediaobject><imageobject><imagedata fileref="troubleshoot6.jpeg"
/></imageobject></inlinemediaobject>
</para>
</sect1>
<sect1>
<title>Using sicsclient for troubleshoot</title>
<para>The <command>sicsclient</command> command line can be used for troubleshooting motors.</para>
<para> There can be circumstances when a third party, such as the handle-held wireless Galil
controller, or a terminal client is used to control motors. In these cases, the values
in SICS can be out of sync with those on the controller. The Galil controller can be
interrogated using <command>send</command>. </para>
<para>
<replaceable>mot1</replaceable>
<command>send </command>
<replaceable>"MG _SP`"</replaceable>
</para>
<para>In this example, the controller and axis of motor <replaceable>mot1</replaceable> will
the sent a command which will return the speed <replaceable>_SP</replaceable> of the
motor. Note that a substitution is made in SICS of the controller and axis using the
backtick character `</para>
<para>The values from the controller can be compared manually with the values from SICS </para>
<para><replaceable>mot1</replaceable>
<command>list</command></para>
</sect1>
</chapter>

View File

@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Beamstops</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-12-15 </date>
</info>
<sect1>
<title>Commands</title>
<para>Raising and lowering of beamstops is implemented via the <command>selbs</command> 
command.</para>
<para><command>selbs</command> raises the selected beamstop in a safe manner. It will leave
the previously selected beamstop in place until the selected stop is fully raised and
then lower the other beamstop. </para>
<para><emphasis>If you are changing the <option>x z </option>coordinates there is no safe
sequence. You should set maximum attenuation or close the fast shutter before moving
the beamstops.</emphasis></para>
<para>You can monitor the beamstop position via GumTree as it is being raised, and you can
also see the state by reading angles. </para>
<para>The odd and even numbered beamstops are on separate parallel axes which are
horizontally offset by about 10cm. This means that beamstops must be raised to an angle
which is a few degrees of vertical so that the odd and even beamstops will overlap, you
will see that the odd numbered stops will be at roughly 93 degrees and the even numbered
ones will be at 86 degrees to vertical when raised.</para>
<variablelist>
<varlistentry>
<term><command>selbs </command><replaceable>n </replaceable><replaceable>x
z</replaceable></term>
<listitem>
<para>Allowed <replaceable>n</replaceable>
<option>1,2,3,4,5,6</option> where </para>
<para>1 = largest beamstop </para>
<para>6 = smallest beamstop</para>
<para><option>x</option> = beam x position in detector coordinates</para>
<para><option>z</option> = beam z position in detector coordinates</para>
<para>The beam position (x,z) is optional</para>
<note>
<para>This is a blocking command. You will not be able to run other commands
in the session running <command>selbs</command> until it has
finished.</para>
</note>
</listitem>
</varlistentry>
</variablelist>
<example>
<title>selbs example</title>
<para><command>selbs 1 487.7 490</command></para>
<para>Select beamstop one and position it over the middle of the detector.</para>
<para><command>selbs 2</command></para>
<para>Leave the beamstop carriage in place and select beamstop two.</para>
</example>
</sect1>
<sect1>
<title>Parameters</title>
<variablelist>
<varlistentry>
<term><varname>beamstop</varname></term>
<listitem>
<para><command>selbs</command> also sets a variable called
<varname>beamstop</varname> and saves it in the data file.</para>
<para>Possible values for <varname>beamstop</varname></para>
<para><option>0</option>
<command>selbs</command> has never been run or the sics status.tcl file has
been cleared</para>
<para><option>-1</option>
<command>selbs</command> failed while driving the beamstops</para>
<para><replaceable>n</replaceable>
<command>selbs</command> completed driving successfully and has selected
beamstop <replaceable>n</replaceable></para>
<para>The value of the "beamstop" variable persists between restarts of SICS.</para>
<warning>
<para>If someone drives the beamstops directly then the
<varname>beamstop</varname> variable may be wrong</para>
</warning>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Troubleshooting</title>
<para>Beamstop position can be checked visually (by eyes) from the vessel port with touch. 
To do this,  you should drive the detector to position 9300mm, and view from the middle
vessel port.</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Ordela Detector Voltage Control</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-08-29 16:47</date>
</info>
<sect1>
<title>Commands</title>
<para>The High Voltage controller for the Ordela detector has been implemented as a standard
SICS environment controller object with a driveable interface. It has been configured
differently to other SICS objects in several ways. Firstly, you use
<command>up</command> and <command>down</command> commands to drive the voltage to its
<command>upper</command> and <command>lower</command> limits. This is a blocking
task i.e. no other task can started until this is complete. Secondly, the instrument has
been configured with the SICS anticollider to prevent you from moving the detector when
the voltage is above a certain threshold, which will lead to damage of the detector.
This is important for Quokka as the detector is moved frequently. </para>
<variablelist>
<varlistentry>
<term><command>dhv1 up</command></term>
<listitem>
<para>Raise the voltage</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 down</command></term>
<listitem>
<para>Lower the voltage</para>
<note>
<para>NOTE This command blocks until the power supply reaches the "upper" or
"lower" running voltages, see below.</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><command>INT1712 1</command></term>
<listitem>
<para>If this commands hang SICS you can interrupt it with by entering this at
the SICS command line, or by pressing the interrupt button at the bottom of
GumTree</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 reset</command></term>
<listitem>
<para>Reset the controller </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 list</command></term>
<listitem>
<para>Displays the values of the various parameters</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 send </command><replaceable>command</replaceable></term>
<listitem>
<para>Sends a <replaceable>command</replaceable> to the unit and displays the
response</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 off </command></term>
<listitem>
<para>Drives the output voltage to zero</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Parameters</title>
<variablelist>
<varlistentry>
<term><command>dhv1 upper </command><replaceable>voltage</replaceable></term>
<listitem>
<para>Sets the running voltage for the <command>up</command> command. This would
normally be the operating voltage for the equipment to which the power
supply is connected.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 lower </command><replaceable>voltage</replaceable></term>
<listitem>
<para>Sets the standby voltage for the <command>down</command> command. This
would normally be the standby voltage for the equipment to which the power
supply is connected.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 max </command><replaceable>voltage</replaceable></term>
<listitem>
<para>Sets the hardware maximum for the power supply. For the Ordela power
supplies, it is important that this is the correct full-scale value of the
power supply itself. This is used to convert between the voltage step and
voltages and to calculate the step period from the voltage slew rate.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 rate </command><replaceable>voltage</replaceable></term>
<listitem>
<para>The volts per second at which the power supply slews between voltages. For
the Ordela power supplies, this is used to calculate the time between
voltage steps based on the <option>max</option> parameter</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 debug </command><replaceable>val</replaceable></term>
<listitem>
<para>Allowed <replaceable>val</replaceable></para>
<para><option>0</option> No debug information in log</para>
<para><option>1</option> Debug information in log</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 lock </command></term>
<listitem>
<para>This locks the device from being set by users. Users can use <command>up
down</command> and <command>off</command> commands to set
voltages</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dhv1 unlock </command></term>
<listitem>
<para>Managers may unlock the device</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,896 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Control, interrupt and system commands</title><author>
<personname>Mark Koennecke</personname>
</author>
<date/>
<bibliosource>
</bibliosource>
</info>
<sect1>
<info>
<bibliosource> from The SICS Master User manual. userrefman. converted to tex using
html2tex (from Mark Koennecke) converted to docbook4using htlatex converted to
docbook5 using the transform available in Oxygen hand edited to remove lint and put
into</bibliosource>
<title>Introduction</title></info>
<para>In the previous chapter, you learnt how to start and stop SICS, and how to login. Now
you'll learn how to control the instrument. </para>
<para>The first part of this chapter deals with some of the most used commands in SICS. This
includes system commands and control commands. This provides you with a soft start. </para>
<para>The second part of the chapter deals with logging activity and configuring your
connection to SICS.</para>
<para>The next chapter will go more deeply into the how SICS executes those commands,
through a sequence of states. You may want to skip the next chapter if you don't require
a deeper understanding of SICS.</para>
<para>This chapter and the next are from the master user manual for SICS. It gives an
overview over all commands implemented, independent of a specific instrument. This is to
be used as the source for more instrument specific user manuals and gives an overview of
the commands available within SICS. Please note, that many instruments have special
commands realized as scripts in the SICS built in scripting language. Only the most
common of such commands are listed here. </para>
</sect1>
<sect1>
<info>
<title>System Commands and Concepts</title>
</info>
<sect2>
<info>
<title>Authorisation</title>
</info>
<para>A client server system is potentially open to unauthorised hackers who might mess
up the instrument and your valuable measurements. A known problem in instrument
control is that less knowledgeable user accidentally change instrument parameters
which ought to be left fixed. In order to solve these two problems SICS supports
authorisation on a very fine level. As a user you have to specify a username and
password in order to able to access SICS. Some clients already do this for you
automatically. SICS support four levels of access to an instrument: </para>
<variablelist>
<title>Roles</title>
<varlistentry>
<term>Spy</term>
<listitem>
<para> may look at everything, request any value, but may not actually
change anything. No damage potential here. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>User</term>
<listitem>
<para> is privileged to perform a certain amount of operations necessary to
run the instrument. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>Manager</term>
<listitem>
<para> has the permission to mess with almost everything. A very dangerous
person. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>Internal</term>
<listitem>
<para> is not accessible to the outside world and is used to circumvent
protection for internal uses. However some parameters are considered to
be so critical that they cannot be changed during the runtime of the
SICS-server, not even by Managers.</para>
</listitem>
</varlistentry>
</variablelist>
<para> All this is stated here in order to explain the common error message: You are not
authorised to do that and that or something along these lines. </para>
<para>
</para>
</sect2>
<sect2>
<title>General Structure</title>
<para>SICS is a client server system. The application the user sees is usually some form
of client. A client has two tasks: the first is to collect user input and send it to
the SICS server which then executes the command. The clients second task is to
listen to the server messages and display them in a readable format. This approach
has two advantages: clients can reside on machines across the whole network thus
enabling remote control from everywhere in the world. The second advantage is that
new clients (such as graphical user interface clients) can be written in any
feasible language without changes to the server. </para>
<para>
</para>
</sect2>
<sect2>
<info>
<title>SICS Command Syntax </title>
</info>
<para>SICS is an object oriented system. This is reflected in the command syntax. SICS
objects can be devices such as motors, single counters, histogram memories or other
hardware variables such as wavelength or Title and measurement procedures.
Communication with these objects happens by sending messages to the target object.
This is very simply done by typing something like: object message par1 par2 .. parn.
For example, if we have a motor called A1: </para>
<programlisting>
A1 list
</programlisting>
<para>will print a parameter listing for the motor A1. In this example no parameters
were needed. There exist a number of one-word commands as well. For compatibility
reasons some commands have a form which resembles a function call such as: </para>
<programlisting>
drive a1 26.54
</programlisting>
<para>This will drive motor a1 to 26.54. All commands are ASCII-strings and usually in
english. SICS is in general CASE INSENSITIVE. However, this does not hold for
parameters you have to specify. On a unix system for instance file names are case
sensitive and that had to be preserved. Commands defined in the scripting language
are lower case by convention. </para>
<para> Most SICS objects also hold the parameters required for their proper operation.
The general syntax for handling such parameters is: </para>
<programlisting>
objectname parametername
</programlisting>
<para> prints the current value of the parameter </para>
<programlisting>
objectname parametername newvalue
</programlisting>
<para> sets the parameter value to newvalue if you are properly authorized. </para>
<para>
</para>
</sect2>
<sect2>
<info>
<title>SICS Variables</title>
</info>
<para>Most of the parameters SICS uses are hidden in the objects to which they belong.
But some are separate objects of their own right and are accessible at top level.
For instance things like Title or wavelength. They share a common syntax for
changing and requesting their values. This is very simple: The command objectname
will return the value, the command objectname newvalue will change the variable. But
only if the authorisation codes match. </para>
<para>
</para>
</sect2>
<sect2>
<title>Commonly Used SICS Commands</title>
<para>The most used commands in SICS are: </para>
<variablelist>
<varlistentry>
<term><command>status</command></term>
<listitem>
<para>Prints SICS state. Useful for troubleshooting.</para>
<para>Possible return values can be: </para>
<para><computeroutput>Eager to execute commands</computeroutput></para>
<para><computeroutput>Scanning</computeroutput></para>
<para><computeroutput>Counting</computeroutput></para>
<para><computeroutput>Running</computeroutput></para>
<para><computeroutput>Halted</computeroutput></para>
<para>Note that if a command is executing which takes some time to complete
the server will return an <computeroutput>ERROR: Busy </computeroutput>
message when further commands are issued.</para>
<para>This does not take into account the state of the PLC. See
<command>plc_ready</command>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>plc_ready</command></term>
<listitem>
<para>Prints the state of the PLC. Useful for troubleshooting.</para>
<para>If FALSE, you won't be able to open a shutter or move a motor. It
means that you should look at the PLC panel in the instrument cabin and
see what exactly is need to be attended to and fix it e.g. Enable
Motion. You can't access operations on this panel remotely. </para>
<para>Possible return values can be: </para>
<para><computeroutput>FALSE</computeroutput>Instrument not ready</para>
<para><computeroutput>TRUE</computeroutput>Instrument ready </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist interface drivable</command>
</term>
<listitem>
<para>prints a list of all drivable objects. This is more than motors and
includes virtual motors, sample environment devices and wavelength
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>run</command>
<replaceable>device value</replaceable></term>
<listitem>
<para><command>run</command> a <replaceable>device</replaceable> to a
<replaceable>value</replaceable></para>
<para>runs any object listed using <command>sicslist interface
drivable</command> in non-blocking/asynchronous mode </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>drive</command>
<replaceable>device value</replaceable></term>
<listitem>
<para><command>drive</command> a <replaceable>device</replaceable> to a
<replaceable>value</replaceable></para>
<para>drives any object listed using <command>sicslist interface
drivable</command> in blocking/synchronous mode </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>stopexe</command>
<replaceable>device</replaceable></term>
<listitem>
<para>interrupts a <command>drive</command> or <command>run</command>
command. In the case of motors, the motor will decelerate. It won't stop
immediately, as this can cause damage to the instrument </para>
<warning>
<para>This will not interrupt a scan e.g. <command>runscan</command>. </para>
<para>SICS will continue to accept commands from a client</para>
</warning>
</listitem>
</varlistentry>
<varlistentry>
<term><command>stopexe all</command></term>
<listitem>
<para>interrupts all devices. In the case of motors, the motor will
decelerate. It won't stop immediately, as this can cause damage to the
instrument </para>
<warning>
<para>This will not interrupt a scan e.g. <command>runscan</command>. </para>
<para>SICS will continue to accept commands from a client</para>
</warning>
</listitem>
</varlistentry>
</variablelist>
<para>
<command>runscan </command>
<replaceable>scanvar start stop numpoints mode preset [force datatype
savetype]</replaceable></para>
<para>Arguments must be in the order described. See more detail in the "Simple Scans"
chapter.</para>
<variablelist>
<varlistentry>
<term>
<replaceable>scanvar</replaceable>
</term>
<listitem>
<para>a drivable device, ie a motor or temperature controller etc</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>start</replaceable>
</term>
<listitem>
<para>the start position for the scan variable</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>stop</replaceable>
</term>
<listitem>
<para>the stop position for the scan variable</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>numpoints</replaceable>
</term>
<listitem>
<para>the number of scan points (the start and stop positions will be
included in the scan)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mode</replaceable>
</term>
<listitem>
<para>Allowed <replaceable>mode </replaceable>one of:</para>
<para>
<command>time</command>
</para>
<para>
<command>unlimited</command>
</para>
<para>
<command>period</command>
</para>
<para>
<command>count</command>
</para>
<para>
<command>frame</command>
</para>
<para><command>MONITOR_n</command> (where n=1,2,3 ...)</para>
<para>If you set the mode to MONITOR_1 then the histogram server will stop
when MONITOR_1 reaches the preset number of counts which has been set
with the following <replaceable>preset</replaceable> parameter</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>preset</replaceable>
</term>
<listitem>
<para>the acquisition duration at each scan point, this is in second if the
mode is time, or counts if the mode is count or MONITOR_n</para>
</listitem>
</varlistentry>
</variablelist>
<variablelist>
<varlistentry>
<term><command>INT1712 3</command></term>
<listitem>
<para>interrupts a <command>runscan</command> command. In the case of
motors, the motor will decelerate. It won't stop immediately, as this
can cause damage to the instrument </para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<info>
<title>SICS System Commands</title>
</info>
<variablelist>
<varlistentry>
<term>
<command>sics_exitus</command></term>
<listitem>
<para>A single word commands which shuts the server down. Only managers may
use this command. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>wait time</command></term>
<listitem>
<para>waits time seconds before the next command is executed. This does not
stop other clients from issuing commands. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>resetserver</command></term>
<listitem>
<para>resets the server after an interrupt. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist</command></term>
<listitem>
<para>Prints a list of all SICS objects. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist server</command></term>
<listitem>
<para>Prints a list of all server options.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist </command><replaceable>sicsobject</replaceable></term>
<listitem>
<para>Prints all the metadata associated with the SICS object
<replaceable>sicsobject</replaceable>. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist </command><replaceable>sicsobject key</replaceable></term>
<listitem>
<para>Prints the value of the <replaceable>key</replaceable> associated with
the SICS object <replaceable>sicsobject</replaceable>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist setatt </command><replaceable>sicsobject key
value</replaceable></term>
<listitem>
<para>Sets a user defined attribute with the name
<replaceable>key</replaceable> and the value
<replaceable>value</replaceable> for the SICS object
<replaceable>sicsobject</replaceable>. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist </command><replaceable>metadatakey</replaceable></term>
<listitem>
<para>List all unique entries for the specified metadata key. </para>
<para>System supplied metadata keys are: </para>
<para><option>type</option> The object class</para>
<para><option>interface</option> The object interfaces implemented by SICS </para>
<para>e.g. <command>sicslist type</command> will print all the objects
classes available in the SICS server</para>
<para>This list may be augmented with user generated keys as defined through
using the <command>sicslist setatt obj key value</command>
command</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist </command><replaceable>metadatakey value</replaceable>
</term>
<listitem>
<para>List all the SICS objects which match the value for the
<replaceable>metadatakey</replaceable> given as parameters. </para>
<para>e.g. <command>sicslist interface drivable </command> will print all
objects implementing the drivable interface in the SICS server.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist objstatus</command>
<replaceable>obj</replaceable>
</term>
<listitem>
<para>Will query the current state of the SICS object
<replaceable>obj</replaceable>. This makes sense for things like motors,
counter etc. which can be run asynchronously. The result can be:</para>
<para><computeroutput>idle, fault, busy </computeroutput>etc. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicslist match </command><replaceable>mask</replaceable>
</term>
<listitem>
<para>Will print the names of all SICS objects where the name matches the
wildcard given as <replaceable>mask</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>status</command></term>
<listitem>
<para>A single word command which makes SICS print its current status.</para>
<para>Possible return values can be: </para>
<para><computeroutput>Eager to execute commands</computeroutput></para>
<para><computeroutput>Scanning</computeroutput></para>
<para><computeroutput>Counting</computeroutput></para>
<para><computeroutput>Running</computeroutput></para>
<para><computeroutput>Halted</computeroutput></para>
<para>Note that if a command is executing which takes some time to complete
the server will return an <computeroutput>ERROR: Busy </computeroutput>
message when further commands are issued. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>status interest</command></term>
<listitem>
<para>initiates automatic printing of any status change in the server. This
command is primarily of interest for status display client implementors.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>backup</command></term>
<listitem>
<para>saves the current values of SICS variables and selected motor and
device parameters to the disk file specified as parameter. If no file
parameter is given the data is written to the system default status
backup file. The format of the file is a list of SICS commands to set
all these parameters again. The file is written on the instrument
computer relative to the path of the SICS server. This is usually
/home/INSTRUMENT/bin. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>backup motsave</command></term>
<listitem>
<para>toggles a flag which controls saving of motor positions. If this flag is
set, commands for driving motors to the current positions are included
in the backup file. This is useful for instruments with slipping motors.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>restore</command></term>
<listitem>
<para>reads a file produced by the backup command described above and
restores SICS to the state it was in when the status was saved with
backup. If no file argument is given the system default file gets read.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>restore listerr</command></term>
<listitem>
<para>prints the list of lines which caused errors during the last restore.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>killfile</command></term>
<listitem>
<para>decrements the data number used for SICS file writing and thus
consequently overwrites the last datafile. This is useful when useless
data files have been created during tests. As this is critical command
in normal user operations, this command requires managers privilege.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sicsidle</command></term>
<listitem>
<para>prints the number of seconds since the last invocation of a counting
or driving operation. Used in scripts. </para>
</listitem>
</varlistentry>
</variablelist>
<para>
</para>
</sect2>
<sect2>
<title>Deprecated commands</title>
<para>
<variablelist>
<varlistentry>
<term><command>dir</command></term>
<listitem>
<para><emphasis role="bold">DEPRECATED: use sicslist</emphasis> a
command which lists objects available in the SICS system. Without
any options prints a list of all objects. The list can be restricted
with: </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>dir var</command>
</term>
<listitem>
<para><emphasis role="bold">DEPRECATED: use sicslist</emphasis>prints
all SICS primitive variables </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dir mot</command>
</term>
<listitem>
<para><emphasis role="bold">DEPRECATED: use sicslist</emphasis>prints a
list of all motors </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dir inter driv</command></term>
<listitem>
<para><emphasis role="bold">DEPRECATED: use sicslist</emphasis>prints a
list of all drivable objects. This is more than motors and includes
virtual motors such as environment devices and wavelength as well.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dir inter count</command></term>
<listitem>
<para><emphasis role="bold">DEPRECATED: use sicslist</emphasis>Shows
everything which can be counted upon. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dir inter env</command></term>
<listitem>
<para><emphasis role="bold">DEPRECATED: use sicslist</emphasis>Shows all
currently configured environment devices. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dir match </command><replaceable>wildcard</replaceable>
</term>
<listitem>
<para><emphasis role="bold">DEPRECATED: use sicslist</emphasis>lists all
objects which match the wildcard string given in wildcard -
<emphasis role="bold">doesn't work</emphasis></para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
</sect1>
<sect1>
<info>
<title>Logging your activity</title>
</info>
<para> SICS offers not less then three different ways of logging your commands and the SICS
servers responses </para>
<itemizedlist>
<listitem>
<para>You may create a similar per client log file on the computer running the SICS
server through the <command>logbook</command> command. </para>
</listitem>
<listitem>
<para>Then there is a way to log all activity registered from users with either user
or manager privilege into a file. This means all commands which affect the
experiment regardless from which client they have been issued. This is
accomplished with the <command>commandlog</command> command.</para>
</listitem>
<listitem>
<para> the <command>GetLog</command> command receives messages from all active
clients. This allows you to view all events on your connection, and is intended
for debugging.</para>
</listitem>
</itemizedlist>
<sect2>
<info>
<title>LogBook command</title>
</info>
<para> Some users like to have all the input typed to SICS and responses collected in a
file for further review. This is implemented via the <command>LogBook</command>
command. <command>LogBook</command> is actually a wrapper around the config file
command. <command>LogBook</command> understands the following syntax: </para>
<variablelist>
<varlistentry>
<term>
<command>LogBook</command>
</term>
<listitem>
<para>alone prints the name of the current logfile and the status of event
logging. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>LogBook file</command>
<replaceable>filename</replaceable>
</term>
<listitem>
<para>sets the filename to which output will be printed. Please note that
this new filename will only be in effect after restarting logging.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>LogBook on</command></term>
<listitem>
<para>This command turns logging on. All commands and all answers will be
written to the file defined with the command described above. Please
note, that this command will overwrite an existing file with the same
name. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>LogBook off</command>
</term>
<listitem>
<para>This command closes the logfile and ends logging.</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<info>
<title>The Commandlog</title>
</info>
<para> The Commandlog is a file where all communication with clients having user or
manager privilege is logged. This log allows to retrace each step of an experiment.
This log is normally configured in the startup file or can be configured by the
instrument manager. There exists a special command, <command>Commandlog</command>,
which allows to control this log file. </para>
<variablelist>
<varlistentry>
<term>
<command>Commandlog new</command>
<replaceable>filename</replaceable>
</term>
<listitem>
<para>starts a new commandlog writing to
<replaceable>filename</replaceable>. Any prior files will be closed. The
log file can be found in the directory specified by the ServerOption
LogFileDir. Usually this is the log directory. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>Commandlog</command>
</term>
<listitem>
<para>displays the status of the commandlog. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>Commandlog close</command>
</term>
<listitem>
<para>closes the commandlog file. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>Commandlog auto</command>
</term>
<listitem>
<para>Switches automatic log file creation on. This is normally switched on.
Log files are written to the log directory of the instrument account.
There are time stamps any hour in that file and there is a new file any
24 hours. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>Commandlog tail</command>
<replaceable>n</replaceable>
</term>
<listitem>
<para>prints the last <replaceable>n</replaceable> entries made into the
command log. n is optional and defaults to 20. Up to 1000 lines are held
in an internal buffer for this command. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>Commandlog intervall</command>
<replaceable>minutes</replaceable>
</term>
<listitem>
<para>Queries and configures the intervall in
<replaceable>minutes</replaceable> at which time stamps are written to
the commandlog.</para>
</listitem>
</varlistentry>
</variablelist>
<para> It is now possible to have a script executed whenever a new log file is started.
In order to make this work a ServerOption with the name logstartfile must exist in
the instrument configuration file. The value of this option must be the full path
name of the file to execute. </para>
<para> Note: with the command <command>config listen 1</command> you can have the output
to the command log printed into your client, too. With <command>config listen
0</command> you can switch this off again. This is useful for listening into a
running instrument. </para>
<para>
</para>
</sect2>
<sect2>
<title>GetLog Command</title>
<para> The SICS server logs all its activities to a logfile, regardless of what the user
requested. This logfile is mainly intended to help in server debugging. However,
clients may register an interest in certain server events and can have them
displayed. This facility is accessed via the <command>GetLog</command> command. It
needs to be stressed that this log receives messages from all active clients.
<command>GetLog</command> understands the following messages: </para>
<variablelist>
<varlistentry>
<term>
<command>GetLog All</command></term>
<listitem>
<para> achieves that all output to the server logfile is also written to the
client which issued this command. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>GetLog Kill</command></term>
<listitem>
<para>stops all logging output to the client.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>GetLog OutCode</command></term>
<listitem>
<para>request that only certain events will be logged to the client issuing
this command. Enables only the level specified. Multiple calls are
possible.</para>
<para> Possible values for <command>OutCode</command> are: </para>
<para><computeroutput>Internal</computeroutput> internal errors such as
memory errors etc.</para>
<para><computeroutput>Command</computeroutput> all commands issued from any
client to the server. </para>
<para><computeroutput>HWError</computeroutput> all errors generated by
instrument hardware. The SICS server tries hard to fix HW errors in
order to achieve stable operations and may not generate an error message
if it was able to fix the problem. This option may be very helpful when
tracking dodgy devices. </para>
<para><computeroutput>InError</computeroutput> All input errors found on any
clients input. </para>
<para><computeroutput>Error</computeroutput> All error messages generated by
all clients. </para>
<para><computeroutput>Status</computeroutput> some commands send status
messages to the client invoking the command in order to monitor the
state of a scan. </para>
<para><computeroutput>Value</computeroutput> Some commands return requested
values to a user. These messages have an output code of Value.</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1>
<info>
<title>Connection Configuration Commands</title>
</info>
<para> SICS has a command for changing the user rights of the current client server
connection, control the amount of output a client receives and to specify additional
logfiles where output will be placed. All this is accessed through the following
commands: </para>
<sect2>
<title>Config command</title>
<para> The <command>config</command> command configures various aspects of the current
client server connection. Basically three things can be manipulated: The connections
output class, the user rights associated with it, and output files. </para>
<variablelist>
<varlistentry>
<term><command>config OutCode </command><replaceable>val</replaceable></term>
<listitem>
<para>sets the output code for the connection. By default all output is sent
to the client. But a graphical user interface client might want to
restrict message to only those delivering requested values and error
messages and suppressing anything else. In order to achieve this, this
command is provided. </para>
<para>Possible values: Values for <replaceable>val</replaceable> are</para>
<para><option>Internal</option></para>
<para><option>Command</option></para>
<para><option>HWError</option></para>
<para><option>InError</option></para>
<para><option>Status</option></para>
<para><option>Error</option></para>
<para><option>Value</option></para>
<para>This list is hierarchical. For example specifying
<option>InError</option> for <replaceable>val</replaceable> lets the
client receive all messages tagged <option>InError, Status,
Error</option> and <option>Value</option>, but not <option>HWError,
Command</option> and <option>Internal</option> messages. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>config Rights</command>
<replaceable>Username Password</replaceable></term>
<listitem>
<para>Each connection between a client and the SICS server has user rights
assocociated with it. These user rights can be configured at runtime
with the command <command>config Rights </command>
<replaceable>Username Password</replaceable>. If a matching entry can be
found in the servers password database new rights will be set. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>config File</command>
<replaceable>name</replaceable></term>
<listitem>
<para>Scientists are not content with having output on the screen. In order
to check results a log of all output may be required. The command
<command>config File</command>
<replaceable>name</replaceable> makes all output to the client to be
written to the file specified by <replaceable>name</replaceable> as
well. The file must be a file accessible to the server, i.e. reside on
the same machine as the server. Up to 10 logfiles can be specified.
Note, that a directly connected line printer is only a special filename
in unix. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>config close</command>
<replaceable>num</replaceable>
</term>
<listitem>
<para>closes the log file denoted by num again. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>config list</command>
</term>
<listitem>
<para>lists the currently active values for outcode and user rights. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>config myname</command>
</term>
<listitem>
<para>returns the name of the connection. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>config myrights</command>
</term>
<listitem>
<para>prints the rights associated with your connection. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>config listen</command>
<replaceable>val</replaceable></term>
<listitem>
<para>switches listening to the commandlog on or off for this conenction. If
this on, all output to the commandlog, i.e. all interesting things
happening in SICS, is printed to your connection as well.</para>
<para><replaceable>val</replaceable> = <option>0</option> is off</para>
<para><replaceable>val</replaceable> = <option>1</option> is on</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
</chapter>

View File

@@ -0,0 +1,672 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><bibliosource> The SICS programmers guide. overview.tex converted to docbook using
htlatex. SINQ specific content removed</bibliosource>
<title>SICS Overview</title></info>
<sect1>
<title>Introduction</title>
<para>SICS, the SINQ Instrument Control System, meets the following specifications: </para>
<itemizedlist>
<listitem>
<!--l. 11-->
<para>Control the instrument reliably. </para>
</listitem>
<listitem>
<!--l. 12-->
<para>Good remote access to the instrument via the internet. </para>
</listitem>
<listitem>
<!--l. 13-->
<para>Portability across operating system platforms. </para>
</listitem>
<listitem>
<!--l. 14-->
<para>Enhanced portability across instrument hardware. This means that it should
be easy to add other types of motors, counters or other hardware to the
system. </para>
</listitem>
<listitem>
<!--l. 17-->
<para>Support authorization on the command and parameter modification level.
This means that certain instrument settings can be protected against random
changes by less knowledgeable users. </para>
</listitem>
<listitem>
<!--l. 21-->
<para>Good maintainability and extendability. </para>
</listitem>
<listitem>
<!--l. 22-->
<para>Be capable to accommodate graphical user interfaces. </para>
</listitem>
<listitem>
<!--l. 23-->
<para>One code base for all instruments. </para>
</listitem>
<listitem>
<!--l. 24-->
<para>Powerful macro language.</para>
</listitem>
</itemizedlist>
<para>A suitable new system was implemented using an object oriented design which
matches the above criteria. </para>
</sect1>
<sect1>
<title>SICS Overall Design</title>
<para>In order to achieve the design goals stated above it was decided to divide the
system into a client server system. This means that there are at least two programs
necessary to run an instrument: a client program and a server program. The server
program, the SICS server, does all the work and implements the actual instrument
control. The SICS server usually runs on the ics (instrument control server)
computer. The client program may run on any computer on the world and implements the
user interface to the instrument. Any numbers of clients can communicate with one
SICS server. The SICS server and the clients communicate via a simple ASCII command
protocol through TCP/IP sockets. With this design good remote control through the
network is easily achieved. As clients can be implemented in any language or system
capable of handling TCP/IP the user interface and the functional aspect are well
separated. This allows for easy exchange of user interfaces by writing new clients.
</para>
</sect1>
<sect1>
<title>SICS Clients</title>
<para>SICS Clients implement the SICS user interface. The Gumtree client is implemented
in Java for platform independence. This is a real concern where MS Windows,
Macintosh and Unix users have to be satisfied. As many instrument scientists still
prefer the command line for interacting with instruments, the most used client is a
visual command line client. Status displays are another kind of specialized client
programs. </para>
</sect1>
<sect1>
<title>The SICS Server</title>
<para>The SICS server is the core component of the SICS system. The SICS server is
responsible for doing all the work in instrument control. Additionally the server
has to answer the requests of possibly multiple clients. The SICS server can be
subdivided into three subsystems: </para>
<variablelist>
<varlistentry>
<term> The kernel </term>
<listitem>
<!--l. 102-->
<para>The SICS server kernel takes care of client multitasking and the
preservation of the proper I/O and error context for each client command
executing. </para>
</listitem>
</varlistentry>
<varlistentry>
<term> SICS Object Database </term>
<listitem>
<!--l. 105-->
<para>SICS objects are software modules which represent all aspects of an
instrument: hardware devices, commands, measurement strategies and data
storage. This database of objects is initialized at server startup time
from an initialization script. </para>
</listitem>
</varlistentry>
<varlistentry>
<term> The Interpreter </term>
<listitem>
<!--l. 109-->
<para>The interpreter allows to issue commands to the objects in the objects
database.</para>
</listitem>
</varlistentry>
</variablelist>
<figure>
<title>Schematic Representation of the SICS server structure </title>
<mediaobject>
<imageobject><imagedata align="center" width="150mm"
fileref="newsics.gif"/></imageobject>
</mediaobject>
</figure>
</sect1>
<sect1>
<title>The SICS Server Kernel</title>
<para>In more detail the SICS server kernel has the following tasks: </para>
<itemizedlist>
<listitem>
<!--l. 125-->
<para>Accept and verify client connection requests. </para>
</listitem>
<listitem>
<!--l. 126-->
<para>Read and execute client commands. </para>
</listitem>
<listitem>
<!--l. 127-->
<para>Maintain the I/O and error context for each client connection. </para>
</listitem>
<listitem>
<!--l. 128-->
<para>Serialize data access. </para>
</listitem>
<listitem>
<!--l. 129-->
<para>Serialize hardware access. </para>
</listitem>
<listitem>
<!--l. 130-->
<para>Monitor HW operations. </para>
</listitem>
<listitem>
<!--l. 131-->
<para>Monitor environment devices.</para>
</listitem>
</itemizedlist>
<para>Any program serving multiple clients has the problem how to organize multiple
clients accessing the same server and how to prevent one client from reading data,
while another client is writing. The approach used for the SICS server is a
combination of polling and cooperative multitasking. This scheme is simple and can
be implemented in an operating system independent manner. One way to look at the
SICS server is as a series of tasks in a circular queue executing one after another.
The servers main loop does nothing but executing the tasks in this circular buffer
in an endless loop. There are several system tasks and one such task for each living
client connection. Thus only one task executes at any given time and data access is
efficiently serialized. </para>
<para>One of the main system tasks, and the one which will be always there, is the
network reader. The network reader has a list of open network connections and checks
each of them for pending requests. What happens when data is pending on an open
network port depends on the type of port: If it is the servers main connection port,
the network reader will try to accept and verify a new client connection and create
the associated data structures. If the port belongs to an open client connection the
network reader will read the command pending and put it onto a command stack
existing for each client connection. When it is time for a client task to execute,
it will fetch a command from its very own command stack and execute it. This is how
the SICS server deals with client requests. </para>
<para>The scheme described above relies on the fact that most SICS command need only
very little time to execute. A command needing time extensive calculations may
effectively block the server. Implementations of such commands have to take care
that control passes back to the task switching loop at regular intervals in order to
prevent the server from blocking. </para>
<para>Another problem in a server handling multiple client requests is how to maintain
the proper execution context for each client. This includes the clients I/O-context
(socket), the authorisation of the client and possible error conditions pending for
a client connection. SICS does this via a connection object, a special data
structure holding all the above information plus a set of functions operating on
this data structure. This connection object is passed along with many calls
throughout the whole system. </para>
<para>Multiple clients issuing commands to the SICS server may mean that multiple
clients might try to move motors or access other hardware in conflicting ways. As
there is only one set of instrument hardware this needs to be prevented. This is
achieved by a convention. No SICS object drives hardware directly but registers it's
request with a special object, the device executor. This device executor starts the
requested operation and reserves the hardware for the length of the operation.
During the execution of such an hardware request all other clients requests to drive
the hardware will return an error. The device executor is also responsible for
monitoring the progress of an hardware operation. It does so by adding a special
task into the system which checks the status of the operation each time this tasks
executes. When the hardware operation is finished this device executor task will
end. A special system facility allows a client task to wait for the device executor
task to end while the rest of the task queue is still executing. In this way time
intensive hardware operations can be performed by drive, count or scan commands
without blocking the whole system for other clients. </para>
<para>The SICS server can be configured to support another security feature, the token
system. In this scheme a client can grab control of the instrument. With the control
token grabbed, only the client which has the token may control the instrument. Any
other client may look at things in the SICS server but does not have permission to
change anything. Passing the control token requires that the client which has the
token releases the token so that another client may grab it. There exists a password
protected back door for SICS managers which allows to force the release of a control
token. </para>
<para>Most experiments do not happen at ambient room conditions but require some special
environment for the sample. Mostly this is temperature but it can also be magnetic
of electric fields etc. Most of such devices can regulate themselves but the data
acquisition program needs to monitor such devices. Within SICS, this is done via a
special system object, the environment monitor. A environment device, for example a
temperature controller, registers it's presence with this object. Then a special
system task will control this device when it is executing, check for possible out of
range errors and initiates the proper error handling if such a problem is
encountered. </para>
<para>
</para>
</sect1>
<sect1>
<title>The SICS Interpreter</title>
<para>When a task belonging to a client connection executes a command it will pass the
command along with the connection object to the SICS interpreter. The SICS
interpreter will then analyze the command and forward it to the appropriate SICS
object in the object database for further action. The SICS interpreter is very much
modeled after the Tcl interpreter as devised by John Ousterhout</para>
<para> For each SICS object visible from the interpreter there is a wrapper function.
Using the first word of the command as a key, the interpreter will locate the
objects wrapper function. If such a function is found it is passed the command
parameters, the interpreter object and the connection object for further processing.
An interface exists to add and remove commands to this interpreter very easily. Thus
the actual command list can be configured easily to match the instrument in
question, sometimes even at run time. Given the closeness of the design of the SICS
interpreter to the Tcl interpreter, the reader may not be surprised to learn that
the SICS server incorporates Tcl as its internal macro language. The internal macro
language may use Tcl commands as well as SICS commands. </para>
<para>
</para>
</sect1>
<sect1>
<title>SICS Objects</title>
<para>As already said, SICS objects implement the true functionality of SICS instrument
control. All hardware, all commands and procedures, all data handling strategies are
implemented as SICS objects. Hardware objects, for instance motors deserve some
special attention. Such objects are divided into two objects in the SICS system: A
logical hardware object and a driver object. The logical object is responsible for
implementing all the nuts and bolts of the hardware device, whereas the driver
defines a set of primitive operations on the device. The benefit of this scheme is
twofold: switching to new hardware, for instance a new type of motor, just requires
to incorporate a new driver into the system. Internally, independent from the actual
hardware, all hardware object of the same type, for example motors look the same and
can be treated the same by higher level objects. No need to rewrite a scan command
because a motor changed. </para>
<para>In order to live happily within the SICS system SICS object have to adhere to a
system of protocols. There are protocols for: </para>
<itemizedlist>
<listitem>
<!--l. 247-->
<para>Input/Output to the client. </para>
</listitem>
<listitem>
<!--l. 248-->
<para>Error handling. </para>
</listitem>
<listitem>
<!--l. 249-->
<para>Interaction with the interpreter. </para>
</listitem>
<listitem>
<!--l. 250-->
<para>For identification of the object to the system at run time. </para>
</listitem>
<listitem>
<!--l. 251-->
<para>For interacting with hardware, see device executor above. </para>
</listitem>
<listitem>
<!--l. 252-->
<para>For checking the authorisation of the client who wants to execute the
command.</para>
</listitem>
</itemizedlist>
<para>SICS objects have the ability to notify clients and other objects of internal
state changes. For example when a motor is driven, the motor object can be
configured to tell SICS clients or other SICS objects about his new position. </para>
<para>SICS uses NeXus, the upcoming standard for data exchange for neutron and xray
scattering as its raw data format. </para>
<para>
</para>
</sect1>
<sect1>
<title>SICS Working Examples</title>
<para>In order to get a better feeling for the internal working of SICS the course of a
few different requests through the SICS system is traced in this section. The
examples traced will be: </para>
<itemizedlist>
<listitem>
<!--l. 269-->
<para>A request for a new client connection. </para>
</listitem>
<listitem>
<!--l. 270-->
<para>A simple command. </para>
</listitem>
<listitem>
<!--l. 271-->
<para>A command to drive a motor in blocking mode. </para>
</listitem>
<listitem>
<!--l. 272-->
<para>A command to drive a motor which got interrupted by the user. </para>
</listitem>
<listitem>
<!--l. 273-->
<para>A command to drive a motor in non blocking mode.</para>
</listitem>
</itemizedlist>
<para>For the whole discussion it is assumed that the main loop is running, executing
cyclically each single task registered in the server. Task switching is done by a
special system component, the task switcher. </para>
<para>
</para>
<sect2>
<title>The Request for a new Client Connection</title>
<para>
</para>
<itemizedlist>
<listitem>
<!--l. 281-->
<para>The network reader recognizes pending data on its main server port.
</para>
</listitem>
<listitem>
<!--l. 282-->
<para>The network reader accepts the connection and tries to read an
username/password pair. </para>
</listitem>
<listitem>
<!--l. 284-->
<para>If such an username/password pair comes within a suitable time
interval it is checked for validity. On failure the connection is closed
again. </para>
</listitem>
<listitem>
<!--l. 287-->
<para>If a valid connection has been found: A new connection object is
created, a new task for this client connection is introduced into the
system and the network reader registers a new client port to check for
pending commands. </para>
</listitem>
<listitem>
<!--l. 291-->
<para>Control is passed back to the task switcher.</para>
</listitem>
</itemizedlist>
<para>
</para>
</sect2>
<sect2>
<title>A Simple Command</title>
<para>
</para>
<itemizedlist>
<listitem>
<!--l. 296-->
<para>The network reader finds data pending at one of the client ports.
</para>
</listitem>
<listitem>
<!--l. 297-->
<para>The network reader reads the command, splits it into single lines and
put those on top of the client connections command stack. The network
reader passes control to the task switcher. </para>
</listitem>
<listitem>
<!--l. 300-->
<para>In due time the client connection task executes, inspects its command
stack, pops the command pending and forwards it together with a pointer
to itself to the SICS interpreter. </para>
</listitem>
<listitem>
<!--l. 303-->
<para>The SICS interpreter inspects the first word of the command. Using
this key the interpreter finds the objects wrapper function and passes
control to that function. </para>
</listitem>
<listitem>
<!--l. 306-->
<para>The object wrapper function will check further arguments, checks the
clients authorisation if appropriate for the action requested. Depending
on the checks, the wrapper function will create an error message or do
its work. </para>
</listitem>
<listitem>
<!--l. 310-->
<para>This done, control passes back through the interpreter and the
connection task to the task switcher. </para>
</listitem>
<listitem>
<!--l. 312-->
<para>The next task executes.</para>
</listitem>
</itemizedlist>
<para>
</para>
</sect2>
<sect2>
<title>A "drive" Command in Blocking Mode</title>
<para>
</para>
<itemizedlist>
<listitem>
<!--l. 317-->
<para>The network reader finds data pending at one of the client ports.
</para>
</listitem>
<listitem>
<!--l. 318-->
<para>The network reader reads the command, splits it into single lines and
put those on the top of the client connections command stack. The
network reader passes control to the task switcher. </para>
</listitem>
<listitem>
<!--l. 321-->
<para>In due time the client connection task executes, inspects its command
stack, pops the command pending and forwards it together with a pointer
to itself to the SICS interpreter. </para>
</listitem>
<listitem>
<!--l. 324-->
<para>The SICS interpreter inspects the first word of the command. Using
this key the interpreter finds the drive command wrapper function and
passes control to that function. </para>
</listitem>
<listitem>
<!--l. 327-->
<para>The drive command wrapper function will check further arguments,
checks the clients authorisation if appropriate for the action
requested. Depending on the checks, the wrapper function will create an
error message or do its work. </para>
</listitem>
<listitem>
<!--l. 332-->
<para>Assuming everything is OK, the motor is located in the system. </para>
</listitem>
<listitem>
<!--l. 333-->
<para>The drive command wrapper function asks the device executor to run the
motor. </para>
</listitem>
<listitem>
<!--l. 335-->
<para>The device executor verifies that nobody else is driving, then starts
the motor and grabs hardware control. The device executor also starts a
task monitoring the activity of the motor. </para>
</listitem>
<listitem>
<!--l. 338-->
<para>The drive command wrapper function now enters a wait state. This means
the task switcher will execute other tasks, except the connection task
requesting the wait state. The client connection and task executing the
drive command will not be able to process further commands. </para>
</listitem>
<listitem>
<!--l. 342-->
<para>The device executor task will keep on monitoring the progress of the
motor driving whenever the task switcher allows it to execute. </para>
</listitem>
<listitem>
<!--l. 344-->
<para>In due time the device executor task will find that the motor finished
driving. The task will then finish executing. The clients grab of the
hardware driving permission will be released. </para>
</listitem>
<listitem>
<!--l. 347-->
<para>At this stage the drive command wrapper function will awake and
continue execution. This means inspecting errors and reporting to the
client how things worked out. </para>
</listitem>
<listitem>
<!--l. 350-->
<para>This done, control passes back through the interpreter and the
connection task to the task switcher. The client connection is free to
execute other commands. </para>
</listitem>
<listitem>
<!--l. 353-->
<para>The next task executes.</para>
</listitem>
</itemizedlist>
<para>
</para>
</sect2>
<sect2>
<title>A "drive" Command Interrupted</title>
<para>
</para>
<itemizedlist>
<listitem>
<!--l. 358-->
<para>The network reader finds data pending at one of the client ports.
</para>
</listitem>
<listitem>
<!--l. 359-->
<para>The network reader reads the command, splits it into single lines and
put those on the top of the client connections command stack. The
network reader passes control to the task switcher. </para>
</listitem>
<listitem>
<!--l. 362-->
<para>In due time the client connection task executes, inspects its command
stack, pops the command pending and forwards it together with a pointer
to itself to the SICS interpreter. </para>
</listitem>
<listitem>
<!--l. 365-->
<para>The SICS interpreter inspects the first word of the command. Using
this key the interpreter finds the drive command wrapper function and
passes control to that function. </para>
</listitem>
<listitem>
<!--l. 368-->
<para>The drive command wrapper function will check further arguments,
checks the clients authorisation if appropriate for the action
requested. Depending on the checks, the wrapper function will create an
error message or do its work. </para>
</listitem>
<listitem>
<!--l. 373-->
<para>Assuming everything is OK, the motor is located in the system. </para>
</listitem>
<listitem>
<!--l. 374-->
<para>The drive command wrapper function asks the device executor to run the
motor. </para>
</listitem>
<listitem>
<!--l. 376-->
<para>The device executor verifies that nobody else is driving, then starts
the motor and grabs hardware control. The device executor also starts a
task monitoring the activity of the motor. </para>
</listitem>
<listitem>
<!--l. 379-->
<para>The drive command wrapper function now enters a wait state. This means
the task switcher will execute other tasks, except the connection task
requesting the wait state. </para>
</listitem>
<listitem>
<!--l. 382-->
<para>The device executor task will keep on monitoring the progress of the
driving of the motor when it is its turn to execute. </para>
</listitem>
<listitem>
<!--l. 384-->
<para>The network reader finds a user interrupt pending. The interrupt will
be forwarded to all tasks in the system. </para>
</listitem>
<listitem>
<!--l. 386-->
<para>In due time the device executor task will try to check on the progress
of the motor. It will recognize the interrupt. If appropriate the motor
will get a halt command. The task will then die. The clients grab of the
hardware driving permission will be released. </para>
</listitem>
<listitem>
<!--l. 390-->
<para>At this stage the drive command wrapper function will awake and
continue execution. This means it finds the interrupt, tells the user
what he already knows: an interrupt was issued. </para>
</listitem>
<listitem>
<!--l. 393-->
<para>This done, control passes back through drive command wrapper, the
interpreter and the connection task to the task switcher. </para>
</listitem>
<listitem>
<!--l. 396-->
<para>The next task executes.</para>
</listitem>
</itemizedlist>
<para>
</para>
</sect2>
<sect2>
<title>A "run" Command in Non Blocking Mode</title>
<para>
</para>
<itemizedlist>
<listitem>
<!--l. 401-->
<para>The network reader finds data pending at one of the client ports.
</para>
</listitem>
<listitem>
<!--l. 402-->
<para>The network reader reads the command, splits it into single lines and
put those on the top of the client connections command stack. The
network reader passes control to the task switcher. </para>
</listitem>
<listitem>
<!--l. 405-->
<para>In due time the client connection task executes, inspects its command
stack, pops the command pending and forwards it together with a pointer
to itself to the SICS interpreter. </para>
</listitem>
<listitem>
<!--l. 408-->
<para>The SICS interpreter inspects the first word of the command. Using
this key the interpreter finds the drive command wrapper function and
passes control to that function. </para>
</listitem>
<listitem>
<!--l. 411-->
<para>The "run" command wrapper function will check further arguments,
checks the clients authorisation if appropriate for the action
requested. Depending on the checks, the wrapper function will create an
error message or do its work. </para>
</listitem>
<listitem>
<!--l. 416-->
<para>Assuming everything is OK, the motor is located in the system. </para>
</listitem>
<listitem>
<!--l. 417-->
<para>The "run" command wrapper function asks the device executor to run the
motor. </para>
</listitem>
<listitem>
<!--l. 419-->
<para>The device executor verifies that nobody else is driving, then starts
the motor and grabs hardware control. The device executor also starts a
task monitoring the activity of the motor. </para>
</listitem>
<listitem>
<!--l. 422-->
<para>The run command wrapper function passes control through the
interpreter and the clients task function back to the task switcher. The
client connection can handle new commands. </para>
</listitem>
<listitem>
<!--l. 425-->
<para>The device executor task will keep on monitoring the progress of the
motor driving whenever the task switcher allows it to execute. </para>
</listitem>
<listitem>
<!--l. 427-->
<para>In due time the device executor task will find that the motor finished
driving. The task will then die silently. The clients grab of the
hardware driving permission will be released. Any errors however, will
be reported.</para>
</listitem>
</itemizedlist>
<para>All this seems to be pretty complex and time consuming. But it is the
complexity needed to do so many things, especially the non blocking mode of
operation requested by users. Tests have shown that the task switcher manages
+900 cycles per second through the task list on a DigitalUnix machine and 500
cycles per second on a pentium 2GHz machine running linux. Both data were
obtained with software simulation of hardware devices. With real SINQ hardware
these numbers drop to as low as 4 cycles per second if the hardware is slow in
responding. This shows clearly that the communication with the hardware is the
systems bottleneck and not the task switching scheme. </para>
</sect2>
</sect1>
</chapter>

View File

@@ -0,0 +1,149 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Interrupting SICS</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2006-09-04 15:50</date>
<bibliosource>The SICS programmers guide. converted to docbook using htlatex. converted to
docbook5 by xslt in Oxygen. SINQ specific content removed</bibliosource>
</info>
<sect1>
<title>Safety</title>
<para>SICS is <emphasis role="bold">NOT</emphasis> a safety system! It will allow you to do
tasks that may damage persons and the instruments. </para>
<para>
</para>
<para><emphasis role="bold">DO</emphasis> use the <emphasis role="bold">STAR</emphasis>
principle. <emphasis role="bold">STOP. THINK. ACT. REVIEW</emphasis></para>
<para><emphasis role="bold">Familiarise</emphasis> yourself the location of the Emergency
Stop buttons located near the cabin exit, or in several places within the instrument
enclosure.</para>
<para><emphasis role="bold">Familiarise</emphasis> yourself with the instrument and its safe
operation. </para>
<para><emphasis role="bold">DO NOT</emphasis> do anything with SICS that may risk damage to
persons or the instrument. </para>
<para><emphasis role="bold">DO NOT</emphasis> rely on these commands to stop motors or close
shutters. If in any doubt, use the Emergency Stop button.</para>
<para>The commands in this chapter may fail for a variety of reasons. <itemizedlist>
<listitem>
<para>SICS has crashed</para>
</listitem>
<listitem>
<para>Your network connection to the SICS is blocked, due to network congestion
or failure</para>
</listitem>
<listitem>
<para>The motor controller is no longer accepting connections or has a rogue
process running</para>
</listitem>
</itemizedlist></para>
</sect1>
<sect1>
<title>stopexe command</title>
<para>The <command>stopexe</command> command will stop drivable objects. It will NOT stop
scans or batch files. For that you'll have to use an interrupt as found in the next
section.</para>
<para>
<variablelist>
<varlistentry>
<term><command>stopexe</command>
<replaceable>device</replaceable></term>
<listitem>
<para>interrupts a <command>drive</command> or <command>run</command>
command. In the case of motors, the motor will decelerate. It won't stop
immediately, as this can cause damage to the instrument </para>
<warning>
<para>This will not interrupt a scan e.g. <command>runscan</command>. </para>
<para>SICS will continue to accept commands from a client</para>
</warning>
</listitem>
</varlistentry>
<varlistentry>
<term><command>stopexe all</command></term>
<listitem>
<para>interrupts all devices. In the case of motors, the motor will
decelerate. It won't stop immediately, as this can cause damage to the
instrument </para>
<warning>
<para>This will not interrupt a scan e.g. <command>runscan</command>. </para>
<para>SICS will continue to accept commands from a client</para>
</warning>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect1>
<sect1>
<info>
<title>Interrupting SICS</title>
</info>
<para>On occasion, you as the user, or a SICS object may come to the conclusion that an
error is so bad that the measurement needs to be stopped. Clearly a means is needed to
communicate this to upper level code. This means is setting an interrupt on the
connection. The current active interrupt is located at the connection object (note for
SICS programmers, this can be retrieved with SCGetInterrupt and set with SCSetInterrupt.
Interrupt codes are defined in interrupt.h). These codes are ordered into a hierarchy</para>
<para>
</para>
<variablelist>
<varlistentry>
<term> INT1712 0 </term>
<listitem>
<para>Continue. Everything is just fine. eContinue</para>
</listitem>
</varlistentry>
<varlistentry>
<term> INT1712 1 </term>
<listitem>
<para>Abort Operation. </para>
<para>Stop the current scan point or whatever is done, but do not stop
altogether. eAbortOperation</para>
</listitem>
</varlistentry>
<varlistentry>
<term> INT1712 2 </term>
<listitem>
<para>Abort Scan. </para>
<para>Abort the current scan, but continue processing of further commands in
buffers or command files. eAbortScan</para>
</listitem>
</varlistentry>
<varlistentry>
<term> INT1712 3 </term>
<listitem>
<para>Abort Batch. </para>
<para>Aborts everything, operations, scans and batch processing and leaves the
system ready to enter new commands. eAbortBatch</para>
</listitem>
</varlistentry>
<varlistentry>
<term> INT1712 4 </term>
<listitem>
<para>Halt System. </para>
<para>As eAbortBatch, but lock the system. eHaltSystem</para>
</listitem>
</varlistentry>
<varlistentry>
<term> INT1712 5 </term>
<listitem>
<para>Free System</para>
<para>Unlocks a system halted with eHaltSystem. eFreeSystem</para>
</listitem>
</varlistentry>
<varlistentry>
<term> INT1712 6 </term>
<listitem>
<warning>
<para>For internal usage only</para>
</warning>
<para>Makes the SICS server run down and exit. .</para>
</listitem>
</varlistentry>
</variablelist>
<para>Higher level SICS objects may come to the conclusion that the error reported by lower
level code is actually not that critical and clear any pending interrupts by setting the
interrupt code to eContinue and thus consume the interrupt. </para>
</sect1>
</chapter>

View File

@@ -0,0 +1,260 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title><application>SICS</application> - The Instrument Control Server</title><author>
<personname>Ferdi Franceschini </personname>
</author>
<date>2007-02-28 18:29</date>
</info>
<sect1>
<title>Safety</title>
<para>SICS is <emphasis role="bold">NOT</emphasis> a safety system! It will allow you to do
tasks that may damage persons and the instruments. </para>
<para>
</para>
<para><emphasis role="bold">DO</emphasis> use the <emphasis role="bold">STAR</emphasis>
principle. <emphasis role="bold">STOP. THINK. ACT. REVIEW</emphasis></para>
<para><emphasis role="bold">Familiarise</emphasis> yourself the location of the Emergency
Stop buttons located near the cabin exit, or in several places within the instrument
enclosure.</para>
<para><emphasis role="bold">Familiarise</emphasis> yourself with the instrument and its safe
operation. </para>
<para><emphasis role="bold">DO NOT</emphasis> do anything with SICS that may risk damage to
persons or the instrument. </para>
<para><emphasis role="bold">DO NOT</emphasis> rely on these commands to stop motors or close
shutters. If in any doubt, use the Emergency Stop button.</para>
<para>The commands in this chapter may fail for a variety of reasons. <itemizedlist>
<listitem>
<para>SICS has crashed</para>
</listitem>
<listitem>
<para>Your network connection to the SICS is blocked, due to network congestion
or failure</para>
</listitem>
<listitem>
<para>The motor controller is no longer accepting connections or has a rogue
process running</para>
</listitem>
</itemizedlist></para>
</sect1>
<sect1>
<title>What is SICS</title>
<para>Neutron scattering experiments require control of motors for instrument configuration,
control of histogram memory for counting neutrons, and control of sample environment.
SICS is a program that accepts human readable commands, and converts these to commands
that devices understand. For simplicity, much of the control for an experiment is done
in a sequence (synchronously), requiring that an operation completes successfully before
the next is commenced. SICS can also be used asynchronously, but more care has to be
exercised by the operator to ensure the desired result. </para>
<para>Instrument control is based on a client server architecture, each instrument has a
dedicated server, called <application>SICS</application>,  which receives commands from
client applications and then executes them by issuing control sequences to the
hardware.  <application>SICS</application> was originally developed at <uri
xlink:href="http://lns00.psi.ch/sics/design/sics.html">PSI</uri> to control the SINQ
spallation source instruments.  Drivers and site specific extensions have been developed
at ANSTO to control and provide status information for motors, sample environment and
histogrammed neutron event data from the detectors.</para>
<para/>
<para>Driving a device synchronously is done using the <command>drive</command> command. The
device could be a motor or sample environment e.g. temperature controller.</para>
<para>Driving a device asynchronously is done using the <command>run</command> command.</para>
<para>Stopping the device is done using the <command>stopexe</command> command.</para>
<para>Counting of histogrammed neutron events is done using the <command>histmem</command>
command.</para>
<para>Running scans that are a linear sequence of driving, counting and file saving tasks is
done using the <command>runscan</command> command.</para>
<para>Creating a new file is done using the <command>newfile</command> command, and saving
data to the file is done using the <command>save</command> command.</para>
<para>Detail for using each of these commands is provided in the next chapter. SICS provides
many other functions, but we won't cloud the issue at this stage. </para>
</sect1>
<sect1>
<title>Should I read further?</title>
<para>In general, the Bragg Institute instrument scientists manage SICS for the instrument
users. SICS should be running when you come to the instrument, and you should only need
to run the Gumtree program, which is a graphical user interface. You should read further if you think that SICS is not
running and you want to start it, you want to command a device directly with SICS (the
first half of this manual), or you would like to change the instrument configuration
(the second half). </para>
</sect1>
<sect1>
<title>Where is SICS?</title>
<para>SICS runs on an ICS computer (instrument control server). All ICS computers run the
Linux operating system, and have a name that looks like ics1-echidna.nbi.ansto.gov.au.
If you have an account on the NBI network, you can use that username and password to
login. You must login using <command>ssh</command> from a unix computer, or using an ssh
client on a Microsoft Windows computer like <link
xlink:href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">
<application>putty</application></link> or
<application>F-Secure</application></para>
</sect1>
<sect1>
<title>Starting and stopping <application>SICS</application> using
<command>runsics</command></title>
<para>To control the instrument, the SICS software must be running on the instrument control
computer. First, check to see if SICS is already running by calling the
<command>runsics</command>
<option>status </option> command as shown below. Note: the "echidna@ics1-echidna:~>" is
just the command line prompt.</para>
<programlisting>
echidna@ics1-echidna:~> runsics status
SICServer running
SICS script validator running
</programlisting>
<para>This example shows SICS is already running. In this case, you should proceed to login
to SICS. </para>
<para>If the reply is</para>
<programlisting>
echidna@ics1-echidna:~> runsics status
SICServer NOT running
SICS script validator NOT running
</programlisting>
<para>then use the <command>runsics</command>
<option>start</option> command</para>
<programlisting>
echidna@ics1-echidna:~> runsics start
Starting SICS
29087
SUCCESS
Starting SICS Script Validator
29091
SUCCESS
</programlisting>
</sect1>
<sect1>
<title>Login to SICS</title>
<para>Most users won't want to login to <application>SICS.</application> However, if you do
need to get to the <application>SICS</application> command line, then use the
<command>sicsclient</command> command at the Linux prompt. </para>
<programlisting>
echidna@ics1-echidna:~> sicsclient
OK
</programlisting>
<para>Now you'll have to login to SICS with your <option>role</option> and
<option>password</option>. The role is <option>spy</option>, <option>user</option> or
<option>manager</option>, and the instrument scientist will provide you with the
password. </para>
<programlisting>
sics_username sics_password
Login OK
</programlisting>
<para>When a correct username and password is entered, SICS announces that the login was
successful. SICS commands can now be entered.</para>
</sect1>
<sect1>
<title>Starting <application>SICS</application> from the command line</title>
<para>To start <application>SICS</application> you have to log on to the instrument control
computer and then </para>
<para>
<computeroutput>cd /usr/local/sics/server</computeroutput>
</para>
<para> and launch the server in the background with a command similar to the one shown below</para>
<para>
<computeroutput>cd /usr/local/sics/server</computeroutput>
</para>
<para>
<computeroutput>nohup ./SICServer xxx_configuration.tcl &amp;</computeroutput>
</para>
<para>where <replaceable>xxx</replaceable> is the instrument name.</para>
<note>
<para>The <replaceable>'&amp;'</replaceable> is important, it runs the server in the
background, nohup logs output from <application>SICS</application> to a file called
nohup.out and ensures that <application>SICS</application> continues running when
you logout. The .tcl file specified on the command line is the configuration file
for your instrument, replace the <replaceable>xxx</replaceable> with your
instrument's ID.  The configuration file may source other .tcl files.</para>
</note>
</sect1>
<sect1>
<title>The validation server and synchronisation with the instrument control server </title>
<para>You might be thinking, "What is the validation server used for?". You don't want to
run a script on the instrument control server that might be syntactically incorrect, or
hits the limits of the hardware. The validation server runs to allow scripts to be
tested without moving any hardware. The validation server runs with hardware that is
simulated in software.</para>
<para>The validation server has its own set of configuration files. It is important to keep
these files synchronised with the instrument control server, however there are times you
may want to have a different configuration on the validation server. </para>
<para>To synchronise the validation server</para>
<para><command>&gt; socat READLINE,history=$HOME/history tcp4:127.0.0.1:60013,crlf</command></para>
<para>Login to the validation server using <command>sics_username</command> and
<command>sics_password</command></para>
<para>Synchronising is slow but you can get feedback if you issue the following sequence of
commands when you synchronise</para>
<para><command>getlog command</command></para>
<para><command>getlog value</command></para>
<para><command>sync</command></para>
<para>You will see something like the following feedback on the validator connection as the
sync command is running, </para>
<literallayout><computeroutput>
Executing -&gt; sync &lt;- from socket 16
Executing -&gt; restore ../script_validator//log/status.tcl &lt;- from dummy socket
pa_top = -102.499977
pa_bottom = -104.000000
pa_top = -102.499977
pa_bottom = -104.000000
pa_top = -102.499977
pa_bottom = -104.000000
pa_left = -24.699976
….
New en position: 46.434
New qm position: 6.048
Simulation Server has SYNCHRONIZED!
Fixed motors may not have correct positions
</computeroutput></literallayout>
</sect1>
<sect1>
<title><application>SICS</application> Directory Structure</title>
<para><application>SICS</application> is installed on the /usr/local/sics/ directory of the
instrument control computer.  It has the following subdirectories</para>
<variablelist>
<varlistentry>
<term>
<computeroutput>/server</computeroutput>
</term>
<listitem>
<para>This contains the SICServer and the *.tcl configuration files</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>/data</computeroutput>
</term>
<listitem>
<para>Data files are stored here</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>/log</computeroutput>
</term>
<listitem>
<para>Server log files are stored here along with the status.tcl file.  The
status.tcl file preserves variable settings and some parameter values from
the last session with the SICServer</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>/tmp</computeroutput>
</term>
<listitem>
<para>The server keeps temporary files here</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title><application>SICS</application> Configuration</title>
<para><application>SICS</application> is configured via *.tcl files which initialise the
command objects which clients use to control the hardware.  Also,  the server's
functionality can be extended by defining new commands in the configuration files, we
can do this because <application>SICS</application> embeds a <uri
xlink:href="http://www.tcl.tk/">Tcl</uri> interpreter (hence the .tcl
extension).</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,281 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>File commands</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date/>
<bibliosource>
</bibliosource>
</info>
<sect1>
<title>Introduction</title>
<sect2>
<title>Filenames</title>
<para>SICS provides methods to create and save files. You can create a single file, and
save either a single dataset, or multiple datasets to the one file. You can also
create and manage collections of files, and save single or multiple datasets to
files in the collection</para>
<para>SICS automatically creates the filename. The filenames have the form <variablelist>
<varlistentry>
<term>xxxnnnnnnn.nx.hdf</term>
<listitem>
<para>where xxx is a 3 letter abbreviation of the instrument</para>
<para>QKK - quokka</para>
<para>ECH - echidna</para>
<para>WOM - wombat</para>
<para>KOW - kowari</para>
<para>PLA - platypus</para>
<para>TPN - taipan</para>
<para>nnnnnnn is a 7 numeral sequence number, starting at 0000000 when
the facility commenced operation, and is automatically incremented
by SICS. </para>
<para>The file /usr/local/sics/DataNumber is used to keep track of the
number. DO NOT edit this file. </para>
<para>.nx denotes that the file is a NeXus file. </para>
<para>.hdf denotes the file is an hdf5 (binary) file. </para>
</listitem>
</varlistentry>
</variablelist></para>
<para>e.g. QKK0001234.nx.hdf </para>
</sect2>
<sect2>
<title>File Format. NeXus</title>
<para>Files are saved using the ANSTO interpretation of the NeXus standard. </para>
<para>SICS support both the xml and hdf5 form. For performance of reading and writing,
by default we write hdf5 binary. </para>
<para>SICS can also be configured to write xml. This is set in
<filename>nxscripts_common_1.tcl</filename>. Set the file,format element of the
state array to "xml" </para>
</sect2>
<sect2>
<title>File Content</title>
<para>This section will give only a very brief overview of NeXus. Further reading can be
found at the <link xlink:href="http://www.nexusformat.org">NeXus webite,
www.nexusformat.org</link>
</para>
<para>NeXus is a hierachical data format; data is saved in groups and these groups live
under entries. It a similar structure to directories on a file system. We have made
a policy decision at the Bragg Institute to have only one entry per file. This entry
may contain a variable parameter or scan, where e.g. temperature is varied. If you
use the <command>runscan</command> command, histogram data is taken at discrete
temperatures. Temperature will be a vector in the file, and the histogram data may
be a data cube of 2 dimensional x,y or 3 dimensional x,y,t histogram arrays.</para>
<para>There are 4 groups in NeXus. User, Sample, Instrument and Data. SICS will write
the data it acquires to one of these groups. The content that is saved, and where in
the file it is saved to is controlled by configuration files. </para>
<para><filename>/usr/local/sics/server/config/nexus</filename> contains
<filename>*.dic</filename> dictionary files. These files tell SICS how to map a SICS
object to a location in a NeXus file, and what type the data will be, and its
attributes e.g units. Below is an example from nexus.dic</para>
<para>
<programlisting>
samphi = /entry1,NXentry/sample,NXsample/SDS sample_phi
-type NX_FLOAT32 -rank 1 -dim {-1}
-attr {units,degrees} -attr {long_name,sample_phi}
</programlisting>
</para>
<para>Changes to configurations are done by the facility. Dictionaries can be checked
with check_instdict.tcl and check_sicsobj_attributes.tcl.</para>
<para>By default, if the SICS object exists and there is an entry in the dictionary,
then it will be saved to the data file. There is a second hierarchy of SICS objects
which is used by Gumtree for control. This is called hipadaba. We won't go into
detail about hipadaba in this manual, but it is important for this discussion to
know how hipadaba controls saving of SICS objects. Hipadaba has the same structure
as NeXus. The hipadaba tree when initially created by SICS is a complete NeXus tree,
which is then pruned to contain only those nodes that exist for that instrument.
This allows any node to be added to <filename>nexus.dic</filename> for an instrument
without having to change hipadaba. There are dictionary files for hipadaba found at
<filename>/usr/local/sics/server/config/hipadaba/</filename>. In general, there
is no instrument specific information in these files. Every node in hipadaba has
data and nxsave attributes. By default, nxsave is set to true, and if the node
contains data, data is set to true. If either of these is set to false, then the
data will not be saved. </para>
</sect2>
<sect2>
<title>File Locations</title>
<para>A mutable (read-write) copy of the file is made a few minutes after the
experiment, and is available at e.g.
<filename>/experiments/wombat/data/proposal/01234</filename> where
<filename>01234</filename> is the proposal number for the current
experiment. </para><para>An archive of the file is made to the cycle directory
e.g. <filename>/experiments/wombat/data/cycle/040</filename> where
<filename>040</filename> is the reactor cycle number. </para>
<para>File are written to
<filename>/usr/local/sics/data</filename> of the
ics1-<replaceable>australian_fauna</replaceable> computer. This path is
configured in <filename>server_config.tcl</filename> by setting the
<varname>SicsDataPath</varname> variable. Posix symbolic links are used to link
the directory to the appropriate directory on filer.nbi.ansto.gov.au, under the
<filename>/experiments</filename> mount point e.g
<filename>/experiments/wombat/data/current</filename>. You can mount this
directory on the MS Windows machine
dav1-<replaceable>australian_fauna</replaceable>. Files in this location are
read-only. The facility requires an immutable version of the data. </para>
</sect2>
</sect1>
<sect1>
<title>File Commands. Single Files</title>
<sect2>
<title>newfile command</title>
<para>
<variablelist>
<varlistentry>
<term><command>newfile</command>
<replaceable>file_type</replaceable>
<optional>scratch</optional></term>
<listitem>
<para>creates a new file of type <replaceable>file_type</replaceable>
ready to write to. The command does write any information to disk. </para>
<para>To save data, use the <command>save</command> command.</para>
<para>You can only hold a reference to one file. If you need to
reference a number of files, then use newfile_collection. </para>
<para>Only use the optional <optional>scratch</optional> if you want to
write data to a scratch file. The file will be overwritten with the
next invocation of this option</para>
<para><replaceable>file_type</replaceable> may have the following
values: </para>
<para><option>BEAM_MONITOR</option> Saves data from the configured beam
monitors, histogram memory data is not saved.</para>
<para><option>HISTOGRAM_T</option> Saves histogram total time data and
beam monitor data.</para>
<para><option>HISTOGRAM_X</option> Saves histogram x data and beam
monitor data.</para>
<para><option>HISTOGRAM_XT</option> Saves histogram x,t data and beam
monitor data.</para>
<para><option>HISTOGRAM_Y</option> Saves histogram y data and beam
monitor data.</para>
<para><option>HISTOGRAM_YT</option> Saves histogram y,t data and beam
monitor data.</para>
<para><option>HISTOGRAM_XY</option> Saves histogram x,y data and beam
monitor data.</para>
<para><option>HISTOGRAM_XYT</option> Saves histogram total x,y,t data
and beam monitor data.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2>
<title>save command</title>
<para>
<variablelist>
<varlistentry>
<term><command>save</command>
<replaceable>index</replaceable>
</term>
<listitem>
<para>saves data to disk. </para>
<para><replaceable>index</replaceable> is the index of data to be saved,
starting with 0. To save your first slice of data you would save 0.
This provides you with a complete NeXus file. You may be doing After
you acquire you next slice of data, you would save 1, then save 2
etc. </para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2>
<title>Other single file commands</title>
<para>
<variablelist>
<varlistentry>
<term><command>killfile</command></term>
<listitem>
<para>decrements the data number used for SICS file writing and thus
consequently overwrites the last datafile. This is useful when
useless data files have been created during tests. As this is
critical command in normal user operations, this command requires
managers privilege. </para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
</sect1>
<sect1>
<title>File Collection Commands</title>
<sect2>
<title>newfile_collection command</title>
<para>
<variablelist>
<varlistentry>
<term><command>newfile_collection</command>
<option> -labels </option>
<replaceable>{sample1 sample2}</replaceable>
<option>-filetype</option>
<replaceable>file_type</replaceable>
<option>-savetype</option>
<replaceable>save_type</replaceable>
</term>
<listitem>
<para>Whereas newfile creates one file, newfile_collection will create
as many files as there are labels. The command does write any
information to disk. </para>
<para>To save data, use the <command>save_collection</command> command</para>
<para>Example: You have a multi-sample changer or robot. You want to do
a measurement on each sample at multiple temperatures. Your
experimental sequence has the sample changer as the fastest varying
parameter (inner loop), and temperature change as the slowest
varying parameter (outer loop). You want to record all temperature
data for a sample in one file.</para>
<para><option>-savetype</option>
<replaceable>save_type</replaceable> may have the following values: </para>
<para>
<option>data</option> writes to a normal data file</para>
<para><option>scratch</option> writes to a scratch file. The file will
be overwritten with the next invocation of this option. Used mainly
for testing.</para>
<para><option>-filetype</option>
<replaceable>file_type</replaceable> may have the following values: </para>
<para><option>BEAM_MONITOR</option> Saves data from the configured beam
monitors, histogram memory data is not saved.</para>
<para><option>HISTOGRAM_T</option> Saves histogram total time data and
beam monitor data.</para>
<para><option>HISTOGRAM_X</option> Saves histogram x data and beam
monitor data.</para>
<para><option>HISTOGRAM_XT</option> Saves histogram x,t data and beam
monitor data.</para>
<para><option>HISTOGRAM_Y</option> Saves histogram y data and beam
monitor data.</para>
<para><option>HISTOGRAM_YT</option> Saves histogram y,t data and beam
monitor data.</para>
<para><option>HISTOGRAM_XY</option> Saves histogram x,y data and beam
monitor data.</para>
<para><option>HISTOGRAM_XYT</option> Saves histogram total x,y,t data
and beam monitor data.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
<sect2>
<title>save_collection command</title>
<para>
<variablelist>
<varlistentry>
<term><command>save_collection</command>
<option>-index</option>
<replaceable>val</replaceable>
<command>-labels </command>
<replaceable>sample1</replaceable></term>
<listitem>
<para>saves data to disk within a collection (multiple files)</para>
<para><command>-index</command><replaceable>val</replaceable> is the
index of data to be saved, starting with 0. To save your first slice
of data you would save 0. This provides you with a complete NeXus
file. You may be doing After you acquire you next slice of data, you
would save 1, then save 2 etc.</para>
<para><command>-labels </command>
<replaceable>sample1</replaceable> will save to the file referenced
by the label <replaceable>sample1</replaceable>. You would put all
data relating to a sample into this one file. </para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect2>
</sect1>
</chapter>

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Histogram Configuration - under construction</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-01-25 09:46</date>
</info>
<sect1>
<info>
<bibliosource>http://gumtree:9080/nbicms/Members/ffr/journals/folder.2008-01-24.4596726577/histogram-memory/</bibliosource>
<title>Histogram Configuration</title></info>
<para>Histograms are the most complex objects in SICS, and when doing configuration you must
have </para>
<para>The following uploads the text in the hmconfigscript dictionary variable as well as
the other dictionary variables to the histogram server.</para>
<programlisting>
hmm configure init 1
hmm init</programlisting>
<para>The following just uploads the values in the dictionary variables to the histogram
server</para>
<programlisting>
hmm configure init 0
hmm init</programlisting>
<para>The following simply updates the values of the dictionary variables listed in the
http://localhost:8080/admin/textstatus.egi page.</para>
<programlisting>
hmm configure statuscheck true
hmm stop
hmm configure statuscheck false</programlisting>
<para>Setting "statuscheck" to false prevents the dictionary variables from being updated
every time there is a start, pause or stop.</para>
</sect1>
<sect1>
<title>OAT_TABLE</title>
<para>The oat_table is setup in the instrument specific configuration, the current default
for all instruments is to set one large time bin with the upper bin boundary equal to
the frame period (ie 20msec).</para>
<sect2>
<title>Histogram Data Axes</title>
<para>The x, y, theta, and time axes are calculated from the spatial and temporal bin
boundaries, and a scale factor and offset. </para>
</sect2>
</sect1>
</chapter>

View File

@@ -0,0 +1,266 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>SICS installation</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-01-25 09:46</date>
</info>
<sect1>
<title>SICS installation</title>
<sect2>
<title>Requirements</title>
<para>For your operating system, you must have these software components installed. The
links here are not maintained. They may or may not be up to date, and may or may not
link with the version of SICS you are trying to compile. The standard install
operating system for ANSTO is SuSE linux, version 9.2, 10, 10.2</para>
<para>
<uri xlink:href="http://rpmfind.net/linux/rpm2html/search.php?query=hdf5">HDF5</uri>
from <uri xlink:href="http://www.hdfgroup.org/HDF5/"
>http://www.hdfgroup.org/HDF5/</uri>
</para>
<para>
<uri xlink:href="http://oss.metaparadigm.com/json-c/">JSON-C</uri> from <uri
xlink:href="http://www.json.org/">http://www.json.org/</uri></para>
<para>
<uri xlink:href="http://mxml.sourceforge.net/">mxml</uri> from <uri
xlink:href="http://mxml.sourceforge.net/">http://mxml.sourceforge.net/</uri>
</para>
<para>tcl8.4 - Get this from the RPMs for your operating system. Also requires
tcl-devel, zlib, zlib-devel, libghttp and libghttp-devel RPMs and tDOM</para>
</sect2>
<sect2>
<title>Getting SICS at ANSTO</title>
<para>To get sics you must have an account on boson and you need to belong to the nbip
group.  If you are using the command line cvs client you need to set the CVS_RSH
environment variable to ssh.  You can then check sics out with the following
command,</para>
<programlisting>cvs -d:ext:uname@boson.ansto.gov.au:/projects/nbip/cvsroot co sics</programlisting>
<para>where uname is your username on boson.</para>
</sect2>
<sect2>
<title>Getting a Release Branch</title>
<programlisting>cvs -d:ext:uname@boson.ansto.gov.au:/projects/nbip/cvsroot
co -rRELEASE-&lt;N>_0-BRANCH sics</programlisting>
<para>where &lt;N> is the branch number.</para>
</sect2>
<sect2>
<title>Compiling sics</title>
<para>After checking out sics cd to the <filename>site_ansto</filename> directory and
run <command>make</command>. This will build a <command>SICServer</command> binary
in the <filename>site_ansto</filename> directory.</para>
<note>
<para>The build system is a work in progress.  I have manage to reduce it down to
two files a Makefile, and  make_gen_variables which is essentially a copy of the
variables in the sics core make_gen file.  The goal is to extract the variables
from make_gen and get rid of make_gen _variables.</para>
</note>
</sect2>
</sect1>
<sect1>
<info><bibliosource>http://gumtree:9080/nbicms/sics-control-system/ansto-sics/sics-configuration-and-deployment</bibliosource>
<author><personname>Ferdi Franceschini</personname></author>
<date> 2007-03-21 15:29</date>
<title>Instrument Configuration and Deployment</title></info>
<sect2>
<title>TODO</title>
<para> Create motion control checklists for Wombat, Koala, Kowari, and Platypus based on
the Echidna Motion Control Functional Test Checklist</para>
</sect2>
<sect2>
<title>SICS Configuration Source Files</title>
<para><filename>site_ansto/instrument</filename> is the toplevel directory for the
instrument configuration source files along with the shared configuration
information, deployment scripts, test code and scaffolding.</para>
<para>The top level of the <filename>site_ansto/instrument</filename> directory contains
the common instrument configuration files.  All of the instruments depend on the
following files: </para>
<para><filename>server_config.tcl</filename> defines paths, server options and variables
for all of the instruments.  </para>
<para><filename>util/utility.tcl</filename> file contains some tcl procs which are
useful for defining instrument configurations.</para>
<para><filename>/config</filename> directory contains task specific configuration files
which may be shared by two or more instruments. It has the following structure: </para>
<programlisting>config
|-- counter
|-- hipadaba
|-- hmm
|-- nexus
`-- scan </programlisting>
<para>The instrument specific configuration files are stored in subdirectories of
<filename>site_ansto/instrument</filename> name as follows:</para>
<simplelist>
<member><filename>hipd</filename> (wombat) </member>
<member><filename>hrpd</filename> (echidna) </member>
<member><filename>pas</filename> (pelican) </member>
<member><filename>qld</filename> (koala) </member>
<member><filename>reflectometer</filename> (platypus) </member>
<member><filename>rsd</filename> (kowari) </member>
<member><filename>sans</filename> (quokka) </member>
<member><filename>tas</filename> (taipan)</member>
</simplelist>
<para><emphasis role="b">TODO</emphasis> We should really rename these directories, but
doing that in CVS requires a cool clear head and a calm steady hand.</para>
<para>Each of the instrument specific subdirectories should have the following layout:</para>
<programlisting>&lt;inst&gt;
|-- DMC2280
|-- config
| |-- counter
| |-- hipadaba
| |-- hmm
| |-- nexus
| `-- scan
|-- script_validator
| `-- config
| |-- counter
| |-- hmm
| `-- motors
`-- util
`-- dmc2280 </programlisting>
<para>Each &lt;inst&gt; directory contains the following files </para>
<itemizedlist spacing="compact">
<listitem>
<para><filename>sics_ports.tcl</filename>
</para>
<para>List of port names used by the SICS server for this instrument </para>
</listitem>
<listitem>
<para><filename>extraconfig.tcl</filename>
</para>
<para>In the future we will be able to override values recorded in the
status.tcl file by setting them here. </para>
</listitem>
<listitem>
<para><filename>MANIFEST.TXT</filename>
</para>
<para>List of files and subdirectories to be deployed to the ics1-&lt;inst&gt;
computer. </para>
</listitem>
<listitem>
<para><filename>Makefile</filename>
</para>
<para>Generates a simulated motor configuration file for the script validator
during deployment. </para>
</listitem>
<listitem>
<para><filename>&lt;instrument-name&gt;_configuration.tcl</filename>
</para>
<para>This is the main configuration file, it sources all the other
configuration files required to setup an instrument. </para>
</listitem>
</itemizedlist>
<para>The &lt;inst&gt; directories are broken down into the following subdirectories,</para>
<variablelist>
<varlistentry>
<term><filename>DMC2280</filename></term>
<listitem>
<para>Contains the programs which setup and run on the Galil motion
controllers. They will typically define subroutines and interrupt
handlers for limit switches, and motors. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>config</filename></term>
<listitem>
<para>Contains subdirectories which organise the instrument configuration
files by task.  As well as the following files:</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>INSTCFCOMMON.TXT</filename></term>
<listitem>
<para>Lists common configuration files that this instrument depends
on.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>Makefile</filename></term>
<listitem>
<para>Composes nexus dictionary files into task specific dictionaries for an
instrument</para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>script_validator</filename></term>
<listitem>
<para>The port numbers and simulation drivers required by the script
validator are defined here. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><filename>util</filename></term>
<listitem>
<para>Maintenence and diagnostic utilities which can be run independently of
SICS can be found here. </para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<sect1>
<title>Deploying SICS</title>
<sect2>
<title>Deploying to the TEST_SICS directory on bluegum from a working directory on
bluegum </title>
<para>The root directory for SICS for each instrument on bluegum is
<filename>/usr/local/TEST_SICS/&lt;inst></filename>
</para>
<para>Under each of these root directories is the following directory structure:</para>
<programlisting>/
|-- batch
|-- data
|-- log
|-- script_validator
| |-- batch
| |-- data
| |-- log
| |-- server
| |-- tmp
|-- server
`-- tmp
</programlisting>
<para>For a fresh install you have to create these directories.</para>
<para>Go to the source code directory <filename>site_ansto</filename></para>
<programlisting>cd instrument
./deploySICS.sh test/kowari localhost /usr/local/TEST_SICS/kowari/</programlisting>
<para>Edit /etc/services</para>
<para>Add lines for the motor services e.g.</para>
<programlisting>
pmc1-kowari 62335/tcp
pmc2-kowari 62336/tcp
pmc3-kowari 62337/tcp
pmc4-kowari 62338/tcp
</programlisting>
<para>After deploying a test setup you will need to configure the fake motors for SICS</para>
<programlisting>cd /usr/local/TEST_SICS/kowari/fakeDMC
./mkSimAxes.tcl kowari</programlisting>
<para>Then you can run the fake motors in separate terminals </para>
<programlisting>./cont.tcl -cont 1 -port pmc1-kowari
./cont.tcl -cont 2 -port pmc2-kowari
./cont.tcl -cont 3 -port pmc3-kowari
./cont.tcl -cont 4 -port pmc4-kowari </programlisting>
<para>Then create the DataNumber file and launch SICS </para>
<programlisting>cd /usr/local/TEST_SICS/kowari/sics/
touch data/DataNumber
cd server
./SICServer kowari_configuration.tcl</programlisting>
</sect2>
<sect2>
<title>Deploying to ics1-dev.nbi.ansto.gov.au and ics1-test.nbi.ansto.gov.au</title>
<para>The instrument dev and test computers must have the information in the
<filename>sics_test_hosts</filename> and the
<filename>sics_test_services</filename> files under
the <filename>site_ansto/instrument/TEST_SICS/</filename> directory appended to
the services and hosts files.  This will allow us to run multiple instances of sics
on the test computer without changing the instrument configuration files. </para>
<programlisting>cd instrument
./deploySICS.sh echidna/test ics1-dev.nbi.ansto.gov.au</programlisting>
</sect2>
<sect2>
<title>Deploying to an instrument control server</title>
<programlisting>cd instrument
./deploySICS.sh echidna</programlisting>
</sect2>
</sect1>
</chapter>

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Personal configuration</title><author>
<personname>Nick Hauser</personname>
</author>
<date/>
</info>
<sect1>
<title>Personalised configuration. extraconfig.tcl</title>
<para>You can add your own variables and functions to sics. Start by opening
/usr/local/sics/extraconfig.tcl in a text editor (this is on the ics computer). </para>
<para>The purpose of the extraconfig.tcl file is to allow instrument scientists and users to
create personal configurations, that can be stored in the user's home directory and
reused later if required. It also allows users to experiment with additional features,
that once proven, can be migrated to an appropriate configuration file</para>
<para>Edit the file using the patterns provided below. </para>
<para>For the changes to take effect, you'll need to save the file and stop and restart
sics.</para>
<sect2>
<title>Adding a procedure</title>
<para>To add a procedure to SICS. Say you want to add the procedure
<command>movdet</command> to sics and set by a user, </para>
<programlisting>
proc movedet {pos} {
drive dhv1 600
drive det $pos
drive dhv1 2350
}
publish movedet user
</programlisting>
<para>This function will drive the high voltage controller to 600 volts, move the motor
<command>det</command> to position <replaceable>pos</replaceable> and drive the
high voltage controller to 2350 volts</para>
<para><command>publish</command> is a SICS manager command which makes a Tcl command or
procedure visible in the SICS interpreter. <command>publish</command> provides a
special wrapper for a Tcl command, which first checks the user rights of the client
connection which wants to execute the Tcl command. If the user rights are
appropriate the command is invoked in the Tclinterpreter.</para>
</sect2>
<sect2>
<title>Adding a variable</title>
<para>To add a variable, use the <command>mkVar</command> procedure.
<command>mkVar</command> is a Tcl wrapper for the SICS function
<command>VarMake</command>. These 2 functions share the same first 3 parameters.</para>
<para>To view these settings, use <command>hlistprop</command>
<replaceable>name</replaceable></para>
<para>
<command>::utility::mkVar</command>
<replaceable>name type access_privilege long_name nxsave class control
data</replaceable>
</para>
<variablelist>
<varlistentry>
<term><replaceable>name</replaceable></term>
<listitem>
<para>name on the sics command line</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>type</replaceable></term>
<listitem>
<para>text, int, float</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>access_privilege</replaceable></term>
<listitem>
<para>spy, user, manager, internal, readonly</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>long_name</replaceable></term>
<listitem>
<para>long name</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>nxsave</replaceable></term>
<listitem>
<para>saves to NeXus file</para>
<para>true, false (default). </para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>class</replaceable></term>
<listitem>
<para>node under which this variable is saved and controlled</para>
<para>e.g. instrument, sample</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>control</replaceable></term>
<listitem>
<para>will appear in the Gumtree table tree if this is set to true</para>
<para>true, false (default)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>data</replaceable></term>
<listitem>
<para>will appear in the data node of NeXus file if this is set to true.
nxsave must also be set to true.</para>
<para>true, false (default)</para>
</listitem>
</varlistentry>
</variablelist>
<para>Example</para>
<para>::utility::mkVar starttime Text user start true experiment true true</para>
<para>creates a variable called starttime, which is a text variable requiring user
privilege to set. The long_name is start, it will be saved to the NeXus file under
the 'experiment' node and appear in the Gumtree table tree. </para>
</sect2>
</sect1>
</chapter>

View File

@@ -0,0 +1,408 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>TASUB: The Triple Axis Calculation Module</title><author>
<personname>Mark Koennecke</personname>
</author>
<date/>
</info>
<sect1>
<title>TASUB: The Triple Axis Calculation Module</title>
<para>On a triple axis instrument the parameters incoming energy, Q-position in 3D and
analyzed energy have to be changed frequently. These calculations are the task of the
TASUB module. This module uses the calculus described by M. Lumsden, J. L. Robertson and
M. Yethiraj in J. Appl. Cryst. (2005), 38, 405-411. The special feature of this
algorithm is that the tilt cradles of the sample table are used to help during alignment
and in order to drive out of plane (within the limits of the tilt cradles). For
alignment, two reflections must be located and their angles and Q-E parameters entered
into the module. Then a UB matrix can be calculated. With a UB matrix, the Q-E variables
ei, ki, ef, kf, en, qh, qk and ql can be driven as virtual motors in SICS. </para>
</sect1>
<sect1>
<title>Commands understood by Tasub</title>
<sect2>
<title>Monochromator and Analyzer Parameters</title>
<para>Incident and scattered energies are defined by monochromator crystals. In order
for the calculations to work, some parameters need to be configured. Monochromator
and analyzer parameters can be accessed with the prefixes: The parameter syntax used
is as usual: giving only the parameter name queries the value, giving the parameter
plus a value sets the parameter to the new value. The following parameters are
supported: </para>
<variablelist>
<varlistentry>
<term><command>tasub mono</command>
</term>
<listitem>
<para>Monochromator properties </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub ana</command>
</term>
<listitem>
<para>Analyser properties </para>
</listitem>
</varlistentry>
</variablelist>
<para>Allowed <command>properties </command> for <command>tasub mono</command> and
<command>tasub ana</command> one of:</para>
<variablelist>
<varlistentry>
<term><command>dd</command></term>
<listitem>
<para>The d-spacing of the reflection used </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>ss</command>
</term>
<listitem>
<para>The scattering sense, 1 or -1 are possible. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hb1</command>
</term>
<listitem>
<para>First parameter for the calculation of the horizontal curvature
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hb2 </command></term>
<listitem>
<para>Second parameter for the calculation of the horizontal curvature
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>vb1</command>
</term>
<listitem>
<para>First parameter for the calculation of the vertical curvature </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>vb2</command>
</term>
<listitem>
<para>Second parameter for the calculation of the vertical curvature </para>
</listitem>
</varlistentry>
</variablelist>
<para>Examples: </para>
<variablelist>
<varlistentry>
<term><command>tasub mono dd </command></term>
<listitem>
<para>will print the current d-spacing of the monochromator </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub mono dd </command><replaceable>4.3</replaceable>
</term>
<listitem>
<para>Will set the d-spacing of the monochromator to 4.3 </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub mono ss </command></term>
<listitem>
<para>will print the scattering sense of the monochromator </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub ana ss </command></term>
<listitem>
<para>will print the scattering sense of the analyser </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub ana ss 1</command></term>
<listitem>
<para>will set the scattering sense of the analyser to 1</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>Cell Parameters</title>
<para> In order for the UB matrix calculation to work, the cell constants must be known: <variablelist>
<varlistentry>
<term><command>tasub cell </command></term>
<listitem>
<para>This command prints the current cell parameters. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub cell </command><replaceable>a b c alpha beta
gamma</replaceable>
</term>
<listitem>
<para>This command sets the new cell parameters. All six values must be
given. </para>
</listitem>
</varlistentry>
</variablelist></para>
</sect2>
<sect2>
<title>Reflection Management</title>
<para> In order to calculate a UB matrix a list of reflections must be maintained. This
is done with the commands in this section: <variablelist>
<varlistentry>
<term><command>tasub clear </command></term>
<listitem>
<para>Clears all reflections except the first reflection from the
reflection list </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub clear all</command></term>
<listitem>
<para>Clears all reflections</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub listref</command>
</term>
<listitem>
<para>Prints a list of all known reflections. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub del </command><replaceable>num</replaceable>
</term>
<listitem>
<para>Delete the reflection number num from the list </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub addref </command><replaceable>qh qk ql </replaceable></term>
<listitem>
<para>Adds a reflection to the list. The indices of the reflections are
given. The angles and energy values are read from the motors. Use
this command only when the instrument is positioned right on a
reflection. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub addref </command><replaceable>qh qk ql a3 a4 sgu sgl ei
ef </replaceable></term>
<listitem>
<para>Add a new reflection to the list. Besides the indices all angles
are given: a3, the sample rotation, a4, sample two theta, sgu, upper
tilt cradle, sgl, lower tilt cradle and incoming energy ei and
outgoing energy ef. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub addauxref </command><replaceable>qh qk ql
</replaceable></term>
<listitem>
<para>Adds an auxiliary reflection with indices qh, qk, ql to the list.
A4 is calculated from cell constants. A3 is either left alone or is
calculated to have the correct angular difference to a previous
reflection. This is a help for setting up the instrument or running
powder mode. When a UB has been generated from auxiliary
reflections, a3, sgu and sgl angles will be incorrect. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub repref </command><replaceable>id qh qk ql a3 a4 sgu sgl
ei ef </replaceable></term>
<listitem>
<para>Modifies the reflection with id id to have the values given.
</para>
</listitem>
</varlistentry>
</variablelist></para>
</sect2>
<sect2>
<title>Calculations</title>
<para> This section covers the parameters and commands to use to make the module do
calculations for you. <variablelist>
<varlistentry>
<term><command>tasub const ki | kf | elastic </command></term>
<listitem>
<para>Sets a parameter to determine if KI or KF is fixed when the energy
transfer en is being driven. Allowed values: ki, kf, elastic. In
elastic mode the analyzer is disregarded. This is useful for two
circle diffractometers. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub const </command></term>
<listitem>
<para>Prints if ki or kf is fixed. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub ss </command></term>
<listitem>
<para>Prints the sample scattering sense. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub ss 1 | -1 </command></term>
<listitem>
<para>Sets the sample scattering sense. Allowed values are either 1 or
-1. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub silent 0 | 1 </command></term>
<listitem>
<para>Prints or sets the silent flag. If this is 0, the messages Driving
motor .. from .. to .. are suppressed.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub outofplane 0 | 1 </command></term>
<listitem>
<para>Prints or sets the outofplane flag. If this flag is 0, the
instrument will stay in the scattering plane and not move out of it.
This is here in order to protect those bloody magnets which cannot
be tilted.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub makeub</command><replaceable> r1 r2 </replaceable></term>
<listitem>
<para>Calculate a new UB matrix from the current cell constants and the
entries r1 and r2 in the reflection list. r1 and r2 are integer
numbers. This command will not only print the new UB matrix but also
the results of various back and forth calculations performed with
the new UB matrix. This can be inspected in order to check the new
UB. WARNING: The calculation will go wrong if the scattering sense
at the sample has changed since the reflections used for the UB
matrix determination have been entered. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub listub </command></term>
<listitem>
<para>prints the current UB matrix. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub calcang </command><replaceable>qh qk ql ei ef
</replaceable></term>
<listitem>
<para>Will calculate new angles for the Q-E position specified. The
angles will be printed in the order: monochromator two theta, sample
rotation, sample two theta, lower tilt cradle, upper tilt cradle and
analyzer two theta. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub calcqe </command><replaceable>a2 a3 a4 sgu sgl a6
</replaceable></term>
<listitem>
<para>Calculates and prints the Q-E position from the angles given: a2 =
monochromator two theta, a3 = sample rotation, a4 = sample tow
theta, sgu = upper tilt cradle, sgl = lower tilt cradle and a6 =
analyzer two theta. The Q-E position is printed in the sequence: qh,
qk, ql, ei, ef. </para>
</listitem>
</varlistentry>
</variablelist></para>
</sect2>
<sect2>
<title>Virtual Motors</title>
<para> The tasub module also installs the following virtual motors into SICS: ei, ki,
qh, qk, ql, en, ef, kf and qm. All these motors can be used in SICS drive, run or
scan commands like real motors. Driving them triggers a recalculation of angles and
the drives the real motors to appropriate values. The virtual motors have a very
limited command set (shown at the example of qh): <variablelist>
<varlistentry>
<term><command>qh</command>
</term>
<listitem>
<para>The name of the motor alone will print its current position.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>qh</command>
<replaceable>target</replaceable>
</term>
<listitem>
<para>This will print the last requested target position for this
virtual motor. </para>
</listitem>
</varlistentry>
</variablelist></para>
<para> The virtual motor qm implements <emphasis role="b">powder mode</emphasis>. In
this mode, only the sample two theta and energy motors will be driven, sample
rotation and tilt cradles will be left at their respective positions. This is
commonly used to analyze the energy transfer of powder samples. </para>
<para> There are other important command: <variablelist>
<varlistentry>
<term><command>tasub update </command></term>
<listitem>
<para>This command will force a recalculation of the current Q-E
position for the virtual motors from angles. Normally tasub will
take care of this. However, if any of the angle motors are moved
directly or manually, this command might be required. The SICS dr
wrapper command, however, even takes care of this. </para>
</listitem>
</varlistentry>
</variablelist><variablelist>
<varlistentry>
<term><command>tasub updatetargets</command>
</term>
<listitem>
<para>This command makes the QE targets match the current position. This
is useful after initialization in the instrument.tcl file.</para>
</listitem>
</varlistentry>
</variablelist></para>
</sect2>
<sect2>
<title>Internal Commands</title>
<para>The tasub module supports some more commands which are used by SICS in order to
restore the tasub configuration between instantiations of SICS. These commands are
documented here for the sake of completeness: <variablelist>
<varlistentry>
<term><command>tasub setub </command><replaceable>ub11 ub12 ub13 ub21 ub22
ub23 ub31 ub32 ub33 </replaceable></term>
<listitem>
<para>Sets the UB matrix. Nine values are required. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub setnormal </command><replaceable>n1 n2 n3
</replaceable></term>
<listitem>
<para>This command sets the plane normal which is required in
calculations. Normally this plane normal is automatically generated
during the calculation of the UB matrix. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub settarget </command><replaceable> qh qk ql qm ki kf
</replaceable></term>
<listitem>
<para>Sets the Q-E target. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub</command>
<replaceable> r1 qh qk ql a3 a4 sgu sgl ki kf </replaceable></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><command>tasub </command><replaceable>r2 qh qk ql a3 a4 sgu sgl ki kf
</replaceable></term>
<listitem>
<para>These commands set the values for the two reflections used for
generating the UB matrix. </para>
</listitem>
</varlistentry>
</variablelist></para>
</sect2>
</sect1>
</chapter>

View File

@@ -0,0 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Rheometer</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date/>
</info>
<sect1>
<title>Configuration</title>
<para>The driver is loaded into SICS by adding the following line in the
<literal>/usr/local/sics/extraconfig.tcl</literal> file </para>
<para>
<variablelist>
<varlistentry>
<term><command>add_rheo name IP tol settletime PORT</command></term>
<listitem>
<para><replaceable>name</replaceable> of parameter from rheometer, use
either <command>rhSpeed</command> or <command>rhTorque</command> for
consistency with existing data files</para>
<para><replaceable>IP</replaceable> is the address of Moxa box</para>
<para><replaceable>tol</replaceable> is the tolerance of
<replaceable>name</replaceable></para>
<para><replaceable>settletime</replaceable> is the time to wait in seconds
before checking that we have reached the set value of
<replaceable>name</replaceable>.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<para><command>add_rheo rhSpeed ca3-quokka 0.01 5 4001</command></para>
<para>This will create a driver with a tolerance of 0.01 for the speed, with a settle time
of 5 seconds. </para>
<para>The rheometer speed and torque will be available under the <literal>/sample</literal>
group and will be saved in the data file as <literal>../sample/rhTorque</literal> and
<literal>../sample/rhSpeed</literal>.</para>
<para>A standard HISTOGRAM_XY file (ie a QKKxxxx.nx.hdf XY data file)will be created by
default. Use <command>newfile</command> to specify other filetypes. </para>
</sect1>
<sect1>
<title>Commands</title>
<para>The rheometer driver in SICS starts an acquisition on the histogram memory when the
rheometer matches the speeds in a list of trigger values held by the driver. Data will
be saved after each acquisition. </para>
<para>
<variablelist>
<varlistentry>
<term><command>hset /sample/rhSpeed/runexp 1</command></term>
<listitem>
<para>The driver begins a sequence when this flag is set to 1. When the flag
is 0 (default) the rheometer speed is ignored and no sequence is run.
The flag is automatically reset to 0 at the end of a sequence</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect1>
<sect1>
<title>Parameters</title>
<para>
<variablelist>
<varlistentry>
<term><command>hset /sample/rhTorque</command></term>
<listitem>
<para>
<option>scale </option>(default 1) scale the voltage reading to the
torque value</para>
<para><option>offset </option>(default 0) applies an offset if
necessary.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset /sample/rhSpeed</command></term>
<listitem>
<para><option>scale</option> (default 1) scale the voltage reading to the
speed value</para>
<para><option>offset</option> (default 0) applies an offset if necessary.</para>
<para><option>saveIndex</option> The index of the next entry to be saved in
the data file, starts at zero</para>
<para><option>triggerList</option> (default "EMPTY") List of speeds which
will trigger an acquisition and save data</para>
<para><option>acqTime</option> (default "EMPTY") List of histogram memory
acquisition times. If you only put one value here it will be applied to
all of the acquisitions</para>
<para><option>runexp</option> (default 0) The driver ignores the rheometer
speed until this flag has been set to 1. NOTE: It is automatically reset
at the end of a sequence</para>
<para><option>tol</option> Tolerance, an acquisition will be triggered when
the rheometer speed is within tolerance of the current trigger value in
the triggerList. </para>
<para>The <option>triggerList</option> and <option>acqTime</option> lists
will be cleared when a sequence has been completed.</para>
</listitem>
</varlistentry>
</variablelist>
</para>
<example>
<title>Rheometer example</title>
<para>
<literallayout>
<computeroutput>
hset /sample/rhSpeed/triggerList 4 5 6 5 4
OK
hset /sample/rhSpeed/acqTime 5 10 15 10 5
OK
hset /sample/rhSpeed/runexp 1
OK
Data will be saved in a standard HISTOGRAM_XY file
You can override this default by running the 'newfile' command first
rhCallBack /sics/rhSpeed 3.9807 trigger a 5 second acquisition,
sicstime 2011-06-10 17:33:35
rheometer_savehmmdata /sics/rhSpeed: save data index = 0,
sicstime 2011-06-10 17:33:35
rhCallBack /sics/rhSpeed 4.9562 trigger a 10 second acquisition,
sicstime 2011-06-10 17:33:43
rheometer_savehmmdata /sics/rhSpeed: save data index = 1,
sicstime 2011-06-10 17:33:43
rhCallBack /sics/rhSpeed 5.98 trigger a 15 second acquisition,
sicstime 2011-06-10 17:33:50
rheometer_savehmmdata /sics/rhSpeed: save data index = 2,
sicstime 2011-06-10 17:33:50
rhCallBack /sics/rhSpeed 5.023 trigger a 10 second acquisition,
sicstime 2011-06-10 17:34:06
rheometer_savehmmdata /sics/rhSpeed: save data index = 3,
sicstime 2011-06-10 17:34:06
rhCallBack /sics/rhSpeed 4.0226 trigger a 5 second acquisition,
sicstime 2011-06-10 17:34:20
rheometer_savehmmdata /sics/rhSpeed: save data index = 4,
sicstime 2011-06-10 17:34:20
</computeroutput>
</literallayout>
</para>
</example>
</sect1>
</chapter>

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>11 Tesla Magnet</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-08-29 16:47</date>
</info>
<sect1>
<title>Configuration</title>
<para>The driver is loaded into SICS by adding the following line in the
<literal>/usr/local/sics/extraconfig.tcl</literal> file </para>
<para><command>select_environment_controller "11TMagnet"</command></para>
<para>Make sure that the other entries are commented out, save the file and restart SICS.</para>
<para>This will set up the lakeshore temperature controller as well as the magnet power
supply control. They will appear as <varname>tc1</varname> and <varname>ips120</varname>
under the <varname>sample</varname> group in GumTree.</para>
</sect1>
<sect1>
<title>Commands</title>
<para>When the magnet power supply is switched on it sets itself to "clamped" mode. This
means that the output is short-circuited. </para>
<para><emphasis> You must unclamp it to set the magnetic field.</emphasis></para>
<variablelist>
<varlistentry>
<term><command>hset /sample/ips120/Control/A 0</command></term>
<listitem>
<para>Unclamps the magnet</para>
<para><emphasis>It will show that it's at zero already, set it
anyway</emphasis></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>drive ips120_driveable </command><replaceable>n</replaceable></term>
<listitem>
<para>Drive the magnet to <replaceable>n</replaceable> Tesla</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Parameters</title>
<variablelist>
<varlistentry>
<term><command>/sample/ips120/sensor/value </command></term>
<listitem>
<para>This reading is taken from the power supply leads while the magnet is
ramping up. </para>
<para>After the setpoint has been reached and the magnet is "holding" the field
then SICS will read the field from the magnet status register of the power
supply.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Description</title>
<para>The magnet is normally in persistent mode (switch heater off) with the power supply at
zero amps. The <command>drive</command> command drives the power supply to the magnet
current, takes the magnet out of persistent mode (turns the switch heater on), drives
the magnet to the new field, returns the magnet to persistent mode (turns the switch
heater off) and ramps the power supply current back to zero. </para>
<para>There are time delays to allow the switch to operate. </para>
</sect1>
<sect1>
<title>Known Issues</title>
<para>If you set the limits to run at maximum magnet field, but do not run the lambda plate,
<emphasis>you will quench the magnet. </emphasis> This driver does not check to see
if the magnet temperature when driving maximum field. The SICS anticollider should be
used to set allowed values.</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,353 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Autosave</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-08-29 16:47</date>
</info>
<sect1>
<title>Commands</title>
<variablelist>
<varlistentry>
<term><command>autosave</command></term>
<listitem>
<para>With no arguments enables autosaving with a default interval of 300
seconds (5 minutes)</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Parameters</title>
<variablelist>
<varlistentry>
<term><command>autosave </command><replaceable>n</replaceable></term>
<listitem>
<para><replaceable>n</replaceable> &lt;= 0 disables autosaving</para>
<para><replaceable>n</replaceable> &gt; 0 enables autosaving with an interval of
<replaceable>n</replaceable> seconds (if already running it just sets a
new interval)</para>
</listitem>
</varlistentry>
</variablelist>
<variablelist>
<varlistentry>
<term><command>autosave </command><option>check</option></term>
<listitem>
<para>Reports if autosave is enabled or disabled.</para>
<para>Return messages are:</para>
<para><literal>AUTOSAVE_STATE = DISABLED</literal></para>
<para><literal>AUTOSAVE_STATE = ENABLED</literal></para>
</listitem>
</varlistentry>
</variablelist>
<example>
<title>autosave example</title>
<literallayout>
<literal>
autosave check
AUTOSAVE_STATE = DISABLED
autosave 10
OK
autosave check
AUTOSAVE_STATE = ENABLED
</literal>
</literallayout>
</example>
</sect1>
<sect1>
<title>Description</title>
<para>Data will be saved in the "designated" next data slot in a file. It's tricky because a
sequence of datasets can be saved in a single data file (this is in fact the normal case
across the instruments). I say "designated" because when you save a sequence of data
acquistions in a file <command>autosave</command> cannot tell if the last entry in the
file was "autosaved" or deliberately saved. The next slot is designated by making a call
to <command>save</command> eg <command>save 3</command> will cause
<command>autosave</command> to save data at the next index (ie. 4). This will be made
clearer later with examples.</para>
<para/>
<para>Data will be autosaved under the following conditions:</para>
<para>
<command>autosave</command> is enabled, of course :)</para>
<para><command>newfile</command> has been called to create a new file.</para>
<para>The histogram memory is acquiring data.</para>
<para>After autosave has been enabled it will start saving data at point zero in the data
file, in other words it is equivalent to calling <command>save 0</command> at regular
intervals. If a call is made to <command>save</command> eg <command>save 0</command>
then autosaving will start saving data in the next slot, ie it saves data in index 1.</para>
<para/>
<para> Autosaving is suspended under the following conditions:</para>
<para>The histogram memory has been paused</para>
<para>It resumes after a <command>histogram start</command></para>
<para>The histogram memory has been stopped</para>
<para>It resumes after a <command>histogram start</command></para>
<para><command>newfile clear</command> has been called (this forces you to call
<command>newfile</command> again before a new file can be saved).</para>
<para>It resumes saving data in a new file at index 0 after a call like <command>newfile
HISTOGRAM_XY</command> or <command>newfile scratch</command></para>
<para>When a <command>runscan</command> terminates.</para>
<para>It resumes saving in a new file starting from index 0 when a new
<command>runscan</command> is called.</para>
<example>
<title>A typical autosave run</title>
<literallayout>
<literal>
autosave 1
OK
newfile HISTOGRAM_XY
OK
histmem mode time
histmem preset 5
histmem start block
histmem started
autosave 0
QKK0000035.nx.hdf updated
autosave 0
QKK0000035.nx.hdf updated
histmem paused
save 0
QKK0000035.nx.hdf updated
OK
newfile HISTOGRAM_XY
OK
histmem start block
histmem started
autosave 0
QKK0000036.nx.hdf updated
autosave 0
QKK0000036.nx.hdf updated
histmem paused
save 0
QKK0000036.nx.hdf updated
OK
</literal>
</literallayout>
<para>You should notice that there are a couple of <command>autosave</command> commands
before the histogram memory pauses to allow a deliberate call to
<command>save</command> and that you must call <command>newfile</command> to
autosave data in a new file otherwise you will overwrite data from the previous
acquisition (NOTE: this is not a problem with <command>autosave</command>, this is
what happens already if you're not careful).</para>
</example>
<example>
<title>autosave example simulates saving a sequence of acquisitions in a single data
file</title>
<literallayout>
<literal>
autosave 10
OK
newfile HISTOGRAM_XY
OK
histmem start
histmem started
autosave 0
QKK0000025.nx.hdf updated
autosave 0
QKK0000025.nx.hdf updated
histmem pause
histmem paused
save 0
QKK0000025.nx.hdf updated
OK
histmem start
histmem started
autosave 1
QKK0000025.nx.hdf updated
autosave 1
QKK0000025.nx.hdf updated
histmem pause
histmem paused
save 1
QKK0000025.nx.hdf updated
OK
autosave 0
OK
</literal>
</literallayout>
<para>Note how <command>autosave</command> increments after the <command>save
0</command>. You should also be aware that autosaving is suspended when the
histogram memory is paused or stopped, it resumes when the histogram is
restarted.</para>
</example>
<example>
<title>autosave example using <command>runscan</command></title>
<literallayout>
<literal>
autosave 2
OK
runscan dummy_motor 7.8 -1.5 2 time 10
Scan start: 7.800000 , Scan step: -9.300000, Number of points: 2
Datatype: HISTOGRAM_XYT
histmem started
autosave 0
QKK0000027.nx.hdf updated
autosave 0
QKK0000027.nx.hdf updated
autosave 0
QKK0000027.nx.hdf updated
histmem paused
NP dummy_mot Counts Time
0 7.800 45775 10.00
Monitor 1 2746
Monitor 2 3217
Monitor 3 9863
QKK0000027.nx.hdf updated
histmem started
autosave 1
QKK0000027.nx.hdf updated
autosave 1
QKK0000027.nx.hdf updated
autosave 1
QKK0000027.nx.hdf updated
histmem paused
NP dummy_mot Counts Time
1 -1.500 45981 10.00
Monitor 1 229
Monitor 2 909
Monitor 3 5385
QKK0000027.nx.hdf updated
histmem stopped
OK
autosave check
AUTOSAVE_STATE = ENABLED
autosave 0
OK
autosave check
AUTOSAVE_STATE = DISABLED
</literal>
</literallayout>
<para>autosaving is suspended at the end of <command>runscan</command> because the
histogram memory has stopped running, but autosaving is still enabled as can be seen
from the call to <command>autosave check</command>. However there is no risk that
data will be overwritten if the histogram is restarted because the runscan command
makes a call to <command>newfile clear</command> when it terminates.</para>
</example>
<example>
<title> autosave example using two <command>runscan</command> commands</title>
<literallayout>
<literal>
autosave 1
OK
runscan dummy_motor 7.8 -1.5 2 time 5
Scan start: 7.800000 , Scan step: -9.300000, Number of points: 2
Datatype: HISTOGRAM_XYT
histmem started
autosave 0
QKK0000031.nx.hdf updated
autosave 0
QKK0000031.nx.hdf updated
histmem paused
NP dummy_mot Counts Time
0 7.800 22846 5.00
Monitor 1 276
Monitor 2 1152
Monitor 3 2643
QKK0000031.nx.hdf updated
histmem started
autosave 1
QKK0000031.nx.hdf updated
autosave 1
QKK0000031.nx.hdf updated
histmem paused
NP dummy_mot Counts Time
1 -1.500 22898 5.00
Monitor 1 91
Monitor 2 79
Monitor 3 5071
QKK0000031.nx.hdf updated
histmem stopped
OK
</literal>
</literallayout>
</example>
<example>
<title>...autosave example continued</title>
<literallayout>
<literal>
runscan dummy_motor 7.8 -1.5 2 time 5
Scan start: 7.800000 , Scan step: -9.300000, Number of points: 2
Datatype: HISTOGRAM_XYT
histmem started
autosave 0
QKK0000032.nx.hdf updated
autosave 0
QKK0000032.nx.hdf updated
histmem paused
NP dummy_mot Counts Time
0 7.800 23043 5.00
Monitor 1 8630
Monitor 2 6962
Monitor 3 4012
QKK0000032.nx.hdf updated
histmem started
autosave 1
QKK0000032.nx.hdf updated
autosave 1
QKK0000032.nx.hdf updated
histmem paused
NP dummy_mot Counts Time
1 -1.500 22887 5.00
Monitor 1 2449
Monitor 2 7798
Monitor 3 9172
QKK0000032.nx.hdf updated
histmem stopped
OK
</literal>
</literallayout>
<para>You should notice that after the first <command>runscan</command> data is
autosaved to file 31 and after the second runscan it is autosaved to file 32.</para>
</example>
<example>
<title>example shows what happens if you enable <command>autosave</command> after a
couple of datasets have been acquired and saved</title>
<literallayout>
<literal>
newfile HISTOGRAM_XY
OK
histmem start
histmem started
save 0
QKK0000038.nx.hdf updated
OK
save 1
QKK0000038.nx.hdf updated
OK
autosave 5 &lt;---- AUTOSAVE enabled here.
OK
autosave 2
QKK0000038.nx.hdf updated
autosave 2
QKK0000038.nx.hdf updated
save 2
QKK0000038.nx.hdf updated
OK
autosave 3
QKK0000038.nx.hdf updated
histmem stop
histmem stopped
save 3
QKK0000038.nx.hdf updated
OK
</literal>
</literallayout>
<para> You shold notice that autosaving properly commences saving data at index 2 after
it has been enabled instead of autosaving over index 0 or 1. It's a bit contrived
but it attempts to show the sort of thing that should happen if you are saving
multiple periods from a histogram memory.</para>
</example>
</sect1>
<sect1>
<title>Known Issues</title>
<para>Under exceptional conditions your data file may end up with one more entry than you
intended. In other words if you fail to disable autosaving after a deliberate
<command>save</command> and <command>newfile</command> has not been called before
the histogram memory starts acquiring data again, then another entry will be saved
beyond your last save. No data will be lost but you may get more than you expected.
</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,203 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Low Frequency Amplifier. LF AG1010</title><author>
<personname>Jing Chen</personname>
</author>
<date>2008-08-29 16:47</date>
</info>
<sect1>
<title>Configuration</title>
<para>The device LF AG1010 is connected to a Moxa 5430 server. SICS client communicates with
the Moxa 54530 server who sends and receives data packets to/from the LF AG1010 through
a RS232 serial interface. </para>
<variablelist>
<varlistentry>
<term>Settings of the Moxa 5430 are</term>
<listitem>
<para>Bits Per Second 19200</para>
<para>Data Bits 8</para>
<para>Parity NONE </para>
<para>Stop Bit 1</para>
<para>Flow Controls NONE</para>
<para>Port Number 4001</para>
</listitem>
</varlistentry>
</variablelist>
<para>.</para>
</sect1>
<sect1>
<title>Commands</title>
<para>Commands for getting and setting values on the LF AG1010. Sending a command without a
value will return the current value. </para>
<para>Note that all power values are in deciwatts (dW). 1dW = 0.1Watt. </para>
<variablelist>
<varlistentry>
<term><command>lf_limits </command>
<option>FPL</option>
<replaceable>power</replaceable></term>
<listitem>
<para>Set forward power limit to <replaceable>power</replaceable> dW.</para>
<para><command>lf_limits FPL 50</command> sets the forward power limit to 50dW</para>
<para><command>lf_limits FPL </command>returns the forward power limit</para>
<para>Units: dW</para>
<para>Range: 0 to 6000</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>lf_limits </command><option>RPL
</option><replaceable>power</replaceable></term>
<listitem>
<para>Set reverse power limit to <replaceable>power</replaceable> dW</para>
<para><command>lf_limits RPL 50</command> sets the reverse power limit to 50dW</para>
<para><command>lf_limits RPL </command>returns the reverse power limit</para>
<para>Units: dW</para>
<para>Range: 0 to 1600</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>lf_pagc </command><replaceable>power</replaceable></term>
<listitem>
<para>Set power level for AGC mode to <replaceable>power</replaceable> dW</para>
<para><command>lf_pagc 50 </command>sets the AGC mode power level to 50dW</para>
<para><command>lf_pagc </command>returns the AGC mode power level</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>lf_pmgc </command><replaceable>power</replaceable></term>
<listitem>
<para>Set power level for MGC mode to <replaceable>power</replaceable> %</para>
<para>MGC scale in % is for reference only. 0% - 0W, 100% full output. Not
linear! This mode is for continues and pulsed operation.</para>
<para><command>lf_pmgc 50 </command>sets the MGC mode power level to 50%</para>
<para><command>lf_pmgc </command>returns the MGC mode power level</para>
<para>Units: %</para>
<para>Range: 0 to 100</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>lf_freq </command><replaceable>freq</replaceable></term>
<listitem>
<para>Set frequency to <replaceable>freq</replaceable> Hz</para>
<para>Range: 20000 to 2000000 (20kHz to 2MHz)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>lf_burst mode</command><replaceable>mode </replaceable><command>time
</command><replaceable>time </replaceable><command>top
</command><replaceable>top</replaceable>
</term>
<listitem>
<para>Set burst mode to <replaceable>mode</replaceable></para>
<para>BURST is possible in MGC Mode only!</para>
<para>Allowed <replaceable>mode</replaceable></para>
<para><option>0</option> Burst mode OFF</para>
<para><option>1</option> Internal burst mode ON </para>
<para><option>2</option> Change burst parameters without changing burst ON/OFF</para>
<para><option>3</option> Enable external burst mode</para>
<para>Set repetition period of burst cycle to <replaceable>time</replaceable></para>
<para>Units: ms</para>
<para>Range: 1 to 50</para>
<para>Set time of power in burst cycle to <replaceable>top</replaceable></para>
<para>Units: μs</para>
<para>Range: 1 to 500</para>
<para><command>lf_burst mode 1 rtime 20 top 5</command></para>
<para>Set burst mode to Internal Mode</para>
<para>Set repetition period of burst cycle to 20 ms</para>
<para>Set time of power in burst cycle to 5 μs</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>lf_sweep mode </command>
<replaceable>mode </replaceable><command>start </command><replaceable>start
</replaceable>
<command>step </command><replaceable>step </replaceable><command>np
</command><replaceable>np</replaceable>
</term>
<listitem>
<para>Sets the sweep parameters <replaceable>start</replaceable> Hz, with step
size of <replaceable>step</replaceable> Hz and with number of points
<replaceable>np</replaceable>
</para>
<para>Allowed <command>mode</command></para>
<para><option>0</option> Sweep mode OFF</para>
<para><option>1</option> Sweep mode ON</para>
<para><option>2</option> Change sweep parameters without changing sweep mode
ON/OFF</para>
<para>Allowed <command>step </command></para>
<para>increments of 1000Hz</para>
<para><command>lf_sweep mode 1 start 20000 step 1000 np 200</command></para>
<para>Set sweep mode on, start frequency = 20kHz, step frequency = 1kHz, number
of points = 200</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>lf_sweep_run</command>
<replaceable>start step np</replaceable>
<option>mode</option></term>
<listitem>
<para>This command triggers a frequency sweep starting at
<replaceable>start</replaceable> Hz, with step of
<replaceable>step</replaceable> Hz and with number of steps =
<replaceable>np</replaceable> in full sweep cycle under optional
<option>mode</option></para>
<para>If the mode is 0 (OFF) and mode is not provide, the command will set the
mode the <option>mode</option> to 2 before the sweeping and reset to 0 (OFF)
after the sweeping.</para>
<para>Allowed <option>mode</option></para>
<para><option>0</option> Sweep mode OFF</para>
<para><option>1</option> Sweep mode ON</para>
<para><option>2</option> Change sweep parameters without changing sweep mode
ON/OFF</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>lf_meas </command></term>
<listitem>
<para>Returns forward power, reverse power and temperature?</para>
<para>
<replaceable>start</replaceable> Hz </para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Parameters</title>
<variablelist>
<varlistentry>
<term><command>N/A </command></term>
<listitem>
<para>There are no parameters to set on this device.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Description</title>
<para>The AG 1010 produces up to 1,000 Watts of power over a frequency range from lower than
20 kHz to higher than 1.2 MHz. It operates over the entire frequency range without band
switching or other adjustments. Extended range to over 2 MHz is possible with reduced
output power. Gain is rated at 60 dB with a typical gain flatness of ±1.5 dB.</para>
<para> The Front Panel offers a LCD display of Forward, Reflected and Load Power readings,
RF Status, MGC/AGC setups and operating frequency in Generator Mode.</para>
<para> Power meters are calibrated into a 50 Ohm Load and are accurate when unit operates
into matched load. Outside of matched condition, the model AG 1010s power measurement
system provides an accurate reading of VSWR.</para>
<para> When used as amplifier, the AG 1010 is compatible with most signal and function
generators, computer synthesizer cards and accurately reproduces all waveforms within
its output and bandwidth limits.</para>
<para>The Forced-air cooling system and the internal power supply are designed to permit
operation over a wide range of temperature and global AC line conditions. The AG 1010 is
built to withstand a +5 dBm (1.2Vp-p) Input signal. The unit amplifies the inputs of AM,
FM, SSB, pulse and other complex modulations. </para>
<para>OUTPUT PROTECTION AG 1010 is protected by its internal control system for 1,000 Watts
of total Forward Power and 160 Watts of Reflected Power. This will protect the amplifier
output stage from accidental overdrive at the input and an extreme mismatch at the
Output.</para>
</sect1>
<sect1>
<title>Known Issues</title>
<para>No know issues.</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,782 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Motor Controls &amp; Drive using Python</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-11-08 12:48</date>
</info>
<sect1>
<title>Drive commands</title>
<para>Many objects in SICS are drivable . This means they can run to a new value. Obvious
examples are motors. Less obvious examples include composite adjustments such as setting
a wavelength or an energy. Such devices are also called virtual motors. This class of
objects can be operated by the drive, run, success family of commands. These commands
cater for blocking and non-blocking modes of operation. </para>
<para>In the example commands below, <replaceable>"mot1"</replaceable> can be replaced by
the motor short name, or the hdb_path. hdb_path is the verbose path to the motor e.g.
<command>/sample/azimuthal_angle</command> whereas the short name is
<command>stth</command>. The tcl command line only allows use of the short name for
these commands. </para>
<para>Commands are <emphasis role="bold">CASE SENSITIVE</emphasis>.</para>
<para>These python commands are available from both the python command line and python
scripts. Firstly you must import the sics module. </para>
<para><command>from gumpy.commons import sics</command>
</para>
</sect1>
<sect1>
<title>Commands</title>
<variablelist>
<varlistentry>
<term>
<command>sics.execute</command>
<replaceable>("any_sics_command")</replaceable>
</term>
<listitem>
<para>executes <replaceable>any_sics_command</replaceable> without feedback.
Useful for when a sics command is not implemented in python. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.run</command>
<replaceable>("mot1", pos1)</replaceable>
</term>
<listitem>
<para>runs <replaceable>mot1</replaceable> to <replaceable>pos1</replaceable>.
Asynchronous. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.set</command>
<replaceable>("mot1", pos1)</replaceable>
</term>
<listitem>
<para>is the same as <command>sics.run</command>. Prints log information to
console. "set" is a universal computing keyword for setting values.
Asynchronous. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>success()</command>
</term>
<listitem>
<para>not implemented in python. In tcl, waits and blocks the command connection
until all pending operations have finished (or an interrupt occured).</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.drive</command>
<replaceable>("mot1", pos1)</replaceable>
</term>
<listitem>
<para>is the same as <command>run</command> but it blocks the client that
requested the <command>drive</command> from issuing commands until the
motion has finished. This command will set the variables in motion and wait
until the driving has finished. A <command>drive</command> can be seen as a
sequence of a <command>run</command> command as stated above immediatly
followed by a <command>success</command> command</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.multiDrive</command>
<replaceable>({"mot1":pos1, "mot2":pos2})</replaceable>
</term>
<listitem>
<para>is the same as <command>sics.drive</command> but allows you to drive a
list of motors simultaneously. Due to the verbose syntax to create a list,
this is not the default drive command. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.setpos</command>
<replaceable>("mot", oldPosition, newPosition)</replaceable>
</term>
<listitem>
<para>Sets the position value of <replaceable>oldPosition</replaceable> to
<replaceable>newPosition</replaceable>. TO BE TESTED.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.getValue</command><replaceable>("mot")</replaceable>
</term>
<listitem>
<para>returns the current position of the motor. All zero point and sign
corrections are applied</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>hardposition</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>list</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>reset</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>interest</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>uninterest</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>homerun </command>
<option>1 or 0</option>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Parameters</title>
<para>These values can be get and set using
<command>sics.getValue("</command><replaceable>hdb_path</replaceable><command>")</command>
and
<command>sics.set("</command><replaceable>hdb_path</replaceable><command>",</command><replaceable>value</replaceable><command>)</command>
via their hdb_path.</para>
<para><emphasis role="bold">BUG</emphasis>: If you try to set values that are at a higher
level of privilege, the console will report OK, but the SICS Server view will report an
error.</para>
<para>Parameters to be added: Blockage_Thresh, Blockage_Ratio, Blockage_Fail,
Backlash_offset, </para>
<variablelist>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>absenc</command>
</term>
<listitem>
<para>Privilege = User</para>
<para>not implemented in python. Value of absolute encoder not available via
hdb_path. </para>
<para>Get the absolute encoder reading.  (Only implemented by motors that have
absolute encoders.)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>accel</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>accel")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>accel",</command><replaceable>val</replaceable><command>)</command></term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set the acceleration along/about the axis controlled by this motor in
physical units per square second, ie mm/s^2, deg/s^2</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>accesscode</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>accesscode")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>accesscode",</command><replaceable>val</replaceable><command>)</command><emphasis
role="b">(persists)</emphasis></term>
<listitem>
<para>Default = <option>2</option> i.e. user</para>
<para>Privilege = Manager</para>
<para>Controls which type of user is allowed to control the motor</para>
<para>Allowed <replaceable>val</replaceable>
</para>
<para><option>0</option> Internal. Motor is reserved for internal use by
<application>SICS</application></para>
<para><option>1</option> Manager. Only users who logon as managers are allowed
to move the motor. Usually just instrument scientists </para>
<para><option>2</option> User</para>
<para><option>3</option> Spy. Anyone is allowed to move the motor</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>Blockage_Check_Interval</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>blockage_check_interval")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>blockage_check_interval",</command><replaceable>val</replaceable><command>)</command><emphasis
role="b">(persists)</emphasis></term>
<listitem>
<para>Privilege = Manager</para>
<para>Units = seconds</para>
<para>Get/Set the interval at which the motor driver checks the axis for
significant changes in position</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>decel</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>decel")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>decel",</command><replaceable>val</replaceable><command>)</command></term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set the deceleration along/about the axis controlled by this motor in
physical units per second, ie mm/s<superscript>2</superscript>,
deg/s<superscript>2</superscript>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>failafter</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>failafter")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>failafter",</command><replaceable>val</replaceable><command>)</command></term>
<listitem>
<para>Privilege = Manager</para>
<para>This is the number of consecutive failures of positioning operations this
motor allows before it thinks that something is really broken and aborts the
experiment</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>fixed</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>fixed")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>fixed",</command><replaceable>val</replaceable><command>)</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = 1.0</para>
<para>Privilege = User</para>
<para>Set to 1.0 to prevent the motor from being moved, set to -1.0 to allow
movement.</para>
<para>NOTE: The instrument manager can set the accesscode to prevent users from
moving a motor.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>home</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>
<warning>
<para>subject to change. This may be changed to a configuration only
parameter</para>
</warning>
</para>
<para>Privilege = Manager</para>
<para>Get/Set the home position for the axis which the motor controls, (ie phi,
chi, two-theta, x, y).  So it is the physical home position in the units
given by the <emphasis role="b">units</emphasis> parameter below, (ie mm,
degrees, ...)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>ignorefault</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>ignorefault")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>ignorefault",</command><replaceable>val</replaceable><command>)</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Position faults will be ignored if this is greater than zero</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>interruptmode</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>interruptmode")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>interruptmode",</command><replaceable>val</replaceable><command>)</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = 0 (continue)</para>
<para>Privilege = Manager</para>
<para>Controls what effect a motor failure has on operations</para>
<para>Allowed <replaceable>val</replaceable> one of: </para>
<para><option>0</option> Continue. A motor failure will not affect other
operations</para>
<para><option>1</option> AbortOperation. Stop current hardware operation but no
scans or batchfiles</para>
<para><option>2</option> AbortScan. Stop current scan or operation but continue
processing of batch files with next command</para>
<para><option>3</option> AbortBatch. Stop all processing, even batch
files</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>maxretry</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>maxretry")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>maxretry",</command><replaceable>val</replaceable><command>)</command></term>
<listitem>
<para>Default = <option>3</option></para>
<para>Privilege = Manager</para>
<para>The number of times that <application>SICS</application> will retry a move
if a motor has not reached the target position to within the required
precision</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>movecount</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>movecount")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>movecount",</command><replaceable>val</replaceable><command>)</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default=<option>10</option></para>
<para>Privilege = Manager</para>
<para>Controls frequency with which position changes are reported if a user
subscribes interest to a motor.  A larger value reduces the frequency</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>precision</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>precision")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>precision",</command><replaceable>val</replaceable><command>)</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Privilege = Manager</para>
<para>Controls precision of movements.  If a motor has not completed a move to
the required precision then the move command will be resent.  The number of
retries is controlled by the maxretry parameter.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sign</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>sign")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>sign",</command><replaceable>val</replaceable><command>)</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = <option>1</option></para>
<para>Privilege = Manager</para>
<para>Controls direction of motion, set to -1 to reverse.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>softlowerlim</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>softlowerlim")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>softlowerlim",</command><replaceable>val</replaceable><command>)</command>
<emphasis>(persists)</emphasis>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/set lower software limit.  This is automatically adjusted when you set
the softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>softupperlim</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>softupperlim")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>softupperlim",</command><replaceable>val</replaceable><command>)</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/set upper software limit.  This is automatically adjusted when you set
the softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>softzero</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>softzero")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>softzero",</command><replaceable>val</replaceable><command>)</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = 0</para>
<para>Privilege = User</para>
<para>Sets the zero position to <replaceable>val</replaceable>. You probably
want to use <command>setpos</command> described below, it's easier to
understand. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>speed</command></term>
<term><command>sics.getValue("</command><replaceable>/hdb_path/</replaceable><command>speed")</command></term>
<term><command>sics.set("</command><replaceable>/hdb_path/</replaceable><command>speed",</command><replaceable>val</replaceable><command>)</command></term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set the speed of motion along/about the axis controlled by this motor
in physical units per second, ie mm/s, deg/s.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>units</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Not implemented. Does not have a hdb_path. </para>
<para>Get/Set the physical units</para>
<para>Preferred <replaceable>val</replaceable>:</para>
<para><option>mm</option></para>
<para><option>degrees</option></para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title><command>list </command>output </title>
<para><replaceable>mot </replaceable><command>list</command> shows the values of the
parameters listed below, in the order listed below.</para>
<variablelist>
<varlistentry>
<term>
<computeroutput>Position</computeroutput>
</term>
<listitem>
<para>Reports the current positon</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>TargetPosition</computeroutput>
</term>
<listitem>
<para>Shows target position</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>hardlowerlim </computeroutput></term>
<listitem>
<para>Hardware lower limit for motor set in SICS configuration file</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>hardupperlim </computeroutput></term>
<listitem>
<para>Hardware upper limit for motor set in SICS configuration file</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>softlowerlim</computeroutput>
</term>
<listitem>
<para>Lower software limit.  This is automatically adjusted when you set the
softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>softupperlim</computeroutput>
</term>
<listitem>
<para>Upper software limit.  This is automatically adjusted when you set the
softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>softzero</computeroutput>
</term>
<listitem>
<para>The zero position. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>fixed</computeroutput>
</term>
<listitem>
<para><option>-1.0</option> prevents movement</para>
<para><option>1.0</option> allows movement.</para>
<para>NOTE: The instrument manager can set the accesscode to prevent users from
moving a motor.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>interruptmode</computeroutput>
</term>
<listitem>
<para>Controls what effect a motor failure has on operations</para>
<para>Values: </para>
<para><option>0</option> Continue. A motor failure will not affect other
operations</para>
<para><option>1</option> AbortOperation. Stop current hardware operation but no
scans or batchfiles</para>
<para><option>2</option> AbortScan. Stop current scan or operation but continue
processing of batch files with next command</para>
<para><option>3</option> AbortBatch. Stop all processing, even batch
files</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>precision</computeroutput>
</term>
<listitem>
<para>Controls precision of movements.  If a motor has not completed a move to
the required precision then the move command will be resent.  The number of
retries is controlled by the <command>maxretry</command> parameter.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>accesscode</computeroutput>
</term>
<listitem>
<para>Controls which type of user is allowed to control the motor</para>
<para>Allowed values: </para>
<para><option>0</option> Internal. Motor is reserved for internal use by
<application>SICS</application></para>
<para><option>1</option> Manager. Only users who logon as managers are allowed
to move the motor. Usually just instrument scientists </para>
<para><option>2</option> User</para>
<para><option>3</option> Spy. Anyone is allowed to move the motor</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>sign</computeroutput>
</term>
<listitem>
<para>Default = 1</para>
<para>Privilege = Manager</para>
<para>Controls direction of motion, set to -1 to reverse.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>failafter</computeroutput>
</term>
<listitem>
<para>This is the number of consecutive failures of positioning operations this
motor allows before it thinks that something is really broken and aborts the
experiment</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>maxretry</computeroutput>
</term>
<listitem>
<para>The number of times that <application>SICS</application> will retry a move
if a motor has not reached the target position to within the required
precision</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>ignorefault</computeroutput>
</term>
<listitem>
<para>Position faults will be ignored if this is greater than zero</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>movecount</computeroutput>
</term>
<listitem>
<para>Default=10</para>
<para>Controls frequency with which position changes are reported if a user
subscribes interest to a motor.  A larger value reduces the frequency</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>home</computeroutput>
</term>
<listitem>
<para>home position for the axis which the motor controls, (ie phi, chi,
two-theta, x, y).  So it is the physical home position in the units given by
the <emphasis role="b">units</emphasis> parameter below, (ie mm, degrees,
...)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>speed</computeroutput>
</term>
<listitem>
<para>The speed of motion along/about the axis controlled by this motor in
physical units per second, ie mm/s, deg/s.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>maxSpeed </computeroutput></term>
<listitem>
<para>Speed in <command>units</command>/s</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>accel</computeroutput>
</term>
<listitem>
<para>Acceleration along/about the axis controlled by this motor. </para>
<para>Configurable</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>maxAccel </computeroutput></term>
<listitem>
<para>Maximum allowed acceleration in
<command>units</command>/s<superscript>2</superscript></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>decel</computeroutput>
</term>
<listitem>
<para>Deceleration along/about the axis controlled by this motor. </para>
<para>Configurable</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>maxDecel </computeroutput></term>
<listitem>
<para>Maximum allowed deceleration in
<command>units</command>/s<superscript>2</superscript></para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>motOffDelay </computeroutput></term>
<listitem>
<para>Number of msec to wait before switching off a motor after a move</para>
<para>Default = <option>0</option></para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Debug </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Settle </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Check_Interval </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Thresh </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Ratio </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Fail </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Backlash_offset </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Protocol </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>absEncoder </computeroutput></term>
<listitem>
<para>Allowed values:</para>
<para><option>0</option> no absolute encoder</para>
<para><option>1</option> absolute encoder enabled</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>absEncHome </computeroutput></term>
<listitem>
<para>The calibrated "home" position in encoder counts</para>
<para>Required if <command>absEncoder</command> = 1</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>cntsPerX </computeroutput></term>
<listitem>
<para>Number of absolute encoder counts per <command>unit</command> of movement
along/about the axis of motion</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Creep_Offset </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Creep_Precision </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_count </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_1 </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_2 </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_3 </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>stepsPerX </computeroutput></term>
<listitem>
<para>Number of motor steps per <command>unit</command> of movement along/about
the axis of motion</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,756 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Motor Controls &amp; Drive using Python</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-11-08 12:48</date>
</info>
<sect1>
<title>Drive commands</title>
<para>Many objects in SICS are drivable . This means they can run to a new value. Obvious
examples are motors. Less obvious examples include composite adjustments such as setting
a wavelength or an energy. Such devices are also called virtual motors. This class of
objects can be operated by the drive, run, success family of commands. These commands
cater for blocking and non-blocking modes of operation. </para>
<para>In the example commands below, <replaceable>"mot1"</replaceable> can be replaced by
the motor short name, or the hdb_path. hdb_path is the verbose path to the motor e.g.
<command>/sample/azimuthal_angle</command> whereas the short name is
<command>stth</command>. The tcl command line only allows use of the short name for
these commands. </para>
<para>Commands are <emphasis role="bold">CASE SENSITIVE</emphasis>.</para>
<para>These python commands are available from both the python command line and python
scripts. Firstly you must import the sics module. </para>
<para><command>from gumpy.commons import sics</command>
</para>
</sect1>
<sect1>
<title>Commands</title>
<variablelist>
<varlistentry>
<term>
<command>sics.execute</command>
<replaceable>("any_sics_command")</replaceable>
</term>
<listitem>
<para>executes <replaceable>any_sics_command</replaceable> without feedback.
Useful for when a sics command is not implemented in python. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.run</command>
<replaceable>("mot1", pos1)</replaceable>
</term>
<listitem>
<para>runs <replaceable>mot1</replaceable> to <replaceable>pos1</replaceable>.
Asynchronous. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.set</command>
<replaceable>("mot1", pos1)</replaceable>
</term>
<listitem>
<para>is the same as <command>sics.run</command>. Prints log information to
console. "set" is a universal computing keyword for setting values.
Asynchronous. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>success()</command>
</term>
<listitem>
<para>not implemented in python. In tcl, waits and blocks the command connection
until all pending operations have finished (or an interrupt occured).</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.drive</command>
<replaceable>("mot1", pos1)</replaceable>
</term>
<listitem>
<para>is the same as <command>run</command> but it blocks the client that
requested the <command>drive</command> from issuing commands until the
motion has finished. This command will set the variables in motion and wait
until the driving has finished. A <command>drive</command> can be seen as a
sequence of a <command>run</command> command as stated above immediatly
followed by a <command>success</command> command</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.multiDrive</command>
<replaceable>({"mot1":pos1, "mot2":pos2})</replaceable>
</term>
<listitem>
<para>is the same as <command>sics.drive</command> but allows you to drive a
list of motors simultaneously. Due to the verbose syntax to create a list,
this is not the default drive command. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.setpos</command>
<replaceable>("mot", oldPosition, newPosition)</replaceable>
</term>
<listitem>
<para>Sets the position value of <replaceable>oldPosition</replaceable> to
<replaceable>newPosition</replaceable>. TO BE TESTED.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>sics.getValue</command><replaceable>("mot")</replaceable>
</term>
<listitem>
<para>returns the current position of the motor. All zero point and sign
corrections are applied</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>hardposition</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>list</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>reset</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>interest</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>uninterest</command>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>homerun </command>
<option>1 or 0</option>
</term>
<listitem>
<para>not implemented in python</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Parameters</title>
<para>These values are generally not used during an experiment. These are used to optimise
and protect the instrument and hence are used by the instrument scientist or computing
&amp; electronics staff. </para>
<para>These values can be get and set using </para>
<para><command>sics.getValue("</command><replaceable>hdb_path</replaceable><command>")</command>
and </para>
<para><command>sics.set("</command><replaceable>hdb_path</replaceable><command>",</command><replaceable>value</replaceable><command>)</command></para>
<para>You cannot use the motor short name. </para>
<para><emphasis role="bold">BUG</emphasis>: If you try to set values that are at a higher
level of privilege, the console will report OK, but the SICS Server view will report an
error.</para>
<para>Parameters that are persistent between restarts of SICS are marked as persists,
otherwise a restart of SICS will revert to the value in the configuration file. </para>
<para>Parameters to be added: </para>
<para>Blockage_Thresh, Blockage_Ratio, Blockage_Fail, Backlash_offset</para>
<para>Protocol, absEncoder, absEncHome, cntsPerX</para>
<para>Creep_Offset, Creep_Precision, stepsPerX</para>
<para>maxSpeed, maxAccel, maxDecel, </para>
<para>motOffDelay, Debug, Settle. </para>
<variablelist>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>absenc</command>
</term>
<listitem>
<para>Privilege = User</para>
<para>Not implemented. Does not have an hdb_path. </para>
<para>Get the absolute encoder reading.  (Only implemented by motors that have
absolute encoders.)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>accel</command></term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set the acceleration along/about the axis controlled by this motor in
physical units per square second, ie mm/s^2, deg/s^2</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>accesscode</command>
<emphasis role="b">(persists)</emphasis></term>
<listitem>
<para>Default = <option>2</option> i.e. user</para>
<para>Privilege = Manager</para>
<para>Controls which type of user is allowed to control the motor</para>
<para>Allowed <replaceable>val</replaceable>
</para>
<para><option>0</option> Internal. Motor is reserved for internal use by
<application>SICS</application></para>
<para><option>1</option> Manager. Only users who logon as managers are allowed
to move the motor. Usually just instrument scientists </para>
<para><option>2</option> User</para>
<para><option>3</option> Spy. Anyone is allowed to move the motor</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>Blockage_Check_Interval</command>
<emphasis role="b">(persists)</emphasis></term>
<listitem>
<para>Privilege = Manager</para>
<para>Units = seconds</para>
<para>Get/Set the interval at which the motor driver checks the axis for
significant changes in position</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>decel</command></term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set the deceleration along/about the axis controlled by this motor in
physical units per second, ie mm/s<superscript>2</superscript>,
deg/s<superscript>2</superscript>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>failafter</command></term>
<listitem>
<para>Privilege = Manager</para>
<para>This is the number of consecutive failures of positioning operations this
motor allows before it thinks that something is really broken and aborts the
experiment</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>fixed</command>
<emphasis role="b">(persists)</emphasis></term>
<listitem>
<para>Default = 1.0</para>
<para>Privilege = User</para>
<para>Set to 1.0 to prevent the motor from being moved, set to -1.0 to allow
movement.</para>
<para>NOTE: The instrument manager can set the accesscode to prevent users from
moving a motor.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>home</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>
<warning>
<para>subject to change. This may be changed to a configuration only
parameter</para>
</warning>
</para>
<para>Privilege = Manager</para>
<para>Get/Set the home position for the axis which the motor controls, (ie phi,
chi, two-theta, x, y).  So it is the physical home position in the units
given by the <emphasis role="b">units</emphasis> parameter below, (ie mm,
degrees, ...)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>ignorefault</command>
<emphasis role="b">(persists)</emphasis></term>
<listitem>
<para>Position faults will be ignored if this is greater than zero</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>interruptmode</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = 0 (continue)</para>
<para>Privilege = Manager</para>
<para>Controls what effect a motor failure has on operations</para>
<para>Allowed <replaceable>val</replaceable> one of: </para>
<para><option>0</option> Continue. A motor failure will not affect other
operations</para>
<para><option>1</option> AbortOperation. Stop current hardware operation but no
scans or batchfiles</para>
<para><option>2</option> AbortScan. Stop current scan or operation but continue
processing of batch files with next command</para>
<para><option>3</option> AbortBatch. Stop all processing, even batch
files</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>maxretry</command></term>
<listitem>
<para>Default = <option>3</option></para>
<para>Privilege = Manager</para>
<para>The number of times that <application>SICS</application> will retry a move
if a motor has not reached the target position to within the required
precision</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>movecount</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default=<option>10</option></para>
<para>Privilege = Manager</para>
<para>Controls frequency with which position changes are reported if a user
subscribes interest to a motor.  A larger value reduces the frequency</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>precision</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Privilege = Manager</para>
<para>Controls precision of movements.  If a motor has not completed a move to
the required precision then the move command will be resent.  The number of
retries is controlled by the maxretry parameter.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sign</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = <option>1</option></para>
<para>Privilege = Manager</para>
<para>Controls direction of motion, set to -1 to reverse.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>softlowerlim</command>
<emphasis>(persists)</emphasis>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/set lower software limit.  This is automatically adjusted when you set
the softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>softupperlim</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/set upper software limit.  This is automatically adjusted when you set
the softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>softzero</command>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = 0</para>
<para>Privilege = User</para>
<para>Sets the zero position to <replaceable>val</replaceable>. You probably
want to use <command>setpos</command> described below, it's easier to
understand. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>speed</command></term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set the speed of motion along/about the axis controlled by this motor
in physical units per second, ie mm/s, deg/s.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>units</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Not implemented. Does not have an hdb_path. </para>
<para>Get/Set the physical units</para>
<para>Preferred <replaceable>val</replaceable>:</para>
<para><option>mm</option></para>
<para><option>degrees</option></para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title><command>list </command>output </title>
<para><replaceable>mot </replaceable><command>list</command> shows the values of the
parameters listed below, in the order listed below.</para>
<variablelist>
<varlistentry>
<term>
<computeroutput>Position</computeroutput>
</term>
<listitem>
<para>Reports the current positon</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>TargetPosition</computeroutput>
</term>
<listitem>
<para>Shows target position</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>hardlowerlim </computeroutput></term>
<listitem>
<para>Hardware lower limit for motor set in SICS configuration file</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>hardupperlim </computeroutput></term>
<listitem>
<para>Hardware upper limit for motor set in SICS configuration file</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>softlowerlim</computeroutput>
</term>
<listitem>
<para>Lower software limit.  This is automatically adjusted when you set the
softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>softupperlim</computeroutput>
</term>
<listitem>
<para>Upper software limit.  This is automatically adjusted when you set the
softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>softzero</computeroutput>
</term>
<listitem>
<para>The zero position. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>fixed</computeroutput>
</term>
<listitem>
<para><option>-1.0</option> prevents movement</para>
<para><option>1.0</option> allows movement.</para>
<para>NOTE: The instrument manager can set the accesscode to prevent users from
moving a motor.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>interruptmode</computeroutput>
</term>
<listitem>
<para>Controls what effect a motor failure has on operations</para>
<para>Values: </para>
<para><option>0</option> Continue. A motor failure will not affect other
operations</para>
<para><option>1</option> AbortOperation. Stop current hardware operation but no
scans or batchfiles</para>
<para><option>2</option> AbortScan. Stop current scan or operation but continue
processing of batch files with next command</para>
<para><option>3</option> AbortBatch. Stop all processing, even batch
files</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>precision</computeroutput>
</term>
<listitem>
<para>Controls precision of movements.  If a motor has not completed a move to
the required precision then the move command will be resent.  The number of
retries is controlled by the <command>maxretry</command> parameter.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>accesscode</computeroutput>
</term>
<listitem>
<para>Controls which type of user is allowed to control the motor</para>
<para>Allowed values: </para>
<para><option>0</option> Internal. Motor is reserved for internal use by
<application>SICS</application></para>
<para><option>1</option> Manager. Only users who logon as managers are allowed
to move the motor. Usually just instrument scientists </para>
<para><option>2</option> User</para>
<para><option>3</option> Spy. Anyone is allowed to move the motor</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>sign</computeroutput>
</term>
<listitem>
<para>Default = 1</para>
<para>Privilege = Manager</para>
<para>Controls direction of motion, set to -1 to reverse.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>failafter</computeroutput>
</term>
<listitem>
<para>This is the number of consecutive failures of positioning operations this
motor allows before it thinks that something is really broken and aborts the
experiment</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>maxretry</computeroutput>
</term>
<listitem>
<para>The number of times that <application>SICS</application> will retry a move
if a motor has not reached the target position to within the required
precision</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>ignorefault</computeroutput>
</term>
<listitem>
<para>Position faults will be ignored if this is greater than zero</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>movecount</computeroutput>
</term>
<listitem>
<para>Default=10</para>
<para>Controls frequency with which position changes are reported if a user
subscribes interest to a motor.  A larger value reduces the frequency</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>home</computeroutput>
</term>
<listitem>
<para>home position for the axis which the motor controls, (ie phi, chi,
two-theta, x, y).  So it is the physical home position in the units given by
the <emphasis role="b">units</emphasis> parameter below, (ie mm, degrees,
...)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>speed</computeroutput>
</term>
<listitem>
<para>The speed of motion along/about the axis controlled by this motor in
physical units per second, ie mm/s, deg/s.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>maxSpeed </computeroutput></term>
<listitem>
<para>Speed in <command>units</command>/s</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>accel</computeroutput>
</term>
<listitem>
<para>Acceleration along/about the axis controlled by this motor. </para>
<para>Configurable</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>maxAccel </computeroutput></term>
<listitem>
<para>Maximum allowed acceleration in
<command>units</command>/s<superscript>2</superscript></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>decel</computeroutput>
</term>
<listitem>
<para>Deceleration along/about the axis controlled by this motor. </para>
<para>Configurable</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>maxDecel </computeroutput></term>
<listitem>
<para>Maximum allowed deceleration in
<command>units</command>/s<superscript>2</superscript></para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>motOffDelay </computeroutput></term>
<listitem>
<para>Number of msec to wait before switching off a motor after a move</para>
<para>Default = <option>0</option></para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Debug </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Settle </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Check_Interval </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Thresh </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Ratio </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Fail </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Backlash_offset </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Protocol </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>absEncoder </computeroutput></term>
<listitem>
<para>Allowed values:</para>
<para><option>0</option> no absolute encoder</para>
<para><option>1</option> absolute encoder enabled</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>absEncHome </computeroutput></term>
<listitem>
<para>The calibrated "home" position in encoder counts</para>
<para>Required if <command>absEncoder</command> = 1</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>cntsPerX </computeroutput></term>
<listitem>
<para>Number of absolute encoder counts per <command>unit</command> of movement
along/about the axis of motion</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Creep_Offset </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Creep_Precision </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_count </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_1 </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_2 </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_3 </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>stepsPerX </computeroutput></term>
<listitem>
<para>Number of motor steps per <command>unit</command> of movement along/about
the axis of motion</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,843 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Motor Controls &amp; Drive </title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-11-08 12:48</date>
</info>
<sect1>
<title>Drive commands</title>
<para>Many objects in SICS are drivable . This means they can run to a new value. Obvious
examples are motors. Less obvious examples include composite adjustments such as setting
a wavelength or an energy. Such devices are also called virtual motors. This class of
objects can be operated by the drive, run, Success family of commands. These commands
cater for blocking and non-blocking modes of operation.</para>
</sect1>
<sect1>
<title>Commands</title>
<variablelist>
<varlistentry>
<term>
<command>run </command>
<replaceable>mot1 pos1 mot2 pos2 ...</replaceable>
</term>
<listitem>
<para>runs <replaceable>mot1</replaceable> to <replaceable>pos1</replaceable>,
<replaceable>mot2</replaceable> to <replaceable>pos2</replaceable>,
<replaceable>...</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>success</command>
</term>
<listitem>
<para>waits and blocks the command connection until all pending operations have
finished (or an interrupt occured).</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>drive </command>
<replaceable>mot1 pos1 mot2 pos2 ...</replaceable>
</term>
<listitem>
<para>is the same as <command>run</command> but it blocks the client that
requested the <command>drive</command> from issuing commands until the
motion has finished. Can be called with one to n pairs of object new value
pairs. This command will set the variables in motion and wait until the
driving has finished. A <command>drive</command> can be seen as a sequence
of a <command>run</command> command as stated above immediatly followed by a
<command>Success</command> command</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>setpos </command>
<replaceable>mot newPosition</replaceable>
</term>
<listitem>
<para>Sets the current position value of <replaceable>mot</replaceable> to
<replaceable>newPosition</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>setpos </command>
<replaceable>mot oldPosition newPosition</replaceable>
</term>
<listitem>
<para>Sets the position value of <replaceable>oldPosition</replaceable> to
<replaceable>newPosition</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable> OR <replaceable>mot</replaceable>
<command>position</command>
</term>
<listitem>
<para>prints the current position of the motor. All zero point and sign
corrections are applied</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>hardposition</command>
</term>
<listitem>
<para>prints the current position of the motor. No corrections are applied.
Should read the same as the controller box</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>list</command>
</term>
<listitem>
<para>prints the configuration parameters for a motor, eg counts and steps per
mm/degree etc.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>slist</command>
</term>
<listitem>
<para>prints the Galil address, port number, and axis label for a motor.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>data</command>
</term>
<listitem>
<para>prints the number of steps and counts per mm or degrees, and steps per
count</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>send</command>
</term>
<listitem>
<para>sends a Galil command directly to the controller, this only works if you
login as manager. e.g. </para>
<para><command>m1 send MG _XQ </command></para>
<para><command>m1 send RUNF = 0 </command></para>
<para><command>m1 send TPE </command></para>
<para>NOTE: You can use the following shortcut for TP and TD so you dont need
to know the axis name. m1 send TP` m1 send TD` </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>reset</command>
</term>
<listitem>
<para>resets the motor parameters to default values. This is software zero to
0.0 and software limits are reset to hardware limits</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>interest</command>
</term>
<listitem>
<para>initiates automatic printing of any position change of the motor. This
command is mainly interesting for implementors of status display
clients.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>uninterest</command>
</term>
<listitem>
<para>disables interest</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>homerun </command>
<option>1 or 0</option>
</term>
<listitem>
<para><command>homerun</command> with no arguments reports the current status, a
value of "1" means that the motors have been homed.</para>
<para><command>homerun </command><replaceable>1</replaceable> will run the
homing routine. Used on motors with relative encoders e.g. slit motors.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>list </command>
<replaceable>mot</replaceable>
<option>type</option>
</term>
<listitem>
<para>Returns the motor's type.</para>
<warning>
<para>Appears to be broken. </para>
<para>Configurable virtual motors do not have a list subcommand.</para>
</warning>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Parameters</title>
<variablelist>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>absenc</command>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get the absolute encoder reading.  (Only implemented by motors that have
absolute encoders.)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>accel</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set the acceleration along/about the axis controlled by this motor in
physical units per square second, ie mm/s^2, deg/s^2</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>accesscode</command>
<replaceable>val</replaceable>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = <option>2</option> i.e. user</para>
<para>Privilege = Manager</para>
<para>Controls which type of user is allowed to control the motor</para>
<para>Allowed <replaceable>val</replaceable>
</para>
<para><option>0</option> Internal. Motor is reserved for internal use by
<application>SICS</application></para>
<para><option>1</option> Manager. Only users who logon as managers are allowed
to move the motor. Usually just instrument scientists </para>
<para><option>2</option> User</para>
<para><option>3</option> Spy. Anyone is allowed to move the motor</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>blockage_check_interval</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = Manager</para>
<para>Units = seconds</para>
<para>Get/Set the interval at which the motor driver checks the axis for
significant changes in position</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>decel</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/Set the deceleration along/about the axis controlled by this motor in
physical units per second, ie mm/s<superscript>2</superscript>,
deg/s<superscript>2</superscript>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>failafter</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Privilege = Manager</para>
<para>This is the number of consecutive failures of positioning operations this
motor allows before it thinks that something is really broken and aborts the
experiment</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>fixed</command>
<replaceable>val</replaceable>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = 1.0</para>
<para>Privilege = User</para>
<para>Set to 1.0 to prevent the motor from being moved, set to -1.0 to allow
movement.</para>
<para>NOTE: The instrument manager can set the accesscode to prevent users from
moving a motor.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>home</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>
<warning>
<para>subject to change. This may be changed to a configuration only
parameter</para>
</warning>
</para>
<para>Privilege = Manager</para>
<para>Get/Set the home position for the axis which the motor controls, (ie phi,
chi, two-theta, x, y).  So it is the physical home position in the units
given by the <emphasis role="b">units</emphasis> parameter below, (ie mm,
degrees, ...)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>ignorefault</command>
<replaceable>val</replaceable>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Position faults will be ignored if this is greater than zero</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>interruptmode</command>
<replaceable>val</replaceable>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = 0 (continue)</para>
<para>Privilege = Manager</para>
<para>Controls what effect a motor failure has on operations</para>
<para>Allowed <replaceable>val</replaceable> one of: </para>
<para><option>0</option> Continue. A motor failure will not affect other
operations</para>
<para><option>1</option> AbortOperation. Stop current hardware operation but no
scans or batchfiles</para>
<para><option>2</option> AbortScan. Stop current scan or operation but continue
processing of batch files with next command</para>
<para><option>3</option> AbortBatch. Stop all processing, even batch
files</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>maxretry</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Default = <option>3</option></para>
<para>Privilege = Manager</para>
<para>The number of times that <application>SICS</application> will retry a move
if a motor has not reached the target position to within the required
precision</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>movecount</command>
<replaceable>val</replaceable>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default=<option>10</option></para>
<para>Privilege = Manager</para>
<para>Controls frequency with which position changes are reported if a user
subscribes interest to a motor.  A larger value reduces the frequency</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>precision</command>
<replaceable>val</replaceable>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Privilege = Manager</para>
<para>Controls precision of movements.  If a motor has not completed a move to
the required precision then the move command will be resent.  The number of
retries is controlled by the maxretry parameter.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>sign</command>
<replaceable>val</replaceable>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = <option>1</option></para>
<para>Privilege = Manager</para>
<para>Controls direction of motion, set to -1 to reverse.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>softlowerlim</command>
<replaceable>val</replaceable>
<emphasis>(persists)</emphasis>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/set lower software limit.  This is automatically adjusted when you set
the softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>softupperlim</command>
<replaceable>val</replaceable>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Privilege = User</para>
<para>Get/set upper software limit.  This is automatically adjusted when you set
the softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>softzero</command>
<replaceable>val</replaceable>
<emphasis role="b">(persists)</emphasis>
</term>
<listitem>
<para>Default = 0</para>
<para>Privilege = User</para>
<para>Sets the zero position to <replaceable>val</replaceable>. You probably
want to use <command>setpos</command> described below, it's easier to
understand. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>speed</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para> Privilege = User</para>
<para>Get/Set the speed of motion along/about the axis controlled by this motor
in physical units per second, ie mm/s, deg/s.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mot</replaceable>
<command>units</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para> Privilege = User</para>
<para>Get/Set the physical units</para>
<para>Preferred <replaceable>val</replaceable>:</para>
<para><option>mm</option></para>
<para><option>degrees</option></para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title><command>list </command>output </title>
<para><replaceable>mot </replaceable><command>list</command> shows the values of the
parameters listed below, in the order listed below.</para>
<variablelist>
<varlistentry>
<term>
<computeroutput>Position</computeroutput>
</term>
<listitem>
<para>Reports the current positon</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>TargetPosition</computeroutput>
</term>
<listitem>
<para>Shows target position</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>hardlowerlim </computeroutput></term>
<listitem>
<para>Hardware lower limit for motor set in SICS configuration file</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>hardupperlim </computeroutput></term>
<listitem>
<para>Hardware upper limit for motor set in SICS configuration file</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>softlowerlim</computeroutput>
</term>
<listitem>
<para>Lower software limit.  This is automatically adjusted when you set the
softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>softupperlim</computeroutput>
</term>
<listitem>
<para>Upper software limit.  This is automatically adjusted when you set the
softzero or use the <command>setpos</command> command.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>softzero</computeroutput>
</term>
<listitem>
<para>The zero position. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>fixed</computeroutput>
</term>
<listitem>
<para><option>-1.0</option> prevents movement</para>
<para><option>1.0</option> allows movement.</para>
<para>NOTE: The instrument manager can set the accesscode to prevent users from
moving a motor.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>interruptmode</computeroutput>
</term>
<listitem>
<para>Controls what effect a motor failure has on operations</para>
<para>Values: </para>
<para><option>0</option> Continue. A motor failure will not affect other
operations</para>
<para><option>1</option> AbortOperation. Stop current hardware operation but no
scans or batchfiles</para>
<para><option>2</option> AbortScan. Stop current scan or operation but continue
processing of batch files with next command</para>
<para><option>3</option> AbortBatch. Stop all processing, even batch
files</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>precision</computeroutput>
</term>
<listitem>
<para>Controls precision of movements.  If a motor has not completed a move to
the required precision then the move command will be resent.  The number of
retries is controlled by the <command>maxretry</command> parameter.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>accesscode</computeroutput>
</term>
<listitem>
<para>Controls which type of user is allowed to control the motor</para>
<para>Allowed values: </para>
<para><option>0</option> Internal. Motor is reserved for internal use by
<application>SICS</application></para>
<para><option>1</option> Manager. Only users who logon as managers are allowed
to move the motor. Usually just instrument scientists </para>
<para><option>2</option> User</para>
<para><option>3</option> Spy. Anyone is allowed to move the motor</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>sign</computeroutput>
</term>
<listitem>
<para>Default = 1</para>
<para>Privilege = Manager</para>
<para>Controls direction of motion, set to -1 to reverse.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>failafter</computeroutput>
</term>
<listitem>
<para>This is the number of consecutive failures of positioning operations this
motor allows before it thinks that something is really broken and aborts the
experiment</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>maxretry</computeroutput>
</term>
<listitem>
<para>The number of times that <application>SICS</application> will retry a move
if a motor has not reached the target position to within the required
precision</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>ignorefault</computeroutput>
</term>
<listitem>
<para>Position faults will be ignored if this is greater than zero</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>movecount</computeroutput>
</term>
<listitem>
<para>Default=10</para>
<para>Controls frequency with which position changes are reported if a user
subscribes interest to a motor.  A larger value reduces the frequency</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>home</computeroutput>
</term>
<listitem>
<para>home position for the axis which the motor controls, (ie phi, chi,
two-theta, x, y).  So it is the physical home position in the units given by
the <emphasis role="b">units</emphasis> parameter below, (ie mm, degrees,
...)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>speed</computeroutput>
</term>
<listitem>
<para>The speed of motion along/about the axis controlled by this motor in
physical units per second, ie mm/s, deg/s.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>maxSpeed </computeroutput></term>
<listitem>
<para>Speed in <command>units</command>/s</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>accel</computeroutput>
</term>
<listitem>
<para>Acceleration along/about the axis controlled by this motor. </para>
<para>Configurable</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>maxAccel </computeroutput></term>
<listitem>
<para>Maximum allowed acceleration in
<command>units</command>/s<superscript>2</superscript></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<computeroutput>decel</computeroutput>
</term>
<listitem>
<para>Deceleration along/about the axis controlled by this motor. </para>
<para>Configurable</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>maxDecel </computeroutput></term>
<listitem>
<para>Maximum allowed deceleration in
<command>units</command>/s<superscript>2</superscript></para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>motOffDelay </computeroutput></term>
<listitem>
<para>Number of msec to wait before switching off a motor after a move</para>
<para>Default = <option>0</option></para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Debug </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Settle </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Check_Interval </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Thresh </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Ratio </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Blockage_Fail </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Backlash_offset </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Protocol </computeroutput><replaceable/></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>absEncoder </computeroutput></term>
<listitem>
<para>Allowed values:</para>
<para><option>0</option> no absolute encoder</para>
<para><option>1</option> absolute encoder enabled</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>absEncHome </computeroutput></term>
<listitem>
<para>The calibrated "home" position in encoder counts</para>
<para>Required if <command>absEncoder</command> = 1</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>cntsPerX </computeroutput></term>
<listitem>
<para>Number of absolute encoder counts per <command>unit</command> of movement
along/about the axis of motion</para>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Creep_Offset </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>Creep_Precision </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_count </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_1 </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_2 </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>posit_3 </computeroutput></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term><computeroutput>stepsPerX </computeroutput></term>
<listitem>
<para>Number of motor steps per <command>unit</command> of movement along/about
the axis of motion</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Instrument specific drive commands</title>
<para>Many objects in SICS are drivable . This means they can run to a new value. Obvious
examples are motors.</para>
<para>Sometimes you might want to do something special with a motor, like run it in an
oscillation mode, such as an oscillating collimator or attenuator. The commands in this
section relate to these instrument specific cases. These commands are generally
non-blocking mode.</para>
<para>These commands do not apply to all instruments</para>
</sect1>
<sect1>
<variablelist>
<varlistentry>
<term>
<command>radcol start </command>
<replaceable>n</replaceable>
</term>
<listitem>
<para>Applicable to Pelican</para>
<para>Runs the <command>rco </command> motor for n cycles.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,163 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>3He</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-08-29 16:47</date>
</info>
<sect1>
<title>Introduction</title>
<para>The system of He3 project consists of a polarizer and analyser which are controlled by
Labview servers. The two Labview servers run on one machine and communicate with a
corresponding SICS driver over TCP/IP. The polarizer and analyser share a single NI I/O
board and a HMP2030 power supply. </para>
<para>TCP port for polariser 55011</para>
<para>TCP port for analyser 55012 </para>
</sect1>
<sect1>
<title>Configuration</title>
<para><emphasis role="bold">TBD</emphasis>: How to get this running in SICS</para>
<para>e.g.</para>
<para>
<orderedlist>
<listitem xmlns:xi="http://www.w3.org/2001/XInclude">
<para><literal>cd /usr/local/nbi/sics/taipan/</literal></para>
</listitem>
<listitem xmlns:xi="http://www.w3.org/2001/XInclude">
<para><literal>&gt; vim taipan_setup.txt</literal></para>
</listitem>
</orderedlist>
</para>
<para>0 = off, 1 = on</para>
<para>Save the file and restart SICS.</para>
</sect1>
<sect1>
<title>Commands</title>
<variablelist>
<varlistentry>
<term><command>PolTrigger </command><replaceable>val</replaceable></term>
<listitem>
<para>Turn the magic box polariser on and off. </para>
<para>Allowed <replaceable>val</replaceable>
</para>
<para><option>0</option> polariser off </para>
<para><option>1</option> polariser on </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>AnaTrigger </command><replaceable>val</replaceable></term>
<listitem>
<para>Turn the magic box analyser on and off. </para>
<para>Allowed <replaceable>val</replaceable>
</para>
<para><option>0</option> analyser off </para>
<para><option>1</option> analyser on </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>PolRecord</command></term>
<listitem>
<para>This command will manually trigger a logging event of the polariser
parameters:</para>
<para>amplitude</para>
<para>frequency </para>
<para>state</para>
<para>The data is appended to a dedicated log file. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>AnaRecord </command><replaceable>val</replaceable></term>
<listitem>
<para>This command will manually trigger a logging event of the analyser
parameters:</para>
<para>amplitude</para>
<para>frequency </para>
<para>state</para>
<para>The data is appended to a dedicated log file. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hmpVolt </command><replaceable>chID val</replaceable></term>
<listitem>
<para>Units: V (volt)</para>
<para>set or get the voltage at channel <replaceable>chID</replaceable>. (???
which channel does the 3He system use. ). </para>
<para>If <replaceable>val</replaceable> is not provided, returns the the voltage
and current setpoints and measurements of channel
<replaceable>chID</replaceable>. Otherwise it first sets the voltage of
channel <replaceable>chID</replaceable> to <replaceable>val</replaceable>
and then as a verification it displays the voltage and current setpoints and
measurements</para>
<para>Allowed <replaceable>chID</replaceable> ???</para>
<para>What is a reasonable voltage ??? </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hmpCurr </command><replaceable>chID val</replaceable></term>
<listitem>
<para>Units: A (ampere)</para>
<para>set or get the current at channel <replaceable>chID</replaceable>. (???
which channel does the 3He system use. ). </para>
<para>If <replaceable>val</replaceable> is not provided, returns the the voltage
and current setpoints and measurements of channel
<replaceable>chID</replaceable>. Otherwise it first sets the current of
channel <replaceable>chID</replaceable> to <replaceable>val</replaceable>
and then as a verification it displays the voltage and current setpoints and
measurements</para>
<para>Allowed <replaceable>chID</replaceable> ???</para>
<para>What is a reasonable current ??? </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hmpMeas </command><replaceable>chID </replaceable></term>
<listitem>
<para>Units: V (volt) A (ampere)</para>
<para>get the current and voltage at channel <replaceable>chID</replaceable>. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hmpSet </command><replaceable>chID current voltage</replaceable></term>
<listitem>
<para>Units: A (ampere) V (volt) </para>
<para>set the current and voltage at channel <replaceable>chID</replaceable>. (???
which channel does the 3He system use. ). </para>
<para>As a verification it displays
the voltage and current setpoints and measurements</para>
<para>Allowed <replaceable>chID</replaceable> ???</para>
<para>What is a reasonable current ??? </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hmpOutput </command><replaceable>chID state</replaceable></term>
<listitem>
<para>get or set the output state at channel <replaceable>chID</replaceable>.</para>
<para>If <replaceable>state</replaceable> is not provided, returns the output
state of channel <replaceable>chID</replaceable>. Otherwise it sets the
output state of channel <replaceable>chID</replaceable> to
<replaceable>state</replaceable>. </para>
<para>Allowed <replaceable>state</replaceable></para>
<para>on off</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Parameters</title>
<para></para>
</sect1>
<sect1>
<title>Description</title>
<para>Explanation of what a command is doing when it is more than just setting a target
value. e.g. changing magnetic field in a superconducting magnet. </para>
</sect1>
<sect1>
<title>Known Issues</title>
<para>Alerts the user to known operational problems</para>
</sect1>
<sect1>
<title>Troubleshooting</title>
<para>What to do if things go wrong</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,957 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Taipan User Guide - deprecated to db5SICSUserGuideTaipan.xml</title><author>
<personname>Kirrily Rule</personname>
</author>
<date>2013-04-09 16:47</date>
</info>
<sect1>
<title>Quick start guide</title>
<para>To start running Gumtree, double click on the icon on the desktop. Two windows will
automatically open and you will be logged in as “Manager”. (Why manager, why not
user???)</para>
<para>This quick start guide assume SICS is configured for your experiment, and that it is
running. If it is not, go to the section <xref linkend="status"/></para>
<sect2>
<title>To edit and run a batch file</title>
<figure>
<title>Script Perspective </title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm" fileref="taipanGumtree.jpg"
/></imageobject>
</mediaobject>
</figure>
<para>Open one of the previous batch files by double clicking on a .tcl file in the
Project Explorer window. This will appear in the Tree View panel above. You can edit
this and save it with a new file name (File -> Save as). </para>
<para>To run this file, drag it into the Buffer Queue. You can either press Play, or
Validate to check the file. </para>
<para>All commands listed with <emphasis>&gt;
</emphasis> should be typed into the SICS command line in Gumtree, or in the black
sicsclient window opened via PuTTy (Taipan ICS profile). Either of these will drive
the instrument. Only those commands executed from Gumtree will be printed into the
Log file. </para>
</sect2>
<sect2>
<title> Live visualisation of data</title>
<figure>
<title>Analysis Perspective </title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm"
fileref="taipanGumtree1.jpg"/></imageobject>
</mediaobject>
</figure>
<para>In the Scripting control window, choose </para>
<para><command>Load Script -> analysis -> live data</command> to show a live plot as the
counts are taken. </para>
<para>In this window, you can tick (or untick) autofit (for a Gaussian fit), and
normalise (which normalises to time) You can also change which detector you wish to
see the counts in:</para>
<para>bm1_counts = monitor </para>
<para>bm2_counts = detector </para>
<para>You can also control the fitting range in this window </para>
<para>You can add past data sets to the Plot 2 window (beneath the liveplot window).
Highlight the plots you wish to add, be sure you have the correct detector choice
and x-axis parameter selected, then click on the button “Import Data Files to
Plot2”. These can also be removed for the plot. There is currently no fitting
procedure for Plot2. </para>
<note>
<para>At any time, to interrupt SICS you can click on the red button, or type
>>INT1712 3</para>
</note>
</sect2>
</sect1>
<sect1 xml:id="status">
<title>SICS status and login</title>
<para>Before you can control the instrument, there are 2 programs that need to be running,
SICS and Gumtree. SICS should already be configured and running by the local contact.
This procedure allows you to check this.</para>
<sect2>
<title>Login to the SICS computer from a PuTTy terminal</title>
<orderedlist>
<listitem>
<para>On the Microsoft Windows computer in the instrument cabin, find the putty
program. <figure>
<title>PuTTy icon on the Microsoft Windows desktop </title>
<mediaobject>
<imageobject><imagedata align="left" width="30mm"
fileref="putty.jpg"/></imageobject>
</mediaobject>
</figure></para>
</listitem>
<listitem>
<para>Choose the ICS computer from the list of Saved Sessions</para>
</listitem>
<listitem>
<para>Load and open</para>
</listitem>
<listitem>
<para>Use your NBI username and password, supplied by the Bragg Institute User
Office</para>
</listitem>
<listitem>
<para>You will now have a command prompt to a Linux operating system</para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>Check SICS status</title>
<para>Normally SICS will be running. You can check if SICS is running by using the PuTTy
window and at the Linux operating system command prompt type</para>
<para><command>&gt; runsics status</command>
</para>
<para>If the status shows that SICS is not running, or if there is a change in the SICS
configuration files e.g. a piece of sample environment has been added, you should
contact your local contact. </para>
<para>If the local contact has confirmed it is OK to restart SICS, then in the PuTTy
window type </para>
<para><command>&gt; runsics stop</command>
</para>
<para><command>&gt; runsics start</command>
</para>
</sect2>
<sect2>
<title>Login to SICS using the putty session</title>
<para>In the previous section, you logged into the ICS (instrument control server)
computer using putty. At the Linux operating system command prompt, you will run a
program that will give you a sics command prompt. </para>
<para>For most cases, you won't have to do this. A SICS command prompt is available in
Gumtree. </para>
<para>At the Linux operating system command prompt type </para>
<para><command>&gt; sicsclient</command></para>
<para>You should see <computeroutput>OK</computeroutput> on the screen.</para>
<para>You now have a SICS command prompt. It may look strange since the cursor will be
on a blank line. You will not have access to the Linux operating system command
prompt until you log off.</para>
<para>Next step is to login to sics by typing</para>
<para><command>&gt; user password</command> where user is literally the word "user" and
the password will be supplied by the local contact</para>
<para>You can replace user with spy. The spy login provides read-only access to SICS.
</para>
</sect2>
<sect2>
<title>Login to SICS from Gumtree</title>
<figure>
<title>Gumtree connected to SICS </title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm"
fileref="taipanGumtree2.jpg"/></imageobject>
</mediaobject>
</figure>
<para>Normally, Gumtree will be connected to SICS, as in the figure above. </para>
<para>In Gumtree you reconnect to SICS if you restart SICS. This is done by clicking on
the little man at the bottom of the Gumtree screen and log in to SICS. He will be
standing still, and you will see the word Disconnected when not connected. He will
be running when connected as in the figure. You will then need to start a new Sics
terminal in Gumtree. From the left screen, in the project explorer window, Right
click on SICS and choose the option to start a new “SICS telnet terminal”. </para>
<note>
<para>Reconnection won't work properly if SICS has changed configuration e.g. you've
added a piece of sample environment. In this case, when you restart SICS you
should also restart Gumtree </para>
<para/>
</note>
</sect2>
</sect1>
<sect1>
<title>Preparing the spectrometer</title>
<sect2>
<title>Aligning the spectrometer</title>
<warning>
<title>12T magnet</title>
<para> When using the 12T magnet on TAIPAN, you must work in fixed Ki mode, as the
magnet is too heavy to move M2. Consider the energy transfer range required to
determine the appropriate Ei for these experiments. </para>
</warning>
<para>After discussing your instrument preferences with your local contact, they will
align the spectrometer in the following way:</para>
<itemizedlist>
<listitem>
<para>Drive the spectrometer to the required incident energy (for elastic mode)
= e.g. 14.87meV</para>
</listitem>
<listitem>
<para>Drive the analyser arm to the straight-through position (s2=0, a1=0, a2=0,
atrans=19)</para>
</listitem>
<listitem>
<para>Visually check the straight-through arm and change any motors
accordingly</para>
</listitem>
<listitem>
<para>Place the Ni sample on the sample stage, and Borated Al sheets over the
analyser collimator. (the detector saturates at ~35,000 counts/sec)</para>
</listitem>
<listitem>
<para>Check M1 alignment with a rocking scan</para>
</listitem>
<listitem>
<para>Check S2=0 alignment with a rocking scan</para>
</listitem>
<listitem>
<para>Check A2=0 alignment with a rocking scan</para>
</listitem>
<listitem>
<para>Remove the Al attenuator and insert collimators if they need
changing</para>
</listitem>
<listitem>
<para>Perform the Ni powder calibration, using 5 peaks</para>
</listitem>
<listitem>
<para>From the least squares fitting of these peaks, update the new M1 offset,
M2 offset and S2 offset.</para>
</listitem>
<listitem>
<para>With the spectrometer at S2=-50, and atrans=0 (to view the Vanadium
incoherent peak from the Ni sample can), perform an A1 scan and an A1/A2
scan around the elastic position.</para>
</listitem>
<listitem>
<para>Perform an En scan (where Ei will move if Ef is fixed). Here the FWHM of
the peak will give you the resolution of your instrument.</para>
<para/>
</listitem>
</itemizedlist>
<warning>
<title/>
<para>When driving Ei or Ef in this stage of the setup, the software calculates a
constant-Q instrument position based on the current UB matrix (usually from the
previous experiment). This will often drive S1, S2, sgu and sgl to unexpected
positions. To constrain these so that they dont move unexpectedly, fix the
motors so they don't move. </para>
<para>Motors can be fixed (1) or unfixed (-1) and their status checked by typing the
motor name </para>
<para><command>&gt; S1 fixed 1 (fixes S1) </command></para>
<para><command>&gt; S1 fixed -1 (unfixes S1)</command></para>
<para>Alternatively you can drive vei which drives only the M1 and M2 motors this
cannot be used in a scan command. </para>
<para><command>&gt; drive vei 14.87 </command></para>
<para><command>&gt; tasub update </command></para>
<para><command>&gt; ei </command></para>
<para/>
</warning>
<warning>
<title/>
<para>You will often need to “home” the slits if they have been unplugged or removed
during the setup. The pa_left and pa_right slits can vary between -27 (open) and
0 (closed), while the pa_top and pa_bottom slits can vary between -200 (open)
and 0 (closed). The same limits apply for the ps_slits. </para>
<para><command>&gt; pa_left homerun 1 </command> (this will do all of the slits)
(??? really)</para>
</warning>
<para/>
<para>Confirm the following setups for your experiment. This can be done by typing
everything except the red values below: </para>
<para><command>&gt; tasub ss -1 </command> (Scattering sense = M+1, S-1, A+1) </para>
<para><command>&gt; tasub ana ss 1</command> (Scattering sense = M+1, S-1, A+1) </para>
<para><command>&gt; tasub outofplane 0</command> (Confines the scattering sense to be in
the plane) </para>
<para><command>&gt; tasub const ki / kf / elastic</command> (Defines whether Ei or Ef
are fixed, or if both are fixed) </para>
<para/>
</sect2>
<sect2>
<title>Aligning your sample</title>
<para> At the beginning of an experiment load the “Experimental setup” script (in the
scripts window, right screen) to list the most important configuration identifiers
for the experiment. These should appear in the header lines in your data files. For
instance, these include: </para>
<itemizedlist>
<listitem>
<para>Proposal number and title</para>
</listitem>
<listitem>
<para>Users name, and research team present</para>
</listitem>
<listitem>
<para>Local contacts name</para>
</listitem>
<listitem>
<para>Sample information including number of samples and sample environment
requirements</para>
</listitem>
<listitem>
<para>Particular instrument setup features (scattering sense, collimation,
filters, slits etc)</para>
</listitem>
</itemizedlist>
<para>Next the UB matrix needs to be set. To do this, you need to input the cell
parameters and at least 2 reflections which will define your scattering plane. These
can be calculated for your system using the file
“/home/taipan/calculatedDspaceTAIPAN.xls” or something similar, such as the ICSD
website. </para>
<variablelist>
<varlistentry>
<term><command>&gt; tasub listub</command></term>
<listitem>
<para>shows the current UB matrix, cell parameters and reference
peaks</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub cell a b c alpha beta gamma</command>
</term>
<listitem>
<para> input new lattice parameters</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub addref qh qk ql</command></term>
<listitem>
<para> adds a new reflection to the list when Taipan is at the
reflection</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub addref qh qk ql a3 a4 sgu sgl ei ef</command></term>
<listitem>
<para> adds a new reflection from a calculation</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub addauxref qh qk ql</command></term>
<listitem>
<para> adds a new reflection where S2 is calculated from the lattice
parameters only. This will also calculate the relative S1
positions</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub del num</command></term>
<listitem>
<para> deletes one of the previously stored reflections</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub listref</command></term>
<listitem>
<para> lists the reflections that have been input</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub makeub 1 2</command></term>
<listitem>
<para> calculates new UB matrix from reflections 1 and 2</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; tasub calcang qh qk ql ei ef</command></term>
<listitem>
<para> calculates reflection from UB matrix be careful when changing
lattice parameters, as this command wont use them! Output: M2 S1 S2 sgu
sgl A2</para>
</listitem>
</varlistentry>
</variablelist>
<example>
<title>Sample alignment</title>
<para> For Ei = Ef = 14.87 meV</para>
<para><command>&gt; tasub cell 5.011 5.85 10.353 90 92.4 90</command>
</para>
<para><command>&gt; tasub calcang 1 0 0 14.87 14.87 (calculated S2 = 27.1)
</command></para>
<para><command>&gt; tasub calcang 1 1 0 14.87 14.87 (calculated S2 = 35.9)
</command></para>
<para><command>&gt; tasub calcang 0 2 0 14.87 14.87 (calculated S2 = 47.3)
</command></para>
<para>Drive the instrument to the calculated S2 value of a particular peak. The
other motor positions are not correctly set at this point. This will also give
you a relative s1 position between the peaks.</para>
<para>Scan S1 until you find the peak. </para>
<para><command>&gt; bmonscan clear</command></para>
<para><command>&gt; bmonscan add S1 -10 0.2 </command> (motor name, starting point,
step size)</para>
<para><command>&gt; bmonscan run 60 timer 5 </command> (scans 60 points, for a time
of 5 seconds per point)</para>
<para>OR</para>
<para><command>&gt; runscan s1 -10 0 101 time 5 </command> (motor, start, stop, #
pts, time (the mode in secs))</para>
<para>(this does not work for multiple motors yet)</para>
<para> (This step should hopefully be replaced by the differential scan, or the
rate-meter) </para>
<para>Once the peak position (S1) has been optimised, scan sgu and sgl </para>
<para><command>&gt; runscan sgl -10 10 21 time 1 </command></para>
<para><command>&gt; runscan sgu -10 10 21 time 1 </command></para>
<para>Once the peak has been optimised with SGU and SGL (and you are sitting at the
peak position!!) you can set this as one of your reference peaks, where the
current motor values define the peak position. </para>
<para><command>&gt; tasub addref 1 0 0 </command></para>
<para>Calculate the values of S1 and S2 for the next peak use the </para>
<para><command>&gt; tasub calcang qh qk ql ei ef </command></para>
<para>command to see the relative values of S1 and S2 as calculated from the lattice
parameters!</para>
<para>
</para>
<para>Repeat for at least one other peak, preferably one orthogonal to the first. </para>
<para><command>&gt; tasub addref 0 0 1 </command></para>
<para><command>&gt; tasub listref </command> (to see the observed peaks in your list
(e.g. number 4 and 5)) </para>
<para><command>&gt; tasub makeub 4 5 </command>(this used peaks 4 and 5 to calculate
the UB matrix) </para>
<para><command>&gt; tasub update </command></para>
<para><command>&gt; tasub listub </command></para>
<para>Once this has been set, then you should be able to drive your spectrometer to
any accessible qh, qk, ql and en.</para>
<warning>
<title>
</title>
<para>At the end of each change, be sure to type <command>&gt; tasub
update</command></para>
</warning>
</example>
</sect2>
<sect2>
<title>Reducing background with a slit scan</title>
<para>Once your sample has been aligned, add the PG filter to the instrument. You could
test the effectiveness of the filter by scanning a peak that will display higher
order scattering e.g. (½ 0 0) which does not exist except from higher order
scattering from the (1 0 0 ). Sometimes you might want to add an additional filter.
Finally you can scan your slits to reduce the background scattering. </para>
<para><command>&gt; runscan pa_left -15 -2 27 time 1 </command>(scans 27 points, for a
time of 1 seconds per point)</para>
<para> After this, consider if you need to add more shielding to the detector drum or
any other part of the instrument (e.g. manual slits on analyser arm, additional PG
filters).</para>
</sect2>
<sect2>
<title>Setting the (new) lattice parameters</title>
<para>When the sample temperature has stabilized at the required temperature, the low
temperature lattice parameters can be checked. For example, a tetragonal system in
the ab-scattering plane can be optimized as follows: </para>
<para><command>&gt; drive qh 5 qk 0 ql 0 en 0 </command></para>
<para><command>&gt; runscan qh 4.985 5.015 31 time 5 </command></para>
<para>The centre of this scan should be close to 5, but could be shifted. This will be
the fit value from the scan. Then you can <emphasis role="underline">change the
<emphasis role="bold">a</emphasis> lattice parameter</emphasis> accordingly
in tasub </para>
<para>
a<subscript>new</subscript>=a<subscript>old</subscript>(peak<subscript>calculated</subscript>/peak<subscript>centre
from scan</subscript>) replace with jpg of equation??? MathML doesn't transform
to pdf using oxygen xslt. </para>
<para><command>&gt; tasub cell a b c alpha beta gamma </command></para>
<para>The next peak can be aligned in the same way </para>
<para><command>&gt; drive qh 0 qk 3 ql 0 en 0 </command></para>
<para><command>&gt; runscan qk 2.985 3.015 31 time 5 </command></para>
<para>Find the centre of this scan then you can <emphasis role="underline">change the
<emphasis role="bold">b</emphasis> lattice parameter</emphasis> accordingly
in tasub. Also, while sitting on the peak, perform the </para>
<para><command>&gt; tasub addref 0 3 0 </command></para>
<para>If your sample is cubic (and remains cubic at low temperatures) and you are in the
HK0 scattering plane, then the lattice parameters are best set with a peak that
involved both H and K for instance the 110 peak.</para>
<para>Make sure after you have changed your lattice parameters, and both peaks have been
added to the reference list that you remake your ub matrix! </para>
</sect2>
</sect1>
<sect1>
<title>Running an experiment</title>
<sect2>
<title> Creating and running batch files</title>
<para>Batch files are stored in /usr/local/nbi/sics/taipan/batch and are just text files
with the extension .tcl. You can edit these in a text editor, or the editing panel
of the left window. Your file, filename.tcl can be run by dragging and dropping into
the Buffer Queue and then run by pressing the “Play” button. </para>
<para>You can also queue additional files to run by dragging and dropping them into
Batch Queue window. These will then be run sequentially. Files can be removed and
edited or replaced as desired from the Batch Queue window. Once the file has been
read into the buffer, it can no longer be edited. For this reason it is recommended
that multiple short files are created. These can be run multiple times if necessary.
</para>
</sect2>
<sect2>
<title>Validation of scans</title>
<para>To check your script, you can validate it using the Validation tab in the Buffer
Queue. Drag your file into the Validate window and click on Validate. Information
about your file will scroll through the log screen. Use this to see if any errors or
motor limits have been reached. </para>
</sect2>
<sect2>
<title>Example experiment script</title>
<para>
<literallayout>
# This is a comment and will not be executed
drive qh 2.5 qk 0 ql 3.5 en 32
bmonscan clear
bmonscan add qh 2.5 0.1
bmonscan run 31 monitor 1000000
# This is another comment with important information
drive qh -2.5 qk 0 ql 3.5 en 32
bmonscan clear
bmonscan add s2 -55 -0.1
bmonscan run 31 monitor 1000000
clientput [m2 absenc] # (prints out the m2 absolute encoder value)
</literallayout>
</para>
</sect2>
<sect2>
<title>Motor errors</title>
<warning>
<title/>
<para>If you ever see the following error message:</para>
<para><command>&gt; ERROR: THREAD ZERO NOT RUNNING ON CONTROLLER on m1</command></para>
<para> Type the following (this is case sensitive)</para>
<para><command>&gt; m1 send RS </command></para>
<para> If you ever see the following error message:</para>
<para><command>&gt; ERROR: MOTOR CONTROLLER RUN ERROR: -102 on m2 </command></para>
<para>Type the following (this is case sensitive)</para>
<para><command>&gt; m2 send MG RUNF</command> and if this is a number not 0 or 1,
then:</para>
<para><command>&gt; m2 send RUNF=0</command></para>
</warning>
</sect2>
<sect2>
<title>Creating and accessing log files</title>
<para>There are new log files written for each experiment. These are located in:
<computeroutput>J:\data\current\reports\exp#\LogFile.txt</computeroutput> on the
Microsoft Windows DAV computer. These will be updated as the experiment progresses
and should include both commands from the command line window and the batch file. </para>
<para>Use a program such as WinSCP to transfer files to your computer. The files will be
in
<computeroutput>/experiments/taipan/data/current/reports/exp#/LogFile.txt</computeroutput>.
These files are archived to a proposal directory at the end of each cycle e.g.
<computeroutput>/experiments/taipan/data/proposal/proposal#/reports/exp#/LogFile.txt</computeroutput>
</para>
</sect2>
</sect1>
<sect1>
<title>Sample environment control</title>
<sect2>
<title>Cryo-furnace with Lakeshore 340 controller</title>
<para>The typical closed cycle cryo-furnace used on Taipan is cryo-furnace #1 (CF1).
This uses a Lakeshore 340 controller. SICS is capable of reading and driving the
temperature on this device. The Moxa box must be installed, and connected to the
Lakeshore hardware. In the future, the Lakeshores will have a dedicated Moxa box. </para>
<variablelist>
<varlistentry>
<term>
<command>&gt; tc1_driveable2</command></term>
<listitem>
<para>shows the sample temperature from channel A </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; run tc1_driveable 200 </command></term>
<listitem>
<para>drives the regulation temperature (B) to 200K </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; wait 600 </command></term>
<listitem>
<para>shows wait in seconds </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt; drive tc1_driveable 200 </command></term>
<listitem>
<para>drives the regulation temperature (B) to 200K and waits for it to be
within 1K of this value before continuing to the next command </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt;sct_ls340_tc1 send "RANGE?" </command></term>
<listitem>
<para>this will query the heater power range 0 = off, 5 = 100W </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>&gt;sct_ls340_tc1 send "RANGE 1" </command></term>
<listitem>
<para>this will set the heater power range. Set to a value between 0-5
</para>
</listitem>
</varlistentry>
</variablelist>
<para>The fine control of the temperature parameters, such as tolerance, heater power
range, etc, can be adjusted by clicking on the SIC Server tree view. Alternatively
you can use certain commands listed below in a batch file: </para>
<para>Check the heater power range of the closed cycle. To heat the sample relatively
quickly you need to have the heater range to 5. To reach base temperature (10K or
less), the heater range should be set to 4 or lower. </para>
<figure>
<title>Setting temperature</title>
<mediaobject>
<imageobject><imagedata align="center" width="160mm"
fileref="taipanGumtree3.jpg"/></imageobject>
</mediaobject>
</figure>
<para> These detailed commands can be used (also in batch files) to control the
temperature parameters:</para>
<variablelist>
<varlistentry>
<term>
<command>&gt; hlist val /sics/tc1/sensor </command></term>
<listitem>
<para>shows set points and sensors etc</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hget /sics/tc1/sensor/setpoint1</command></term>
<listitem>
<para>to show the temperature</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hset /sics/tc1/sensor/setpoint1 200</command></term>
<listitem>
<para>to set the temperature to 200K there is no blockage of the drive
functions when this command is used</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; > hset /sample/tc9/Loop1/setpoint 200</command></term>
<listitem>
<para>to set the temperature of the 12T magnet to 200K</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hget /sample/tc9/Loop3/sensor</command></term>
<listitem>
<para>to read the temperature of the 12T magnet</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hset /sics/tc1/heater/heaterRange 5</command></term>
<listitem>
<para>for 100W power, or 4 for 10W power</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; hset /sics/tc1/control/tolerance 1 5</command></term>
<listitem>
<para>to set the tolerance of 5K to reach desired temperature</para>
</listitem>
</varlistentry>
</variablelist>
<para> Sics and gumtree can also control the high voltage rig which is also set up on
CF1. The following commands will be useful</para>
<variablelist>
<varlistentry>
<term>
<command>&gt; pulseron</command></term>
<listitem>
<para>turn on HV</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; pulseroff</command></term>
<listitem>
<para>turn off HV</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; getvolt</command></term>
<listitem>
<para/>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>&gt; setvolt 100</command></term>
<listitem>
<para>sets the voltage to 100V</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>12T magnet control. Important procedures before ramping the field. </title>
<warning>
<title>Protect the slits</title>
<para>Once you have set your slits, turn the motion control <emphasis role="bold"
>OFF</emphasis> (on the same box as the shutter control) and <emphasis
role="bold">unplug</emphasis> the 4 cables. Turn the motion control ON
again. The slits are now in a safe mode for driving the field.</para>
</warning>
<warning>
<title>Stop magnet quenching</title>
<para>To perform field ramps safely (without risk of quenching), you should put the
beam stop down. To do this, turn the motion control OFF (on the same box as the
shutter control), ramp the field into persistent mode and then turn the motion
control ON again. Once you have reached your new field, drive to a new Q-E
position to ensure that all the motors still behave correctly after the motion
OFF. If not, you might have to reset particular motors: </para>
<para><command>&gt; m1 send RS</command> (this will reset the m1 motor controller)</para>
<para>To keep the beam stop down</para>
<orderedlist>
<listitem>
<para> Turn off motion control</para>
</listitem>
<listitem>
<para>Close valve located at the base of the beam stop</para>
</listitem>
<listitem>
<para>Turn on motion control</para>
</listitem>
</orderedlist>
</warning>
</sect2>
<sect2>
<title>12T magnet control. Driving s1</title>
<para>There are two parameters you will need for driving the <command>s1</command> via
the sample stick. <command>vs1</command> drives the motor from the command line,
while <command>dummy_s1</command> is in the UB matrix and scan parameters. So use
these in the following way: </para>
<para><command>&gt; drive vs1 30</command> (in the command line this drives the motor
to a value) </para>
<para><command>&gt; runscan dummy_s1 25 35 101 time 1</command>
</para>
<para><command>&gt; runscan qh</command>
</para>
<para>When running a powder sample in the magnet, fix <command>dummy_s1</command>
</para>
<para><command>&gt; dummy_s1 fix 1</command> (&gt; dummy_s1 fix 0 to unfix)</para>
</sect2>
</sect1>
<sect1>
<title>Sample environment configuration (Local contact only)</title>
<para>On ics1-taipan, you'll be editing SICS configuration files so that SICS will load the
driver for a device. The editor is <command>vim</command>. This process will be done
through a graphical interface in the future. </para>
<variablelist>
<title><command>vim</command> commands</title>
<varlistentry>
<term><command>:colorscheme ron </command></term>
<listitem>
<para>Change the color scheme. This make editing easier</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>/tasub</command></term>
<listitem>
<para> This searches for the string “tasub” </para>
</listitem>
</varlistentry>
<varlistentry>
<term>i</term>
<listitem>
<para>insert mode. Add text.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>r</term>
<listitem>
<para>replace. Replace a character.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>x</term>
<listitem>
<para> delete</para>
</listitem>
</varlistentry>
<varlistentry>
<term>ESC key</term>
<listitem>
<para> escape out of the current mode</para>
</listitem>
</varlistentry>
</variablelist>
<sect2>
<title>Lakeshore 340 configuration</title>
<para>When using the Lakeshore 340, various things need to be changed in the
configuration files. This should only be done by the local contact.</para>
<orderedlist>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/</para>
</listitem>
<listitem>
<para>&gt; vim extraconfig.tcl</para>
</listitem>
<listitem>
<para> Remove both the # in the following four lines </para>
<para>#catch </para>
<para>#add_sct_… </para>
<para># hsetprop </para>
<para>#}msg </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para><command>&gt; runsics stop</command></para>
</listitem>
<listitem>
<para><command>&gt; runsics start</command></para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>High voltage configuration</title>
<para>When using the High voltage setup, various things need to be changed in the
configuration files. This should only be done by the local contact.</para>
<orderedlist>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/</para>
</listitem>
<listitem>
<para>&gt; vim extraconfig.tcl</para>
</listitem>
<listitem>
<para> Remove both the # in the four lines </para>
<para># Make AsyncP… </para>
<para># Make AsyncP… </para>
<para># pulser delay </para>
<para># pulser timeout </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para>Make sure that the IP on the function generator is set to the following:
137.157.203.149 </para>
</listitem>
<listitem>
<para>Get an electrician such as Dan Bartlett to confirm the setup is safe!
</para>
</listitem>
<listitem>
<para><command>&gt; runsics stop</command></para>
</listitem>
<listitem>
<para><command>&gt; runsics start</command></para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>12T magnet configuration</title>
<para>When using the 12T magnet, various things need to be changed in the configuration
files. This should only be done by the local contact. </para>
<orderedlist>
<listitem>
<para>Turn on the magnet laptop check that the Ethernet cable and grey cable
are connected. </para>
</listitem>
<listitem>
<para>Click on “SICS oxford instruments” to bring up the front panel. </para>
</listitem>
<listitem>
<para>Click on ITC503 Front Panel </para>
</listitem>
<listitem>
<para>open a Putty terminal</para>
</listitem>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/server </para>
</listitem>
<listitem>
<para>&gt; sudo vim taipan_configuration.tcl </para>
</listitem>
<listitem>
<para>On line 59, remove the # from # fileeval ../aerotech.tcl </para>
</listitem>
<listitem>
<para>On line 61 is s1 in the TASUB command. Change this to vs1. </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
<para>If you made a mistake, quit without changing by typing
<command>:q!</command> and start again.</para>
</listitem>
<listitem>
<para>&gt; cd config/motors/ </para>
</listitem>
<listitem>
<para>&gt; sudo vim motor_configuration.tcl </para>
</listitem>
<listitem>
<para><command>/magnet</command>
</para>
<para>Search for the string “magnet” </para>
</listitem>
<listitem>
<para>The following {0} should change to {1} for the magnet: </para>
<para>If {0}{</para>
<para> # Convert magnet angle to s1 angle </para>
<para> VarMake vs1speed float user </para>
<para> vs1speed 1 </para>
<para></para>
<para> } } </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/</para>
</listitem>
<listitem>
<para>&gt; vim extraconfig.tcl</para>
</listitem>
<listitem>
<para>#--------------- </para>
<para># 12T magnet </para>
<para>#--------------- </para>
<para>Remove the # in the following lines (choose which temp controller method
you require running with the Mercury, or as Legacy mode) </para>
<para>#add_oxford_magnet "magnetic" 137.157.203.153 </para>
<para>#add_oxford_mercury "tc9" 137.157.203.151 7020 2.0 "\r" </para>
<para>#add_itc500 tc1 137.157.203.151 7020 2.0 "@8" This is for running in
Legacy Mode (to look like ITC500) </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para><command>&gt; runsics stop</command></para>
</listitem>
<listitem>
<para><command>&gt; runsics start</command></para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title><superscript>3</superscript>He configuration</title>
<para>When using the <superscript>3</superscript>He setup, various things need to be
changed in the configuration files. This should only be done by the local contact.</para>
<para>When using the <superscript>3</superscript>He setup, you need to switch to the
appropriate speeds and accelerations for the elongated instrument. To do this, in
the PuTTy window, go to </para>
<orderedlist>
<listitem>
<para>&gt; cd /usr/local/nbi/sics/taipan/</para>
</listitem>
<listitem>
<para>&gt; vim taipan_setup.txt</para>
</listitem>
<listitem>
<para>Change the 0 to 1 to turn on this file </para>
</listitem>
<listitem>
<para>Save and quit by typing <command>:wq</command>
</para>
</listitem>
<listitem>
<para><command>&gt; runsics stop</command></para>
</listitem>
<listitem>
<para><command>&gt; runsics start</command></para>
</listitem>
</orderedlist>
</sect2>
</sect1>
<sect1>
<title>Known Issues</title>
<para>Alerts the user to known operational problems</para>
</sect1>
<sect1>
<title>Troubleshooting</title>
<para>What to do if things go wrong</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,306 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Astrium Disk Chopper. Under construction.</title><author>
<personname>Nick Hauser</personname>
</author>
<date>2009-03-31 15:50</date>
</info>
<sect1>
<title>Commands</title>
<para>This chapter is untested documentation. It was inherited from the velocity selector
documentation, with alterations based on an email from Ferdi to Andy on 11th May 2011. </para>
<para>The Astrium Disk Chopper is a SICS script context object???. There should be 2 parts,
the script context object, which has the name
<command>/instrument/disk_chopper</command> and the 2 driveable interfaces to the
object, which have the names <command>chopper_speed</command> and
<command>chopper_phase</command>. Hence you can <command>drive</command> and
<command>run</command>
<command>chopper_speed</command> and <command>chopper_phase</command>. To get other
parameters use <command>hget</command> or <command>/instrument/disk_chopper/</command>.
<command>hset</command> doesn't work for these nodes. </para>
<variablelist>
<varlistentry>
<term><command>run chopper_speed</command>
<replaceable> rpm</replaceable>
</term>
<listitem>
<para>Not implemented</para>
<para>Units: RPM</para>
<para>Runs the disk chopper to <replaceable>rpm</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>drive chopper_phase</command>
<replaceable> phase_angle</replaceable>
</term>
<listitem>
<para>Not implemented</para>
<para>Units: Angstroms</para>
<para>Is the same as <command>run</command> but it blocks the client that
requested the <command>drive</command> from issuing commands until the task
has finished.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/disk_chopper/ch1/state </command></term>
<listitem>
<para>Get the state of chopper 1 <command>ch1</command>. The normal operating
state under SICS control is <computeroutput>CONTROL</computeroutput>.
Check???</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hlist /instrument/disk_chopper</command>
</term>
<listitem>
<para>Lists all the <command>disk_chopper</command> nodes</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset
/instrument/disk_chopper/</command><replaceable>chopper</replaceable>/<replaceable>node</replaceable>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Not implemented</para>
<para>Set <replaceable>val</replaceable> on a <replaceable>node</replaceable> of
<replaceable>chopper</replaceable>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/node</replaceable></term>
<listitem>
<para>Get the value of a <replaceable>chopper/node</replaceable></para>
</listitem>
</varlistentry>
</variablelist>
<para>The disk chopper is under the
<computeroutput>/instrument/disk_chopper</computeroutput> node in hipadaba, which is
where it will be found when using the Gumtree TableTree. This complies with the NeXus
standard. </para>
</sect1>
<sect1>
<title>Parameters</title>
<para>For more detailed description of these parameter, please see the <uri
xlink:href="http://cms.nbi.ansto.gov.au/devices/chopper">ASTRIUM chopper
manual</uri> in the NBI content management system.</para>
<para>There are 2 levels in the tree. </para>
<para><command>/instrument/disk_chopper/</command> This level contains the frequently used
speed and phase values for each chopper, and the overall error state.</para>
<para><command>/instrument/disk_chopper/</command><replaceable>chopper/</replaceable> e.g.
/instrument/disk_chopper/ch1. The lower level contains all the chopper specific
parameters</para>
<variablelist>
<title>Chopper general commands</title>
<varlistentry>
<term><command>hget /instrument/disk_chopper/device_error</command>
</term>
<listitem>
<para>to do ???</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget /instrument/disk_chopper/geometry</command>
</term>
<listitem>
<para>to do ???</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/<replaceable>ch1speed</replaceable></command>
</term>
<listitem>
<para>Units: RPM</para>
<para>Actual speed ???</para>
<para>Allowable values:</para>
<para><option>ch1speed</option></para>
<para><option>ch2speed</option></para>
<para><option>ch3speed</option></para>
<para><option>ch4speed</option></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/<replaceable>ch1phase</replaceable></command>
</term>
<listitem>
<para>Units: degrees</para>
<para>Phase referenced to ???</para>
<para>Allowable values:</para>
<para><option>ch1phase</option></para>
<para><option>ch2phase</option></para>
<para><option>ch3phase</option></para>
<para><option>ch4phase</option></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hlist
/instrument/disk_chopper/<replaceable>ch1</replaceable>/</command>
</term>
<listitem>
<para>Specific chopper nodes</para>
<para>Allowable values:</para>
<para><option>ch1</option></para>
<para><option>ch2</option></para>
<para><option>ch3</option></para>
<para><option>ch4</option></para>
</listitem>
</varlistentry>
</variablelist>
<variablelist>
<title>Chopper specific commands</title>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>state</command>
</term>
<listitem>
<para>CHECK this section ???. Inherited from velocity selector documentation</para>
<para>Privilege = User</para>
<para>Get the state.</para>
<para><option>IDLING</option> Is not being controlled. Should be at zero rpm.???
Check</para>
<para><option>RESET</option> A reset has been issued by the disk chopper client
program </para>
<para><option>CONTROL</option> Control has been requested by SICS or the disk
chopper client program</para>
<para><option>BRAKING</option> The disk chopper has the brake applied due to an
<command>hset setstate brake</command> request, the
<guibutton>Brake</guibutton> button applied on the disk chopper client
program, or due to a fault condition</para>
<para><option>POWERLOSS MEASUREMENT</option>
<guibutton>Powerloss measurement </guibutton>button applied on the disk
chopper client program </para>
<para><option>EMERGENCY STOP</option>
<guibutton>Emergency stop</guibutton> button applied on the disk chopper
client program </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>aspeed</command>
</term>
<listitem>
<para>Units = rpm</para>
<para>Get the actual speed</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>aphase</command>
</term>
<listitem>
<para>Units = degrees</para>
<para>Get the actual phase</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>aveto</command></term>
<listitem>
<para>Get the veto state</para>
<para>Returned values:</para>
<para><option>nok</option> not OK</para>
<para><option>ok</option> OK</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>dir</command>
</term>
<listitem>
<para>Units = Celsius</para>
<para>Get the cooling water inlet temperature</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>flowr</command>
</term>
<listitem>
<para>Units = litres/min</para>
<para>Get the cooling water flow rate</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>rspeed</command>
</term>
<listitem>
<para>Units = rpm</para>
<para>Get the requested speed</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>rphase</command>
</term>
<listitem>
<para>Units = degrees</para>
<para>Get the requested phase</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>mtemp</command>
</term>
<listitem>
<para>Units = Celsius</para>
<para>Get the ???? temperature </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>wtemp</command>
</term>
<listitem>
<para>Units = Celsius</para>
<para>Get the cooling water outlet temperature </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>mvacu</command>
</term>
<listitem>
<para>Units = 10<superscript>-3</superscript>bar</para>
<para>Get the vacuum</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>monit</command></term>
<listitem>
<para>????</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>mvibr</command></term>
<listitem>
<para>Units = mm/s ???</para>
<para>Get the vibration</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>date</command></term>
<listitem>
<para>???</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/disk_chopper/</command><replaceable>chopper/</replaceable><command>time</command></term>
<listitem>
<para>???</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbookxi.rng" type="xml"?>
<book xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0">
<info><title>User Guide for Small Angle Scattering. Quokka Edition</title><subtitle>ANSTO
version 0.2. May 2013</subtitle>
<date/>
<author><personname>Kirrily Rule</personname></author><author><personname>Nick
Hauser</personname></author>
<cover>
<para>This is a cover </para>
<para>This guide is not intended to replace your local contact, but to jog your memory
if you are operating independently. Anything strange, call your local
contact…</para>
</cover>
<bibliosource>Manually maintained from this source ie. can't Xinclude a book into a book.
</bibliosource>
</info>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5quickstart_quokka.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5sics_login.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<part>
<title>EXPERIMENT</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5alignment_taipan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="db5experiment_taipan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="db5environment_control_taipan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
<part>
<title>CONFIGURATION AND TROUBLESHOOTING</title>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
href="db5environment_config_taipan.xml">
<xi:fallback>
<para>
<emphasis>FIXME: MISSING XINCLUDE CONTENT</emphasis>
</para>
</xi:fallback>
</xi:include>
</part>
</book>

View File

@@ -0,0 +1,573 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>SKF Fermi Chopper. Under construction.</title><author>
<personname>Nick Hauser</personname>
</author>
<date>2009-03-31 15:50</date>
</info>
<sect1>
<title>Commands</title>
<para>This chapter is untested documentation. It was inherited from the velocity selector
documentation, with alterations based on an email from Ferdi to Andy on 11th May 2011. </para>
<para>The Mirrortron/SKF fermi chopper is a SICS script context object???. </para>
<para>There are 2 choppers, the master chopper which uses the prefix <command>mch</command>
and the slave chopper <command>sch</command>. There should be 2 parts, the script
context object, which has the name <command>/instrument/fermi_chopper</command> and the
2 driveable interfaces to the object, which have the names <command>mchs</command> for
speed and <command>mchp</command> for phase. Hence you can <command>drive</command> and
<command>run</command> the <command>mchs</command> and <command>mchp</command>. With
the master/slave chopper setup, the slave indicates the controller is in PHASE CONTROL
MODE to a master controller. This is required if the slave controller is operating
sub-synchronously to the REFERENCE parameter. </para>
<para>To get other parameters use <command>hget</command> or
<command>/instrument/fermi_chopper/</command>. <command>hset</command> doesn't work
for these nodes. </para>
<variablelist>
<varlistentry>
<term><command>drive mchs</command>
<replaceable> rpm</replaceable>
</term>
<listitem>
<para>Units: RPM</para>
<para>Runs the fermi chopper to <replaceable>rpm</replaceable></para>
<para>Allowed values <command>mchs</command> (master), <command>schs</command>
(slave)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>drive mchp</command>
<replaceable> phase</replaceable>
</term>
<listitem>
<para>Units: ns???</para>
<para>Allowed values <command>mchp</command> (master), <command>schp</command>
(slave)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hlist /instrument/fermi_chopper</command>
</term>
<listitem>
<para>Lists all the <command>fermi_chopper</command> nodes</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset
/instrument/fermi_chopper/</command><replaceable>chopper</replaceable>/<replaceable>node</replaceable>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Set <replaceable>val</replaceable> on a <replaceable>node</replaceable> of
<replaceable>chopper</replaceable>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/node</replaceable></term>
<listitem>
<para>Get the value of a <replaceable>chopper/node</replaceable></para>
</listitem>
</varlistentry>
</variablelist>
<para>The fermi chopper is under the
<computeroutput>/instrument/fermi_chopper</computeroutput> node in hipadaba, which is
where it will be found when using the Gumtree TableTree. This complies with the NeXus
standard. </para>
</sect1>
<sect1>
<title>Parameters</title>
<para>For more detailed description of these parameter, please see the <uri
xlink:href="http://cms.nbi.ansto.gov.au/devices/chopper.-mirrortron-skf"
>MIRRORTRON/SKF chopper manual</uri> in the NBI content management system.</para>
<para><command>/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable> e.g.
/instrument/fermi_chopper/mch. Contains all the chopper specific parameters</para>
<variablelist>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>device_error</command>
</term>
<listitem>
<para>CHECK this section ???. Inherited from velocity selector documentation</para>
<para>Description???</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>rotation_speed</command>
</term>
<listitem>
<para>Units = rpm</para>
<para>Get the actual speed</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>phase_veto_count</command>
</term>
<listitem>
<para>VETO is the number of TDC pulses that have fallen outside the veto window
or occurred when a Reference Loss alarm was present since the veto count was
last reset.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>phase_nonveto_count</command></term>
<listitem>
<para>NON_VETO is the number of TDC pulses that fall inside the veto window
without Reference Loss alarm being present since the veto count was last
reset</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>phase_acc</command>
</term>
<listitem>
<para>Units = µs</para>
<para>PHASE ACCURACY is calculated as the mean value of phase errors. PHASE
ACCURACY should equal the PHASE DELAY motor parameter when the machine is
phased locked</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>phase_rep</command>
</term>
<listitem>
<para>Units = µs</para>
<para>PHASE REPEATABILITY is the standard deviation of phase.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>phase_ok</command>
</term>
<listitem>
<para>Units = %</para>
<para>PHASE OK is the percentage of TDC pulses that fall in a time window
centered around the Reference-In pulse adjusted for PHASE DELAY. The width
of time window is defined by the VETO WINDOW parameter.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>vetowin100ns</command>
</term>
<listitem>
<para>Units = 100ns</para>
<para>This command sets the VETO WINDOW parameter in volatile memory. (This
parameter returns to its default value when the controller is
re-powered.)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>vetowin50ns</command>
</term>
<listitem>
<para>Units = 50ns</para>
<para>This command sets the VETO WINDOW parameter in volatile memory. (This
parameter returns to its default value when the controller is re-powered.)
Although the parameter is sent with resolution of 10ns, it will be rounded
and used with precision of 50ns. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>mode</command>
</term>
<listitem>
<para>Sets the MOTOR CONTROL MODE (0=RPM, 1=PHASE)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>speed_setpt</command>
</term>
<listitem>
<para>Units = RPM</para>
<para>This command sets RUN SPEED set point parameter value in non-volatile
memory. This only sets this value, it does not run the motor to this value.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>prop_gain</command></term>
<listitem>
<para>Sets the motor control proportional gain parameter and saves it in
non-volatile memory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>int_gain</command></term>
<listitem>
<para>Sets the motor control integral gain parameter and saves it in
non-volatile memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>phase_gain</command></term>
<listitem>
<para>Sets the motor control phase gain parameter and saves it in non-volatile
memory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>ref_delay</command></term>
<listitem>
<para>Units = ms</para>
<para>Sets the phasing time delay and saves it in non-volatile memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>ref_period</command></term>
<listitem>
<para>Units = ns</para>
<para>Sets the reference period and saves it in non-volatile memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>sync_srce</command></term>
<listitem>
<para>Sets the sync source (0=external, 1=internal)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>motdir</command></term>
<listitem>
<para>Sets the motor direction (0=CW, 1=CCW)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>idle_toggle</command></term>
<listitem>
<para>???</para>
</listitem>
</varlistentry>
</variablelist>
<para><command>/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status</command>
e.g. /instrument/fermi_chopper/mch/system_status. Contains the system status, which are
chopper specific. <command>hget</command> only. </para>
<para>These are read-only binary, allowed values 0 or 1.</para>
<variablelist>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status/avc_on</command></term>
<listitem>
<para>gets the ??? 1=true, 0=false</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status/motdir</command></term>
<listitem>
<para>gets the motor direction (0=CW, 1=CCW)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status/phase_locked</command></term>
<listitem>
<para>1=TDC signal is locked to reference signal. This corresponds to the PHASE
LOCK relay contact.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status/lev_complete</command></term>
<listitem>
<para>1=Rotor is Levitated</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status/alarm</command></term>
<listitem>
<para>1=Shutdown is latched. The state of this bit matches the status of the
front panel Fault LED and the SHUTDOWN relay contact.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status/run</command></term>
<listitem>
<para>1=Permission to run motor. This is given when the RUN bit is set and the
SHUTDOWN bit is not set. This indicates levitation complete AND position
shutdown alarms are enabled. It matches the status of the RUN relay
contact.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status/up_to_speed</command></term>
<listitem>
<para>1=Speed is within 1% of the OPERATING SPEED parameter</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status/ok</command></term>
<listitem>
<para>1=Controller is able and ready to levitate, or is levitating. This
corresponds with the REALY LED flashing or being steady green</para>
</listitem>
</varlistentry>
</variablelist>
<para>
<command>/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status</command>
e.g. /instrument/fermi_chopper/mch/intlck_status. Contains the interlock status. Check
here if a chopper won't do as it is commanded. To run a chopper, all these status must
be 0. <command>hget</command> only. </para>
<para>These are read-only binary, allowed values 0 or 1.</para>
<variablelist>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/test_mode</command></term>
<listitem>
<para>1=Test mode active (rotation prevented).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/cc_shutdown_req</command></term>
<listitem>
<para>1= Motor controller requests shutdown of levitation controller because it
has detected a shutdown condition.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/dsp_summ_shtdwn</command></term>
<listitem>
<para>1= DSP Summary Shutdown. Levitation controller request a motor
shutdown.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/cooling_loss</command></term>
<listitem>
<para>1 = Cooling Loss Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/spd_sensor_loss</command></term>
<listitem>
<para>1 = Speed Sensor Loss Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/ref_sig_loss</command></term>
<listitem>
<para>1 = Reference Signal Loss</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/over_temp</command></term>
<listitem>
<para>1= Motor Over Temperature Shutdown or RTD Over Temperature
Shutdown.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/vac_fail</command></term>
<listitem>
<para>1 = Vacuum Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/overspeed_or_breakfail</command></term>
<listitem>
<para>1 = Over Speed Trip Shutdown or Motor Brake Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/cc_wd_fail</command></term>
<listitem>
<para>1 = Customer Card Watch Dog Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/ext_fault</command></term>
<listitem>
<para>1 = External Fault Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/ups_fail</command></term>
<listitem>
<para>1= UPS Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/emerg_stop</command></term>
<listitem>
<para>1 = Emergency Stop Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/pos_alarm</command></term>
<listitem>
<para>1 = Position Shutdown on one of the bearing axis</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/osc_fail</command></term>
<listitem>
<para>1 = Oscillator Fail Shutdown.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status/dsp_wd_fail</command></term>
<listitem>
<para>1 = DSP Watch Dog Fail Shutdown</para>
</listitem>
</varlistentry>
</variablelist>
<para><command>/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/</command>
e.g. /instrument/fermi_chopper/mch/control. Contains the settable parameters that
control the chopper. </para>
<variablelist>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/device_error</command></term>
<listitem>
<para>??? is this the overall error state</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_vetowin100</command></term>
<listitem>
<para>1= Motor controller requests shutdown of levitation controller because it
has detected a shutdown condition.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_vetowin50</command></term>
<listitem>
<para>1= DSP Summary Shutdown. Levitation controller request a motor
shutdown.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_mode</command></term>
<listitem>
<para>1 = Cooling Loss Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_rotspeed</command></term>
<listitem>
<para>1 = Speed Sensor Loss Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_prop_gain</command></term>
<listitem>
<para>1 = Reference Signal Loss</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_int_gain</command></term>
<listitem>
<para>1= Motor Over Temperature Shutdown or RTD Over Temperature
Shutdown.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_phase_gain</command></term>
<listitem>
<para>1 = Vacuum Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_ref_delay</command></term>
<listitem>
<para>1 = Over Speed Trip Shutdown or Motor Brake Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_ref_period</command></term>
<listitem>
<para>1 = Customer Card Watch Dog Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_sync_source</command></term>
<listitem>
<para>1 = External Fault Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/set_motor_dir</command></term>
<listitem>
<para>1= UPS Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/start</command></term>
<listitem>
<para>1 = Emergency Stop Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/stop</command></term>
<listitem>
<para>1 = Position Shutdown on one of the bearing axis</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/idle_toggle</command></term>
<listitem>
<para>1 = Oscillator Fail Shutdown.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/reset</command></term>
<listitem>
<para>1 = DSP Watch Dog Fail Shutdown</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,572 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>SKF Fermi Chopper. Under construction.</title><author>
<personname>Nick Hauser</personname>
</author>
<date>2009-03-31 15:50</date>
</info>
<sect1>
<title>Commands</title>
<para>This chapter is untested documentation. The node names and descriptions should be
correct. There will be some further modifications made to the chopper driver. </para>
<para>The Mirrortron/SKF fermi chopper is a SICS script context object???. </para>
<para>There are 2 choppers, the master chopper which uses the prefix <command>mch</command>
and the slave chopper <command>sch</command>. There should be 2 parts, the script
context object, which has the name <command>/instrument/fermi_chopper</command> and the
2 driveable interfaces to the object, which have the names <command>mchs</command> for
speed and <command>mchp</command> for phase. Hence you can <command>drive</command> and
<command>run</command> the <command>mchs</command> and <command>mchp</command>. With
the master/slave chopper setup, the slave indicates the controller is in PHASE CONTROL
MODE to a master controller. This is required if the slave controller is operating
sub-synchronously to the REFERENCE parameter. </para>
<variablelist>
<varlistentry>
<term><command>drive mchs</command>
<replaceable> rpm</replaceable>
</term>
<listitem>
<para>Units: RPM</para>
<para>Runs the fermi chopper to <replaceable>rpm</replaceable>. This will not
always be exactly the value that you set. See permspd below. </para>
<para>Allowed values <command>mchs</command> (master), <command>schs</command>
(slave)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>mchs permspd</command>
<replaceable> rpm</replaceable>
</term>
<listitem>
<para>Units: RPM</para>
<para>Returns the permitted speed closest to the requested
<replaceable>rpm</replaceable>. The choppers have a range of speeds that are
not allowed due to resonances. The SICS driver will try to set the chopper
to a speed as close as possible to the requested speed. </para>
<para>Allowed values <command>mchs</command> (master), <command>schs</command>
(slave)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>drive mchp</command>
<replaceable> phase</replaceable>
</term>
<listitem>
<para>Units: ns</para>
<para>Allowed values <command>mchp</command> (master), <command>schp</command>
(slave)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>mchs idle</command>
</term>
<listitem>
<para>To change the direction of a chopper, you need to run it to the idle state
first, which should already be set to 0 rpm, then drive the chopper to in
the opposite direction. e.g.</para>
<para><command>mchs idle</command></para>
<para><command>drive mchs 4000</command></para>
<para>Simply putting in a value of rpm of the opposite sign won't work.</para>
<para>Allowed values <command>mchs</command> (master), <command>schs</command>
(slave)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hlist /instrument/fermi_chopper</command>
</term>
<listitem>
<para>Lists all the <command>fermi_chopper</command> nodes</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hset
/instrument/fermi_chopper/</command><replaceable>chopper</replaceable>/<replaceable>node</replaceable>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Set <replaceable>val</replaceable> on a <replaceable>node</replaceable> of
<replaceable>chopper</replaceable>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hget
/instrument/fermi_chopper/</command><replaceable>chopper/node</replaceable></term>
<listitem>
<para>Get the value of a <replaceable>chopper/node</replaceable></para>
</listitem>
</varlistentry>
</variablelist>
<para>Allowed speed table ???</para>
<para>The fermi chopper is under the
<computeroutput>/instrument/fermi_chopper</computeroutput> node in hipadaba, which is
where it will be found when using the Gumtree TableTree. This complies with the NeXus
standard. </para>
</sect1>
<sect1>
<title>Parameters</title>
<para>For more detailed description of these parameter, please see the <uri
xlink:href="http://cms.nbi.ansto.gov.au/devices/chopper.-mirrortron-skf"
>MIRRORTRON/SKF chopper manual</uri> in the NBI content management system.</para>
<para><command>/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable> e.g. </para>
<para><command>hget /instrument/fermi_chopper/mch/rotation_speed</command>
</para>
<para>Contains all the chopper specific parameters</para>
<variablelist>
<varlistentry>
<term><command>device_error</command>
</term>
<listitem>
<para>Communications error reported by the chopper controller. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>rotation_speed</command>
</term>
<listitem>
<para>Units = rpm</para>
<para>Get the actual speed</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>phase_veto_count</command>
</term>
<listitem>
<para>Get the veto count. VETO is the number of TDC pulses that have fallen
outside the veto window or occurred when a Reference Loss alarm was present
since the veto count was last reset.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>phase_nonveto_count</command></term>
<listitem>
<para>Get the non veto count. NON_VETO is the number of TDC pulses that fall
inside the veto window without Reference Loss alarm being present since the
veto count was last reset</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>phase_acc</command>
</term>
<listitem>
<para>Units = µs</para>
<para>Get the phase accuracy. PHASE ACCURACY is calculated as the mean value of
phase errors. PHASE ACCURACY should equal the PHASE DELAY motor parameter
when the machine is phased locked</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>phase_rep</command>
</term>
<listitem>
<para>Units = µs</para>
<para>Get the phase repeatability. PHASE REPEATABILITY is the standard deviation
of phase.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>phase_ok</command>
</term>
<listitem>
<para>Units = %</para>
<para>Get phase OK. PHASE OK is the percentage of TDC pulses that fall in a time
window centered around the Reference-In pulse adjusted for PHASE DELAY. The
width of time window is defined by the VETO WINDOW parameter.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>vetowin100ns</command>
</term>
<listitem>
<para>Units = 100ns</para>
<para>This command gets the VETO WINDOW parameter in volatile memory. (This
parameter returns to its default value when the controller is
re-powered.)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>vetowin50ns</command>
</term>
<listitem>
<para>Units = 50ns</para>
<para>This command gets the VETO WINDOW parameter in volatile memory. (This
parameter returns to its default value when the controller is re-powered.)
Although the parameter is sent with resolution of 10ns, it will be rounded
and used with precision of 50ns. </para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>mode</command>
</term>
<listitem>
<para>Gets the MOTOR CONTROL MODE. </para>
<para>0=RPM, 1=PHASE (default)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>speed_setpt</command>
</term>
<listitem>
<para>Units = RPM</para>
<para>This command gets RUN SPEED set point parameter value in non-volatile
memory. This only sets this value, it does not run the motor to this value.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>prop_gain</command></term>
<listitem>
<para>Gets the motor control proportional gain parameter and saves it in
non-volatile memory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>int_gain</command></term>
<listitem>
<para>Gets the motor control integral gain parameter and saves it in
non-volatile memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>phase_gain</command></term>
<listitem>
<para>Gets the motor control phase gain parameter and saves it in non-volatile
memory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>ref_delay</command></term>
<listitem>
<para>Units = ms</para>
<para>Gets the phasing time delay and saves it in non-volatile memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>ref_period</command></term>
<listitem>
<para>Units = ns</para>
<para>Gets the reference period and saves it in non-volatile memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>sync_srce</command></term>
<listitem>
<para>Gets the sync source (0=external, 1=internal)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>motdir</command></term>
<listitem>
<para>Gets the motor direction (0=CW, 1=CCW)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>idle_toggle</command></term>
<listitem>
<para>Gets the idle toggle. This is always 1. </para>
</listitem>
</varlistentry>
</variablelist>
<sect2>
<title>System status</title>
<para><command>/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>system_status</command>
e.g. </para>
<para><command>hget /instrument/fermi_chopper/mch/system_status/motdir</command>. </para>
<para>Contains the system status, which are chopper specific. </para>
<para><command>hget</command> only. </para>
<para>These are read-only binary, allowed values 0 or 1.</para>
<variablelist>
<varlistentry>
<term><command>avc_on</command></term>
<listitem>
<para>gets the ??? 1=true, 0=false</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>motdir</command></term>
<listitem>
<para>gets the motor direction (0=CW, 1=CCW)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>phase_locked</command></term>
<listitem>
<para>1=TDC signal is locked to reference signal. This corresponds to the
PHASE LOCK relay contact.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>lev_complete</command></term>
<listitem>
<para>1=Rotor is Levitated</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>alarm</command></term>
<listitem>
<para>1=Shutdown is latched. The state of this bit matches the status of the
front panel Fault LED and the SHUTDOWN relay contact.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>run</command></term>
<listitem>
<para>1=Permission to run motor. This is given when the RUN bit is set and
the SHUTDOWN bit is not set. This indicates levitation complete AND
position shutdown alarms are enabled. It matches the status of the RUN
relay contact.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>up_to_speed</command></term>
<listitem>
<para>1=Speed is within 1% of the OPERATING SPEED parameter</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>ok</command></term>
<listitem>
<para>1=Controller is able and ready to levitate, or is levitating. This
corresponds with the REALY LED flashing or being steady green</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>Interlock status</title>
<para><command>/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>intlck_status</command>
e.g. </para>
<para><command>hget /instrument/fermi_chopper/mch/intlck_status/test_mode</command>. </para>
<para>Contains the interlock status. </para>
<para><command>hget</command> only.</para>
<para>Check here if a chopper won't do as it is commanded. To run a chopper, all these
status must be 0. </para>
<para>These are read-only binary, allowed values 0 or 1.</para>
<variablelist>
<varlistentry>
<term><command>test_mode</command></term>
<listitem>
<para>1=Test mode active (rotation prevented).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>cc_shutdown_req</command></term>
<listitem>
<para>1= Motor controller requests shutdown of levitation controller because
it has detected a shutdown condition.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dsp_summ_shtdwn</command></term>
<listitem>
<para>1= DSP Summary Shutdown. Levitation controller request a motor
shutdown.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>cooling_loss</command></term>
<listitem>
<para>1 = Cooling Loss Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>spd_sensor_loss</command></term>
<listitem>
<para>1 = Speed Sensor Loss Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>ref_sig_loss</command></term>
<listitem>
<para>1 = Reference Signal Loss</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>over_temp</command></term>
<listitem>
<para>1= Motor Over Temperature Shutdown or RTD Over Temperature
Shutdown.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>vac_fail</command></term>
<listitem>
<para>1 = Vacuum Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>overspeed_or_breakfail</command></term>
<listitem>
<para>1 = Over Speed Trip Shutdown or Motor Brake Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>cc_wd_fail</command></term>
<listitem>
<para>1 = Customer Card Watch Dog Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>ext_fault</command></term>
<listitem>
<para>1 = External Fault Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>ups_fail</command></term>
<listitem>
<para>1= UPS Fail Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>emerg_stop</command></term>
<listitem>
<para>1 = Emergency Stop Shutdown</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>pos_alarm</command></term>
<listitem>
<para>1 = Position Shutdown on one of the bearing axis</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>osc_fail</command></term>
<listitem>
<para>1 = Oscillator Fail Shutdown.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>dsp_wd_fail</command></term>
<listitem>
<para>1 = DSP Watch Dog Fail Shutdown</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>Control commands</title>
<para><command>/instrument/fermi_chopper/</command><replaceable>chopper/</replaceable><command>control/</command>
e.g. </para>
<para><command>hset /instrument/fermi_chopper/mch/control/setvetowin100 700</command></para>
<para>Contains the settable parameters that control the chopper. </para>
<variablelist>
<varlistentry>
<term><command>device_error</command></term>
<listitem>
<para>??? is this the overall error state. You can't set it, so why is it
under control?</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_vetowin100</command></term>
<listitem>
<para>Units = 100ns</para>
<para>This command sets the VETO WINDOW parameter in volatile memory. (This
parameter returns to its default value when the controller is
re-powered.)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_vetowin50</command></term>
<listitem>
<para>Units = 50ns</para>
<para>This command sets the VETO WINDOW parameter in volatile memory. (This
parameter returns to its default value when the controller is
re-powered.) Although the parameter is sent with resolution of 10ns, it
will be rounded and used with precision of 50ns</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_mode</command></term>
<listitem>
<para>Sets the MOTOR CONTROL MODE (0=RPM, 1=PHASE)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_rotspeed</command></term>
<listitem>
<para>Units = rpm</para>
<para>Set the target speed</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_prop_gain</command></term>
<listitem>
<para>Sets the motor control proportional gain parameter and saves it in
non-volatile memory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_int_gain</command></term>
<listitem>
<para>Sets the motor control integral gain parameter and saves it in
non-volatile memory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_phase_gain</command></term>
<listitem>
<para>Sets the motor control phase gain parameter and saves it in
non-volatile memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_ref_delay</command></term>
<listitem>
<para>Units = ns</para>
<para>Sets the phasing time delay and saves it in non-volatile memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_ref_period</command></term>
<listitem>
<para>Units = ns</para>
<para>Sets the reference period and saves it in non-volatile memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_sync_source</command></term>
<listitem>
<para>Sets the sync source (0=external, 1=internal)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>set_motor_dir</command></term>
<listitem>
<para>Sets the motor direction (0=CW, 1=CCW)</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>start</command></term>
<listitem>
<para>run to the target value from <command>set_rotspeed</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>stop</command></term>
<listitem>
<para>will drive to 0 rpm and delevitate</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>idle_toggle</command></term>
<listitem>
<para>Toggles between run and idle state. </para>
<para>The state of the controller can be requested. A command to read Modbus
coil 3 will be added. </para>
<para>Allowed value: 1</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>reset</command></term>
<listitem>
<para>If the controller is in an alarm state, you need to send this reset
before setting other parameters. </para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
</chapter>

View File

@@ -0,0 +1,303 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Histogram Control</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-09-17 12:24</date>
</info>
<sect1>
<title><command>histmem</command> command</title>
<para>You can start and stop acquisitions and do limited configuration the histogram server
with the histmem command. </para>
<para>Note that histmem does not save data. You have to explicitly use the save command. </para>
<para>The histogram memory server is a component that is separate from SICS. SICS currently
exposes only a subset of the histogram server interface. In the future, Gumtree will
provide an editor for the histogram server configuration files. </para>
<para>For a simple experiment in beam monitor mode, where you want to histogram data until
one million counts are counted in the beam monitor, from the command line you would</para>
<para>
<programlisting>
...
histmem mode MONITOR_1
histmem preset 1000000
histmem start
"wait until the histogram is finished"
save
</programlisting>
</para>
<para>For subsequent acquisitions where you want to do fast starts of the histogram server
because you don't need to change configuration</para>
<para>
<programlisting>
histmem pause
do something in SICS like change the sample or temperature
histmem start
"wait until the histogram is finished"
save
</programlisting>
</para>
<para>You must call the histmem command with one of the following subcommands</para>
<variablelist>
<varlistentry>
<term>
<command>histmem </command>
<command>start</command>
<option>block</option>
</term>
<listitem>
<para>will start an acquisition in the current mode</para>
<para>The option <option>block</option> prevents subsequent commands from being
processed until the histmem is finished. Used in scripts, when using the
<command>count</command> or <command>time</command> modes</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem </command>
<command>stop</command>
</term>
<listitem>
<para>will stop the histogram memory if it is running in
<command>unlimited</command> mode that has been started without the
<option>block</option> option.</para>
<para>NOTE: If you are running in 'unlimited &amp; block' mode, count or time
modes, you must send an INT1712 1 to abort the acquistion or hit the
Interrupt button in Gumtree. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem </command>
<command>veto </command>
<option>enable/disable</option>
</term>
<listitem>
<para><option>disable</option> will stop the histogram memory from counting and
not clear memory. It will have no effect on configuration. Use this command
if you need to pause a measurement without clearing the memory. </para>
<para><option>enable</option> will resume counting without clearing the memory.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem </command>
<command>pause</command>
</term>
<listitem>
<para>if MULTIPLE_DATASETS=ENABLE mode (default - but check)</para>
<para>use pause instead of stop for a 'fast' start. Use this if you don't have
to change the histogram memory configuration. Clears histograms and
counters, but doesn't reinitialisation the histogram server. </para>
<para>if MULTIPLE_DATASETS=DISABLE mode</para>
<para>use pause instead of veto. Does not clear histograms and counters, does
not reinitialise the histogram server. Data is accumulated. </para>
<para>Note that the MULTIPLE_DATASETS mode is set in the SICS hmm configuration
files and/or on the histogram memory server. SICS does not report this
value. To view this value, you must look at the config tab on the histogram
server web client. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem </command>
<command>mode </command>
<replaceable>mode</replaceable>
</term>
<listitem>
<para>Allowed <replaceable>mode </replaceable>one of:</para>
<para><command>MONITOR_n</command> (where n=1,2,3 ...). If you set the mode to
MONITOR_1 then the server will stop when MONITOR_1 reaches the
<command>preset</command> counts</para>
<para>
<command>time</command> will stop at the <command>preset</command> time
after <command>start</command></para>
<para>
<command>unlimited</command> will stop when it receives a <command>histmem
stop</command> or INT1712 1</para>
<para>
<command>count</command> will stop when the total histogram counts reaches
<command>preset</command> counts</para>
<para>
<command>frame</command> will stop when the <command>preset</command> number
of TOF (time of flight) frames. e.g. when there's no TOF, there is an
internal frame frequency which by default is 50Hz. So if you have a
<command>preset</command> of 1000 frames you will get a 20 second
acquisition</para>
<para>
<command>period</command> will stop when it reaches
<command>preset</command> number of periods. A histogram period contains
some number of frames averaged together - this is controlled by the BAT
(base address table) and its attributes. The mapping can be fairly complex
(e.g. time-averaged, time-history and stroboscopic acquisition) so there's
not always a simple relationship between number-of-periods acquired and the
DAQ time, but it can be worked out from the BAT setup</para>
<para><command>count_roi</command></para>
<para>Not supported. Will stop when the total histogram counts reaches
<command>preset</command> counts in a region of interest defined in the
histogram server configuration. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem preset </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>the acquisition will terminate after the <replaceable>val</replaceable>
period.  This is seconds if the mode is time, and counts if the mode is
count or MONITOR_n.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem freq </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para><replaceable>val </replaceable> is the frame frequency (Hz)  for time
resolved data.  If you set a frequency of zero then this will default to
50Hz.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem fsrce</command>
<replaceable>frame_source</replaceable>
</term>
<listitem>
<para>Allow values of <replaceable>frame_source</replaceable> are:</para>
<para><option>EXTERNAL </option>(default) </para>
<para><option>INTERNAL </option>
</para>
<para>You can set this to <option>INTERNAL</option> if you don't have an
external frame signal</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem </command>
<command>status</command>
</term>
<listitem>
<para><warning>
<para>This doesn't report anything</para>
</warning> Started, Stopped, or Paused</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem </command>
<command>loadconf</command>
</term>
<listitem>
<para>this uploads configuration tables (e.g. OAT for setting bins) to the
histogram memory</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>OAT_TABLE</command>
</term>
<listitem>
<para>with no arguments will print out <application>SICS</application>'s copy of
the OAT_TABLE</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>OAT_TABLE</command>
<option>-set X {</option>
<replaceable>bb0 bb1</replaceable>
<option>} Y {</option><replaceable>bb0 bb1</replaceable>
<option>} T </option>{<replaceable>bb0 bb1</replaceable>
<option>}</option></term>
<listitem>
<para>will generate a table starting at bin boundary
<replaceable>bb0</replaceable> with a spacing of (bb1-bb0) extrapolated to
the maximum bin boundary.  The numbers of channels are calculated
automatically.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>OAT_TABLE</command>
<option>-set X {</option>
<replaceable>bb0 bb1</replaceable>
<option>} Y {</option><replaceable>bb0 bb1</replaceable>
<option>} T </option>{<replaceable>bb0 bb1</replaceable>
<option>} NTC </option><replaceable>val1 </replaceable>
<option>NXC </option><replaceable>val2 </replaceable>
<option>NYC </option><replaceable>val3 </replaceable></term>
<listitem>
<para>this version sets the number of channels explicitly</para>
</listitem>
</varlistentry>
</variablelist>
<para><application>SICS</application> cannot read the current OAT_TABLE from the histogram
server, the only way to make sure that <application>SICS</application> is in sync with
the histogram memory is to use the <application>SICS</application>
<command>OAT_TABLE</command>
<option>-set </option> command to change your table and then to upload it to the
histogram server with the <command>histmem loadconf </command>command</para>
</sect1>
<sect1>
<title>Histogram memory object</title>
<para>In most cases, the <command>histmem</command> command will be sufficient to configure
and control an experiment. </para>
<para>This section describes a richer level of configuration and control, using the SICS
histogram memory object. The histogram memory object in SICS is used to set the
configuration of the histogram memory server (described in detail in a later chapter),
and to get the current histogram memory server configuration and data. Note that it is
possible to for the histogram memory's configuration to be set independently from SICS
e.g. through the histogram memory's web interface. Therefore, care must taken to ensure
synchronisation between the SICS histogram memory object and the histogram memory
server. </para>
<para>SICS has seven histogram-memory objects as follows:</para>
<para><command>hmm</command>
</para>
<para><command>hmm_xy</command>
</para>
<para><command>hmm_xt</command>
</para>
<para><command>hmm_yt</command>
</para>
<para><command>hmm_x</command>
</para>
<para><command>hmm_y</command>
</para>
<para><command>hmm_t</command>
</para>
<para>which you can use to fetch xyt, xy, xt, yt, x, y and t data. </para>
<para>For simplicity, we will use <replaceable>hm</replaceable> to refer to any of the 7
histogram memory objects. Make sure you use the one appropriate to your measurement. </para>
<para>
<variablelist>
<varlistentry>
<term><replaceable>hm</replaceable><command> get 1</command></term>
<listitem>
<para>gets the current histogram memory data ie. 'live' data</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>hm</replaceable><command> zipget 1</command></term>
<listitem>
<para>gets the current histogram memory data in binary zip form</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>hm</replaceable><command> configure rank</command></term>
<listitem>
<para>gets the rank of the current histogram memory </para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>hm</replaceable><command> configure
dim</command><replaceable>n</replaceable></term>
<listitem>
<para>gets the current histogram memory data in binary zip form</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,308 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Simple Scans</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-09-17 12:52</date>
</info>
<sect1>
<title><command>runscan </command>command</title>
<para>You can run a histogram memory scan with the <command>runscan</command> command.  With
this command you can acquire data with the histogram memory server while scanning
against a "drivable" device, eg motors, temperature controllers.  By default this saves
time resolved, ie HISTOGRAM_XYT data at each scan point.</para>
<para>Multi-dimensional scans, where you would like to scan say temperature and a motor,
have to be done in a batch file, or by using a tcl <command>for</command> loop, which
may contain a runscan. See Chapter5. Batch Manager </para>
<note>
<para> The data acquired at each scan point is saved before going to the next
point.</para>
</note>
<para><command>runscan </command>
<replaceable>scanvar start stop numpoints mode preset [force datatype
savetype]</replaceable>
</para>
<para>Arguments must be in the order described</para>
<variablelist>
<varlistentry>
<term>
<replaceable>scanvar</replaceable>
</term>
<listitem>
<para>a drivable device, ie a motor or temperature controller etc</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>start</replaceable>
</term>
<listitem>
<para>the start position for the scan variable</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>stop</replaceable>
</term>
<listitem>
<para>the stop position for the scan variable</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>numpoints</replaceable>
</term>
<listitem>
<para>the number of scan points (the start and stop positions will be included
in the scan)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mode</replaceable>
</term>
<listitem>
<para>Allowed <replaceable>mode </replaceable>one of:</para>
<para>
<command>time</command>
</para>
<para>
<command>unlimited</command>
</para>
<para>
<command>period</command>
</para>
<para>
<command>count</command>
</para>
<para>
<command>frame</command>
</para>
<para><command>MONITOR_n</command> (where n=1,2,3 ...)</para>
<para>If you set the mode to MONITOR_1 then the histogram server will stop when
MONITOR_1 reaches the preset number of counts which has been set with the
following <replaceable>preset</replaceable> parameter</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>preset</replaceable>
</term>
<listitem>
<para>the acquisition duration at each scan point, this is in second if the mode
is time, or counts if the mode is count or MONITOR_n</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>
<command>runscan </command>
<option>options</option>
</title>
<para>These parameters must be supplied as a name-value pair, e.g.
<command>datatype</command>
<option>HISTOGRAM_Y</option>
</para>
<para>They can be given in any order.</para>
<variablelist>
<varlistentry>
<term>
<command>force </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Force a scan</para>
<para>Allowed <replaceable>val</replaceable> one of:</para>
<para>
<option>true</option>
</para>
<para>
<option>false</option> (default) </para>
<para> If you really want to, you can force a scan when the instrument isn't
ready. This can be useful for getting a background reference. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>datatype </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Select the histogram memory <command>datatype</command> to save in your
data file. </para>
<para>Allowed <replaceable>val</replaceable> one of:</para>
<para>
<option>HISTOGRAM_T</option>
</para>
<para>
<option>HISTOGRAM_X</option>
</para>
<para>
<option>HISTOGRAM_XT</option>
</para>
<para>
<option>HISTOGRAM_Y</option>
</para>
<para>
<option>HISTOGRAM_YT</option>
</para>
<para>
<option>HISTOGRAM_XY</option>
</para>
<para>
<option>HISTOGRAM_XYT</option> (default)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>savetype </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Allowed <replaceable>val</replaceable> one of:</para>
<para>
<option>save</option> (default) </para>
<para>
<option>nosave</option>
</para>
<para> By default your data will be saved in a file with a three letter
instrument prefix and a run number.  If you use <command>savetype </command>
<option>nosave</option> then the data will be written to a scratch file
called scratch.nx.hdf</para>
</listitem>
</varlistentry>
</variablelist>
<example>
<title><command>runscan </command>example</title>
<para>
<command>runscan </command>
<option>sphi 0 2 4 time 5</option>
</para>
</example>
<para>This will run a four point scan with the sphi motor starting at 0 and stopping at 2. 
The data will be acquired over five seconds at each point, with the default datatype
HISTOGRAM_XYT, and saved in a file with a three letter instrument prefix and run number.</para>
<example>
<title><command>runscan </command>example</title>
<para><command>runscan </command><option>mom 69.000 75 2 </option><command>MONITOR_2
</command>3000 <command>savetype </command><option>nosave </option><command>datatype
</command><option>HISTOGRAM_Y </option>
<command>force </command><option>true</option></para>
<para>This example sets all <command>runscan </command>parameters</para>
</example>
</sect1>
<sect1>
<title><command>bmonscan </command>command</title>
<para>You can run a beam monitor scan with the <command>bmonscan</command> command.  With
this command you can acquire data with a counter in the histogram memory server while
scanning against a "drivable" device, eg motors. The main detector is not required.
Generally this would be used to align an instrument, e.g. alignment of a monochromator
or sample crystal.</para>
<para>Additional information can be found in the chapters "Counters", "User Defined Scans"
and "Batch Manager". </para>
<para><command>bmonscan</command> will create a data file of type BEAM_MONITOR. </para>
<para>Multi-dimensional scans have to be done in a batch file, or by using a tcl
<command>for</command> loop, which may contain a runscan. See the chapter "Batch
Manager".</para>
<para>Unlike runscan, bmonscan is a standard SICS scan object. This means you can configure,
interrogate and control bmonscan using the commands in the chapter "User Defined Scans".
This section has only a summary of the most used commands, which allows you to do a one
variable scan. </para>
<note>
<para> The data acquired at each scan point is saved before going to the next
point.</para>
</note>
<variablelist>
<varlistentry>
<term>
<command>bmonscan run</command>
<replaceable>NP mode preset </replaceable>
</term>
<listitem>
<para>Executes a scan. </para>
<para><replaceable>NP</replaceable> is the number of scan points</para>
<para><replaceable>mode</replaceable> is the counter mode, either
<option>timer</option> or <option>monitor</option></para>
<para><replaceable>preset</replaceable> is the preset value for the counter</para>
<para>Scan data is written to an output file.</para>
<para>tree interface <replaceable>/commands/scan/bmonscan/NP</replaceable></para>
<para>tree interface <replaceable>/commands/scan/bmonscan/mode</replaceable></para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/preset</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan clear</command>
</term>
<listitem>
<para>Clears the list of scan variables. Must be called before each scan that
has different parameters. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan add</command>
<replaceable>variable start increment </replaceable>
</term>
<listitem>
<para>Adds the variable specified by the argument
<replaceable>variable</replaceable> to the list of variables scanned in the
next scan. The arguments <replaceable>start</replaceable> and
<replaceable>increment</replaceable> define the starting point and the
step width for the scan on this variable. </para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_variable</replaceable></para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_start</replaceable></para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_increment</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan getvarpar</command>
<replaceable>i</replaceable>
</term>
<listitem>
<para>Prints the name, start and step of the scan variable number
<replaceable>i</replaceable>
</para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_variable</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan setchannel</command>
<replaceable>n</replaceable>
</term>
<listitem>
<para>Sets the beam monitor to collect data from, where
<replaceable>n</replaceable> is an integer ID for the beam monitor to use.
setchannel uses zero-based counting, so 0 is bm1 etc.</para>
<para>tree interface <replaceable>/commands/scan/bmonscan/channel</replaceable>
</para>
</listitem>
</varlistentry>
</variablelist>
<example>
<title>bmonscan example</title>
<para><command>bmonscan clear</command> clears the list of scan variables</para>
<para><command>bmonscan add </command><replaceable>stth 0 0.1</replaceable> adds the
motor stth to the scan, with a starting value of 0 degrees and an increment value
0.1 degrees</para>
<para><command>bmonscan getvarpar </command><replaceable>0</replaceable> lets you check
the variable you are scanning, its start and step value. In this case it returns
<returnvalue>bmonscan.stth = 0.000000 = 0.100000</returnvalue></para>
<para><command>bmonscan setchannel </command><replaceable>0</replaceable> selects the
first beam monitor, aka bm1. You'll need to check physically where this beam monitor
is on the instrument you're driving</para>
<para><command>bmonscan run </command><replaceable>10 monitor 10000</replaceable> runs
the scan with 10 scan points, in counter mode with a preset of 10000 counts. </para>
</example>
</sect1>
</chapter>

View File

@@ -0,0 +1,313 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Simple Scans in Python</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-09-17 12:52</date>
</info>
<sect1>
<title><command>runscan </command>command</title>
<para>You can run a scan with the <command>runscan</command> command.  With this command you
can acquire data with the histogram memory server while scanning against a "drivable"
device, eg motors, temperature controllers.  By default this saves time resolved, ie
HISTOGRAM_XYT data at each scan point.</para>
<para>Multi-dimensional scans, where you would like to scan say temperature and a motor,
have to be done in a batch file, or by using a python <command>for</command> loop, which
may contain a runhmscan. See Chapter5. Batch Manager </para>
<para><command>from gumpy.commons import sics</command></para>
<note>
<para> The data acquired at each scan point is saved before going to the next
point.</para>
</note>
<para><command>sics.runscan(</command>
<replaceable>"scanvar", start, stop, numpoints, "mode", preset, channel) </replaceable>
</para>
<para>Arguments must be in the order described</para>
<para><emphasis role="bold">Note</emphasis> that <replaceable>force datatype
savetype</replaceable> are optional in tcl, have an hdb_path, but are not included in
the <command>runscan</command> signature, but should be.</para>
<para><emphasis role="bold">Note</emphasis> that instruments may not have an hmscan hdb_path
e.g. Quokka. </para>
<variablelist>
<varlistentry>
<term>
<replaceable>scanvar</replaceable>
</term>
<listitem>
<para>a drivable device, ie a motor or temperature controller etc</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>start</replaceable>
</term>
<listitem>
<para>the start position for the scan variable</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>stop</replaceable>
</term>
<listitem>
<para>the stop position for the scan variable</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>numpoints</replaceable>
</term>
<listitem>
<para>the number of scan points (the start and stop positions will be included
in the scan)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mode</replaceable>
</term>
<listitem>
<para>Allowed <replaceable>mode </replaceable>one of:</para>
<para>
<command>time</command>
</para>
<para>
<command>unlimited</command>
</para>
<para>
<command>period</command>
</para>
<para>
<command>count</command>
</para>
<para>
<command>frame</command>
</para>
<para><command>MONITOR_n</command> (where n=1,2,3 ...)</para>
<para>If you set the mode to MONITOR_1 then the histogram server will stop when
MONITOR_1 reaches the preset number of counts which has been set with the
following <replaceable>preset</replaceable> parameter</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>preset</replaceable>
</term>
<listitem>
<para>the acquisition duration at each scan point, this is in second if the mode
is time, or counts if the mode is count or MONITOR_n</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>
<command>runscan </command>
<option>options</option>
</title>
<para>These parameters must be supplied as a name-value pair, e.g.
<command>datatype</command>
<option>HISTOGRAM_Y</option>
</para>
<para>They can be given in any order.</para>
<variablelist>
<varlistentry>
<term>
<command>force </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Force a scan</para>
<para>Allowed <replaceable>val</replaceable> one of:</para>
<para>
<option>true</option>
</para>
<para>
<option>false</option> (default) </para>
<para> If you really want to, you can force a scan when the instrument isn't
ready. This can be useful for getting a background reference. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>datatype </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Select the histogram memory <command>datatype</command> to save in your
data file. </para>
<para>Allowed <replaceable>val</replaceable> one of:</para>
<para>
<option>HISTOGRAM_T</option>
</para>
<para>
<option>HISTOGRAM_X</option>
</para>
<para>
<option>HISTOGRAM_XT</option>
</para>
<para>
<option>HISTOGRAM_Y</option>
</para>
<para>
<option>HISTOGRAM_YT</option>
</para>
<para>
<option>HISTOGRAM_XY</option>
</para>
<para>
<option>HISTOGRAM_XYT</option> (default)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>savetype </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Allowed <replaceable>val</replaceable> one of:</para>
<para>
<option>save</option> (default) </para>
<para>
<option>nosave</option>
</para>
<para> By default your data will be saved in a file with a three letter
instrument prefix and a run number.  If you use <command>savetype </command>
<option>nosave</option> then the data will be written to a scratch file
called scratch.nx.hdf</para>
</listitem>
</varlistentry>
</variablelist>
<example>
<title><command>runscan </command>example</title>
<para>
<command>runscan </command>
<option>sphi 0 2 4 time 5</option>
</para>
</example>
<para>This will run a four point scan with the sphi motor starting at 0 and stopping at 2. 
The data will be acquired over five seconds at each point, with the default datatype
HISTOGRAM_XYT, and saved in a file with a three letter instrument prefix and run number.</para>
<example>
<title><command>runscan </command>example</title>
<para><command>runscan </command><option>mom 69.000 75 2 </option><command>MONITOR_2
</command>3000 <command>savetype </command><option>nosave </option><command>datatype
</command><option>HISTOGRAM_Y </option>
<command>force </command><option>true</option></para>
<para>This example sets all <command>runscan </command>parameters</para>
</example>
</sect1>
<sect1>
<title><command>bmonscan </command>command</title>
<para>You can run a beam monitor scan with the <command>bmonscan</command> command.  With
this command you can acquire data with a counter in the histogram memory server while
scanning against a "drivable" device, eg motors. The main detector is not required.
Generally this would be used to align an instrument, e.g. alignment of a monochromator
or sample crystal.</para>
<para>Additional information can be found in the chapters "Counters", "User Defined Scans"
and "Batch Manager". </para>
<para><command>bmonscan</command> will create a data file of type BEAM_MONITOR. </para>
<para>Multi-dimensional scans have to be done in a batch file, or by using a tcl
<command>for</command> loop, which may contain a runscan. See the chapter "Batch
Manager".</para>
<para>Unlike runscan, bmonscan is a standard SICS scan object. This means you can configure,
interrogate and control bmonscan using the commands in the chapter "User Defined Scans".
This section has only a summary of the most used commands, which allows you to do a one
variable scan. </para>
<note>
<para> The data acquired at each scan point is saved before going to the next
point.</para>
</note>
<variablelist>
<varlistentry>
<term>
<command>bmonscan run</command>
<replaceable>NP mode preset </replaceable>
</term>
<listitem>
<para>Executes a scan. </para>
<para><replaceable>NP</replaceable> is the number of scan points</para>
<para><replaceable>mode</replaceable> is the counter mode, either
<option>timer</option> or <option>monitor</option></para>
<para><replaceable>preset</replaceable> is the preset value for the counter</para>
<para>Scan data is written to an output file.</para>
<para>tree interface <replaceable>/commands/scan/bmonscan/NP</replaceable></para>
<para>tree interface <replaceable>/commands/scan/bmonscan/mode</replaceable></para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/preset</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan clear</command>
</term>
<listitem>
<para>Clears the list of scan variables. Must be called before each scan that
has different parameters. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan add</command>
<replaceable>variable start increment </replaceable>
</term>
<listitem>
<para>Adds the variable specified by the argument
<replaceable>variable</replaceable> to the list of variables scanned in the
next scan. The arguments <replaceable>start</replaceable> and
<replaceable>increment</replaceable> define the starting point and the
step width for the scan on this variable. </para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_variable</replaceable></para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_start</replaceable></para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_increment</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan getvarpar</command>
<replaceable>i</replaceable>
</term>
<listitem>
<para>Prints the name, start and step of the scan variable number
<replaceable>i</replaceable>
</para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_variable</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan setchannel</command>
<replaceable>n</replaceable>
</term>
<listitem>
<para>Sets the beam monitor to collect data from, where
<replaceable>n</replaceable> is an integer ID for the beam monitor to use.
setchannel uses zero-based counting, so 0 is bm1 etc.</para>
<para>tree interface <replaceable>/commands/scan/bmonscan/channel</replaceable>
</para>
</listitem>
</varlistentry>
</variablelist>
<example>
<title>bmonscan example</title>
<para><command>bmonscan clear</command> clears the list of scan variables</para>
<para><command>bmonscan add </command><replaceable>stth 0 0.1</replaceable> adds the
motor stth to the scan, with a starting value of 0 degrees and an increment value
0.1 degrees</para>
<para><command>bmonscan getvarpar </command><replaceable>0</replaceable> lets you check
the variable you are scanning, its start and step value. In this case it returns
<returnvalue>bmonscan.stth = 0.000000 = 0.100000</returnvalue></para>
<para><command>bmonscan setchannel </command><replaceable>0</replaceable> selects the
first beam monitor, aka bm1. You'll need to check physically where this beam monitor
is on the instrument you're driving</para>
<para><command>bmonscan run </command><replaceable>10 monitor 10000</replaceable> runs
the scan with 10 scan points, in counter mode with a preset of 10000 counts. </para>
</example>
</sect1>
</chapter>

View File

@@ -0,0 +1,303 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Simple Scans for Taipan</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2008-09-17 12:52</date>
</info>
<sect1>
<title><command>runscan </command>command</title>
<para>You can run a scan with the <command>runscan</command> command.  This
<command>runscan</command> is unique to Taipan. Do not use the options below on any
other instrument. With this command you can acquire data with the beam monitor server
while scanning against a "drivable" device, eg motors, temperature controllers.  This
saves count data at each scan point.</para>
<para>Multi-dimensional scans, where you would like to scan say temperature and a motor,
have to be done in a batch file, or by using a tcl <command>for</command> loop, which
may contain a runscan. See Chapter5. Batch Manager </para>
<note>
<para> The data acquired at each scan point is saved before going to the next
point.</para>
</note>
<para><command>runscan </command>
<replaceable>scanvar start stop numpoints mode preset [force savetype]</replaceable>
</para>
<para>Arguments must be in the order described</para>
<variablelist>
<varlistentry>
<term>
<replaceable>scanvar</replaceable>
</term>
<listitem>
<para>a drivable device, ie a motor or temperature controller etc</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>start</replaceable>
</term>
<listitem>
<para>the start position for the scan variable</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>stop</replaceable>
</term>
<listitem>
<para>the stop position for the scan variable</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>numpoints</replaceable>
</term>
<listitem>
<para>the number of scan points (the start and stop positions will be included
in the scan)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>mode</replaceable>
</term>
<listitem>
<para>Allowed <replaceable>mode </replaceable>one of:</para>
<para>
<command>time</command>
</para>
<para><command>monitor</command>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>preset</replaceable>
</term>
<listitem>
<para>the acquisition duration at each scan point, this is in seconds if the
mode is time, or counts if the mode is monitor</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>
<command>runscan </command>
<option>options</option>
</title>
<para>These parameters must be supplied as a name-value pair, e.g.
<command>savetype</command>
<option>nosave</option>
</para>
<para>They can be given in any order.</para>
<variablelist>
<varlistentry>
<term>
<command>force </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Force a scan</para>
<para>Allowed <replaceable>val</replaceable> one of:</para>
<para>
<option>true</option>
</para>
<para>
<option>false</option> (default) </para>
<para> If you really want to, you can force a scan when the instrument isn't
ready. This can be useful for getting a background reference. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>savetype </command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>Allowed <replaceable>val</replaceable> one of:</para>
<para>
<option>save</option> (default) </para>
<para>
<option>nosave</option>
</para>
<para> By default your data will be saved in a file with a three letter
instrument prefix and a run number.  If you use <command>savetype </command>
<option>nosave</option> then the data will be written to a scratch file
called scratch.nx.hdf</para>
</listitem>
</varlistentry>
</variablelist>
<example>
<title><command>runscan </command>example</title>
<para>
<command>runscan </command>
<option>s2 0 2 4 time 5</option>
</para>
</example>
<para>This will run a four point scan with the s2 motor starting at 0 and stopping at 2. 
The data will be acquired over five seconds at each point and saved in a file with a
three letter instrument prefix and run number.</para>
<example>
<title><command>runscan </command>example</title>
<para><command>runscan </command><option>s2 69.000 75 2 </option><command>monitor
</command>3000 <command>savetype </command><option>nosave </option>
<command>force </command><option>true</option></para>
<para>This example sets all <command>runscan </command>parameters</para>
</example>
</sect1>
<sect1>
<title><command>bmonscan </command>command</title>
<para>You can run a beam monitor scan with the <command>bmonscan</command> command.  With
this command you can acquire data with a counter in the histogram memory server while
scanning against a "drivable" device, eg motors. The main detector is not required.
Generally this would be used to align an instrument, e.g. alignment of a monochromator
or sample crystal.</para>
<para>Additional information can be found in the chapters "Counters", "User Defined Scans"
and "Batch Manager". </para>
<para><command>bmonscan</command> will create a data file of type BEAM_MONITOR. </para>
<para>Multi-dimensional scans have to be done in a batch file, or by using a tcl
<command>for</command> loop, which may contain a runscan. See the chapter "Batch
Manager".</para>
<para>Unlike runscan, bmonscan is a standard SICS scan object. This means you can configure,
interrogate and control bmonscan using the commands in the chapter "User Defined Scans".
This section has only a summary of the most used commands, which allows you to do a one
variable scan. </para>
<note>
<para> The data acquired at each scan point is saved before going to the next
point.</para>
</note>
<variablelist>
<varlistentry>
<term>
<command>bmonscan run</command>
<replaceable>NP mode preset </replaceable>
</term>
<listitem>
<para>Executes a scan. </para>
<para><replaceable>NP</replaceable> is the number of scan points</para>
<para><replaceable>mode</replaceable> is the counter mode, either
<option>timer</option> or <option>monitor</option></para>
<para><replaceable>preset</replaceable> is the preset value for the counter</para>
<para>Scan data is written to an output file.</para>
<para>tree interface <replaceable>/commands/scan/bmonscan/NP</replaceable></para>
<para>tree interface <replaceable>/commands/scan/bmonscan/mode</replaceable></para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/preset</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan clear</command>
</term>
<listitem>
<para>Clears the list of scan variables. Must be called before each scan that
has different parameters. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan add</command>
<replaceable>variable start increment </replaceable>
</term>
<listitem>
<para>Adds the variable specified by the argument
<replaceable>variable</replaceable> to the list of variables scanned in the
next scan. The arguments <replaceable>start</replaceable> and
<replaceable>increment</replaceable> define the starting point and the
step width for the scan on this variable. </para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_variable</replaceable></para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_start</replaceable></para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_increment</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan getvarpar</command>
<replaceable>i</replaceable>
</term>
<listitem>
<para>Prints the name, start and step of the scan variable number
<replaceable>i</replaceable>
</para>
<para>tree interface
<replaceable>/commands/scan/bmonscan/scan_variable</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bmonscan setchannel</command>
<replaceable>n</replaceable>
</term>
<listitem>
<para>Sets the beam monitor to collect data from, where
<replaceable>n</replaceable> is an integer ID for the beam monitor to use.
setchannel uses zero-based counting, so 0 is bm1 etc.</para>
<para>tree interface <replaceable>/commands/scan/bmonscan/channel</replaceable>
</para>
</listitem>
</varlistentry>
</variablelist>
<example>
<title>bmonscan example</title>
<para><command>bmonscan clear</command> clears the list of scan variables</para>
<para><command>bmonscan add </command><replaceable>stth 0 0.1</replaceable> adds the
motor stth to the scan, with a starting value of 0 degrees and an increment value
0.1 degrees</para>
<para><command>bmonscan getvarpar </command><replaceable>0</replaceable> lets you check
the variable you are scanning, its start and step value. In this case it returns
<returnvalue>bmonscan.stth = 0.000000 = 0.100000</returnvalue></para>
<para><command>bmonscan setchannel </command><replaceable>0</replaceable> selects the
first beam monitor, aka bm1. You'll need to check physically where this beam monitor
is on the instrument you're driving</para>
<para><command>bmonscan run </command><replaceable>10 monitor 10000</replaceable> runs
the scan with 10 scan points, in counter mode with a preset of 10000 counts. </para>
</example>
</sect1>
<sect1>
<title><command>diffskan </command>command</title>
<variablelist>
<varlistentry>
<term>
<command>diffskan</command>
<replaceable>milliseconds scanobj motor start stop speed</replaceable>
</term>
<listitem>
<para>Runs the counters continuously while the motor drives from start to end.</para>
<para><replaceable>milliseconds</replaceable> is the counter sampling interval</para>
<para><replaceable>scanobj</replaceable> is the scan object. You should be able
to use any scan object but I've only tried it with iscan (you need iscan for
meshscan)</para>
<para><replaceable>motor</replaceable> is the name of the motor to be scanned</para>
<para><replaceable>start</replaceable> the start position for the scan variable</para>
<para><replaceable>stop</replaceable> the stop position for the scan variable</para>
<para><replaceable>speed </replaceable> is the speed of the scan variable in its
positional units per second, e.g. degrees per second</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title><command>mesh </command>command</title>
<variablelist>
<varlistentry>
<term>
<command>mesh</command>
<replaceable>mot start [fname]</replaceable>
</term>
<listitem>
<para>The mesh command is currently hardwired to drive "mot" from "start" in steps of 1 unit to start +15 and then call diffskan on s1.
So the code needs to be edited for different ranges etc</para>
<para>The meshscan code was just cobbled together when Bob Aldus couldn't find a reflection so we needed to come up with something quickly.
It is an mix of ad-hoc tcl and python code and would need to be parameterised to be generally useful.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Batching Tasks</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2006-08-17 16:31</date>
</info>
<sect1>
<title>Usage</title>
<para>The SICS batch manager reads commands from a Tcl script and executes them, you can use
Tcl loops and logical constructs in the batch file, see the <uri
xlink:href="dbSICSch8.xml#batch">Tcl command</uri> reference.   The batch manager
command is <command>exe</command>. Refer to the command reference section below for
syntax and usage.</para>
<para>Following is an example of an advanced batch file which runs some twotheta scans and
omega scans several times each.  The batch execution has been made dynamically
configurable by using two tcl arrays, "scan()" and "batch()", to hold parameters for the
scan commands and the loops.  This means that the user can change the number of points
per scan or the number of iterations in the loops from the command line before executing
the batchfile.  The 'if' statements at the start of the file initialise the arrays if
they don't already exist.  </para>
<example>
<title>Batch file example</title>
<programlisting># This is an example of a dynamically configurable batch file.
# Set default values for the batch and scan parameters.
if { [info exists scan(np)] == 0 } { set scan(np) 5 }
if { [info exists scan(mode)] == 0 } { set scan(mode) timer }
if { [info exists scan(preset)] == 0 } { set scan(preset) 1.0 }
if { [info exists batch(repeatnum)] == 0 } { set batch(repeatnum) 3 }
clientput "Starting batch of twotheta scans"
MyScan add twotheta 50 0.01
for {set i 0} {$i &lt; $batch(repeatnum)} {incr i} {
clientput "twotheta scan: $i"
MyScan run $scan(np) $scan(mode) $scan(preset)
}
MyScan clear
clientput "Starting batch of omega scans"
MyScan add omega 50 0.01
for {set i 0} {$i &lt; $batch(repeatnum)} {incr i} {
clientput "omega scan: $i"
MyScan run $scan(np) $scan(mode) $scan(preset)
}
</programlisting>
</example>
<para>Assuming that the file is called batch.tcl, the user could execute it as follows</para>
<programlisting>
set scan(np) 100
exe batch.tcl
</programlisting>
<warning>
<title>Warning about the <command>run </command> command</title>
<para>The <command>run</command> command does not wait for a move to complete before it
returns, this means that the batch manager will execute any following commands
straight away.  If you want move an axis and then perform some action after the move
is completed you should use the <command>drive</command> command instead of
<command>run</command>. The following batch file will print the message after
the move is complete.</para>
<programlisting>
drive omega 5
clientput "omega is has reached five degrees"
</programlisting>
</warning>
</sect1>
<sect1>
<title>Commands</title>
<para>
<uri xreflabel="batch"/>The batch buffer manager handles the execution of batch files.
It can execute batch files directly. Additionally, batch files can be added into a queue
for later processing. The batch buffer manager supports the following commands described
below.  The command for controlling the batch manager is called <command>exe</command>
</para>
<variablelist>
<varlistentry>
<term>
<command>exe append </command>
<replaceable>'tcl commands' </replaceable>
</term>
<listitem>
<para><note>
<para>don't know the syntax. nha</para>
</note>Append some tcl commands. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe </command>
<replaceable>buffername</replaceable>
</term>
<listitem>
<para>directly load the buffer stored in the file
<replaceable>buffername</replaceable> and execute it. The file is searched
in the batch buffer search path. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe batchpath </command>
<replaceable>newpath</replaceable>
</term>
<listitem>
<para>Without an argument, this command lists the directories which are searched
for batch files. </para>
<para><replaceable>newpath</replaceable> sets a new search path. It is possible
to specify multiple directories by separating them with colons. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe clear</command>
</term>
<listitem>
<para>Clears the queue of batch buffers. For safety, use in conjuction with
<command>exe clearupload</command> </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe clearupload</command>
</term>
<listitem>
<para>Clears partially uploaded batch buffers. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe enqueue </command>
<replaceable>buffername</replaceable>
</term>
<listitem>
<para>Appends <replaceable>buffername</replaceable> to the queue of batch
buffers to execute. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe forcesave </command>
<replaceable>filename</replaceable>
</term>
<listitem>
<para>Will overwrite an existing batch file without warning. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe info </command>
</term>
<listitem>
<para>prints the name of the currently executing batch buffer </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe info stack</command>
</term>
<listitem>
<para>prints the stack of nested batch files (i.e. batch files calling each
other). </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe info range </command>
<replaceable>name</replaceable>
</term>
<listitem>
<para>Without an argument prints the range of code currently being executed.</para>
<para><replaceable>name</replaceable> prints the range of code executing in
named buffer within the stack of nested buffers. The reply looks like: </para>
<para>
<computeroutput>number of start character = number of end character = line
number</computeroutput>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe info text </command>
<replaceable>name</replaceable>
</term>
<listitem>
<para>Without an argument prints the code text currently being executed. </para>
<para><replaceable>name </replaceable> prints the range of code text executing
in the named buffer within the stack of nested buffers. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe interest </command>
</term>
<listitem>
<para>Switches on automatic notification about starting batch files, executing a
new bit of code or for finishing a batch file. This is most useful for SICS
clients watching the progress of the experiment.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe print </command>
<replaceable>buffername</replaceable>
</term>
<listitem>
<para>Prints the content of the batch buffer
<replaceable>buffername</replaceable> to the screen. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe queue</command>
</term>
<listitem>
<para>Prints the content of the batch buffer queue. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe run </command>
</term>
<listitem>
<para>Starts executing the batch buffers in the queue. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe save </command>
<replaceable>filename</replaceable>
</term>
<listitem>
<para>Save the commands to a batch file.  Returns an error if you try to
overwrite an existing batch file</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe syspath </command>
<replaceable>newpath</replaceable>
</term>
<listitem>
<para>Without an argument, this command lists the system directories which are
searched for batch files. </para>
<para><replaceable>newpath</replaceable> sets a new system search path. It is
possible to specify multiple directories by separating them with colons.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe upload </command>
</term>
<listitem>
<para>Prepare the batch manager to upload a new set of commands from the
client</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,283 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Counters</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2006-08-16 16:24</date>
<releaseinfo>Beam monitors have not been documented completely in either the PSI source code
or on the Bragg Institute Plone CMS. Therefore, this document is a standalone document,
not edited from another source. </releaseinfo>
</info>
<sect1>
<title>Beam monitors</title>
<para>When you are doing an experiment with the main detector, you don't address beam
monitors directly. You would normally select and configure the beam monitor to control
your experiment using the <command>histmem</command> command.</para>
<para>However, you may want to use a scan command with a beam monitor and without the main
detector. This can be done with <command>bmonscan</command> which is a SICS scan object.
For more detail on bmonscan, see the chapter "Simple Scans". </para>
<para>Instruments often have more than one beam monitor. SICS has a multicounter interface
named <command>bm</command>, which is a list of all the beam monitors on the instrument,
usually 2 or 3 beam monitors with names bm1, bm2 and bm3. You must select which beam
monitor will control your experiment. When you run the experiment using bm, all the beam
monitors on the instrument will count, and with most instrument configurations, the
values will be saved to the data file - you should check this is the case if you need
these values. </para>
<sect2>
<title>Selecting a beam monitor for bm</title>
<variablelist>
<varlistentry>
<term>
<command>bmonscan setchannel</command>
<replaceable>n</replaceable>
</term>
<listitem>
<para>Sets the active beam monitor. </para>
<para><replaceable>n</replaceable> = 0 is bm1, <replaceable>n</replaceable>
=1 is bm2 etc. </para>
<para>This is the preferred command when doing a
<command>bmonscan</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>bm setchannel</command>
<replaceable>n</replaceable>
</term>
<listitem>
<para>Sets the active beam monitor. </para>
<para><replaceable>n</replaceable> = 0 is bm1, <replaceable>n</replaceable>
=1 is bm2 etc. </para>
<para>This is the alternate command when using
<command>bmonscan</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>histmem mode</command>
<replaceable>MONITOR_n</replaceable>
</term>
<listitem>
<para>Sets the active beam monitor. </para>
<para><replaceable>n</replaceable> = 1 is bm1, <replaceable>n</replaceable>
=2 is bm2 etc.</para>
<para>Use this command when using <command>histmem</command></para>
</listitem>
</varlistentry>
</variablelist>
<para><command>runscan</command> also has an argument to select the beam monitor. </para>
<para>Do not use these interchangably e.g. do not use <command>bm setchannel</command>
<replaceable>n</replaceable> to set <command>histmem mode</command>
<replaceable>MONITOR_n</replaceable>. It will not work. </para>
<para>Since there are four commands for selecting beam monitor, you have to be careful
to use the right one. Be explicit with your selection of beam monitor when using
these commands. Don't assume. </para>
<para>If you are using <command>histmem</command> to control the detector, set the beam
monitor using <command>histmem mode</command>. </para>
<para>If you are using <command>bmonscan</command> set the beam monitor using
<command>bm setchannel</command> or <command>bmonscan setchannel</command></para>
<para>If you are using <command>runscan</command> set the beam monitor with the
<replaceable>mode</replaceable> setting in the runscan arguments.</para>
</sect2>
<sect2>
<title>Setting modes for the beam monitors</title>
<para>The mode for a beam monitor, either <option>Timer</option> or
<option>Monitor</option> can be set using <command>bm mode</command>, where bm can
be bm, bm1, bm2 etc. The mode of the mulitcounter <command>bm</command> may be
different from the mode of the selected beam monitor e.g. <command>bm1
mode</command>. </para>
<para>Even if you select bm1 using <command>bm setchannel 0</command> or
<command>bmonscan setchannel 0</command>, changing the mode of bm1 e.g.
<command>bm1 mode monitor</command> will not change <command>bm mode</command>.</para>
<para><command>bm mode</command> is set by the most recent <command>bmonscan
run</command>. </para>
</sect2>
<sect2>
<title>Active beam monitor commands (bm)</title>
<para>The active beam monitor <command>bm</command> has the following commands. These
commands are get only</para>
<variablelist>
<varlistentry>
<term>
<replaceable>bm_preset</replaceable>
</term>
<listitem>
<para>scalar value at which an acquisition will be stopped. Used in
conjunction with <replaceable>mode</replaceable></para>
<para>get only</para>
<para>tree interface <command>/monitor/preset</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>bm_mode</replaceable>
</term>
<listitem>
<para>mode to stop acquisitions, either <option>Timer</option> or
<option>Counter</option></para>
<para>get only</para>
<para>Return values:</para>
<para><option>Timer</option> will stop acquisition <command>preset</command>
seconds after the acquisition is started</para>
<para><option>Monitor</option> will stop acquisition
<command>preset</command> counts after the acquisition is started</para>
<para>tree interface <command>/monitor/mode</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>tree interface only</replaceable>
</term>
<listitem>
<para>gets the scalar value for the instantaneous time of the beam monitor
selected to control the experiment. </para>
<para>get only</para>
<para>Units: seconds</para>
<para>tree interface <command>/monitor/time</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>tree interface only</replaceable>
</term>
<listitem>
<para>gets the scalar value for the instantaneous counts of the beam monitor
selected to control the experiment. </para>
<para>get only</para>
<para>Units: counts</para>
<para>tree interface <command>/monitor/data</command></para>
</listitem>
</varlistentry>
</variablelist>
<para><command>bm</command> is available in the tree interface under the /monitor node,
and attributes can be set and get using the <command>hget</command> and
<command>hset</command> commands. </para>
</sect2>
<sect2>
<title>Specific beam monitor commands (bm1)</title>
<para>Each beam monitors are accessible as SICS objects, and in the tree interface under
the /monitor node. They can be addressed by name, or using the hget commands when
using the tree interface. There are generally either 1, 2 or 3 monitor per
instrument, and the commands are of the form</para>
<para><command>bm1_...</command></para>
<para>where 1 can be 1, 2 or 3</para>
<para>For simplicity, all the command descriptions below will use <command>bm1</command></para>
<variablelist>
<varlistentry>
<term>
<replaceable>bm1_counts</replaceable>
</term>
<listitem>
<para>returns the instanteous value of the number of counts</para>
<para>Units: counts</para>
<para>tree interface <replaceable>/monitor/bm1_counts</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>bm1_event_rate</replaceable>
</term>
<listitem>
<para>returns the instanteous value of the count rate</para>
<para>Units: counts per second</para>
<para>tree interface
<replaceable>/monitor/bm1_event_rate</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>bm1_time</replaceable>
</term>
<listitem>
<para>return the instantaneous time on this beam monitor. Each beam monitor
can have a unique time value. </para>
<para>Units: seconds</para>
<para>tree interface <replaceable>/monitor/bm1_time</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>bm1_status</replaceable>
</term>
<listitem>
<para>Return values:</para>
<para><option>RUNNING</option> Beam monitor is enabled</para>
<para><option>DISABLED</option> Beam monitor is disabled</para>
<para>tree interface <replaceable>/monitor/bm1_status</replaceable></para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<sect2>
<title>Commands used on both active (bm) and specific (bm1) beam monitors</title>
<para>Use the commands on either <command>bm</command> or <command>bm1</command></para>
<para>Please replace <replaceable>bm1</replaceable> with the beam monitor you want to
control. </para>
<para><emphasis>A setting on <command>bm</command> will not change the setting on the
selected beam monitor e.g. <command>bm1</command></emphasis></para>
<variablelist>
<varlistentry>
<term><replaceable>bm1 preset value</replaceable></term>
<listitem>
<para>get or set a preset <replaceable>value</replaceable> for
<replaceable>bm1</replaceable>. This is the value at which the
acquisition will be stopped. Used in conjunction with
<replaceable>mode</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>bm1 mode value</replaceable></term>
<listitem>
<para>get or set the mode to stop acquisitions, either
<option>timer</option> or <option>monitor</option></para>
<para><replaceable>value</replaceable> must be one of these options</para>
<para><option>timer</option> will stop acquisition <command>preset</command>
seconds after the acquisition is started</para>
<para><option>monitor</option> will stop acquisition
<command>preset</command> counts after the acquisition is started</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>bm1 status</replaceable></term>
<listitem>
<para>returns the monitor status. e.g. </para>
<para><returnvalue>bm1.CountStatus = 10000 0 Beam: 0 E6</returnvalue></para>
<para>= preset, current control value, current counts. </para>
<para>The current counts may be high by 10 times. To be tested and fixed.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>bm1 count value</replaceable></term>
<listitem>
<para>Sets the preset to <replaceable>value</replaceable> and runs the
counter to the preset.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Use <command>hget</command> with the tree interface e.g. <command>hget
/monitor/bm1_counts</command>. </para>
<para><command>hget /monitor/bm1_counts</command> will return the same value as
<command>bm1_counts</command></para>
<para>These attributes are get only e.g. <command>hget /monitor/bm1_counts</command></para>
<para>The next section refers to <command>histmem</command> which is most commonly used.
The second section will refer to bm, and how it interacts with
<command>histmem</command></para>
</sect2>
</sect1>
<sect1>
<title>Configuring counters</title>
<para>Counters must be configured into the SICS server with the MakeCounter command, they
cannot be added dynamically to a running server. The MakeCounter command has the
following syntax </para>
<para>
<command>MakeCounter</command>
<replaceable>name</replaceable>
<replaceable>type</replaceable>
<replaceable>[parameters]</replaceable>
</para>
<para>The list of parameters depends on the type of counter that is being created.</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,504 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>User Defined Scans</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2006-08-16 15:25</date>
</info>
<sect1>
<title>Creating a Scan Command</title>
<para>A scan command must first be initialised with <command>MakeScanCommand</command>
command in the SICS configuration file before it can be used.
<command>MakeScanCommand</command> initialises the SICS internal <command>scan</command>
command.</para>
<para>
<command>MakeScanCommand</command>
<replaceable>name countername headfile recoverfil</replaceable>
</para>
<para>Arguments must be in the order described</para>
<variablelist>
<varlistentry>
<term>
<replaceable>name</replaceable>
</term>
<listitem>
<para>The scan will be accessible as <replaceable>name</replaceable> in the
system. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>countername</replaceable>
</term>
<listitem>
<para>The name of a valid counter object to use for counting</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>headfile</replaceable>
</term>
<listitem>
<para>The full pathname of a header description file. This file describes the
contents of the header of the data file. The format of this file is
described below</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<replaceable>recoverfil</replaceable>
</term>
<listitem>
<para> The full pathname of a file to store recover data. The internal scan
command writes the state of the scan to a file after each scan point. This
allows for restarting of aborted scans. </para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>Using a Scan Command</title>
<para> The scan command (named here <command>MyScan</command>, but may have another name)
understands the following commands: </para>
<variablelist>
<varlistentry>
<term>
<command>MyScan run</command>
<replaceable>NP mode preset </replaceable>
</term>
<listitem>
<para>Executes a scan. </para>
<para><replaceable>NP</replaceable> is the number of scan points</para>
<para><replaceable>mode</replaceable> is the counter mode, either
<option>timer</option> or <option>monitor</option></para>
<para><replaceable>preset</replaceable> is the preset value for the counter</para>
<para>Scan data is written to an output file. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan add</command>
<replaceable>name start step </replaceable>
</term>
<listitem>
<para>Adds the variable specified by the argument
<replaceable>name</replaceable> to the list of variables scanned in the next
scan. The arguments <replaceable>start</replaceable> and
<replaceable>step</replaceable> define the starting point and the step width
for the scan on this variable. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan appendvarpos</command>
<replaceable>i pos</replaceable>
</term>
<listitem>
<para>Append <replaceable>pos</replaceable> to the array of positions for scan
variable <replaceable>i</replaceable>. To be used from user defined scan
functions. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan callback</command>
<replaceable>status</replaceable>
</term>
<listitem>
<para>Triggers callbacks configured on the scan object. </para>
<para>Allow <replaceable>status</replaceable> one of:</para>
<para>
<option>scanstart </option>
</para>
<para>
<option>scanpoint </option>
</para>
<para>
<option>scanend </option>
</para>
<para>May be used by user functions implementing own scan loops. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan clear</command>
</term>
<listitem>
<para>Clears the list of scan variables. Must be called before each scan that
has different parameters. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan configure </command>
<replaceable>mode</replaceable>
</term>
<listitem>
<para>Configures the scan <replaceable>mode</replaceable></para>
<para>Allowed <replaceable>mode </replaceable>one of: </para>
<para><option>standard</option> (default). Writing ASCII files</para>
<para><option>script</option> Scan functions are overriden by the user. </para>
<para><option>soft</option> The scan stores and saves software zero point
corrected motor positions. The standard is to save the hardware positions as
read from the motor controller.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan continue</command>
<replaceable>NP mode preset </replaceable>
</term>
<listitem>
<para>Continues an interrupted scan. </para>
<para>Used by the recovery feature. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan function list </command>
</term>
<listitem>
<para>Lists the available configurable function names. The calling style of
these functions is described in the next section about stdscan. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan function</command>
<replaceable>functionname</replaceable>
</term>
<listitem>
<para>Returns the currently configured function for
<replaceable>functionname</replaceable>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan function</command>
<replaceable>functionname newfunctionname</replaceable>
</term>
<listitem>
<para>Sets a new function to be called for the function
<replaceable>functionname</replaceable> in the scan. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan getcounts</command>
</term>
<listitem>
<para>Retrieves the counts collected during the scan. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan getfile</command>
</term>
<listitem>
<para>Returns the name of the current data file</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan getmonitor</command>
<replaceable>i</replaceable>
</term>
<listitem>
<para>Prints the monitor values collected during the scan for monitor
<replaceable>i</replaceable></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan gettime</command>
</term>
<listitem>
<para>Prints the counting times for the scan points in the current scan. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan getvardata</command>
<replaceable>n</replaceable>
</term>
<listitem>
<para>Retrieves the values of a scan variable during the scan (the x axis).
<replaceable>n</replaceable> is the ID of the scan variable to retrieve
data for. ID is 0 for the first scan variable added, 1 for the second etc.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan getvarpar</command>
<replaceable>i</replaceable>
</term>
<listitem>
<para>Prints the name, start and step of the scan variable number
<replaceable>i</replaceable>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan interest</command>
</term>
<listitem>
<para>A SICS client can be automatically notified about scan progress. This is
switched on with this command. Three types of messages are sent: </para>
<para>a string <computeroutput>NewScan</computeroutput> on start of the scan</para>
<para>a string <computeroutput>ScanEnd</computeroutput> after the scan has
finished </para>
<para>a string <computeroutput>scan.Counts = {109292 8377 ...}
</computeroutput>with the scan values after each finished scan point.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan uuinterest</command>
</term>
<listitem>
<para>As for <command>interest</command> but the array of counts is transferred
in UU encoded format. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan dyninterest</command>
</term>
<listitem>
<para>As for <command>interest</command> but scan points are printed one by one
as a list containing: </para>
<para><replaceable>point number first_scan_var_pos counts</replaceable>. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan uninterest</command>
</term>
<listitem>
<para> Uninterest switches automatic notification about scan progress off.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan integrate</command>
</term>
<listitem>
<para> Calculates the integrated intensity of the peak and the variance of the
intensity for the last scan. </para>
<para>Returns either an error when insufficient scan data is available, or a
pair of numbers. Peak integration is performed along the method described by
Grant and Gabe in J. Appl. Cryst. (1978), 11, 114-120. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan log</command>
<replaceable>var</replaceable>
</term>
<listitem>
<para>Adds <replaceable>var</replaceable> to list of variables logged during the
scan. Can be slave motors such as <option>stt, om, chi, phi </option>during
four circle work. These variables are not driven, just logged.
<replaceable>var</replaceable> is the SICS variable to log. Only
drivable parameters may be logged in such a way. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan noscanvar</command>
</term>
<listitem>
<para>Prints the number of scan variables </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan np</command>
</term>
<listitem>
<para>Prints the number of points in the current scan. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan setchannel</command>
<replaceable>n</replaceable>
</term>
<listitem>
<para>Sometimes it is required to scan not the counter but a monitor. This
command sets the channel to collect data from. <replaceable>n</replaceable>
is an integer ID for the channel to use. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan simscan</command>
<replaceable>pos FWHM height </replaceable>
</term>
<listitem>
<warning>
<para>BROKEN</para>
</warning>
<para>This is a debugging command. It simulates scan data with a hundred points
between an x axis ranging from 10 to 20. A gaussian peak is produced from
the arguments given: </para>
<para><replaceable>pos</replaceable> the position of the peak maximum</para>
<para><replaceable>FWHM</replaceable> is the full width at half maxxximum for
the peak </para>
<para><replaceable>height</replaceable> is its height</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan silent</command>
<replaceable>NP mode preset </replaceable>
</term>
<listitem>
<para>Executes a scan. </para>
<para>Does not produce an output file</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>MyScan storecounts</command> counts time mon1 mon2 ... </term>
<listitem>
<warning>
<para>Don't understand the syntax nha. </para>
</warning>
<para>This stores an entry of count values into the scan data structure. To be
used from user defined scan functions. The scan pointer is incremented by
one. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan storecounter</command>
</term>
<listitem>
<para>Store the counts and monitors in the counter object configured for the
scan into the scan data structure. Increments the scan pointer by one.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan recover</command>
</term>
<listitem>
<para>Recovers an aborted scan. </para>
<para>The scan object writes a file with all data necessary to continue the scan
after each scan point. If for some reason a scan has been aborted due to
user intervention or a system failure, this scheme allows to continue the
scan when everything is alright again. This works only if the scan has been
started with <command>run</command>, not with
<command>silent</command></para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>MyScan window</command>
<replaceable>newval</replaceable>
</term>
<listitem>
<para>Peak Integration uses a window in order to determine if it is still in the
peak or in background. This command allows to request the size of this
window (without argument) or set it with <replaceable>newval</replaceable>
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1>
<title>User Definable Scan Functions</title>
<para>The last commands in the last section allow overloading functions that implement
various operations during the scan with user defined functions. This section is the
reference for user defined functions. The following operations during a scan can be
configured: </para>
<variablelist>
<varlistentry>
<term>
<command>count MyScan </command>
<replaceable>userobjectname point mode preset</replaceable>
</term>
<listitem>
<para>Called at each scan point to perform the counting operation </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>collect MyScan </command>
<replaceable>userobjectname point </replaceable>
</term>
<listitem>
<para>Called for each scan point. This function stores the scan data into the
scan data structure. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>drive MyScan </command>
<replaceable>userobjectname point</replaceable>
</term>
<listitem>
<para><command>drive</command> to the next scan point </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>finish MyScan </command>
<replaceable>userobjectname</replaceable>
</term>
<listitem>
<para>Called after the scan finishes and may be used to dump a data file or
perform other clean up operations after a scan. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>prepare MyScan </command>
<replaceable>userobjectname</replaceable>
</term>
<listitem>
<para>Does operations before a scan starts. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>userdata </term>
<listitem>
<para>This is the name of a user defined object which may be used to store user
data for the scan. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>writeheader MyScan </command>
<replaceable>userobjectname</replaceable>
</term>
<listitem>
<para>Write the header of the data file </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>writepoint MyScan </command>
<replaceable>userobjectname point </replaceable>
</term>
<listitem>
<para>Called for each scan point. Prints information about the scan point to the
data file and to the user. </para>
</listitem>
</varlistentry>
</variablelist>
<para>
<command>MyScan</command> is the name of the scan object invoking the function. This can
be used for querying the scan object. <replaceable>userobjectname</replaceable> is the
name of a entity as specified as userdata in the configuration. point is the number of
the current scan point.</para>
</sect1>
</chapter>

View File

@@ -0,0 +1,193 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Batch Manager</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2006-08-17 15:46</date>
</info>
<sect1>
<title>Commands</title>
<para>
<uri xreflabel="batch"/>The batch buffer manager handles the execution of batch files.
It can execute batch files directly. Additionally, batch files can be added into a queue
for later processing. The batch buffer manager supports the following commands described
below.  The command for controlling the batch manager is called <command>exe</command>
</para>
<variablelist>
<varlistentry>
<term>
<command>exe </command>
<replaceable>buffername</replaceable>
</term>
<listitem>
<para>directly load the buffer stored in the file
<replaceable>buffername</replaceable> and execute it. The file is searched
in the batch buffer search path. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe batchpath </command>
<replaceable>newpath</replaceable>
</term>
<listitem>
<para>Without an argument, this command lists the directories which are searched
for batch files. </para>
<para><replaceable>newpath</replaceable> sets a new search path. It is possible
to specify multiple directories by separating them with colons. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe syspath </command>
<replaceable>newpath</replaceable>
</term>
<listitem>
<para>Without an argument, this command lists the system directories which are
searched for batch files. </para>
<para><replaceable>newpath</replaceable> sets a new system search path. It is
possible to specify multiple directories by separating them with colons.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe info </command>
</term>
<listitem>
<para>prints the name of the currently executing batch buffer </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe info stack</command>
</term>
<listitem>
<para>prints the stack of nested batch files (i.e. batch files calling each
other). </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe info range </command>
<replaceable>name</replaceable>
</term>
<listitem>
<para>Without an argument prints the range of code currently being executed.</para>
<para><replaceable>name</replaceable> prints the range of code executing in
named buffer within the stack of nested buffers. The reply looks like: </para>
<para>
<computeroutput>number of start character = number of end character = line
number</computeroutput>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe info text </command>
<replaceable>name</replaceable>
</term>
<listitem>
<para>Without an argument prints the code text currently being executed. </para>
<para><replaceable>name </replaceable> prints the range of code text executing
in the named buffer within the stack of nested buffers. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe enqueue </command>
<replaceable>buffername</replaceable>
</term>
<listitem>
<para>Appends <replaceable>buffername</replaceable> to the queue of batch
buffers to execute. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe clear</command>
</term>
<listitem>
<para>Clears the queue of batch buffers </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe queue</command>
</term>
<listitem>
<para>Prints the content of the batch buffer queue. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe run </command>
</term>
<listitem>
<para>Starts executing the batch buffers in the queue. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe print </command>
<replaceable>buffername</replaceable>
</term>
<listitem>
<para>Prints the content of the batch buffer
<replaceable>buffername</replaceable> to the screen. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe interest </command>
</term>
<listitem>
<para>Switches on automatic notification about starting batch files, executing a
new bit of code or for finishing a batch file. This is most useful for SICS
clients watching the progress of the experiment.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe upload </command>
</term>
<listitem>
<para>Prepare the batch manager to upload a new set of commands from the
client</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe append </command>
<replaceable>'tcl commands' </replaceable>
</term>
<listitem>
<para><note>
<para>don't know the syntax. nha</para>
</note>Append some tcl commands. </para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe save </command>
<replaceable>filename</replaceable>
</term>
<listitem>
<para>Save the commands to a batch file.  Returns an error if you try to
overwrite an existing batch file</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<command>exe forcesave </command>
<replaceable>filename</replaceable>
</term>
<listitem>
<para>Will overwrite an existing batch file without warning. </para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -0,0 +1,319 @@
<?xml version="1.0" encoding="UTF-8"?>
<?oxygen RNGSchema="http://www.oasis-open.org/docbook/xml/5.0/rng/docbook.rng" type="xml"?>
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0">
<info><title>Motor Configuration</title><author>
<personname>Ferdi Franceschini</personname>
</author>
<date>2007-02-12 14:24</date>
</info>
<sect1>
<title>Configuration example</title>
<para>Motors are configured by following this pattern</para>
<itemizedlist>
<listitem>
<para>Setup the host and port of the controller</para>
</listitem>
<listitem>
<para>Make the motor queue</para>
</listitem>
<listitem>
<para>Set the home value for the absolute encoder</para>
</listitem>
<listitem>
<para>Set the motor configuration parameters</para>
</listitem>
</itemizedlist>
<example>
<title>Motor configuration example</title>
<para>from
<computeroutput>ics1-echidna.nbi.ansto.gov.au:/usr/local/sics/server/config/motors/motor_configuration.tcl</computeroutput></para>
<programlisting># Setup addresses of Galil DMC2280 controllers.
set dmc2280_controller1(host) mc1-$animal
set dmc2280_controller1(port) pmc1-$animal
...
MakeAsyncQueue mc1 DMC2280 $dmc2280_controller1(host) \
$dmc2280_controller1(port)
...
#Measured absolute encoder reading at home position
set mphi_Home 7781389
...
# Monochromator phi, Tilt 1, upper
Motor mphi $motor_driver_type [params \
asyncqueue mc1\
absEnc 1\
absEncHome $mphi_Home\
axis A\
cntsPerX -8192\
hardlowerlim -2\
hardupperlim 2\
maxSpeed 1\
maxAccel 1\
maxDecel 1\
stepsPerX -25000\
units degrees]
setHomeandRange -motor mphi -home 0 -lowrange 2 -uprange 2
mphi speed 1
mphi movecount $move_count
mphi precision 0.05
mphi part crystal
mphi long_name phi
</programlisting>
</example>
</sect1>
<sect1>
<title>Configuration checklist</title>
<para>Always use a positive number for the motor steps conversion multiplier.If the encoder
counts decrease when the motor steps increase then the encoder counts conversion
multiplier must be negative.</para>
<sect2>
<title>For each axis with an absolute encoder</title>
<orderedlist spacing="compact">
<listitem>
<para>How many motor steps are there per degree or mm?</para>
</listitem>
<listitem>
<para>How many encoder counts are there per degree or mm?</para>
</listitem>
<listitem>
<para>Move the motor a positive number of steps.If the encoder counts has
increased then set the <emphasis role="b">stepsPerX</emphasis> positive
otherwise negative.</para>
</listitem>
<listitem>
<para>If encoder counts decrease when motor steps increase then set the sign of
<emphasis role="b">cntsPerX</emphasis> to the opposite sign of <emphasis
role="b">stepsPerX</emphasis>, otherwise the sign should be the
same.</para>
</listitem>
<listitem>
<para>What is the encoder reading at the home position?</para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>For each axis without an absolute encoder</title>
<orderedlist spacing="compact">
<listitem>
<para>How many motor steps are there per degree or mm?</para>
</listitem>
<listitem>
<para>Move the motor a positive number of steps.If the axis moved in the
positive direction according to the coordinate conventions then set the
<emphasis role="b">stepsPerX</emphasis> positive otherwise
negative.</para>
</listitem>
<listitem>
<para>Set axis home position.<orderedlist spacing="compact">
<listitem>
<para>Make sure the axis HOME routine has been run. The axis should
be at the lower limit and the motor defined position should be
zero, ie TDx returns zero.</para>
</listitem>
<listitem>
<para>Drive the axis to the home position and set <emphasis role="b"
>motorHome</emphasis> to TDx</para>
</listitem>
</orderedlist></para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>For all axes</title>
<orderedlist spacing="compact">
<listitem>
<para>Check that maxSpeed, maxAccel, and maxDecel are sane. NOTE: The initial
speed, accel and decel will be set to the maximum values.</para>
</listitem>
<listitem>
<para>If an axis should not be powered down after each move then set
noPowerSave=1.</para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>Slits</title>
<para>The zero position for the slits is defined when the slits are closed but not
overlapping.  Since the slit motors don't have absolute encoders we need to define a
zero reference for counting motor steps, we will call this reference the motorHome. 
The motorHome is set when the slits are fully open, there is a home subroutine
(called #HOME) on the DMC2280 controller which can be called to set this position
for you.</para>
<para>The homing code on the controller fully opens the slits and then sets the position
as zero.</para>
<orderedlist spacing="compact">
<listitem>
<para>Run #HOME command on controller, ie XQ #HOME,1Useu</para>
</listitem>
<listitem>
<para>Check that the command has completed with MG _XQ1, a value of -1 means the
command has finished otherwise it displays the current line number.</para>
</listitem>
<listitem>
<para>After the #HOME command has completed check that the defined motor
positions has been set to zero by executing TDEFGH</para>
</listitem>
<listitem>
<para>run gap to zero, set lowerlims to -ve val if there is a gap, then run gap
to -ve witdh.</para>
</listitem>
<listitem>
<para>Read position for each slit and set it as the "motorHome" parameter in the
sics configuration file.</para>
</listitem>
</orderedlist>
</sect2>
<sect2>
<title>Testing</title>
<orderedlist spacing="compact">
<listitem>
<para>Check communications to all four controllers.</para>
</listitem>
<listitem>
<para>Try to run motor past limits.Does SICS reject the command?</para>
</listitem>
<listitem>
<para>Run motors to limits.Does it move in the right direction?Does it stop
where expected?</para>
</listitem>
<listitem>
<para>Run motor to home position.Does it stop where expected?</para>
</listitem>
<listitem>
<para>Set limits</para>
</listitem>
<listitem>
<para>Set home</para>
</listitem>
<listitem>
<para>Set softzero</para>
</listitem>
<listitem>
<para>Set sign (direction of motion)</para>
</listitem>
<listitem>
<para>Set speed</para>
</listitem>
<listitem>
<para>Set acceleration</para>
</listitem>
<listitem>
<para>Set deceleration</para>
</listitem>
</orderedlist>
</sect2>
</sect1>
<sect1>
<title>Configuration reference</title>
<variablelist>
<varlistentry>
<term><command>absEnc </command><replaceable>integer</replaceable>
</term>
<listitem>
<para>Set to 1 if the axis has an absolute encoder</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>absEncHome </command><replaceable>integer</replaceable>
</term>
<listitem>
<para>The calibrated "home" position in encoder counts</para>
<para>Required if <command>absEnc</command> = 1</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>axis </command><replaceable>val</replaceable></term>
<listitem>
<para>The DMC2280 motor controller can control up to eight axes</para>
<para>Allowed <replaceable>val</replaceable> one of: </para>
<para><option>A B C D E F G H</option></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>cntsPerX </command><replaceable>integer</replaceable>
</term>
<listitem>
<para>Number of absolute encoder counts per <command>unit</command> of movement
along/about the axis of motion</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hardlowerlim </command><replaceable>integer</replaceable></term>
<listitem>
<para>Hardware lower limit for motor</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>hardupperlim </command><replaceable>integer</replaceable></term>
<listitem>
<para>Hardware upper limit for motor</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>maxAccel </command><replaceable>val</replaceable></term>
<listitem>
<para>Maximum allowed acceleration in <command>units</command> per
second<superscript>2</superscript></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>maxDecel </command><replaceable>val</replaceable></term>
<listitem>
<para>Maximum allowed deceleration in <command>units</command> per
second<superscript>2</superscript></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>maxSpeed </command><replaceable>val</replaceable></term>
<listitem>
<para>Speed in <command>units</command> per second</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>motorHome </command><replaceable>integer</replaceable>
</term>
<listitem>
<para>The calibrated "home" position in motor steps.  You only need to set this
if the axis does not have an absolute encoder</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>motOffDelay </command><replaceable>integer</replaceable></term>
<listitem>
<para>Number of msec to wait before switching off a motor after a move</para>
<para>Default = <option>0</option></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>noPowerSave</command>
<replaceable>val</replaceable>
</term>
<listitem>
<para>By default a motor will switch off after a move. If you set this to 1 the
motor will stay on.</para>
<para>Allowed <replaceable>val</replaceable> one of: </para>
<para><option>0</option> (default)</para>
<para><option>1</option></para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>stepsPerX </command><replaceable>val</replaceable></term>
<listitem>
<para>Number of motor steps per <command>unit</command> of movement along/about
the axis of motion</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>units </command><replaceable>val</replaceable></term>
<listitem>
<para>The units of motion for the axis, eg <option>degrees</option> for phi or
two-theta, <option>mm</option> for translation</para>
<para>Allowed <replaceable>val</replaceable> one of: </para>
<para><option>degrees </option></para>
<para><option>mm</option></para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
site_ansto/manual/putty.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB