Тем не менее существуют реализации с разделением. Соответственно есть устройства, использующие InputRegs и HoldingRegs в обмене, причем при совмещении по вашей схеме возможен конфликт наложения разных по функциям данных в одно пространство. Если встает задача сохранить преемственность карт адресов Modbus устройства, то Ваша реализация накладывает непреодолимое ограничение - используемые адреса пространств InputRegs и HoldingRegs не должны пересекаться. Раздельная реализация не имела бы таких недостатков.
Предлагаю следующую схему:
1) В Modbus Slave явно указывается
- возможность отображения в coils (нет\с адреса XXXX);
- возможность отображения в inputs (нет\с адреса XXXX);
- возможность отображения в holding regs(нет\с адреса XXXX);
- возможность отображения в input regs (нет\с адреса XXXX);
- энергонезависимость(некоторые данные не нуждаются в этом);
2) В Modbus Slave можно вставлять Modbus Slave с своими настройками, что позволит одни и те же данные публиковать в других адресах и пространствах без дублирования самих данных;
3) При добавлении подэлементов можно указывать префикс повторения, чтобы делать массивы, доступ из ST можно реализовать через указатель на первый подэлемент;
реализация позволит создавать любую произвольную карту адресов в пределах разрешенного диапазона стандарта Modbus с минимальными затратами памяти, реализовать где нужно защиту от записи и энергонезависимость.