def on_position_change(obj=nil, &block)
	
      @on_position_change_obj = obj
      @on_position_change = Proc.new { |device, obj_ptr, encoder, time, position|
	    yield self, @encoders[encoder], time, position, object_for(obj_ptr)

	}
      Klass.set_OnEncoderPositionChange_Handler(@handle, @on_position_change, pointer_for(obj))
    end
def on_position_change(obj=nil, &block)
	
      @on_position_change_obj = obj
      @on_position_change = Proc.new { |device, obj_ptr, encoder, time, position|
	    yield self, @encoders[encoder], time, position, object_for(obj_ptr)

	}
      Klass.set_OnEncoderPositionChange_Handler(@handle, @on_position_change, pointer_for(obj))
    end
Sets a position change handler callback function. This event provides data about how many ticks have occured, and how much time has passed since the last position change event, but does not contain an absolute position. This be be obtained from {Phidgets::MotorControl::MotorControlEncoders#position}

 @param [String] obj Object to pass to the callback function. This is optional.
 @param [Proc] Block When the callback is executed, the device and object are yielded to this block.
 @example
     mc.on_position_change do |device, encoder, time, position|
       puts "Encoder #{encoder.index}'s position changed to #{position} in #{time}"
     end
 As this runs in it's own thread, be sure that all errors are properly handled or the thread will halt and not fire any more.
 @return [Boolean] returns true or raises an error