- PVSM.RU - https://www.pvsm.ru -

# PLC-Tracer: бесплатный браузерный визуализатор лестничной логики Allen-Bradley
🔗 GitHub: wisesokol/PLC-Tracer [1] · v1.60 · MIT · Aleksei Sokolov, 2026
🎬 PLC-Tracer — Intro [2]
Теги: PLC Allen-Bradley ladder logic промышленная автоматизация open source Python WebSocket
Зачем это нужно [4]
Архитектура [5]
Установка и запуск [10]
Для кого этот проект [11]
Если вы работаете с оборудованием на базе Allen-Bradley и вам нужно разобраться в логике программы — найти, почему не срабатывает реле, почему выход не включается, какие условия заблокированы — вы сталкиваетесь с одной и той же проблемой.
Нужно дорогое лицензионное ПО.
|
Программа |
Цена лицензии |
|---|---|
|
Studio 5000 (Rockwell Automation) |
$3 000 — $10 000+ |
|
RSLogix 5000 |
аналогично |
|
RSLinx Classic |
отдельная строка бюджета |
Для крупного предприятия это рабочие расходы. Для небольшого завода, независимого сервисного инженера или специалиста в стране с ограниченным бюджетом — фактический запрет на нормальную диагностику.
Результат: инженеры работают наугад, используют пиратское ПО, тратят очень много времени чтобы разобраться в иногда огромной и сложной логике программы, прыгая по подпрограммам и рутинам в разных частях проекта. Да и есть ли человек который сможет подключиться к PLC и произвести качественную диагностику. Как показывает практика, на этом часто экономят.
PLC-Tracer создавался именно для этого сценария — бесплатный, браузерный, не требующий установки инструмент для визуализации лестничной логики Allen-Bradley в офлайн-режиме и в реальном времени. Единственная оговорка, единожды нужно сделать экспорт проекта в необходимый формат, что в принципе можно сделать и на стороне.
⚠️ Безопасность прежде всего
PLC-Tracer работает строго на чтение. Инструмент не имеет возможности записи значений или изменения логики контроллера. Bridge открывает теги через libplctag API только в режиме read. Это принципиальное архитектурное решение для безопасной работы с промышленным оборудованием.
Проект состоит из трёх независимых компонентов:
┌─────────────────────────────────────────────────────────┐
│ PLC-Tracer │
│ │
│ ┌──────────────────────┐ ┌────────────────────────┐ │
│ │ Ladder Visualizer │ │ Session Player │ │
│ │ plc-tracer-*.html │ │ PLC_Tracer_Player.html│ │
│ │ офлайн + онлайн │ │ воспроизведение .ndrec│ │
│ └──────────┬───────────┘ └────────────────────────┘ │
│ │ WebSocket :8765 │
│ ┌──────────┴───────────────────────────────────────┐ │
│ │ PLC Bridge │ │
│ │ plc_bridge_500.py ←→ plc_bridge_ui.py │ │
│ └──────────┬───────────────────────────────────────┘ │
└─────────────┼───────────────────────────────────────────┘
│ EtherNet/IP · PCCC · DH+
┌────┴────┐
│ ПЛК │ SLC / MicroLogix / ControlLogix
└─────────┘
Структура репозитория:
plc-tracer-500-v160.html — основной визуализатор
PLC_Tracer_Player.html — плеер записей
Bridge/
plc_bridge_500.py — headless Python-мост
plc_bridge_ui.py — GUI-мост (Tkinter)
libplctag_2.6.16_windows_x64/ — нативная DLL
install.txt — инструкция по установке
requirements.txt
LICENSE — MIT
Файл: plc-tracer-500-v160.html
Один HTML-файл, никаких зависимостей, никакой сборки — открывается в любом браузере.
|
Формат |
Откуда берётся |
Семейство ПЛК |
|---|---|---|
|
|
Экспорт RSLogix 500 |
SLC 5/xx, MicroLogix |
|
|
Таблицы данных RSLogix |
Офлайн-анализ переменных |
|
|
Экспорт описаний тегов |
Подписи адресов |
|
|
Экспорт Studio 5000 |
ControlLogix, CompactLogix |
Ключевая функция визуализатора. Клик по любому тегу строит граф связанных рангов: все ранги, которые читают этот тег, и все, которые его записывают, соединяются кривыми Безье.
[Тег: B3/5]
│
├── LAD 0 / Rung 4 ──── читает ──── (XIC B3/5)
├── LAD 2 / Rung 11 ──── читает ──── (XIO B3/5)
└── LAD 1 / Rung 7 ──── пишет ──── (OTE B3/5)
│
└── связанные теги: N7:0, T4:2.DN ...

