惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

www.infosecurity-magazine.com
www.infosecurity-magazine.com
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
Jina AI
Jina AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
博客园_首页
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
云风的 BLOG
云风的 BLOG
腾讯CDC
V
Visual Studio Blog
宝玉的分享
宝玉的分享
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Palo Alto Networks Blog
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
Simon Willison's Weblog
Simon Willison's Weblog
H
Help Net Security
AWS News Blog
AWS News Blog
P
Proofpoint News Feed
月光博客
月光博客
T
Threatpost
Recent Announcements
Recent Announcements
G
Google Developers Blog
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
A
Arctic Wolf
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Latest news
Latest news
T
The Exploit Database - CXSecurity.com
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
Google DeepMind News
Google DeepMind News
V
V2EX
P
Proofpoint News Feed
Y
Y Combinator Blog
The Register - Security
The Register - Security
N
News | PayPal Newsroom
L
Lohrmann on Cybersecurity
H
Hacker News: Front Page
MongoDB | Blog
MongoDB | Blog
量子位
T
Troy Hunt's Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Recent Commits to openclaw:main
Recent Commits to openclaw:main

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
PLC-Tracer — новый взгляд на Ladder логику
wisesokol · 2026-05-16 · via Все публикации подряд на Хабре

# PLC-Tracer: бесплатный браузерный визуализатор лестничной логики Allen-Bradley

🔗 GitHub: wisesokol/PLC-Tracer  ·  v1.60  ·  MIT  ·  Aleksei Sokolov, 2026

🎬 PLC-Tracer — Intro

🎬 PLC-Tracer — демонстрация работы

Теги: PLC Allen-Bradley ladder logic промышленная автоматизация open source Python WebSocket


Содержание


Зачем это нужно

Если вы работаете с оборудованием на базе 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

Модуль 1 — Ladder Visualizer

Файл: plc-tracer-500-v160.html

Один HTML-файл, никаких зависимостей, никакой сборки — открывается в любом браузере.

Поддерживаемые форматы файлов

Формат

Откуда берётся

Семейство ПЛК

.SLC

Экспорт RSLogix 500

SLC 5/xx, MicroLogix

.PRN

Таблицы данных RSLogix

Офлайн-анализ переменных

.SY6 / .CSV

Экспорт описаний тегов

Подписи адресов

.L5X

Экспорт 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 позволяет прыгать между тегами не теряя контекст.

Живой режим (Live Mode)

При подключённом Bridge визуализатор принимает данные по WebSocket и подсвечивает ранги в реальном времени:

  • 🟢 Зелёный — условие выполнено (TRUE)

  • 🔴 Красный — условие не выполнено (FALSE)

Вы видите не статическую схему, а живую картину состояния контроллера. Все таймеры тикают, все переменные, выстроенные на графе обновляются.

Запись сессий — REC

Кнопка ⏺ REC запускает запись в файл .ndrec. Формат содержит временны́е метки и значения всех отслеживаемых переменных. Запись можно передать коллеге или открыть позже в Player. Запись производится только для выстроенного графа, так что не стоит что-то добавлять на граф в режиме записи. Формат записи довольно хорошо оптимизирован и занимает мало места, возможно использование в роли регистратора для отслеживания работы оборудования.

Встроенный справочник инструкций

Полный справочник инструкций для SLC 500 и Logix 5000 прямо в интерфейсе. TON, CTU, MOV, EQU, PID, JSR — описание под рукой без открытия мануала. Оно конечно краткое, но решил что этого будет достаточно. Чтобы Help был доступен, соотвествующий файл нужно подгрузить по необходимости.


Модуль 2 — PLC Bridge

Файл: Bridge/plc_bridge_500.py

Асинхронный Python-сервис: устанавливает соединение с ПЛК и транслирует значения тегов в браузер через WebSocket на порту 8765.

Поддерживаемое оборудование

Семейство

Адресация

Протокол

Библиотека

SLC 5/05

N7:0, B3/5, T4:2.ACC

ETH-PCCC

libplctag

MicroLogix 1100 / 1200 / 1400 / 1500

SLC-адресация

ETH-PCCC

libplctag

ControlLogix

именованные теги MotorRun, T1.ACC

EtherNet/IP (CIP)

libplctag

CompactLogix

именованные теги

EtherNet/IP (CIP)

libplctag

Подключение к PLC производится через Ethernet. Поддержку RS протоколов не реализовывал, но это возможно.

Внутреннее устройство

Bridge построен на asyncio + websockets + aiohttp. Для работы с ПЛК используется нативная библиотека libplctag через 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 🟢🔴

Модуль 3 — Session Player

Файл: PLC_Tracer_Player.html

Автономный плеер для воспроизведения записей .ndrec. Открывается в браузере, не требует Bridge и подключения к ПЛК.

Возможности

Функция

Описание

Timeline

Цветовые дорожки ON/OFF для каждого тега

Скорость

×0.5 · ×1 · ×2 · ×4 · ×8

Шаг кадра

← / → — покадровый разбор инцидента

Зум

Масштабирование временно́й шкалы

Оверлей

Состояния из записи накладываются на схему рангов

Клавиатура

Space = Play/Pause · = шаг · ПКМ = управление каналами

Типичный сценарий: что-то произошло на линии → записали сессию → открыли в Player → прошли по кадрам → нашли момент сбоя → установили причину.


Сценарии применения

🔌 Офлайн-отладка

Экспортировать программу из RSLogix / Studio 5000 → загрузить .SLC или .L5X в визуализатор → трассировать зависимости тегов → анализировать .PRN-снимки таблиц данных (для SLC Проектов).

ПЛК и Bridge не нужны.

📡 Онлайн-мониторинг

Запустить Bridge → подключиться к ПЛК → наблюдать живую подсветку рангов → при необходимости нажать REC и записать сессию.

🔍 Разбор инцидента (Post-Mortem)

Открыть .ndrec в Player → перемотать к моменту сбоя → покадрово восстановить последовательность событий → соотнести состояния рангов с временно́й шкалой.


Установка и запуск

Требования

  • Python 3.10+ (добавить в PATH)

  • Windows (Bridge тестировался на Windows; HTML-часть кроссплатформенна)

  • Любой современный браузер

Bridge

# Установка зависимостей
pip install -r requirements.txt

# GUI-мост (рекомендуется)
python Bridge/plc_bridge_ui.py

Визуализатор и Player

Просто открыть HTML-файл в браузере. Установка не нужна.

Зависимости Python

websockets
aiohttp
aiohttp-cors

Нативная библиотека libplctag (.dll) включена в репозиторий — отдельная установка не нужна.


Технические ограничения

  • Bridge тестировался на Windows x64. Для Linux потребуется скачать libplctag под целевую платформу.

  • Только чтение — запись значений в ПЛК не реализована намеренно.

  • Bridge работает локально и не требует открытия портов вовне.

  • HTML-часть не использует фреймворки и не требует интернета.


Для кого этот проект

  • 🔧 Сервисные инженеры и наладчики на небольших производствах

  • 🏭 Предприятия, которым не по карману Rockwell-лицензии

  • 🎓 Студенты и обучающиеся в области промышленной автоматизации

  • 🌍 Инженеры из стран, где лицензионное ПО недоступно по цене

  • 🕵️ Все, кому нужно быстро разобраться в чужой программе без установки ПО

PLC-Tracer не претендует на замену Studio 5000. Он закрывает одну конкретную задачу: читать, понимать и диагностировать логику Allen-Bradley без финансового барьера.


Ссылки


Проект полностью создан с помощью Claude (Anthropic). Буду рад вопросам, замечаниям и pull request’ам.