В своей практике я встречался со множеством башенных кранов, начиная от “советских” КБ различных моделей и их модификаций, заканчивая современными кранами, в том числе Liebherr. Причем, среди последних я сейчас встречаюсь не только с новыми, а и со старичками, которые иногда старше меня). Если с новыми кранами все более-менее хорошо (мощная система диагностики практически всех компонентов электросхемы, большой экран с отображением множества параметров, современная схемотехника с использованием ПЧ), то со старичками часто приходится повозиться. Да, релейно-контакторная схема не сложна, но годы дают знать свое.Отдельным пунктом стоит выделить экран в кабине оператора - ящик с маленьким сегментным экраном, показывающим только значение вылета тележки на стреле. И табличка с грузовой характеристикой, которую нужно выбрать и прикрутить к корпусу в соответствии со смонтированной длиной стрелы. Прошлый век, в общем (и по смыслу, и по годам изготовления). Используются старые компоненты, которые все сложнее найти в случае выхода из строя, либо можно собрать из двух один). В качестве датчика в таком дисплее используется потенциометр, установленный в блоке концевых выключателей. Естественно, возникла идея заменить старое на что-то более-менее современное. Т.к. для модернизации нужно разрешение завода-изготовителя, получить которое практически невозможно, то решено было сделать систему мониторинга параметров, которая никак не влияет на имеющуюся электрическую схему. По сути, - систему, являющуюся надстройкой.Имея опыт программирования HMI (ЧМИ) и PLC с PLR, в голове прикинул проект, предложил руководству компании - и получил положительное решение. Значит, пора строить испытательный прототип. И приниматься за программирование. В качестве HMI я использовал панель DOP-107EV производителя Delta Electronics.Устройством, отвечающим за логику работы, решил выбрать хорошо знакомое мне программируемое реле EasyE4 от Eaton Electric - выбрал вариант с  пружинными клеммами и без дисплея EASY-E4-AC-12RCX1P, и с модулем расширения 4AI+2AO - EASY-E4-DC-6AE1. О них, кстати, писал здесь ранее. Запитывать панель HMI и модуль расширения было решено от блока питания Delta DRC-24V60W-1AZ -  более гармонично смотрится рядом с EasyE4. Да и в надежности и помехозащищённости БП данного производителя я уверен на все 100%. Вообще, конкретные модели оборудования выбирались исходя из наличия: возможны различные комбинации HMI - PLR, но наличие подводит) Кризис в полупроводниковой сфере и пандемия значительно влияют на ситуацию с ассортиментом и доступностью.  PLR и HMI соединяются при помощи обычного Ethernet-кабеля, протокол связи - Modbus TCP. Схему прототипа составил следующую: Для создания схем я использовал (и рекомендую его) продукт QElectroTech - хорошее, постоянно обновляемое бесплатное ПО с огромной базой компонентов - для небольших схем отличный вариант: я на нем проект на 16 листов с перекрестными ссылками нарисовал как-то:) Дополнительно для тестового образца была закуплена периферия - различные разъёмы, клеммы, корпуса для панели и PLR, кабели для подсоединения датчиков, монтажные принадлежности (подбиралась периферия, опять же, в близлежащем магазине электротоваров и исходя из наличия). Пока компоненты закупались, я начал программировать. Т.к. с рисованием и программированием интерфейсов у меня опыта больше, чем с программированием PLC/PLR, и в программе DIAScreen для HMI есть встроенный эмулятор - принялся за интерфейс. Все экраны рисовал в фирменных “либхеровских” цветах - желтом и сером.Получилось как-то так: Главный экран имеет 2 варианта отображения - желтый на сером и серый на желтом. Дневной и ночной режимы, если можно так сказать. Выбирается в настройках.Общий вид и функционал экрана для крановщика (скриншоты из режима офлайн эмуляции панели, поэтому везде в значениях нули): Секция А: тележка стрелы.А1 - актуальное положение;А2, А3 - минимальное и максимальное значение вылета согласно смонтированному варианту стрелы;А4 - максимальное допустимое положение тележки с актуальным грузом согласно установленной грузовой характеристике.Секция В: Масса грузаВ1 - актуальный груз;В2 -  допустимая масса груза на текущем вылете согласно установленной грузовой характеристике;В3 - процент загрузки - отношение актуального груза к допустимому при текущем положении тележки (В1/В2).Секция С: Глубина опускания крюка.С1 - актуальная глубина опускания;С2, С3 - минимальная и максимальная глубины опускания крюка.Секция D: Анемометр.Отображение текущей скорости ветра в м/с и км/ч. Настраиваемая подсветка раздела (предупреждение и запрет работы - оранжевый и красный фон раздела).Секция E: дополнительная.На данный момент в ней реализовано отображение грузовой характеристики.Координаты А1, В1, С1 дублируются в виде прогресс-бара. В качестве датчика высоты используется потенциометр, аналогичный испоьзуемому для тележки - блоки концевых выключателей однотипны, есть место под установку потенциометра. В качестве датчика груза будет использован (пока ничего подходящего нет в наличии) датчик линейного положения. Рассматриваемая модель - KL 500-5K0/M-SE. Среди базовых настроек, доступных оператору, можно установить яркость экрана, дату, время, выбрать светлый либо темный режим отображения. Доступ к настройкам для сервисного персонала защищен динамическим паролем: две нижние кнопки становятся видимыми только после ввода корректного пароля. Сервисные настройки состоят из двух экранов: экран выбора модели башенного крана и экран настроек датчиков. При выборе и сохранении новой конфигурации башенного крана предыдущие настройки координат (параметры масштабирования датчиков) сбрасываются. Перед настройкой системы необходимо корректно настроить механические концевые выключатели. Настройка системы мониторинга сводится к выбору модели и смонтированной длины стрелы крана, при необходимости редактировании данных анемометра, уставок скорости ветрового предупреждения и запрета работы.  После данных настроек нужно перейти на страницу настроек датчиков. Необходимо последовательно настроить 3 координаты: длину стрелы (предельные значения выставляются автоматически исходя из выбранной конфигурации на предыдущей странице), глубину опускания (устанавливается необходимая) и массу - в качестве эталонной массы вводится масса контрольного груза, который необходим для приемочных испытаний.  В нижней строке отображаются значения датчиков в Вольтах - при настройке необходимо следить, чтобы сигнал с датчиков был в пределах 0..10В на всем диапазоне работы. Программирование PLR было увлекательным :) Программа написана на языке ST (структурированный текст) - наиболее подошедший из имеющихся для использования с циклами условий, например "IF-THEN-ELSE" или "WHILE-DO". Предварительно была произведена настройка "железа". В частности, установлен тип сигнала и размерность аналоговых входов и выходов модуля расширения. Настроена передача слов (MW) через Modbus TCP. На входы программируемого реле (см. схему ранее) подал дискретные сигналы от аварийной кнопки (“гриб”, I01), включения управления крана (I02), а также сигнал “флюгерного” положения (I03) - когда в нерабочем состоянии кран может вращаться под действием ветра в любую сторону. После изучения возможностей PLR и имеющихся стандартных функциональных блоков, для отображения актуальных координат были использованы блоки “LS” - блок масштабирования значений. Блок преобразует входной сигнал (в нашем случае сигнал в Вольтах с аналогового входа) в нужную нам величину - метры, тонны, метры в секунду. Ниже пример для преобразования сигнала от потенциометра тележечной лебедки стрелы. EN - разрешение работы блока. Работает при сигналах на дискретных входах I01 и I02 - аварийная кнопка не нажата и управление крана включено, чтобы не загружать реле расчетами во время простоя.I1 - источник сигнала для масштабирования. В данном случае это первый аналоговый вход модуля расширения. Координаты X1, X2 - значения сигнала аналогового входа для крайних положений.Координаты Y1, Y2 - соответствующие значения в метрах. QV - выход блока - переменная, в которую будет записываться масштабированное значение.В качестве значений используются слова - их можно перезаписывать и считывать из PLR при помощи HMI при настройке. Например, слову MW15 соответствует координата А1 на главном экране, MW12 и MW14 - координаты А2 и А3. Аналогичным образом идет расчет координат для глубины опускания, массы груза, скорости ветра. Еще одно использование блока LS - для формирования сигнала, пропорционального вылету стрелы, на аналоговом выходе. Данный сигнал необходим в случае установки и использования на кране системы антистолкновений при работе нескольких машин на одной стройплощадке с пересекающимися зонами работы (Anti Collision system). Для этой системы используется сигнал 0..3,3В. Данная реализация кода всегда дает сигнал 0,3В при минимальном вылете, и 3,0В при максимальном. Отдельного упоминания заслуживает грузовая характеристика. Представляет она собой кривую зависимости допустимой массы от положения тележки на стреле. Проштудировав инструкцию к EasyE4, нашел функциональный блок PM - блок кривой нагрузки. "Идеально подходящий" -, подумал я. Настройка данного блока заключается во внесении данных в таблицу. Первый столбец - вылет, второй - соответствующая масса. Запустил эмуляцию, проверил - работает. Но не тут-то было. Всего таких блоков в памяти реле можно использовать аж 4 штуки. А учитывая, что на каждую из кривых надо 2 блока (зависимость массы от вылета и обратная зависимость - вылета от массы), получается, что можно внести только 2 характеристики. А для кранов может быть и 4, и 6, и даже 10 вариантов характеристик, зависящих от смонтированной длины стрелы и запасовки. И самый большой минус - данные в табличную часть можно занести только вручную (правая часть скриншота выше - задаваемые точки). Обращался по этому поводу в официальную техподдержку -  на данный момент возможности вносить данные через протокол связи нету. А каждый раз загружать новую программу, отличающуюся только внесенными данными -  не самый лучший вариант. Тем более, если в планах расширять функционал, вносить правки во множество программ, отличающихся только значениями в таблицах - не самый разумный подход. Что ж, пришлось искать выход из положения. Фактически, кривую нагрузки можно рассматривать как последовательность прямых отрезков. Разница значений на малых радиусах между кривой и спрямленной линией небольшая, а на конце стрелы так вообще кривую нагрузки не отличить от прямой. Что дает возможность использования все того же блока LS, передавая в него ближайшие меньшую и бОльшую известные координаты кривой нагрузки. А вот данные конкретной характеристики можно загружать из панели. Для этого я использовал такой инструмент, как наборы рецептов. Именно эту функцию делает страница настроек с выбором модели крана и длины его стрелы - загружает в PLR нужный набор значений вылета стрелы и соответствующих им грузоподъемностей. Как дополнительное удобство - данные в “рецепты” можно импортировать через csv-файл, подготовленный во внешнем редакторе. Но нужно учитывать, что тот же Excel, либо Google Sheets, при открытии по умолчанию производят конвертацию форматов данных в csv, и нужно либо отключать эти конвертации, либо использовать другие редакторы. Каждый из рецептов представляет собой строку длиной 50 слов, первые 25 ипользуются для значений вылетов, остальные - для соотвествующих значений. Если в конкретной кривой нагрузки меньше 25 значений, то оставшиеся ячейки заполняются нулями. При вызове всплывающего экрана проверяется условие “значение > 0”, что является условием видимости значения на экране.  … и т.д. для первых 25 байтов данных активного рецепта (байт 26 содержит значение массы для первого байта с вылетом, 27-й для 2-го, и т.д., поэтому проверять все 50 байтов нету смысла). Таким образом, при построении характеристики видны только значащие цифры. В зависимости от комбинации сигналов на входах I01..I03 возможно отображение всплывающих экранов состояния крана. На данный момент тестовый вариант системы смонтирован на башенном кране и проходит обкатку. Уже есть несколько мыслей по добавлению функционала, которые будут реализованы с ближайшем будущем.