То, что вручную занимает 30–40 минут кросс-референсного поиска, решается за несколько секунд. История навигации Back / Forward позволяет прыгать между тегами не теряя контекст.
При подключённом Bridge визуализатор принимает данные по WebSocket и подсвечивает ранги в реальном времени:
🟢 Зелёный — условие выполнено (TRUE)
🔴 Красный — условие не выполнено (FALSE)
Вы видите не статическую схему, а живую картину состояния контроллера. Все таймеры тикают, все переменные, выстроенные на графе обновляются.
Кнопка ⏺ REC запускает запись в файл .ndrec. Формат содержит временны́е метки и значения всех отслеживаемых переменных. Запись можно передать коллеге или открыть позже в Player. Запись производится только для выстроенного графа, так что не стоит что-то добавлять на граф в режиме записи. Формат записи довольно хорошо оптимизирован и занимает мало места, возможно использование в роли регистратора для отслеживания работы оборудования.

Полный справочник инструкций для SLC 500 и Logix 5000 прямо в интерфейсе. TON, CTU, MOV, EQU, PID, JSR — описание под рукой без открытия мануала. Оно конечно краткое, но решил что этого будет достаточно. Чтобы Help был доступен, соотвествующий файл нужно подгрузить по необходимости.
Файл: Bridge/plc_bridge_500.py
Асинхронный Python-сервис: устанавливает соединение с ПЛК и транслирует значения тегов в браузер через WebSocket на порту 8765.
|
Семейство |
Адресация |
Протокол |
Библиотека |
|---|---|---|---|
|
SLC 5/05 |
|
ETH-PCCC |
libplctag |
|
MicroLogix 1100 / 1200 / 1400 / 1500 |
SLC-адресация |
ETH-PCCC |
libplctag |
|
ControlLogix |
именованные теги |
EtherNet/IP (CIP) |
libplctag |
|
CompactLogix |
именованные теги |
EtherNet/IP (CIP) |
libplctag |
Подключение к PLC производится через Ethernet. Поддержку RS протоколов не реализовывал, но это возможно.
Bridge построен на asyncio + websockets + aiohttp. Для работы с ПЛК используется нативная библиотека libplctag [12] через ctypes — прямые вызовы DLL без дополнительных Python-обёрток.
Поддерживаемые типы данных:
INT8 · INT16 · INT32 · INT64
UINT8 · UINT16 · UINT32 · UINT32
FLOAT32 · FLOAT64
BIT
STRING (Logix: LEN int32 + DATA[82] bytes)
UDT (через raw bytes)
В памяти ведётся кольцевой буфер лога (500 записей) — состояние подключения видно в GUI в реальном времени.
GUI-версия (plc_bridge_ui.py) — тёмный Tkinter-интерфейс: старт / стоп / переподключение, цветовая индикация статуса, выбор папки для сохранения записей.
Физический ПЛК (SLC / MicroLogix / ControlLogix)
│
│ EtherNet/IP · PCCC ·
▼
plc_bridge_500.py ←──────► plc_bridge_ui.py
(asyncio core) (Tkinter GUI)
│
│ WebSocket ws://localhost:8765
▼
PLC Tracer (браузер)
live rung glow 🟢🔴
Файл: PLC_Tracer_Player.html
Автономный плеер для воспроизведения записей .ndrec. Открывается в браузере, не требует Bridge и подключения к ПЛК.
|
Функция |
Описание |
|---|---|
|
Timeline |
Цветовые дорожки ON/OFF для каждого тега |
|
Скорость |
×0.5 · ×1 · ×2 · ×4 · ×8 |
|
Шаг кадра |
← / → — покадровый разбор инцидента |
|
Зум |
Масштабирование временно́й шкалы |
|
Оверлей |
Состояния из записи накладываются на схему рангов |
|
Клавиатура |
|
Типичный сценарий: что-то произошло на линии → записали сессию → открыли в Player → прошли по кадрам → нашли момент сбоя → установили причину.
Экспортировать программу из RSLogix / Studio 5000 → загрузить .SLC или .L5X в визуализатор → трассировать зависимости тегов → анализировать .PRN-снимки таблиц данных (для SLC Проектов).
ПЛК и Bridge не нужны.
Запустить Bridge → подключиться к ПЛК → наблюдать живую подсветку рангов → при необходимости нажать REC и записать сессию.
Открыть .ndrec в Player → перемотать к моменту сбоя → покадрово восстановить последовательность событий → соотнести состояния рангов с временно́й шкалой.
Python 3.10+ (добавить в PATH)
Windows (Bridge тестировался на Windows; HTML-часть кроссплатформенна)
Любой современный браузер
# Установка зависимостей
pip install -r requirements.txt
# GUI-мост (рекомендуется)
python Bridge/plc_bridge_ui.py
Просто открыть HTML-файл в браузере. Установка не нужна.
websockets
aiohttp
aiohttp-cors
Нативная библиотека libplctag (.dll) включена в репозиторий — отдельная установка не нужна.
Bridge тестировался на Windows x64. Для Linux потребуется скачать libplctag под целевую платформу.
Только чтение — запись значений в ПЛК не реализована намеренно.
Bridge работает локально и не требует открытия портов вовне.
HTML-часть не использует фреймворки и не требует интернета.
🔧 Сервисные инженеры и наладчики на небольших производствах
🏭 Предприятия, которым не по карману Rockwell-лицензии
🎓 Студенты и обучающиеся в области промышленной автоматизации
🌍 Инженеры из стран, где лицензионное ПО недоступно по цене
🕵️ Все, кому нужно быстро разобраться в чужой программе без установки ПО
PLC-Tracer не претендует на замену Studio 5000. Он закрывает одну конкретную задачу: читать, понимать и диагностировать логику Allen-Bradley без финансового барьера.
📦 GitHub: wisesokol/PLC-Tracer [1]
📄 Лицензия: MIT
🔗 libplctag: github.com/libplctag/libplctag [12] (нативная библиотека, лицензируется отдельно)
Проект полностью создан с помощью Claude [13] (Anthropic). Буду рад вопросам, замечаниям и pull request’ам.
Автор: wisesokol
Источник [14]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/allen-bradley/451705
Ссылки в тексте:
[1] wisesokol/PLC-Tracer: https://github.com/wisesokol/PLC-Tracer
[2] PLC-Tracer — Intro: https://youtu.be/5EIQuA3fAio
[3] PLC-Tracer — демонстрация работы: https://youtu.be/EdFXSBzqMIg
[4] Зачем это нужно: #%D0%B7%D0%B0%D1%87%D0%B5%D0%BC-%D1%8D%D1%82%D0%BE-%D0%BD%D1%83%D0%B6%D0%BD%D0%BE
[5] Архитектура: #%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0
[6] Модуль 1 — Ladder Visualizer: #%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-1--ladder-visualizer
[7] Модуль 2 — PLC Bridge: #%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-2--plc-bridge
[8] Модуль 3 — Session Player: #%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-3--session-player
[9] Сценарии применения: #%D1%81%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B8-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F
[10] Установка и запуск: #%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA
[11] Для кого этот проект: #%D0%B4%D0%BB%D1%8F-%D0%BA%D0%BE%D0%B3%D0%BE-%D1%8D%D1%82%D0%BE%D1%82-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82
[12] libplctag: https://github.com/libplctag/libplctag
[13] Claude: https://claude.ai
[14] Источник: https://habr.com/ru/articles/1035818/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1035818
Нажмите здесь для печати.