Сегодня зарелизил очередную версию одного из самых своих "долгоиграющих" проектов - mbusd, представляющего собой шлюз между двумя вариантами (TCP/RTU) протокола АСУ ТП Modbus.

Отличительные черты реализации:

  • Кроссплатформенность: шлюз способен работать на большинстве POSIX-совместимых систем;
  • Компактность: реализация изначально создавалась для работы во встраиваемых системах, ограниченных по частоте процессора и доступного ОЗУ;
  • Работа в мультимастер-режиме: до 32 TCP-мастеров могут осуществлять мультиплексированный обмен с RTU-слейвами;
  • Отказоустойчивость: возможность автоматического выполнения перезапросов в случае несовпадения контрольной суммы в ответе RTU-слейва;
  • Поддержка RS-232/485-конвертеров как с автоматическим управлением направлением передачи, так и по сигналу RTS.

Поддерживаемые коды функций Modbus:

  • 01: Read coil status
  • 02: Read input status
  • 03: Read holding registers
  • 04: Read input registers
  • 05: Force single coil
  • 06: Preset single register
  • 07: Read exception status
  • 15: Force multiple coils
  • 16: Preset multiple registers

Лицензия проекта - BSD. Все желающие что-то изменить или улучшить могут сделать свой форк проекта на GitHub. Pull request'ы приветствуются. :)