The IK220 PCI card of Heidenhain is introduced by:
def hhe1/module=ik220/base=0xffffff/vector=0/chan=0 def hhe2/module=ik220/base=0xffffff/vector=0/chan=1
The encoder() function operates the IK220 card:
* = encoder( hhe9, position)
* = encoder( hhe9)                    position
* = encoder( hhe9, StaPort)           status register
* = encoder( hhe9, CancelRef)         cancel ref. sequence
* = encoder( hhe9, DoRef)             start reference sequence
* = encoder( hhe9, Init)              init encoder 
* = encoder( hhe9, offset, ival)      set offset [counts]
* = encoder( hhe9, conversion, xval)  set conversion factor
* = encoder( hhe9, offset)            get offset
* = encoder( hhe9, conversion)        get conversion
* = encoder( hhe9, p1)                0 increment
                                      1 EnDat   
                                      2 SSI         
* = encoder( hhe9, p2)                0 11 muApp      
                                      1 1Vpp          
* = encoder( hhe9, p3)                0 linear axis
                                      1 rotational axis
* = encoder( hhe9, p4)                0 positive 
                                      1 negative
The position is calculated by: pos = (encoder - offset)/conversion
A start sequence:
* = encoder( hhe9, p2, 0) sets the card to current mode * = encoder( hhe9, init) * = hex(encoder( hhe9, staport)) -> 0x20 * = encoder( hhe9)
A reference sequence:
! ! move near the reference mark ! move mot1 0 * = encoder( hhe9, init) * = hex(encoder( hhe9, staport)) -> 0x20 * = encoder( hhe9, doref) * = hex(encoder( hhe9, staport)) -> 0x4060 ! ! move over the reference mark ! move mot1 1 * = hex(encoder( hhe9, staport)) -> 0xffffc024 * = encoder( hhe9, position) -> some value
An encoder is calibrated in the following way (assume the encoder reads the monochromator rotation axis):
* = encoder( hhe1, conversion, 1) * = encoder( hhe1, offset, 0)
This makes sense only if the encoder is used for the first time. Once the conversion factor is determined, we don't have to re-measure it.
* = encoder( hhe1, conversion, conv) * = encoder( hhe1, offset, offs)