# Applied Scientific Instrumentation

### Products

 Custom Optics diSPIM FTP FW1000: Filter Wheel MPPI MS2000, MFC2000 and RM2000 Controller Piezo Systems RAMM, MIM and VTS Portal Serial Command Software TG-1000/Tiger Controller Tracking & Stabilization XY Stage Z-Drive and Focus Stage

### Tags

You are not allowed to perform this action
tiger_ms2k_difference

# TG-1000 and MS-2000’s instruction set differences

This section is intended to quickly bring the users up to speed on the major differences in the serial commands between TG-1000 and MS-2000 controller.

Where possible the TG-1000 commands were kept close to the MS-2000 controller commands.

The Tiger reply syntax, described above, was added to Tiger starting in COMM card firmware v1.92.

Commands where the axis letter is specified work just like MS-2000, e.g. MOVE, MOVREL, and WHERE. For example, X and Y axis reside on card with address 1, and Z resides on card with address 2. When M X=## Y=### Z=### is issued the COMM card in TG-1000 controller parses the command, and redirects the command to the appropriate card automatically. These commands are called Axis-Specific Commands. A card address should not be specified with an Axis-Specific command, otherwise undefined behavior may result from any mismatch between the address specified and the card with the axis as determined by the COMM card.

The TG-1000 is able to support multiple add-ons like CRISP and Piezo stages whereas MS-2000 was only able to support one, so we were forced to alter the command set to handle commands which are intended for a certain card but do not contain the axis name. In those cases, the user must specify which card the command is intended for, and the COMM card will relay the command appropriately. For example, the SS Z command saves the settings into non-volatile memory, but the user may not want all the settings on all the cards to be saved. For the TG-1000 the user has to add the card address in front of the command to make it work. For example, if the card that drives XY axis has the address 1, to only save setting on this card user should issue 1SS Z. These commands are called Card-Addressed Commands.

Importantly, for Card-Addressed Commands the setting applies to all axes on the card. For example, the ring buffer delay can be set independently for the XY stage on one card and a piezo stage on a different card. However, if a card contains more than one independent axis (e.g. a ZF card for two linear stages, or a Micro mirror card for 2 scanners) then the same setting applies to all axes. Continuing our example, the ring buffer on the ZF card would control both Z and F axes (though one of these axes could be disconnected from the ring buffer) so Z and F could not have separate ring buffer delay times.

Various methods of determining the address of a specific card are given below.

A third category is Broadcast commands, like STATUS, HALT, RESET, and ZERO. They are routed to all cards in a TG-1000 system by default, just like the MS-2000. However, in most cases they can also be directed at a single card by simply adding the card address, so they could be considered as special type of Card-Addressed Commands sent to all cards if an address is not specified.

A final category includes commands that default to a particular card, though they can be addressed to specific cards as well. There are sub-categories of commands sent to the COMM card unless otherwise specified (e.g. BUILD and WHO), commands sent to whatever card has the X axis or else all the stage cards if the X axis doesn’t exist (e.g. JSSPD and LED), and commands sent to whatever card has the Z axis or all the stage cards if the Z axis doesn’t exist (e.g. most CRISP and autofocus commands). These sub-categories may be referred to as Comm-Default, Stage-Default, and Focus-Default commands respectively.

Beginning with COMM card firmware version 3.10 a special axis letter * was added. When this character is specified in an Axis-specific command then it applies to all the axes in the controller. For instance, all axes can be moved to zero position using M *=0. The * axis letter can also be combined with card addressing to apply the command to all the axes on the same card, e.g. 3M *=0 will move all axes on card address 3 to their zero position, and 3! * will home all axes on card 3.

## How does the user find out a card address?

When the TG-1000 is turned on or when WHO serial command is issued, the controller prints out card address, axis names, firmware version and firmware build date of all the cards installed in the system (see section Tiger Banner below for more details). Also, more complete information about the cards and corresponding axes can be accessed using the BUILD X command which is described in the section Build Command below.

As an illustrative example, the controller may have the following configuration as reported on startup:

................................................................
At 30: Comm v1.5 TIGER_COMM May 07 2013:15:42:05
At 31: X:XYMotor,Y:XYMotor v2.4 STD_XY Jun 11 2013:17:00:12
At 32: Z:Piezo v2.4 ADEPT_PIEZO Jun 11 2013:17:05:00


The card addresses are shown in ASCII code. At 31 indicates a card with X and Y axes has the address 1 (ASCII code of 1 is 31).

 To save settings in non volatile memory: To print its error dump buffer: 1SS Z Card-Addressed 1DU Y Card-Addressed M X=### Y=### Axis-Specific

Similarly the card with Z axis has address 2 (ASCII code of 2 is 32).

To move Z axis: To issue pzinfo command on this card: M Z=### Axis-Specific 2PZINFO Card-Addressed 2PZ Z=1 Card-Addressed 2SS Z Card-Addressed 2PZC Card-Addressed

