[Программирование, Промышленное программирование, Инженерные системы] Укрощение строптивого или Reverse Engineering французского паллетайзера на Simatic S7-300
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Внешний вид паллетоукладочной машиныКак возникла задача и общее её описаниеОднажды обратился ко мне директор местного производства одного всемирного производителя напитков. Так случилось, что он в течение года добивался от штатных экспертов выполнения ряда задач, но профессионалы с опытом убеждали менеджера, что выполнение данных задач невозможно в принципе. В целом задача была предельно понятна: поменять шаблон укладки кейсов в паллетайзере, чтобы повысить прочность "конструкции".Внезапно: Исходников программного обеспечения и электрической документации нет уже лет 5. Итак, сущность проблемы была проста как мир. Имеется технологическая машина - паллетайзер, в которой:
- Одним рядом заходят ориентированные кейсы с продукцией и фиксируются оптическим дачиком
- Каждый из кейсов на входе может быть повёрнут на 90° лопаткой разворачивателя
- Каждый из кейсов может быть остановлен ограничителем: всего ограничителей 6шт. в различных положениях.
- После формирования ряда срабатывает толкатель, который сдвигает этот ряд на площадку формирования слоя
- Повторяем набор необходимых рядов до момента, пока не сформируется слой
- Cлой сдвигается толкателем на "лифт", переносящий его на паллет
- Повторяем формирование слоёв в заданном количестве. Слой может быть чётным и нечётным, с разной раскладкой.
Упрощенная схема работы паллетайзера, вид сверху
В сухом остатке:
- Паллет, состоящий из 4-5 слоев
- Слой, состоящий из 3-4 рядов
- Ряд, состоящий из 1-6 кейсов, каждый из которых может быть повёрнут или остановлен ограничителем
Меня интересовал сам слой, а точнее две его версии: чётная и нечетная. Если хорошо учиться в школе до 7 класса включительно, то можно проглядеть параллель между видом слоя и математической матрицей, где повёрнутый кейс - это 1, а зашедший без поворота - это 0. Соответственно, предположил, что где то в коде ПЛК должен быть счётчик кейсов, регистр сдвига и "шаблон укладки"(та самая матрица), которые мне предстояло найти.Ищем волшебный "шаблон"Я прекрасно отдаю себе отчёт в том, что данную задачу смогут выполнить многие из читающих, но для конечных пользователей это оказалось действительно чудом, которое они ждали год и платили людям за это зарплату(вполне хорошую по меркам региона)На момент начала работ я знаю следующее:
- Системой управляет ПЛК SImatic S7-300
- По машине раскидано 6 Profibus-DP модулей распределённого ввода-вывода IM151 разных конфигураций а также 13 частотников Danfoss работающих в той же шине.
- На большинстве кабелей сохранилась маркировка, что позволяет мне отследить куда они идут
- Есть backup программы ПЛК(разумеется без комментариев, алиасов и тд)
- Машина постоянно в работе, поэтому её нельзя остановить и поиграться с датчиками и исполнительными устройствами
- Существует 7 рецептов формирования паллет под разные продукты(выбираются с экрана)
Сначала я допустил, что ограничители мы не используем(отключили) и ориентировался только на разворот кейсов. Повторюсь, я предположил, что есть некая "матрица"(читай: блок данных в энергонезависимой памяти)в которой хранятся нули и единицы, управляющие лопаткой, разворачивающей кейсы. С этой лопатки поиск и начнём.Быстрая пробежка по маркировке от соленойда лопатки по кабелям привела меня к одной из планок IM151, с выхода которой данная лопатка и активировалась, а конкретно с выхода №0 модуля дискретных выходов 1595U0(см. фото ниже). Данный модуль имеет настроенный сетевой адрес #55, настроенный DIP-переключателями.
Собственно, кабель соленоида и модульОпределив физическое соединение, мы идём в HW Config и ищем адрес нашего выхода, который и станет отправной точкой для разбора кода.
Там мы видим, что это выход Q15.0. С этим огромным успехом мы идём в таблицу ссылок Reference Data, где и смотрим по каким же условиям срабатывает данный выход.Первые условия были весьма простые, включаем Q15.0 если активно M185.0, а M185.0 включаем если активно M59.6:
И тут мы попадаем на активацию метки M59.6. На первый взгляд это несколько запутанно, но всё на самом деле довольно просто
Активация метки M59.6
- Смотрим Network 3. Метка 59.6 активируется в тот момент, когда слово данных DB2.DBW80 достигает значения 240
- DB2.DBW80 записывается в Network 1 и происходит это по правилам условного перехода:
- Если активно M59.2 и не активно M59.6, то в каждом такте увеличиваем значение DB2.DBW80 на значение MW500
- Иначе, если активно M59.6, то пишем в DB2.DBW80 значение 0(сбрасываем)
Небольшое разъяснение - в данной программе MW500 - не что иное, как счетчик тактов длиной в 1мс, поэтому понимаем Network 3 так: Если M59.6 неактивно И М59.2 активно в течение 240мс(суть таймер TON по 2-м условиям), включаем M59.6
- Последним неизвестным остаётся М59.2, которая активируется в Network 2. Поскольку здесь условий несколько, то я поступил весьма просто: посмотрел в онлайн, какие метки горят постоянно, а какая мигает при прохождении нового кейса и увидел, что за срабатывание лопатки отвечает M70.3
Идем в таблицу ссылок и видим интересную картину - M70.3 нигде не записывается, а только считывается:
Таблица ссылок для М70.3Но это не значит, что в программе ошибка, а значит только лишь что данная метка записывается в составе целого слова, нажимаем на данную метку в таблице ссылок ПКМ и выбираем Cross-References for Address и видим это самое слово
Слово данных MW69, включающее в себя метку М70.3Проваливаемся по адресу записи этого слова и находим то самое, что тешит моё самолюбие что и предполагалось. Функцию сдвига, счётчик и ссылку на "шаблон". А теперь по порядку:
- Мы прибавляем к значению DB2.DBW2 значение 100 и пишем это в MW150, после чего открываем DB с этим номером. Поскольку ссылка на блок данных переменная, то я предположил, что DB2.DBW2 не что иное, как номер рецепта, который мы получаем с HMI. И, выбрав другой рецепт на экране - я в этом убедился. Т.е. каждому рецепту соответствует свой "шаблон" (блок данных) с номером DB[100+N], где N - номер рецепта
- В качестве счётчика прошедших кейсов используется C6, значение которого мы пишем в MW150 и, сдвинув на 4 бита влево переписываем в MD150.Пример: имея в счетчике C6 значение 0005h, мы сдвигаем его на 4 бита и получаем 0050h, что соответствует указателю +5.0 на double word
- Ну, и, в конце концов, мы загружаем значение double word c текущим указателем, соответствующим счётчику MW150 в word слова MW69 и MW70, откуда в конце концов и активируется так нужный нам бит M70.3
Как формируется матрица укладкиИтак, определившись, где хранятся данные о укладке кейсов на паллет мы разбираем матрицу для нужного нам рецепта. Открываем DB102(рецепт 2) и видим следующее:
Матрица шаблона укладки в памяти ПЛК и реальная раскладка кейсов в машинеСобственно, слово +0.0 мы не учитываем, потому что счётчик при первом прохождении кейса уже >0. Разбираем шаблон сравнивая с реальной укладкой и обращаем внимание на следующие закономерности:
- Разворачивается кейс битом 3 младшего слова данных(M70.3)
- Конец каждого ряда обозначается битом 0 младшего слова данных(M70.0)
- Конец каждого слоя обозначается битом 1 младшего слова данных(M70.1)
- Конец всего шаблона обозначается битом 5 младшего слова данных(M70.5)
Комбинируя данные биты мы получаем нужные слова для записи в шаблон, например:8h(b1000) - только разворот кейса9h(b1001) - разворот кейса и конец рядаBh(b1011) - разворот кейса, конец ряда и конец слоя22h(b00100010) - конец слоя и конец шаблонаВ общем и целом, задача была решена и теперь я точно знал как изменить шаблон укладки, но потом пришел заказчик.Мы подумали, и у нас тут маленькие изменения...Чисто технически, они ничего не меняли, но необходимый шаблон выглядел так:
Новый тимплейт укладки кейсовСамые внимательные читатели однозначно заметили тот факт, что в ряде #2 обоих слоёв всего 3 кейса и между ними пространство, которое должно быть выдержано для того, чтобы туда вошел кейс #2(11). И тут я возвращаюсь к своему сферическому коню в вакууме, который способен искажать пространственно-временной континуум работать без ограничителей. Ведь как вы помните:
Сначала я допустил, что ограничители мы не используем(отключили) и ориентировался только на разворот кейсов.
В принципе, есть полная ясность о том, как это работает, осталось только найти где это записано. Как говорится, у нас был какой-то план и мы его придерживались. Ищем матрицу, которая отвечает за работу ограничителей.Я опущу все повторяемые действия с обратным поиском от физических выходов к меткам, и лишь скажу, что за работу ограничителей на выходах Q15.1-Q15.7 отвечают биты слова MW68, по аналогии с тем как работает лопатка разворота. Ну и записан шаблон для срабатывания ограничителей в том же DB, начиная с указателя +200.0 и далее.
Шаблон срабатывания ограничителейЗдесь логика оказалась куда проще:
- Ограничитель 1 - бит 0 младшего слова данных(M68.0)
- ...
- Ограничитель 6 - бит 5 младшего слова данных(M68.5)
Я определился с тем что в новой раскладке мне необходимо выставлять ограничитель 3 перед кейсом 6 в нечетном слое и ограничитель 5 перед кейсом 8 в чётном.ИтогиСоставлено две матрицы следующего содержания:
Новый шаблон укладки, включая ограничителиИ программа заменена прямо в процессе работы после окончания предыдущего паллета:
Результат укладки паллетаВ результате изменений, конструкция стала устойчивой, а паллет стал формироваться быстрее и ровнее. Линия стала работать на 4% продуктивнее, что для такого производства хорошее изменение.Буду рад услышать ваши комментарии, истории разбора чужих программ или конструктивную критику. Всем спасибо!
===========
Источник:
habr.com
===========
Похожие новости:
- [Python, Программирование, Accessibility, Здоровье] Эксперимент для сотрудника с нарушением слуха, ч. 2, проверка на себе
- [Программирование, Совершенный код, C, Rust, Браузеры] Tor Project планирует заменить код C на Rust
- [Программирование, .NET, C#] Даты, время и часовые пояса: улучшения в .NET 6
- [Информационная безопасность, Программирование, Квантовые технологии] Взлом квантовой программы
- [Анализ и проектирование систем, IT-инфраструктура, Инженерные системы] Контроль температуры в системах контроля доступа
- [Научно-популярное, Физика, Инженерные системы] Реконструкция римской производственной инженерии (перевод)
- [Python, CAD/CAM, Промышленное программирование, Прототипирование, Визуальное программирование] Slicer: нарезка твердотельных объектов под раскрой
- [Python, Программирование, Машинное обучение, Natural Language Processing] Как новый метод упаковки в BERT ускоряет обработку естественного языка в 2 раза (перевод)
- [Мессенджеры, Программирование, Разработка игр, Логические игры] Настольная игра в Telegram с разоблачением
- [Программирование, Звук] Книги о цифровой обработке сигналов и звуковом синтезе
Теги для поиска: #_programmirovanie (Программирование), #_promyshlennoe_programmirovanie (Промышленное программирование), #_inzhenernye_sistemy (Инженерные системы), #_plk (плк), #_siemens_s7300, #_siemens_plc, #_sidel, #_plc, #_programmirovanie_plk (программирование плк), #_programmirovanie (
Программирование
), #_promyshlennoe_programmirovanie (
Промышленное программирование
), #_inzhenernye_sistemy (
Инженерные системы
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:48
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Внешний вид паллетоукладочной машиныКак возникла задача и общее её описаниеОднажды обратился ко мне директор местного производства одного всемирного производителя напитков. Так случилось, что он в течение года добивался от штатных экспертов выполнения ряда задач, но профессионалы с опытом убеждали менеджера, что выполнение данных задач невозможно в принципе. В целом задача была предельно понятна: поменять шаблон укладки кейсов в паллетайзере, чтобы повысить прочность "конструкции".Внезапно: Исходников программного обеспечения и электрической документации нет уже лет 5. Итак, сущность проблемы была проста как мир. Имеется технологическая машина - паллетайзер, в которой:
Собственно, кабель соленоида и модульОпределив физическое соединение, мы идём в HW Config и ищем адрес нашего выхода, который и станет отправной точкой для разбора кода. Там мы видим, что это выход Q15.0. С этим огромным успехом мы идём в таблицу ссылок Reference Data, где и смотрим по каким же условиям срабатывает данный выход.Первые условия были весьма простые, включаем Q15.0 если активно M185.0, а M185.0 включаем если активно M59.6: И тут мы попадаем на активацию метки M59.6. На первый взгляд это несколько запутанно, но всё на самом деле довольно просто Активация метки M59.6
Таблица ссылок для М70.3Но это не значит, что в программе ошибка, а значит только лишь что данная метка записывается в составе целого слова, нажимаем на данную метку в таблице ссылок ПКМ и выбираем Cross-References for Address и видим это самое слово Слово данных MW69, включающее в себя метку М70.3Проваливаемся по адресу записи этого слова и находим то самое, что тешит моё самолюбие что и предполагалось. Функцию сдвига, счётчик и ссылку на "шаблон". А теперь по порядку:
Матрица шаблона укладки в памяти ПЛК и реальная раскладка кейсов в машинеСобственно, слово +0.0 мы не учитываем, потому что счётчик при первом прохождении кейса уже >0. Разбираем шаблон сравнивая с реальной укладкой и обращаем внимание на следующие закономерности:
Новый тимплейт укладки кейсовСамые внимательные читатели однозначно заметили тот факт, что в ряде #2 обоих слоёв всего 3 кейса и между ними пространство, которое должно быть выдержано для того, чтобы туда вошел кейс #2(11). И тут я возвращаюсь к своему сферическому коню в вакууме, который способен искажать пространственно-временной континуум работать без ограничителей. Ведь как вы помните: Сначала я допустил, что ограничители мы не используем(отключили) и ориентировался только на разворот кейсов.
Шаблон срабатывания ограничителейЗдесь логика оказалась куда проще:
Новый шаблон укладки, включая ограничителиИ программа заменена прямо в процессе работы после окончания предыдущего паллета: Результат укладки паллетаВ результате изменений, конструкция стала устойчивой, а паллет стал формироваться быстрее и ровнее. Линия стала работать на 4% продуктивнее, что для такого производства хорошее изменение.Буду рад услышать ваши комментарии, истории разбора чужих программ или конструктивную критику. Всем спасибо! =========== Источник: habr.com =========== Похожие новости:
Программирование ), #_promyshlennoe_programmirovanie ( Промышленное программирование ), #_inzhenernye_sistemy ( Инженерные системы ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 03:48
Часовой пояс: UTC + 5