Да, действительно. В мануале написано, что выравнивание происходит автоматически. И это правда.
Удалил все регистры перед первым float и поставил его в начало списка. Адрес по которому его видит OPC == 1.
Добавил по поочерёдно перед float три регистра 8-bit: float сдвигается вперёд и остаётся на нечётном адресе. Пробовал добавлять 2-byte, не помогает.
Удалил весь Modbus slave, создал новый, поместил его в начало списка устройств, добавил в него один float и чуда не произошло: он по-прежнему читается по адресу 1.
Самому не победить?