Table of Contents
Wishbone/Low Level Commands for TG1000
The TG-1000 controller can be interfaced through High Level commands(HL cmds) and W Commands(W cmds). HL cmds use ASCII characters, human readable, very verbose, easy to construct. W cmds are binary and ideal for hardware to hardware communication. In fact all internal communication between Tiger Comm card and Device cards are done in W cmds. No special operation is required to switch from HL cmds to W cmds, Tiger Comm automatically detects and processes them accordingly.
This document describes the packet structures of W commands and replies, gives examples, and lists the command set in detail. A complete and functional W command includes a card address and a W command packet.
Document Conventions
In this document, the terms device and card are defined such that devices are mechanical objects connected to cards by cables. Thus one or more devices, e.g., filterwheels or stage axis motors, may be connected to each card.
Non-readable data characters are represented in this document as hexadecimal values in the formats 0xFF and #FF , may be delimited by a following space when part of a character string. The space character is represented by its byte value: #20 . Readable characters appear as themselves or enclosed in single quotes, e.g., A . For example, the following string includes the data characters 0xFF , 1 , A , and 0x0D :
#FF 1A#0D or #FF1A#0D
This string may also be represented this way:
#FF #31 #41 #0D or #FF#31#41#0D
W Command and Reply Structure
All W command packets are the structure below. They contain an Address byte, Command set ID, Command ID, Argument length. Argument optional and depend on the command itself.
Table 1: W Command Structure
Card Address 1 byte (0x30 for Comm, 0xFE for broadcast, 0x31.. for device cards) | Command Set ID 1 byte 0xD7 for W cmd | Command ID 1 byte | Argument length 1 byte | Argument 0-251 bytes |
Table 2: TG-1000 addresses
Addressee | Usage | Value |
---|---|---|
TG-1000 Comm | Hard coded, re-assignable | 0x30 (‘0’) |
Stage/ FW/Shutter | Unique device address | 0x31 to 0x39 |
Reserved | Reserved for future use, including future broadcast commands | 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 |
Tiger bus address | 0xFF |
Address 0x30 to 0x39 and then 0x81 to 0xF5 are unique addresses. At any given time, only one card in the controller can have them. When a W command is sent, all cards receive it and parse it, but will not act unless the address matches. If the user likes to address multiple cards with the same Command, then he can use the Broadcast command.
Argument length denotes the number of bytes to follow in the packet. W command receivers use the argument length byte to count the remaining incoming characters. When that many characters have been received, processing begins.
Reply Structure
The W reply packet has two elements: the outcome byte and the reply data. The outcome byte is one of the values specified in the table below.
Outcome 1 byte | Reply data 0…∞ bytes |
Table 3: W Reply Structure
Character | Hex | Description |
---|---|---|
ENQ | 0x05 | The argument length byte does not match the specified value for that command. |
ACK | 0x06 | The command is well-formed, and execution has begun. |
BEL | 0x07 | The argument length byte value exceeds the capacity of TG-1000’s input buffers. |
NAK | 0x15 | One of the following has occurred: the cmd id byte is undefined; or an argument is not in the specified value range, or the command is not recognized by the addressed device. |
CAN | 0x18 | An intercharacter timeout (2ms) expired before the expected number of bytes was received. |
Command Set
Table 4 W user Commands and Replies describes all W commands with Command Set ID 0xD7 . The commands described in Table 5 W Internal Command and Replies are for use on the backplane bus and not recommended for transmission from an external host. Table 6 Planned W commands, not implemented.
Move Axis Absolute
ID Hex | 0x01 | |
---|---|---|
Normal recipient | Stage | |
Argument | 5 bytes | |
Byte 1 | axis selector 0..3. | |
Byte 2-5 | destination position given in 1/10 microns, an IEEE-754 single precision floating point number. | |
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
Move axis to given position. On the XY controller, axis[0] is the X axis. On the ZF controller, axis[0] is the Z axis.
Example:
#31#D7#01#05#00#46#40#E4#01
#06
Moves first axis on card #1 by 1234.5 microns
Move Axis Relative
ID Hex | 0x02 | |
---|---|---|
Normal recipient | Stage | |
Argument | 5 bytes | |
Byte 1 | axis selector 0..3. | |
Byte 2-5 | destination position given in 1/10 microns, an IEEE-754 single precision floating point number. | |
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
Move axis to given position relative to its current position.
Example:
#31#D7#02#05#01#C6#40#E4#01
#06
Rel moves 2nd axis on card #1 by -1234.5 microns
Spin Axis
ID Hex | 0x03 | |
---|---|---|
Normal recipient | Stage | |
Argument | 2 bytes | |
Byte 1 | axis selector 0..3. | |
Byte 2 | motor power, a signed character in range –128 to 127, where 0=no power. Format is 2s complement. | |
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
Apply motor power to an axis
Example:
#31#D7#03#02#00#32
#06
Moves first axis on card #1 by at 50% total power in positive direction
#31#D7#03#02#00#CE
#06
Moves first axis on card #1 by at 50% total power in negative direction
Set Axis Position
ID Hex | 0x04 | |
---|---|---|
Normal recipient | Stage | |
Argument | 5 bytes | |
Byte 1 | axis selector 0..3. | |
Byte 2-5 | the position given in 1/10 microns, an IEEE-754 single precision floating point number. | |
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
Coerces current axis position
Example:
#31#D7#04#05#00#46#40#E4#01
#06
Sets first axis on card #1 position as 1234.5 microns
Halt
ID Hex | 0x08 |
---|---|
Normal recipient | Stage |
Argument | none |
Reply | none |
Halt all movement of all axes.
Since there is no reply, this command can be broadcast to all stages.
Example:
#31#D7#08#00
Halts all movement on all axis in just card #1
#FE#D7#08#00
Halts all movement on all stage class cards in controller
Get Status and Position
ID Hex | 0x0A | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 bytes | |
Byte 1 | axis selector 0..3. | |
Reply | 6 bytes | |
Byte 1 | ACK | |
Byte 2 | Status (bits layout similar to RDSBYTE) | |
Byte 3-6 | Position given in 1/10 Microns, an IEEE-754 single precision floating point number. |
It’s a function of the axis unit multiplier, set with the HL cmd “UM”, default value is 10,000 or mm/10000.
Note: Pre v2.7, units were millimeters.
Example:
Card#1’s 1st axis when idle
#31#D7#0A#01#00
#06#0A#00#00#00#00
Card#1’s 1st axis while active
#31#D7#0A#01#00
#06#0F#46#40#E3#B4
Get Status
ID Hex | 0x0C | |
---|---|---|
Normal recipient | Stage | |
Argument | None | |
Reply | 1 byte | |
Byte 1 | ‘N’ or ‘B’ |
Same as STATUS command.
Example:
Card#1 is idle
#31#D7#0C#00
#4E (0x4E hex for N)
Card#1 is active
#31#D7#0C#00
#42 (0x42 hex for B)
Set Resolution
ID Hex | 0x0D | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 bytes | |
Byte 1 | 0..3 for number of decimal points. | |
Reply | 1 byte | |
Byte 1 | ACK or others |
Selects decimal point of WHERE command in high level command set.
Default setting is tenths of a micron resolution.
Example:
#31#D7#0D#01#03
#06
w x :A 12344.700
Get Axis Names
ID Hex | 0x0E | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 4 to 6 byte | |
Byte 1 | ACK | |
Byte 2 | Number of valid axis names to follow | |
Byte 3 | Axis 0 name | |
Byte 4 | Axis 1 name | |
Byte 5 | Axis 2 name | |
Byte 6 | Axis 3 name |
Requests names of the axes supported by a stage card. Also returns number of valid axes, given by Byte 1 of the reply.
Example:
STD XY card on address 1
#31#D7#0E#00
#06#02#58#59 (0x58 ASCII for X and 0x59 is Y)
A 4ch MicroMirror card on address 2
#32#D7#0E#00
#06#04#50#51#52#53 (0x50 to 0x53 is P,Q,R and S)
Get Single Axis Position
ID Hex | 0x0F | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 bytes | |
Byte 1 | axis selector 0..3. | |
Reply | 4 byte | |
Byte 1-4 | Axis position given in 1/10 microns, an IEEE-754 single precision floating point number. |
It’s a function of the axis unit multiplier, set with the HL cmd “UM”, default value is 10,000 or mm/10000.
Note: Pre v2.7, units were millimeters.
Example:
Card#1 X is at 1234.4 microns and Y is at -1234.5 microns
#31#D7#0F#01#00
#46#40#E3#B4 (12344.92578125)
#31#D7#0F#01#01
#C6#40#E2#D2 (-12344.705078125)
Get Device Class
ID Hex | 0x14 | |
---|---|---|
Normal recipient | Any | |
Argument | none | |
Reply | 2 bytes | |
Byte 1 | ACK | |
Byte 2 | : device type: 0=Comm; 1=Stage; 2=Filterwheel; 3=Shutter; 4=LCD; 255=no device (reply timeout) |
Queries each card directly, about what class it is.
Note: Piezo drive cards, micro mirror drive cards are also classed as stage cards.
Note: If no device is present at the given bus address, then no reply is sent.
Example:
In a Controller with 2 stage cards and 1 comm card
#30#D7#14#00
#06#30
#32#D7#14#00
#06#31
#31#D7#14#00
#06#31
#33#D7#14#00
(no reply)
Get Device Map Element
ID Hex | 0x16 | |
---|---|---|
Normal recipient | Comm | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK | |
Byte 2 | bus address | |
Byte 3 | device type (‘0’ (0x30)=Comm; ‘1’ (0x31)=Axis; ‘2’ (0x32)=Filterwheel; ‘3’ (0x33)=Shutter; ‘4’ (0x34)=LCD) |
Queries the Comm card for its list of cards and their class present in the controller. Each time the command is give, Comm card moves down the list, prints the card address and its class. When it runs out of cards, it starts back at the top.
Note: Piezo drive cards, micro mirror drive cards are also classed as stage cards.
Example:
In a Controller with 2 stage cards and 1 comm card
#30#D7#16#00
#06#30#30 (first time, reports itself)
#30#D7#16#00 (note cmd is always directed to omm.. Card)
#06#31#31 (second time card#1 details are sent)
#30#D7#16#00
#06#32#31 (3rd time card#2 details are sent)
#30#D7#16#00
#06#30#30 (starts back at the top)
#30#D7#16#00
#06#31#31
#30#D7#16#00
#06#32#31
#30#D7#16#00
#06#30#30
Get Number of Devices
ID Hex | 0x17 | |
---|---|---|
Normal recipient | Comm | |
Argument | none | |
Reply | 2 bytes | |
Byte 1 | ACK | |
Byte 2 | number of devices listed in the device map. |
Host command queries the Comm card for total number of card of all classes present in the controller.
Example:
In a Controller with 2 stage cards and 1 comm card
#30#D7#17#00
#06#03 (Answer 3 cards)
Get Stage Axis Settings
ID Hex | 0x19 | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 bytes | |
Byte 1 | axis selector 0..3. | |
Reply | 23 bytes | |
Byte 1 | ACK | |
Byte 2-5 | max speed in mm/sec, an IEEE-754 single precision floating point number. | |
Byte 6-9 | backlash in mm, an IEEE-754 single precision floating point number. | |
Byte 10-13 | drift error in mm, an IEEE-754 single precision floating point number | |
Byte 14-17 | finish error in mm, an IEEE-754 single precision floating point number | |
Byte 18-19 | ramp time in ms, a 16-bit unsigned integer. | |
Byte 20 | 1=pointing device X movement controls this axis; 0=pointing device X movement does not control this axis. |
|
Byte 21 | 1=pointing device Y movement controls this axis; 0=pointing device Y movement does not control this axis. |
|
Byte 22 | 1=pointing device scroll wheel movement controls this axis; 0=pointing device scroll wheel movement does not control this axis. |
|
Byte 23 | Encoder polarity. 0=negative (left side Z); 1=positive (right side Z) |
Host command to stage controller. Gets Speed (S), Backlash (B), Drift error (E), Finish error (PC), Ramp time (AC), Mouse controls (X, Y, or Scroll) and encoder polarity
Example:
#31#D7#19#01#00
#06#40#B7#DE#93#3D#23#D7#0A#39#D1#B7#17#37#CB#42#4B#00#64#00#00#00#01
#31#D7#19#01#01
#06#40#B7#DE#93#3D#23#D7#0A#39#D1#B7#17#37#CB#42#4B#00#64#00#00#00#01
#31#D7#19#01#02
#06#15 (NACK as no 3rd axis)
Breaking down the reply and analysing
#06 (ACK)
#40#B7#DE#93 Speed is 5.74591970443726 mm/s
#3D#23#D7#0A Backlash is 0.0399999991059303 mm
#39#D1#B7#17 Drift Error is 0.00039999998989515 mm
#37#CB#42#4B Finish error is 2.42303558479762e-05 mm
#00#64 Ramp Time is 100 ms
#00
#00
#00
#01 Positive encoder polarity
Move Filterwheel
ID Hex | 0x1A | |
---|---|---|
Normal recipient | Filterwheel | |
Argument | 2 bytes | |
Byte 1 | Wheel selector. Value: 0…1 | |
Byte 2 | Filter selector. Values 0…7 | |
Reply | 1 byte | |
Byte 1 | ACK |
Host to Filterwheel command
Example:
#32#D7#1A#02#00#05
#06
Moves FW #0 to position 5
Move Shutter
ID Hex | 0x1B | |
---|---|---|
Normal recipient | Shutter | |
Argument | 2 bytes | |
Byte 1 | Shutter selector. Value = 0…1 | |
Byte 2 | Energize shutter=1, De-energize shutter = 0 | |
Reply | 1 byte | |
Byte 1 | ACK |
Host to shutter command
Display Filterwheel Address
ID Hex | 0x1C | |
---|---|---|
Normal recipient | Filterwheel | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Host to Filterwheel. Causes Filterwheel front panel 7 segment display to display device’s bus address.
Example:
#FE#D7#1C#00
Causes all FW class cards to display their Address
Restore Filterwheel Display
ID Hex | 0x1D | |
---|---|---|
Normal recipient | Filterwheel | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Host to Filterwheel. Used after Display Filterwheel Address command. Causes Filterwheel to restore its panel 7 segment display to the state it was in before the Display Filterwheel Address command was issued.
Get Number of Axes
ID Hex | 0x1E | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 2 bytes | |
Byte 1 | ACK | |
Byte 2 | number of axes supported on this card |
Host to stage controller. Returns number of axes supported on this card.
Example:
#31#D7#1E#00
#06#02 (2 axes)
Save Filterwheel Settings
ID Hex | 0x1F | |
---|---|---|
Normal recipient | Filterwheel | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Host to Filterwheel. Causes Filterwheel controller to its write current settings to non-volatile memory.
Write Filterwheel Settings to RAM
ID Hex | 0x20 | |
---|---|---|
Normal recipient | Filterwheel | |
Argument | 12 bytes | |
Byte 1-4 | Channel 0 Filterwheel offset, a signed long integer | |
Byte 5 | Channel 0 speed value | |
Byte 6-9 | Channel 1 Filterwheel offset, a signed long integer | |
Byte 10 | Channel 1 speed value | |
Byte 11-12 | Shutter normal state | |
Reply | 1 byte | |
Byte 1 | ACK |
Host to Filterwheel. Writes some current Filterwheel settings (see argument) to volatile memory.
Read Filterwheel Settings from RAM
ID Hex | 0x21 | ||
---|---|---|---|
Normal recipient | Filterwheel | ||
Argument | none | ||
Reply | 13 bytes | ||
Byte 0 | ACK | ||
Byte 1-4 | Channel 0 Filterwheel offset, a signed long integer | ||
Byte 5 | Channel 0 speed value | ||
Byte 6-9 | Channel 1 Filterwheel offset, a signed long integer | ||
Byte 10 | Channel 1 speed value | ||
Byte 11 | Shutter normal state | ||
Bit 0 | 0=Shutter 0 normally open; 1=Shutter 0 normally closed |
||
Bit 1 | 0=Shutter 1 normally open; 1=Shutter 1 normally closed |
||
Bit 2-3 | not used | ||
Bit 4 | 1=Shutter controller (SH2 card) is connected at this address; 0=No SH2 card is connected at this address. |
||
Bit 5-7 | not used | ||
Byte 12 | number of currently operable wheels attached |
Host to Filterwheel. Transmits settings from RAM to host.
Confirm Halt
ID Hex | 0x24 | |
---|---|---|
Normal recipient | Internal | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK = all axes halted, none were in motion when Halt command was given, or this is not the first Confirm Halt command issued since the most recent Halt command, or no Halt commands have been issued since the last system reset; NAK = at least one axis failed to halt; ENQ = a Halt command was issued prior to this command, and an axis was in motion when that Halt command was issued. |
Comm to Stage Confirms that Halt command was executed successfully and stage is stopped. This command is invoked automatically when the H command HALT is transmitted from Host to Comm. If the result indicates that an axis failed to halt, then the system is automatically reset and all motors are shut down.
Zero Axis
ID Hex | 0x25 | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 bytes | |
Byte 1 | axis selector 0..3. | |
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
Comm to Stage Duplicates H command ZERO and MS-2000 Zero button function. Causes readjustment of limits.
Example:
#31#D7#25#01#00
Zeros just 1st axis on card#1
#FE#D7#25#01#00
Zeros all 1st axes on all cards of stage class.
Get Axis Types
ID Hex | 0x26 | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 3 bytes | |
Byte 1 | ACK | |
Byte 2 | Axis 0 type, where 0=no axis present; 1=XY; 2=motor-driven focus; 3=piezo-driven focus; 4=motor-driven zoom; 5=theta |
|
Byte 3 | Axis 1 type, defined same as Byte 1 |
Comm to Stage
Reports whether each axis is an XY, motor-driven focus, or piezo-driven focus axis.
Users may also want to look at 0x4A Get Axis Kinds too. It is better implemented.
Get Axis Kinds
ID Hex | 0x4A | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 4 to 6 bytes | |
Byte 1 | ACK | |
Byte 2 | Total axis on card (and number of bytes to follow) | |
Byte 3 | Axis 0 type | |
Byte 4 | Axis 1 type | |
Byte 5 | Axis 2 type | |
Byte 6 | Axis 3 type |
Axis Type Short | Description |
---|---|
x | XY stage |
z | Z focus motor drive. LS50s, Z scopes etc |
p | Piezo Focus. ASIs ADEPT, Piezo DAC etc |
o | Objective Turret |
f | Filter Changer |
t | Theta Stage |
l | Generic linear motorized stage, TIRF, SISKIYOU etc |
a | Generic linear piezo stage |
m | Zoom magnification motor axis |
u | Micro Mirror, Scanner 75 etc |
w | Filter Wheel |
s | Shutter |
u | Unknown axis type |
Queries the Device card. Replies with total axes present, followed by ASCII codes for each axis representing which kind of axis.
Example:
#31#D7#4A#00
#06#02#78#78 (0x78 is x for xymotor)
#32#D7#4A#00
#06#04#75#75#75#75 (0x75 is u for MicroMirror)
Get Axis Props
ID Hex | 0x4B | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 4 to 6 bytes | |
Byte 1 | ACK | |
Byte 2 | Total axis on card (and number of bytes to follow) | |
Byte 3 | Axis 0 properties | |
Byte 4 | Axis 1 properties | |
Byte 5 | Axis 2 properties | |
Byte 6 | Axis 3 properties |
Bit 0 | CRISP auto-focus firmware |
---|---|
Bit 1 | RING BUFFER firmware |
Bit 2 | SCAN firmware |
Bit 3 | ARRAY firmware |
Bit 4 | SPIM firmware |
Bit 5 | SINGLEAXIS and/or MULTIAXIS firmware |
Bits 6-7 | reserved |
Queries the Device card. Replies with total axes present, followed by byte for each axis representing any special properties or capabilities (usually would be firmware module) such as CRISP or RING BUFFER.
Example:
#34#D7#4B#00
#06#02#0A#0A (xystage with RING BUFFER and ARRAY)
#33#D7#4B#00
#06#04#10#10#10#10 (Micromirror with SPIM)
Set Stage Axis Settings
ID Hex | 0x27 | |
---|---|---|
Normal recipient | Stage | |
Argument | 23 bytes | |
Byte 1 | axis selector 0..3. | |
Byte 2-5 | max speed in mm/sec, an IEEE-754 single precision floating point number | |
Byte 6-9 | backlash in mm, an IEEE-754 single precision floating point number | |
Byte 10-13 | drift error in mm, an IEEE-754 single precision floating point number. | |
Byte 14-17 | finish error in mm, an IEEE-754 single precision floating point number. | |
Byte 18-19 | ramp time in ms, a 16-bit unsigned integer. | |
Byte 20 | 1=pointing device X movement controls this axis; 0=pointing device X movement does not control this axis. |
|
Byte 21 | 1=pointing device Y movement controls this axis; 0=pointing device Y movement does not control this axis. |
|
Byte 22 | 1=pointing device scroll wheel movement controls this axis; 0=pointing device scroll wheel movement does not control this axis. |
|
Byte 23 | Encoder polarity. 0=negative (left side Z); 1=positive (right side Z) |
|
Reply | 1 byte | |
Byte 1 | ACK |
Comm to Stage. Host command to stage controller. Counterpart to Get Axis Settings command. Sets Speed (S), Backlash (B), Drift error (E), Finish error (PC), Max lim (SU), Min lim (SL), Ramp time (AC), Mouse controls (X, Y, or Scroll), and Encoder polarity (EPOL).
Example:
To set 1st axis to 2mm/sec
#31#D7#27#17#00#40#00#00#00#3D#23#D7#0A#39#D1#B7#17#37#CB#42#4B#00#64#00#00#00#01
#06
Save Settings Stage
ID Hex | 0x28 | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Writes current stage settings to non-volatile memory
Example:
#31#D7#28#00
#06
saves settings of just card #1 to non volatile memory
#FE#D7#28#00
#06
saves settings of all cards in controller to nonvolatile memory.
Get Saved Settings Stage
ID Hex | 0x29 | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Reads stage settings from non-volatile memory into stage volatile memory, overwriting current settings.
Restore Stage Defaults
ID Hex | 0x2A | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Marks stage non-volatile memory as unsaved. Next stage reset, the settings will be the original factory defaults.
Restore Filterwheel Defaults to RAM
ID Hex | 0x2B | |
---|---|---|
Normal recipient | Filterwheel | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Writes default settings to Filterwheel RAM.
Read Filterwheel Settings to RAM
ID Hex | 0x2C | |
---|---|---|
Normal recipient | Filterwheel | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Host to Filterwheel. Reads settings from non-volatile memory to Filterwheel RAM.
Reset Stage
ID Hex | 0x2D | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Host to stage. Invokes stage software reset.
Example:
#31#D7#2D#00
resets just card #1.
#FE#D7#2D#00
resets all stage class cards in the controller
Ping
ID Hex | 0x2F | |
---|---|---|
Normal recipient | All | |
Argument | none | |
Reply | 1 byte | |
Byte 1 | ACK |
Replies ACK. Used to verify that sender has sent a command readable to the receiver. May be used to seek serial baud rate match.
Set Clutch
ID Hex | 0x31 | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 byte | |
Byte 1 | 0=disengage; 1=engage |
|
Reply | 1 byte | |
Byte 1 | ACK |
Engages or disengages clutch.
Get Stage Settings And Flags
ID Hex | 0x32 | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 9 bytes | |
Byte 1 | ACK | |
Byte 2 | XY pitch | |
Byte 3 | Z pitch | |
Byte 4 | Where command format | |
Byte 5 | X & Y encoder flag, where ‘L’ = linear, ‘R’ = rotary | |
Byte 6 | Clutch engaged | |
Byte 7 | 1st Axis, X or Z axis profile | |
Byte 8 | 2st Axis, Y or F axis profile | |
Byte 9 | Knob speed |
Return states of system flags.
Some common pitches | |
---|---|
PITCH_A_FINE | ‘A’, (0x41) |
PITCH_B_COARSE | ‘B’, (0x42) |
PITCH_C_ULTRA_COARSE | ‘C’, (0x43) |
PITCH_25NM | ‘H’, (0x48) |
PITCH_NORM_Z | ‘N’, (0x4E) |
PITCH_D_ULTRA_FINE | ‘U’, (0x55) |
SD_ACTUATOR | ‘X’, (0x58) |
PITCH_ZEISS_Z | ‘Z’, (0x5A) |
GTS_A_FINE | ‘a’, (0x61) |
GTS_B_COARSE | ‘b’, (0x62) |
GTS_C_ULTRA_COARSE | ‘c’, (0x63) |
Some common profiles | |
---|---|
STANDARD_XY | 0x00 |
STANDARD_Z | 0x01 |
STD_CP_ROT | 0x02 |
STD_FP_ROT | 0x03 |
STD_CP_LIN | 0x04 |
STD_FP_LIN | 0x05 |
UCP_ROT | 0x06 |
UUCP_ROT | 0x07 |
UFP_ROT | 0x08 |
UUFP_ROT | 0x12 |
UFP_LIN | 0x14 |
UCP_LIN | 0x22 |
UUCP_LIN | 0x23 |
SCOPE_STD_Z | 0x0a |
SCOPE_LIN_Z | 0x0b |
SD_XLATE | 0x0f |
PIEZO_PROFILE | 0x10 |
MM_PROFILE | 0x2b |
Example:
#31#D7#32#00
#06#42#46#97#52#00#02#02#05
Breaking down and analysing the reply.
#06 (ACK )
#42 (B pitch)
#46 (ignore, no z)
#97#52 (R for rotary)
#00#02 (#2 profile, std xy)
#02 (#2 profile, std xy)
#05 (knob speed)
Set Joystick/Mouse Speeds
ID Hex | 0x35 | |
---|---|---|
Normal recipient | Stage | |
Argument | 3 bytes | |
Byte 1 | Slow joystick speed | |
Byte 2 | Fast joystick speed | |
Byte 3 | Blank (used to be knob speed, however knob speed is handled differently now) | |
Reply | 1 byte | |
Byte 1 | ACK or others |
Sets slow and fast joystick speed for XY. This command does the same things as the H cmd JS.
Example:
To set joystick slow at 20% and fast at 80%
#31#D7#35#03#14#50#00
#06
include a 3rd byte leave it at 0x00 to appease the controller
Get Mouse Speeds
ID Hex | 0x36 | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 4 byte | |
Byte 1 | ACK | |
Byte 2 | Slow joystick speed | |
Byte 3 | Fast joystick speed | |
Byte 4 | Blank (used to be knob speed, however knob speed is handled differently now) |
Returns settings made by Set Stage Mouse Speeds command.
Example:
#31#D7#36#00
#06#14#50#00 (slow at 20% and fast at 80%)
Set Encoder Polarity
ID Hex | 0x37 | |
---|---|---|
Normal recipient | Stage | |
Argument | 2 bytes | |
Byte 1 | axis selector 0..3. | |
Byte 2 | values are 1 and -1. (2s complement) | |
Reply | 1 byte | |
Byte 1 | ACK |
Default value is 1 for left-hand Z drive.
Sets encoder polarity. Left- or right-hand Z drives need this setting.
Example:
#31#D7#37#02#00#FF
#06 (sets card#11st axis as epol as -1)
#31#D7#37#02#00#01
#06 (sets card#11st axis as epol as 1)
Note: Save settings to nonvolatile memory(0x28) and restart controller for settings to take affect.
Get Encoder Polarity
ID Hex | 0x38 | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 bytes | |
Byte 1 | axis selector 0..3. | |
Reply | 2 bytes | |
Byte 1 | ACK | |
Byte 2 | 0xFF for -1 , 0x01 for 1 |
Returns encoder polarity setting (see Set Encoder Polarity command)
Example:
#31#D7#38#01#00
#06#FF (card#1 1st axis has negative encoder polarity)
Set Encoder Type
ID Hex | 0x39 | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 bytes | |
Byte 1 | NUL =Rotary; anything else =Linear |
|
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
This setting informs the firmware about the hardware configuration with respect to encoders. Then turn the controller OFF/ON for settings to take effect.
Example:
#31#D7#39#01#01
#06
Sets all axis on card#1 to linear enc mode
#31#D7#39#01#00
#06
Sets all axis on card#1 to rotary enc mode
Note: Restart controller, for settings to take affect.
Get Encoder Type
ID Hex | 0x3A | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 2 bytes | |
Byte 1 | ACK | |
Byte 2 | 0x52 , R for Rotary , 0x4C, L for Linear |
Gets encoder type—linear or rotary
Example:
#31#D7#3A#00
#06#52 (card#1 is in rotary encoder mode)
Home Filterwheel
ID Hex | 0x3D | |
---|---|---|
Normal recipient | Filterwheel | |
Argument | 1 byte | |
Byte 1 | : 0 or 1, Filterwheel selector | |
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
Corresponds to Filterwheel HO command.
Get Firmware Version
ID Hex | 0x3F | |
---|---|---|
Normal recipient | Any | |
Argument | none | |
Reply | varies | |
String | ACK or NAK for out of range argument |
Returns a String containing the version number
Example:
On a stage card
#31#D7#3F#00
#76#32#2E#37 (in ASCII is “v2.7”)
On a filter wheel card
#32#D7#3F#00
#56#65#72#73#69#6F#6E#3A#20#76#31#2E#32#0A (in ascii is “Version: v1.2<CR>”)
Set Default Manual Input Device
ID Hex | 0x40 | |
---|---|---|
Normal recipient | Stage | |
Argument | 2 bytes | |
Byte 1 | axis selector 0..3. | |
Byte 2 | device selector, Some important ones 0x00 = NONE 0x02 = Joystick – X deflection 0x03 = Joystick – Y deflection 0x05 = X-Wheel 0x06 = Y-Wheel 0x09 = JX and X-wheel combo 0x0A = JY and Y-wheel combo 0x16 = Z-Wheel 0x17 = F-Wheel |
|
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
Sets type of device to be used for manual movements, i.e., analog joystick or Knobs. Writes settings to nonvolatile memory. Note: For safety, this command disables all movement. Also appropriate firmware modules must also be present on the card
Example:
So switch axis to X and Y knobs.
#31#D7#40#02#00#05
#06
#31#D7#40#02#01#06
#06
Get Default Manual Input Device
ID Hex | 0x41 | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 bytes | |
Byte 1 | axis selector 0..3. | |
Reply | 2 bytes | |
Byte 1 | ACK or NAK for out of range argument | |
Byte 2 | see Set Manual Input Device |
Returns which kind of manual input device is used, i.e., analog joystick or knobs etc
Example:
#31#D7#41#01#00
#06#02 (1st axis is joystick x)
#31#D7#41#01#01
#06#03 (2nd axis is joystick y)
Set Axis Speed
ID Hex | 0x43 | |
---|---|---|
Normal recipient | Stage | |
Argument | 5 bytes | |
Byte 1 | axis selector 0..3. | |
Byte 2-5 | max speed in mm/sec, an IEEE-754 single precision floating point number. | |
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
Sets speed of a single axis
Example:
set ist axis to 2mm/sec
#31#D7#43#05#00#40#00#00#00
#06
Set Encoder Counts Per Mm
ID Hex | 0x44 | |
---|---|---|
Normal recipient | Stage | |
Argument | 8 bytes | |
Byte 1-4 | for axis 0, counts per millimeter, an IEEE-754 single precision floating point number | |
Byte 5-8 | for axis 1, counts per millimeter, an IEEE-754 single precision floating point number | |
Reply | 1 byte | |
Byte 1 | ACK or NAK for out of range argument |
Sets both axes’ encoder counts per millimeter.
Example:
Set Card#1 1st and 2nd axis to 60000 counts/mm
#31#D7#44#08#47#6A#60#00#47#6A#60#00
#06
Get Encoder Counts Per Mm
ID Hex | 0x45 | |
---|---|---|
Normal recipient | Stage | |
Argument | none | |
Reply | 9 byte | |
Byte 1 | ACK | |
Byte 2-5 | encoder counts for axis 0, in IEEE 754 format | |
Byte 6-9 | encoder counts for axis 1, in IEEE 754 format |
Gets encoder counts per millimeter for the specified axis
Example:
#31#D7#45#00
#06#47#6A#60#00#47#6A#60#00 (#47#6A#60#00 is 60,000)
Joystick XY data
ID Hex | 0x46 | |
---|---|---|
Normal recipient | Stage | |
Argument | 5 bytes | |
Byte 1 | X joystick value, -127 to 127 | |
Byte 2 | Y joystick value, -127 to 127 | |
Reply | no reply |
Sends current joystick X & Y values from Comm to Stage. Each value denotes the deflection of the joystick relative to its position at rest (center). Behaves like the spin command. Handy to simulate joystick/button in UI.
Example:
#FE#D7#46#02#40#40
All axis in controller that have joystick as manual input, start moving.
#FE#D7#46#02#CE#CE
All axis in controller that have joystick as manual input, now move in opposite direction
#FE#D7#46#02#00#00
All axis in controller that have joystick as manual input, stop moving.
Button data
ID Hex | 0x47 | ||
---|---|---|---|
Normal recipient | Stage | ||
Argument | 2 bytes | ||
Byte 1 | Button byte with bits defined as follows, its active low | ||
Bits 0-3 | undefined | ||
Bits 4 | Zero button state | ||
Bits 5 | Home button state | ||
Bits 6 | At (@) button state | ||
Bits 7 | Joystick button (fast/slow) | ||
Byte 2 | Clutch byte with bits defined as follows: | ||
Bits 0-5 | undefined | ||
Bits 6 | Clutch switch state | ||
Bits 7 | undefined | ||
Reply | no reply |
Sends current button state from Comm to Stage.
Command has to be sent two twice, Once indicating press and the release. Based on the time interval between press and release commands, the stage card will conclude if it’s a short press, or long press etc.
Note: For broadcast used Address 0xF6
Example:
Zero button press and release for just Card #1
#31#D7#47#02#E0#00 #31#D7#47#02#F0#00
Home button press for all stage cards in controller
#F6#D7#47#02#D0#00 #F6#D7#47#02#F0#00
Knob data
ID Hex | 0x48 | |
---|---|---|
Normal recipient | Stage | |
Argument | 4 bytes | |
Byte 1-2 | Signed integer left knob value | |
Byte 3-4 | Signed integer right knob value. | |
Reply | no reply |
Sends left and right knob rotation values from Comm to Stage.
Example:
#FE#D7#48#04#00#FF#00#FF
Moves all axis that respond to knobs.
Get Tiger Banner
ID Hex | 0x49 | |
---|---|---|
Normal recipient | All | |
Argument | none | |
Reply | varies | |
String | TIGER_BANNER string followed by ETX message terminator. |
Gets TIGER_BANNER string from device and relays it to host.
Example:
#32#D7#49#00
#41#74#20#33#32#3A#20#5A#3A#5A#4D#6F#74#6F#72#2C#46#3A#5A#4D#6F#74#6F#72#20#76#32#2E#37#20#53#54#44#5F#5A#46#20#4A#75#6C#20#33#30#20#32#30#31#33#3A#31#36#3A#30#39#3A#35#31#03
in ASCII its At 32: Z:Zmotor,F:Zmotor v2.7 STD_ZF Jul 30 2013:16:09:51<ETX>
Set Axis Direction
ID Hex | 0x4C | |
---|---|---|
Normal recipient | Stage | |
Argument | 2 bytes | |
Byte 1 | axis selector 0..3. | |
Byte 2 | values are 1 and -1. (2s complement) | |
Reply | 1 byte | |
Byte 1 | ACK |
Sets Axis direction. Setting is automatically saved into non volatile memory. Does not need a system reset. Default is 1 or positive direction.
Example:
#31#D7#4C#02#00#FF
#06 (sets card#1 1st axis direction as -1 or negative)
#31#D7#4C#02#00#01
#06 (sets card#1 1st axis direction as positive or 1)
Get Axis Direction
ID Hex | 0x4D | |
---|---|---|
Normal recipient | Stage | |
Argument | 1 byte | |
Byte 1 | axis selector 0..3 | |
Reply | 2 bytes | |
Byte 1 | ACK | |
Byte 2 | 0xFF for -1 , 0x01 for 1 |
Returns axis direction setting
Example:
#31#D7#4D#01#00
#06#FF (card#1 1st axis direction is negative)
W Internal Command and Replied
Set Filterwheel Number
ID Hex | 0xFA | |
---|---|---|
Normal recipient | Filterwheel | |
Argument | 2 bytes | |
Byte 1 | Unsigned char, the assigned number for wheel 0 | |
Byte 2 | Unsigned char, the assigned number for wheel 1 | |
Reply | no reply |
After internally assigning each filterwheel its number for FW0, FW1,… FWn commands and before sending Get Tiger Banner command to filterwheel, Comm sends this command so that the filterwheel can reply to Get Tiger Banner command showing its assigned number.
High Level Cmd
ID Hex | 0xFC | |
---|---|---|
Normal recipient | internal | |
Argument | 11 bytes | |
Byte 1-2 | gCmd [0x12 Move, 0x21 Zero, etc] |
|
Byte 3 | gOp [0x00 none, 0x01 read, 0x02 write, 0x06 plus, 0x07 minus] |
|
Byte 4 | gSubCmd [0x01 entry, 0x02 exit, 0x03 pseudoaxis,0x04 non rad, 0x05 read |
|
Byte 5 | gAxisChar [0x58 X, 0x59 Y,etc] |
|
Byte 6-9 | gNum , IEEE 754 format 4byte float | |
Byte 10 | do_what [0 GET_ACK, 1 GNUM,2 GSTRING,3 LONG REPLY, 4 Do nothing] |
|
Byte 11 | any_axis [0x00 or 0x01] |
|
Reply | no reply |
Internal ASI command: copies TG-1000 Comm parser state to TG-1000 stage card.
Example:
m x=123 generates
#31#D7#FC#0B#00#12#02#04#58#42#F6#00#00#04#01
H Get gNum
ID Hex | 0xFD | |
---|---|---|
Normal recipient | unused |
Internal ASI command: request gNum to be copies from TG-1000 stage card to TG-1000 command card
Get Gerror
ID Hex | 0x50 | |
---|---|---|
Normal recipient | Stage/Internal |
Gets an error code following an High Level command. For inhouse use only