Этот материал предназначен для начинающих специалистов в области АСУ ТП.
Идея статьи возникла в процессе обследования промышленных объектов. Поскольку в сети ощущается дефицит информации о том, как «на лету» определить параметры настройки RS-485, адресацию и структуру запросов Modbus RTU, не прерывая работу технологического процесса, мы решили поделиться собственным опытом. Главное условие — оборудование должно оставаться в составе сети и продолжать отвечать на запросы ПЛК в штатном режиме.
Как реализовать такую задачу? Опытные инженеры предложат использовать осциллограф, но он не всегда позволяет эффективно дешифровать протокол. Специалисты по электронике наверняка вспомнят про логический анализатор, и это будет самым верным решением. В данной статье мы используем Saleae Logic 16, однако подойдет любой аналогичный прибор с поддержкой функций анализа последовательных данных.
Подключение к шине
Внешний вид логического анализатора:

Обратите внимание на щупы-клипсы (типа «игла» или «зажим»), которые позволяют безопасно подключиться к жилам интерфейса RS-485:

Принцип работы схож с показанным на изображении.
Обычно от устройства отходят два проводника: A и B. Подключаем к ним входы CH0 и CH1 нашего анализатора. Полярность на данном этапе не критична — позже мы легко определим, где A, а где B, исходя из состояния покоя линии.
Сбор данных
Подсоединяем анализатор к ПК и запускаем ПО Saleae Logic. Рабочая область программы выглядит примерно так:

1. Область настроек захвата.
2. Выбор активных каналов (используем 0 и 1).
3. Выбор частоты дискретизации (не стоит гнаться за максимумом, так как избыточный объем данных может затруднить анализ).
4. Запуск сбора данных. Рекомендуется записывать поток в течение нескольких минут для формирования репрезентативной выборки.
Анализ протокола

После остановки сбора данных мы увидим временную диаграмму (аналогичную Рис 2, но без наложенных маркеров декодирования).
-
Входные каналы устройства.
-
Согласно стандарту RS-485, в состоянии «логической единицы» (idle) на линии A удерживается высокий потенциал, а на линии B — низкий. Это позволяет безошибочно идентифицировать полярность.
-
Для определения скорости обмена (baud rate) используем расчет: Скорость (бит/с) = 1 000 000 / T (мкс), где T — длительность единичного бита.
Длительность (мкс)
Скорость (бод)
104,2
9600
52,1
19200
8,68
115200
-
Стоповый бит пакета.
-
Бит контроля четности (Parity bit). Например, при настройке «Even» бит выставляется таким образом, чтобы общее количество единиц в байте было четным. Анализ длительности интервалов поможет выявить наличие или отсутствие данного бита.
-
Параметры декодера в программе Saleae Logic.

Выставляем найденную скорость в анализаторе. Стандарт для большинства промышленных систем — 8 бит данных, 1 стоповый бит, без контроля четности (8N1). Если прибор выдает ошибки декодирования, проверьте параметры четности или наличие других специфических настроек.
Несмотря на то что Saleae Logic имеет встроенный модуль для Modbus, часто эффективнее использовать стандартный «Async Serial» — он позволяет точнее увидеть структуру байтов. После настройки декодера вы легко определите ID устройства и формат запросов согласно спецификации протокола Modbus.
Нюансы эксплуатации RS-485
Популярность скорости 9600 бод обусловлена минимизацией эффектов «эха» (отраженного сигнала). На низких скоростях длительность бита значительно превышает время затухания отражений, что повышает помехоустойчивость при некорректной топологии сети.
Важно помнить: RS-485 — это шина, а не «звезда». Допустимая длина ответвлений от основной магистрали ограничена примерно 1 метром. Пренебрежение этим правилом ведет к возникновению паразитных отражений сигнала.
Терминальные резисторы служат для подавления эха. В правильно спроектированной сети их роль минимальна, но при длинных линиях или большом количестве устройств они необходимы. Однако будьте осторожны: избыточное количество терминаторов может критически просадить амплитуду сигнала, сделав его нечитаемым для приемников. Если на линии много ошибок, лучше воспользоваться осциллографом: он наглядно покажет и «эхо», и просадки уровней напряжения.

Таблица уровней сигналов (TTL):

Между значениями Vil (0,8 В) и Vih (2,0 В) находится зона логической неопределенности. Сигналы в этом диапазоне интерпретируются контроллерами непредсказуемо. Для стабильной передачи данных логический «ноль» должен быть ниже 0,8 В, а «единица» — уверенно выше 2,0 В. Если напряжение на шине занижено, стоит рассмотреть использование повторителей интерфейса или дополнительную подтяжку линии к питанию.

