Nikon branded Conix XYZ stage

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Nikon branded Conix XYZ stage

Grieshaber, Scott (

I am trying to get a Nikon branded Conix XYZ stage to work with micromanager.  I can control the stage through the serial port using the Ludl like serial commands, ie (M Z=10).  But it errors out when I try to add the stage in the hardware manager in micromanger. This is the error that I get for the Z stage

2019-12-05T17:16:55.562021 tid0x7000025aa000 [IFO,Core] Did initialize device /dev/tty.usbserial-AC024AAV
2019-12-05T17:16:56.566839 tid0x7000025aa000 [IFO,Core] Will initialize device ConixZStage
2019-12-05T17:16:56.566882 tid0x7000025aa000 [dbg,dev:/dev/tty.usbserial-AC024AAV] SetCommand -> WHO\r
2019-12-05T17:16:56.606882 tid0x7000025aa000 [dbg,dev:/dev/tty.usbserial-AC024AAV] GetAnswer <- :A TMD Automated Stage\n\r
2019-12-05T17:16:56.606923 tid0x7000025aa000 [dbg,dev:/dev/tty.usbserial-AC024AAV] SetCommand -> WZ\r
2019-12-05T17:16:56.655542 tid0x7000025aa000 [dbg,dev:/dev/tty.usbserial-AC024AAV] GetAnswer <- :N -1 Unknown Command\n\r
2019-12-05T17:16:56.655617 tid0x7000025aa000 [ERR,Core:dev:ConixZStage] Error in device "ConixZStage": (Error message unavailable) (10999)

Looking at the device driver source code it looks like the controller is not identifying itself as one of the two options ‘CONIX_RFA_CONTROLLER’ or ‘CONIX_XYZ_CONTROLLER’.  Instead WHO returns ‘TMD Automated Stage’ There seems to be many versions of the conix xyz stage. From looking at the code for the Zstage it looks like it fails to identify as the ‘CONIX_XYZ_CONTROLLER’ so it defaults to the ‘CONIX_RFA_CONTROLLER’ and uses the wrong syntax (WZ vs W Z) so missing a space.  It looks like if it were to identify as the XYZ version it would use the correct commands. There is one other difference I see in the code my stage does not use the COMUNITS command and uses UNITS instead.

I also tried to add the conix xy stage and it also errors out.

2019-12-05T17:16:39.419098 tid0x7000025aa000 [IFO,Core] Did initialize device /dev/tty.usbserial-AC024AAV
2019-12-05T17:16:40.421921 tid0x7000025aa000 [IFO,Core] Will initialize device ConixXYStage
2019-12-05T17:16:40.423762 tid0x7000025aa000 [dbg,dev:/dev/tty.usbserial-AC024AAV] SetCommand -> /\r
2019-12-05T17:16:40.446896 tid0x7000025aa000 [dbg,dev:/dev/tty.usbserial-AC024AAV] Read <- (hex) 3a
2019-12-05T17:16:40.446908 tid0x7000025aa000 [dbg,dev:/dev/tty.usbserial-AC024AAV] Read <- (hex) 4e
2019-12-05T17:16:40.446920 tid0x7000025aa000 [dbg,dev:/dev/tty.usbserial-AC024AAV] SetCommand -> COMUNITS UM\r
2019-12-05T17:16:40.464456 tid0x7000025aa000 [dbg,dev:/dev/tty.usbserial-AC024AAV] GetAnswer <e \x20-1 Unknown Command\n\r
2019-12-05T17:16:40.464535 tid0x7000025aa000 [ERR,Core:dev:ConixXYStage] Error in device "ConixXYStage": Serial command failed.  Is the device connected to the serial port? (14)

Looking at the source code it seems the commands are pretty much the same as the model I have except the COMUNITS command is just UNITS on my version. I checked all the commands used in the driver and there are two other differences that may or may not be important the ‘!’ command shortcut is not used for HOME, and there is no STATUS command or its shortcut ‘/’. It seems like modifying this device driver to support this stage would be possible but I don’t really have any experience with C++ or with compiling the MM source code so any help would be appreciated.  Otherwise I guess I will try and find the time to learn some C++.



Scott Grieshaber, Ph.D.
Associate Professor
Department of Biological Sciences
University of Idaho
875 Perimeter Drive MS 3051
Moscow, ID 83844-3051

[hidden email]
Ph: 352 575 0394

micro-manager-general mailing list
[hidden email]