Техническое задание: Доработка библиотеки Modbus (C++)

Цель проекта

Модернизировать существующую динамическую библиотеку (DLL), реализующую протокол Modbus для обмена данными с промышленными контроллерами (PLC). Текущая библиотека поддерживает чтение данных из регистров хранения (holding registers). Требуется добавить поддержку работы с дискретными входами/выходами (coils).

Требуемый новый функционал

1. Функция чтения coils

  • Реализовать метод для чтения состояния одного или нескольких дискретных входов (coils) с удаленного устройства.
  • Функция должна соответствовать стандарту Modbus (функциональный код 0x01).
  • Обеспечить обработку ошибок протокола и таймаутов.

2. Функция записи coils

  • Реализовать метод для записи (установки/сброса) одного или нескольких дискретных выходов (coils) на удаленном устройстве.
  • Поддержка одиночной (функциональный код 0x05) и множественной (функциональный код 0x0F) записи.
  • Обеспечить проверку корректности передаваемых адресов и данных.

3. Функция автоматического опроса (авточтение)

  • Разработать механизм фонового периодического опроса заданных адресов coils.
  • Реализовать callback-уведомление или очередь событий для передачи измененных данных основному приложению.
  • Предусмотреть возможность настройки интервала опроса, списка адресов и управления процессом (старт/стоп).

Технические требования и условия

  • Язык программирования: C++.
  • Формат: Динамическая библиотека (DLL) с C-совместимым интерфейсом (extern "C") для обеспечения совместимости.
  • Новый код должен быть интегрирован в существующую кодобазу, сохраняя текущий API и не нарушая работу уже реализованных функций.
  • Код должен быть документирован (комментарии в ключевых местах).
  • Приветствуется предоставление простого примера использования (test client) для проверки нового функционала.

Результат работы

  • Исходный код проекта с реализованными функциями.
  • Скомпилированная DLL-библиотека.
  • Краткая документация по новым функциям API.