I messed around a little bit with calibration and generally it seems to work like described. The adjustment is a little bit coarse, so I didn't get it dialed all the way in.
It's not mentioned in the manual, but you can save off the current calibration by running CAL:MEAS? and CAL:CTRL?. It returns something like 0.000668,1285,0.002859,1292,0.000084,884,0.000502,797 which are the "a" and "b" values you set with CAL:DATA <1 or 2>,"a","b". 1 is for the CTRL calibration and 2 is for the MEAS calibration. The first two numbers are for the 36V CV range and the second two are for the 150V CV range. I believe the last two a/b pairs are for CC mode for both ranges too.
When setting the calibration, it applies to the voltage range that is currently active and currently active mode (CC or CV).
Remember to CALCLS:VOLT before starting (and after you've saved your existing calibration). CAL:ST stores and applies the calibration values. The load doesn't like it when changing the CTRL values while it is enabled.
Here's a quick script for calculating the a and b values for CV, but I found that I had to play around with the numbers afterwards to get a decent result.
#!/usr/bin/env python3
# Voltage calibration in CV mode
# *_dmm is the voltage measurement done via external meter
# *_sdl is the voltage measurement displayed on the load
# y1 is CV at 1V and y2 is CV at 10V. Set the power supply ~15V CC .1A
def calc(v_range, y1_dmm, y1_sdl, y2_dmm, y2_sdl):
# start with voltage limit set to 1
v_set = 1
ctrl_const = 2000 if v_range == 36 else 1500
# v_range = 36
# v_range = 150
ctrl_x1 = (65536 * v_set) / v_range
meas_x1 = (65536 * y1_sdl) / v_range
# next set voltage limit to 10
v_set = 10
ctrl_x2 = (65536 * v_set) / v_range
meas_x2 = (65536 * y2_sdl) / v_range # Not used?
ctrl_step = (y2_dmm - y1_dmm)/ (ctrl_x2 - ctrl_x1)
ctrl_offset = ctrl_x1 - (y1_dmm / ctrl_step) + ctrl_const
meas_step = (y2_dmm - y1_dmm) / (ctrl_x2 - ctrl_x1)
meas_offset = meas_x1 - y1_dmm / meas_step
print(f"CAL:DATA 1,{ctrl_step:.6f},{ctrl_offset:.0f}")
print(f"CAL:DATA 2,{meas_step:.6f},{meas_offset:.0f}")
# First start with the 36V range
calc(36, 1.5111, 1.9507, 12.445, 10.934)
# Switch into 150V range and do it again (values should be different)
# calc(150, 1.5111, 1.9507, 12.445, 10.934)