TG-1000 Comm Hard coded, re-assignable 0x30 (‘0’)
Stage/ FW/Shutter Unique Address 0x31 to 0x39, then 0x81 to 0xF5
Stage Broadcast Recognized by all stage controllers 0xF6
Filterwheel Broadcast Recognized by all FW controllers 0xF7
Shutter Broadcast Recognized by all shutter controllers 0xF8
LCD Broadcast Recognized by all LCD controllers 0xF9
Broadcast Recognized by all cards 0xFD
Broadcast except Comm Recognized by all cards except TG-1000 Comm 0xFE

## Identifying Controller Configuration

### Build Command

In Controller with Tiger Comm version v1.8 and above, the BUILD X command directed at the COMM card (or without any address) can be used to query axis names, axis types and axis address. (When the build command is addressed to a specific card the build information for that card is returned.)

##### Example:
build x
TIGER_COMM
Motor Axes: X Y P Q R S 0 1
Axis Types: x x u u u u w w
Axis Addr: 1 1 2 2 2 2 3 3
Hex Addr: 31 31 32 32 32 32 33 33
Axis Props: 0 0 0 0 0 0 0 0


The above system has card address 1 with an XY stage with axes named X and Y. Card number 2 has micro mirror with axes P,Q,R,S. Then card address 3 with filter wheel IDs 0 and 1.

The next line contains the axis type short code. For example, x means xy stage, u means micro mirror and w means filter wheel. A complete listing of axis types with designations is as follows:

The next two lines contain the addresses in two forms, first the form that is used to prefix Card-Addressed commands and second in hex format.

Finally, any special axis properties are printed (e.g. CRISP or SCAN capabilities) starting with firmware version 2.8. The decimal equivalent of a byte (0-255) is printed with the bits of the byte representing the following

##### Axis Type List
Axis Type Short Axis Type Long Description
x XYMotor XY stage
z ZMotor Z focus motor drive. LS50s, Z scopes etc
p Piezo Piezo Focus. ASIs ADEPT, Piezo DAC etc
o Tur Objective Turret
f Slider Filter Changer
t Theta Theta Stage
l Motor Generic linear motorized stage, TIRF, SISKIYOU etc
a PiezoL Generic linear piezo stage
m Zoom Zoom magnification motor axis
u MMirror Micro Mirror, Scanner 75 etc
w FW Filter Wheel
s Shutter Shutter
g Logic Programmable logic card
i LED card Multi LED Driver card
b Lens Tunable Lens
u Unknown Unknown axis type
##### Axis Properties
 Bit 0: CRISP auto-focus firmware Bit 1: RING BUFFER firmware Bit 2: SCAN firmware Bit 3: ARRAY firmware or MM_TARGET firmware Bit 4: SPIM firmware (v2.81+) Bit 5: SINGLEAXIS and/or MULTIAXIS firmware (v2.81+) Bit 6: LED illumination (v2.87+) Bit 7: Reserved

### Tiger Banner

A banner is printed by the controller on Startup and by the WHO command. It tells the user (and also to any scripts and programs) all the available cards in the system, with their axis characters, axis types etc.

At 30: Comm v1.5 TIGER_COMM May 07 2013:15:42:05
At 31: X:XYMotor,Y:XYMotor v2.4 STD_XY Jun 11 2013:17:00:12
At 32: Z:Piezo v2.4 ADEPT_PIEZO Jun 11 2013:17:05:00


It is a multiline reply, each line is terminated by a <Carriage Return> and final line by a <Carriage Return> +<Line Feed> to designate end of Transmission.

Each line can be sub divided into strings using a white space as delimiter. Then the 2nd string is the card address in Hex. 0x30 is 0 in ascii, 0x31 is 1 and 0x32 is 2.All possible address are 0x30 to 0x39 and then 0x81 to 0xF5. 0x81 is ü, 0xF5 is ⌡.

The second string can be further subdivided with comma as delimiter. Then the first character of the string is the axis character, colon and what kind of an axis it is. A to Z are all possible axis names, system is case insensitive. Except in case of filter wheels, IDs are integers 0 to 9

##### Example:

X:XYMotor,Y:XYMotor . X and Y are axis names of a XY stage. Z:Piezo . Z is the axis names of a Piezo focus.

Then the 4th string is the firmware version number. 5th String is our build name, which is an internal designation. The last set of strings are the firmware compile date and time.

### A Note Regarding Units

The most common commands including MOVE, MOVEREL, HERE, and WHERE use axis units, which can be changed using the UM command. However, some commands such as SETUP, SETLOW, and PCROS always use units of mm. By default, axis units where position is given in distance (e.g. for motorized stages and piezo stages) are represented in 0.1um increments, or 10,000 units per millimeter of travel. For mirror scanner axes, default axis units are 0.001 degrees (uncalibrated), or 1000 units per degree of travel. When a time is required, the unit is generally milliseconds. Some commands use integer codes or other input units as described below.