Цитата Сообщение от Kirill Посмотреть сообщение
1. В ПЛК и модулях расширения не вводилось разделение на входные и внутренние регистры. Ибо этого и не нужно.
Возможно, это не совсем совпадает с описанием протокола, зато значительно упрощает жизнь и, главное, не ничему не мешает. Так ведь?
Тем не менее существуют реализации с разделением. Соответственно есть устройства, использующие 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 с минимальными затратами памяти, реализовать где нужно защиту от записи и энергонезависимость.