Сегодня я бы хотел рассказать о программе, с помощью которой я начинал изучать протокол ModBus и ПЛК. Я ей пользуюсь до сих пор, и лично видел её в использовании у нескольких наладчиков. Если кому-то интересна история её создания или исходники прошу под кат.

image

Сканер регистров ModBus предназначается для людей, занимающихся наладкой систем автоматизации или просто пытающихся “подружиться” с каким-либо устройством, на борту которого находится Modbus. Для желающих иметь возможность быстро считать интересующие регистры или вручную пройтись по содержимому нескольких устройств на шине.

Первый автор программы тесно связан с АСУ ТП. Появление ПЛК с ModBus в 90-х потребовало какой-то программы для работы с этим протоколом. В те времена чтобы посмотреть содержимое регистров контроллера нужно было либо устанавливать на компьютер среду программирования контроллера, что неудобно, либо покупать какую-то платную программу. Хотелось что-то лёгкое и компактное, что можно таскать на дискете. Это и привело к написанию собственной программы. Прототип программы был написан под DOS на Basic. Прототип, кстати, получился не очень удачным. Позже проект был сконвертирован в Visual Basic. И где-то в начале 2000-х программа была переписана на Delphi. В середине 2000-х исходники попали уже ко мне. Тогда я вынес опрос по ModBus в отдельный поток, и добавил несколько мелких улучшений. Недавно добавил режим опроса ModBus rtu поверх TCP/IP и сконвертировал проект в Lazarus.

ModLook писался для собственного пользования. Получилось довольно удобно. Все элементы вынесены на главную панель. После измерения параметра не нужно жать ОК, изменения применяются автоматически. Так что программой можно управлять одной рукой (или ногой).

Для адресации данных используются номера регистров (отсчет начинается с 1), а не физические адреса. Тогда привычнее было начинать подсчет с единицы, а не с нуля.

ModLook может опрашивать регистры Coil Status (0ХХХХ), Discrete Inputs (1ХХХХ), Holding Registers (4ХХХХ), Input Registers (3ХХХХ). Можно разрешить или запретить опрос какого-то из этих регистров галочкой «Опрос».

Ссылка на исходники

Комментарии (9)


  1. ajratr
    20.05.2019 14:46

    Что это за тип вещественного числа такой 160?


    1. Opc-server Автор
      20.05.2019 14:47

      16O — величина со знаком на 16 битах, кодируется со сдвигом на 8000h (-32768 кодируется 0. 0 кодируется 8000h, 32767 кодируется FFFFh). Редкий тип.


  1. Tokpay
    20.05.2019 16:52

    С Modbus TCP что-то не так работает.
    При рассмотрении в Wireshark сложилось впечатление, что в транзакции запроса отсутствуют (пропущены) «Transaction Identifier», «Protocol Identifier» и «Length». Как будто заголовок оставлен от Modbus RTU.
    В программке может быть добавить индикатор отсылки/приёма? А то при ошибке всё просто мёртво стоит без изменений и непонятно, когда происходит обмен. Можно в строчке под выбором TCP порта добавить сообщение «отсылка», тогда как минимум будут чередоваться сообщения «отсылка»/«ошибка».


    1. Opc-server Автор
      20.05.2019 16:55

      Так и есть, это ModBus rtu поверх TCP/IP, а не Modbus TCP.

      В программке может быть добавить индикатор отсылки/приёма?

      Конечно добавьте, буду только рад.


  1. atol
    20.05.2019 17:21

    Добротная работа. Какую версию Indy используете для реализации TCP соединения?



  1. Balpak
    21.05.2019 12:01

    А версии с англоязычным интерфейсом не планируется?


    1. Opc-server Автор
      21.05.2019 17:03

      Зачем?


      1. Balpak
        21.05.2019 18:16

        Хотел показать коллеге, но он австалиец и специально для этого не будет учить русский язык. В принципе там и так всё понятно для тех кто в теме, просто хотелось бы версию для АСУшников за пределами СНГ.