we've acquired some new equipment at our facility, including an olympus
ix81. unfortunately olympus happens to be one of those few companies
left that still refuse to give out protocol specifications, unless with
some effort you manage to sign an NDA. the problem with the NDA is that
we want to share the code so others can repeat our experiments. I've
told this to a salesperson at olympus but still no reply; it would be
nice if others also could point out that the investment is at jeopardy
without this kind of information. for example, the now hyped feature of
creating mosaic images is a one-hour programming exercise with proper
documentation. or you go out and buy yet another limited software
package, for money that could have been spent better (if there is one
that works with your hardware).
anyway, we had a small team sit down for two hours and reverse engineer
the stand, with legal precautions. most of it is done and attached.
we're looking for beta testers since I know there are related models,
ix71 & ix91, maybe more, and it would be nice if compatibility could be
confirmed. send me a private mail in that case. to see if it works, just
use the Hyper Terminal in windows, with the attached commands. if you
have signed an NDA you can for legal reasons not participate.
want to try reverse engineering? if you run windows and the equipment
has a parallel or serial interface then it's trivial. you can use for
example portmon
(http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx). to be
legally safe you should have 3 teams; one analyzing the hardware and
writing a specification, one which implements the specification, and one
that tests the implementation. sometimes it's possible with fewer.
happy hacking!
/Johan
--
--
------------------------------------------------
Johan Henriksson
MSc Engineering
PhD student, Karolinska Institutet
http://mahogny.areta.org http://www.endrov.net
Olympus IX81 microscope stand
=====================================================
These commands have been obtained by using "Portmon for Windows v3.02",
logging the traffic from bundled software.
Commands are sent over a serial cable.
Each command is ended by CR LF (0x0d 0x0a)
Command is separated by arguments by a single space.
Replies might not need not arrive in order, it seems the
stand supports event driven programming as opposed to polling.
Replies can be sent without a query if status changes.
Serial port mode
================
baud: 19200
StopBits: ERROR Parity: EVEN WordLength: 8
EOF:0 ERR:0 BRK:0 EVT:a XON:11 XOFF:13
Shake:80000008 Replace:80 XonLimit:2048 XoffLimit:512
Querying value
==============
If a command has name CMD then a status query can be sent as
'CMD?'
whereby the stand will reply
'CMD xxx'
where xxx is the value.
Setting value
=============
if CMD is the command then write
'CMD xxx'
where xxx is the value.
Undetermined value
==================
It seems the stand can reply + as the argument, meaning
"currently not determined", while state is being changed.
Command list
=======================
# is used whenever something needs confirmation
==Shutter 1
command: 1SHUT1
observed argument: IN OUT
==Shutter 2
command: 1SHUT2
observed argument: IN OUT
==#mirror unit
command: 1MU
observed argument: 3 5 +(read)
polled a lot
maybe related to objective change
==objective
command: 1OB
observed argument: 2 3 +(read)
==Lamp source
command: 1LMPSEL
observed argument: DIA
probably selection of which light source to have turned on.
#EPI might be another argument
==#Lamp intensity
command: 1LMP
observed argument: 0
==Condenser selection
command: 1CD
observed argument: 5
==Prism selection
command: 1PRISM
observed argument: 1 2 +(read)
1=eye piece
2=side i.e. camera
(need confirmation)
==#autofocus
command: 2AFSTS
observed argument: OFF
==#jog dial sensitivity
command: 2JOGSNS
observed argument: 9 +(read)
==#movement, relative?
command: 2MOV
observed written arg: F,3000000
observed written arg: N,600000
observed read arg: !,E02412
==#absolute position Z
command: 2POS
observed argument: 610000 598625 10000
========= todo
need to check for a version command to allow plug and play
====================== additional log, setting 20x ============
0.00000148 ANDOR iQ.exe IRP_MJ_READ Serial0 SUCCESS Length 11: 2JOGSNS +..
0.00002462 ANDOR iQ.exe IRP_MJ_WRITE Serial0 SUCCESS Length 7: 2POS?..
0.00000131 ANDOR iQ.exe IRP_MJ_READ Serial0 SUCCESS Length 13: 2POS 610000..
0.00002384 ANDOR iQ.exe IRP_MJ_WRITE Serial0 SUCCESS Length 7: 2POS?..
0.00000129 ANDOR iQ.exe IRP_MJ_READ Serial0 SUCCESS Length 13: 2POS 610000..
0.00817574 ANDOR iQ.exe IRP_MJ_WRITE Serial0 SUCCESS Length 16: 2MOV F,3000000..
0.00000244 ANDOR iQ.exe IRP_MJ_READ Serial0 SUCCESS Length 15: 2MOV !,E02412..
0.00002848 ANDOR iQ.exe IRP_MJ_WRITE Serial0 SUCCESS Length 7: 1OB 2..
0.00000249 ANDOR iQ.exe IRP_MJ_READ Serial0 SUCCESS Length 7: 1OB +..
0.00002955 ANDOR iQ.exe IRP_MJ_WRITE Serial0 SUCCESS Length 7: 2POS?..
0.00000143 ANDOR iQ.exe IRP_MJ_READ Serial0 SUCCESS Length 12: 2POS 10000..
0.00817658 ANDOR iQ.exe IRP_MJ_WRITE Serial0 SUCCESS Length 15: 2MOV N,600000..
|