Автор показывает собственный шаблон для HMI-панели, разработанный для экономии тегов: всплывающие окна датчиков и двигателей, настройки, симуляция, уставки и тренды. Объясняет механизм перепривязки тегов через промежуточный блок данных и перехват приоритета записи с панели, а также делится причинами, по которым не рекомендует повторять такой подход.
- 00:51 Предыстория проекта и ограничение тегов HMI
- 04:14 Шаблон HMI: всплывающие окна датчиков и настройки
- 07:33 Симуляция и коррекция датчика
- 11:11 Технологические и аварийные уставки
- 13:18 Цветовая индикация уровня в баке по пределам
- 23:19 Расход тегов и перепривязка тегов в шаблоне
- 30:30 Привязка аварийных сообщений двигателей к слоям
- 33:45 Схема связи HMI панели с функциональным блоком
- 37:43 Конфликт чтения и записи через промежуточный блок данных
- 39:47 Перехват управления панелью через активацию объекта
- HMI
- SCADA
Кому полезно: Инженерам АСУ ТП, разрабатывающим визуализацию на HMI-панелях и интересующимся оптимизацией тегов
Описание составлено автоматически по расшифровке речи в ролике.
Расшифровка видео
0:00 Всем привет, ребята, о да, это новый видос и заложенный нос. Последнее видео выходило уже больше 3 месяцев назад, на этом канале совсем не было времени возможности. Где то сил заниматься, но вроде бы возможность появилась и силы появились. И надеюсь, ближайшее время видео будут выходить почаще, а сегодня будет такой видосик.
0:28 Я не знаю, как его назвать, наверное, время офигительных историй. Я вам хочу кое что показать кое о чем рассказать в целом, я вам покажу. Шаблон, над которым я работал, где то полгода назад я его не доделал. Такая альфа версия, не знаю вообще, буду ли я им, когда либо пользоваться.
0:51 Давайте расскажу предысторию, что к чему. В общем, занимался я 1 проектом. Вот и проект был, в принципе, уже готов был контроллер, была и шмай панель. Даже несколько и в 1 момент я понял, что я хочу доработать все это дело. Там мне не совсем нравилось, как было сделано. Просто этот проект делал до меня другой человек, потом дальше я им. Занимался и какие то моменты я начал исправлять, делать все более красиво, там и так далее. И вот в 1 прекрасный момент я гружу панель, и у меня появляется такое сообщение, с которым никогда раньше не сталкивался. Вот видите сообщение при компиляции сколько? Используется тестов для шм панели. В моем случае 97 сейчас у меня панельной симуляции есть, вот а в моем проекте я ее грузила, и у меня количество используемых тестов было больше. 800 То есть там 830 по моему, что то такое? Вот а бесик панели вот эти вот. Сименсовские они идут, у них есть ограничения на 800 тестов, то есть там, на панели комфорт. Там еще больше я не помню, сколько точно вот, а на Бесик всего 800 и в принципе там даже по моему от размера не отличается. Там хоть 400, хоть 12.00 дюймов все равно, ну.
2:21 Вот такие вот дела, и, в общем, мне пришлось как то исхищряться. Потому что я не хотел терять, что то в своей графике там что то урезать сильно, и мне пришлось полностью все перелопатить. И после того самого проекта я решил, что нужно, что то менять вот. Собственно, в чем прикол был проект, и, ну как это часто бывает, там куча всяких объектов, куча двигателей, куча задвижек, куча каких то датчиков и так далее. И на каждый датчик на панели мы используем какие то теги для этого датчика, то есть это не. Просто сигнал, да там, например, какое то значение, а это куча сигналов получается. Это если, например, берем двигатель, то это сигнал о том, что двигатель в работе. Если он с частотным преобразователем, то это скорость двигателя там может быть ток. Напряжение что угодно, в общем, на 1 объект условно. У нас может уходить там порядка 30 тегов, где то меньше, где то больше. Вот и было очень много объектов в том проекте, и просто в 1 момент закончилось место. И я решил, что то думать у нас в Теопортале.
3:42 Для этих вещей отсутствует относительная адресация, у нас тут только. Прямая адресация, то есть нужно конкретно указывать, какой тект я нужен так далее. И в общем, я занялся шаблоном, я вам сейчас его покажу, я уже очень долго болтаю. К этому подвожу, в общем, я не знаю, как это назвать слабоумие и отвага или блин охренеть крутой программист. Я не знаю, что это, в общем, я сделал вот такую вещь.
4:14 Ну, готовьтесь, смотрите здесь пока просто для примера 2 насоса. У меня ну 2 двигателя и 2 аналоговых датчика, но в моем случае датчики уровня. И смотрите, что я сделал вот у меня в 1 баке. Вот такой вот уровень есть, и это зелененьким цветом подкрашивается, если уровень выше да будет. Он станет синеньким, если он там супер высокий, красненький. В общем, в этом ничего сложного нету, весь сок происходит, когда мы нажимаем. На датчик, то есть на бак нажимаем, и у нас появляется всплывающее окошко. В этом сплавачем окошке мы можем увидеть точное значение какой. У нас уровень в баке можем даже увидеть, сколько у нас датчик выдает миллиампер. Ну, это в случае, если у нас 4 20 миллиампер датчик. Вот также видим краткие тут об ошибках сообщения. То есть, если была бы неисправность или там датчик отключен от наблюдения, включена? Симуляция и так далее тут загорится этот квадратик, но и это еще не все есть. Кнопочка настроек, блин, вы просто посмотрите, насколько я. Заморачивался кнопочки, какие они красивые с градиентом. Вот тут такой крестик, прям он такой ух, вот в общем открываем датчик вот это этой. Информации в принципе будет достаточно для оператора, для обычного пользователя, но часто случаются такие вот вещи, когда на пусконаладки.
5:52 Вот занимаемся запуском оборудования и где то, что то не работает, где то, что то не пошло. Нужно что то там настройки, какие то подшаманить и специально вот для всяких наладчиков таких вот обслуживающего персонала. Я сделал настройки для аналоговых датчиков. Тоже такое всплывающее окошко, и здесь уже куча всяких настроек здесь здесь. Например, вот клевые такие вещи мы можем увидеть значение сдатчика 6 и 5 миллиампер. В принципе, что мы здесь видим, но бывают такие случаи, когда датчик уже настроили, откалибровали. Все, что можно, но вот стоит датчик, например, в баке, и у нас в баке воды нет. То есть 0 значения и значение сдатчика токовая оно может быть, например, не 4 миля Миля Ампера, как это должно быть, а чуть ниже может быть 3, 7 миллиампера или, наоборот, там чуть больше. 4 2 Миллиампера, и мы хотим, например, вот эту штуку подправить. Если больше никаких вариантов не осталось, мы можем разрешить коррекцию и настроить смещение в миллиамперах. То есть, например, сделаю я смещение на 0, 2 миллиампера, вот мы сделали смещение и. Видим то, что у нас на самом деле значение сдатчика 62 миллиампер, но мы будем считать в программе везде. Вот это вот принимать, как истина, значение со смещением 6 и 7 и у нас, видите, сразу текущее значение изменилось. На 17 то есть, например, мы сделаем 0 5.
7:33 Вот стало 18. Процентов от стада, от 0 до 100 то есть, например, можно сделать коррекцию датчика. Это очень круто, но вот отключим она нам не нужна. Также мы, например, хотим, нам надо как то проверить, что то и хотим сделать симуляцию. Значения у нас 15:15 и 8 значения, и мы хотим посмотреть, как у нас, например, насос отработать на другом значении, включая симуляцию сразу на баке. Видим то, что он закрашивается фиолетовым цветом, таким это значит. То, что включена симуляция у нас, то есть сразу, не ошибешься, не забудешь ее отключить. Например, ставим значение, 50 подтверждаю, и все у нас значение 50 видим текущее, но это значение на симуляции, то есть программой. Будет обрабатываться, вот именно вот это значение. 50 Но мы знаем, что это симуляция посимулировали, что то проверили симуляцию. Можем отключить, все у нас восстановилось, а реальный уровень, который у нас есть.
8:34 Также у нас тут есть настройки фильтрации, можно мертвую зону Гистерезис. Там поставить можно настроить фильтрацию значения, то есть, если у нас очень быстро колеблется. Уровень скачет там вверх, вниз, вверх, вниз. Мы можем там на 2 секунды поставить фильтрацию, и у нас все это сгладится. Вот, например, какая то фигня у нас произошла. Может, такое понадобится, мы можем заморозить значение, например, таким образом, то есть значение будет изменяться. Вот я даже включу симуляцию, поставлю 25 она, а так. Да, простите, на симуляции работает, все равно изменится, но реальное значение, то есть смотрите. Сейчас 25 мы зайдем в программу, и вот это вот значение мы сейчас.
9:25 Входное поменяем, например, вот так вот и посмотрим. То есть, видите, осталось значение, 25 если я заморозку датчика значения отключу, то у меня значение изменится. На 31 а было по другое значение, сейчас скажу, какое значение было. Я уже честно сам забыл, что то в районе 15 по моему, вот 15 и 8 то есть. Можно, если у нас вдруг что то с датчиком случилось? Нам надо запомнить значение, которое сейчас есть, мы можем его заморозить, тоже меняется цвет. Все замечательно, и в каких то случаях, например, нам нужно датчик. Ну как то выключить и не знаю, чтобы он.
10:05 Не участвовал у нас в процессе, можем его просто отключить. Он закрасится черненьким, и в принципе все замечательно. Но это еще не все, ребята, это еще не все. У нас есть настройки границ, мы, мы, например, можем настроить пределы измерения датчика не 100. Да не удивляйтесь то, что здесь ничего не происходит, не поменялось. Это уже нужно настраивать конкретно для самого этого в программе менять. Вот это вот максимальное значение верхний предел измерения датчика. Это другая штука, например, давайте на симуляции, я вам покажу, если мы. Поставим там, 75%, у нас будет 75, но если мы поставим, например, уже 88, то у нас максимальное ограничится на 80. Видите текущее значение, 80 то? Есть верхний предел датчика, он просто будет обрезать вот это вот показания и его опускать. Вот на вот это вот то есть, если поставлю сейчас 90.
11:11 Так давайте еще раз на симуляции поставим, 88 то мы, соответственно, уже вот это значение получим. В каких то случаях это будет нужно и то же самое с Нижним? Пределом, например, 25 поставим, и таким образом мы не сможем опустить значения меньше. 25 То есть останется 25 вот все замечательно, все замечательно. И еще у нас есть настройки границ по пределам. То есть есть Нижний предупредительный, Нижний, технологический, верхний, технологический, верхний. Предупредительный верхний, аварийный. Эти пределы нужны для того, чтобы в программе, как то с ними взаимодействовать, например, мы хотим настроить.
11:56 Какое нибудь аварийное сообщение или отключение, например, насоса? Вот, допустим, представьте, что насос 2 качает вот в этот бак 1 вот. Он в него качает, что то качает воду, какую то и, например, у нас уровень становится 90 труда. И насос должен отключиться, чтобы в программе. Не писать вот эти цифры жестко, не привязывать их для насоса. Мы просто указываем вот этот верхний предел и предупредительный, например, или аварийный для вот этого датчика. И потом, если нам нужно, в процессе работы будет изменить отключение насоса по уровню. До, которая завязана, например, у нас на Верхний предупредительный предел. Мы его просто вот здесь поменяем, там на 70 и у нас насос будет останавливаться уже на 70 карты, а не на 90 и также у нас. Вот эта вот покраска сейчас она синенькая, с цветами я тоже сильно не. Заморачивался, это все можно поменять, это пока говорю Альфа. Версия, то есть у нас сейчас 25%, ты и 25%, у нас соответствует нижнему технологическому пределу. Вот вот этому то есть, если я, например, его возьму задеру на 40, вот то у меня смотрите, окрасилось в зеленый.
13:18 Так, ну да все правильно, то есть по пределам. Например, по этим мы можем как то окрашивать Бак. То есть у меня, если мы сделаем значение? Например, пускай будет 0. Так я где что поменял, то так так все правильно поменял. Симуляция не включена, вот у меня нижний предел должен быть, 0 вот у нас очень низкий. Уровень в баке, и он показывает красным, то есть на аварийный предел тоже. Вот такая вот штука есть, а кстати, например, включаем симуляцию вы. Может, заметили, вот здесь вот тоже загорается. Вот эта вот штучка включаем там заморозку значения, вот здесь вот загорается, отключаем от наблюдения. Вот здесь вот загорается и если будет физический обрыв датчика, если он будет не подключен, то здесь будет гореть неисправность датчиком.
14:11 Это все замечательно, но и это еще не все. У нас еще есть, можно посмотреть прямо здесь, на Эшимай панели, вы представляете графики? Опа он будет показывать по моему последние 15 секунд здесь, потому что во 1 в симуляции нету флешки не стоит в панели. То есть, если бы это была реальная? Панель с флешкой, то соответственно он бы писал прям. Тут очень много, и мы можем поменять значение, например, вот и график в реальном времени будет строиться.
14:45 Вот наблюдаем вот эту вот историю. Очень прикольно, ну соответственно можно приблизить вот это окошко. В принципе она стандартная, я его только покрасил там, как то все это причесал красивому виду. Вот такому и вот оно все работает. А вы заметили, как кнопочки красиво загораются, когда на них нажимаешь у? Я прям вообще балдит этой темы вот эти вот градиенты. Я, я просто сидел там, я обожаю вообще заниматься вот этой визуализации, подбирать цвета, вот это все.
15:21 По моему клево и еще мы можем здесь вот в окне аналогового датчика нажать на сообщение, и в этом окошке у нас откроется сообщение. Вот можем посмотреть то, что у нас нижний предупредительный предел в баке, 1 сообщение пришло. Нижний предупредительный, вот он. Да, то есть если значение мы поменяем, то на 50 то сообщение ушло. Инкамминг ауткамминг пришло, ушло, также можно квитировать здесь все. И все замечательно, и вот это, чтобы дело закрыть. Мы нажимаем просто на крестик и все закрывается не одновременно по очереди, но в принципе закрывается.
16:04 Вот и, например, мы можем так вот открыть 1 окно. Видим, что здесь бак 1 у нас выбран и нажать на 2 бак, и у нас автоматически все перепривязалось к этому окошку, и у нас сейчас отображаются. Данные 2 Бака, то есть, например, можем его так вот заморозить. Видим, здесь заморожено, переключаем сюда здесь симуляция, включенное значение другое. В общем, так можно по этим скакать.
16:34 Вот такая вот штука, и еще я сделал примерно такую же вещь для двигателей, и выглядит она вот так вот. Когда мы нажимаем на двигатель, у нас тоже появляется окно, и здесь не так много всяких параметров. Здесь есть выбор режима управления либо с места, мы запускаем насос, либо в дистанции соответственно, если у нас. Стоит в местном, как сейчас, то мы не можем никак этим насосом управлять. Этим насосом будут управлять именно с кнопочного поста, какого то по месту. Вот, но мы можем получать информацию, например, то, что двигатель у. Нас запускается или привод в работе, или если произошла какая, то авария, мы это все здесь увидим. Но мы можем режим управления сменить на дистанционный поставить, и в таком случае у нас появляются дополнительные. Параметры для управления, например, если у нас выбран дистанционный и ручной режим, это значит то, что мы в дистанции управляем насосом сами кнопками, то есть ручной режим кнопками нажимаем, то есть можем нажать пуск.
17:41 Нажимаем пуск, у нас кнопочка подсветилась, и мы здесь увидели, был запуск привода. Можете еще раз обратить внимание, то есть привод запускается, но потом он загорается желтым, что это такое, мы можем посмотреть. Нажать на дополнительно и увидеть здесь дополнительные сведения о приводе. То, что привод не включился, не включился вам, потому что я сижу на симуляции, и я подал команду на включение, и я жду обратную связь. От этого двигателя, то есть мне на вход контроллера должен прийти сигнал о том, что насос у меня запустился, то есть насос в работе. Вот состояние привода привод в работе, мне этот сигнал не пришел, поэтому я. Получил вот такое вот сообщение, я могу сбросить эту аварию и на панели у меня насос снова станет сереньким. Вот мы также можем настроить тайм аут включения, например, давайте поставлю 10 секунд, это будет. Значить то, что когда мы нажмем пуск, мы будем 10 секунд ждать, пока придет сигнал обратной связи двигателя и в течение этих 10 секунд у нас не будет управление. То есть давайте нажму пуск и увидим то, что? У нас идет запуск привода, и вот по истечении 10 секунд у нас будет ошибка. Видите такой светло зелененький цвет, когда будет в работе, он будет прям зелененьким. Вот прошло 10 секунд и пришла авария то, что. Привод не включился та же самая авария, вот есть привод, не отключился. Это в случае, когда мы нажали отключить двигатель. Вот, но он по какой то причине до сих пор остается в работе, например, если залит. Контактор на на двигатель, ну залип просто вот он не отщелкнулся обратно. Соответственно, мы команду на управление не подаем, но мы видим то, что двигатель у нас работает, вот то есть мы тоже увидим такую Тварию.
19:36 Здесь мы можем также задавать частоту прощения двигателя, и когда двигатель у нас запустится, мы обратную связь увидим, на какой скорости он работает. Ну, это в случае, если у нас есть частотный преобразователь в другом случае. Естественно, мы здесь не увидим ничего, если я поставлю режим управления. Дистанционный автоматический, то у нас вот эти кнопки управления они пропадут. Потому что я подразумеваю, что у меня в автоматическом режиме насос будет. Работать без участия оператора, то есть он, по какому то алгоритму будет сам включаться, сам будет скорость менять, сам будет отключаться и так далее и также. Может, вы заметили вот здесь, вот возле двигателя? У меня меняется буковки, вот сейчас автоматический режим. Такая зелененькая буква, а так у меня синенькая. На синем фоне буква Р и вместо у меня буква М. Соответственно, то есть тоже можно быстренько понять, не открывая настройки, в каком режиме находится у. Меня двигатель, и еще у меня есть такая настройка. Называется на блокировки и сейчас блокировки у меня запрещены, но я могу их разрешить вот то есть. Блокировки это такая штука, я в программе их себе пишу, например, если блокировки разрешены. Вот если мы включили их, да то я могу писать какие то условия. Например, если в баке низкий уровень, например или высокий или какой, то другое условие. Неважно, какое если вот у нас вот это вот условия, истина, то мы. Блокируем включение двигателя и, соответственно, если у нас будет включение двигателя заблокирована, то у меня будет гореть здесь вот кнопочка, то что. Активно блокировка включения, и пока мы не устраним какие либо вот эти, вот мешающие факторы запуска насоса, из за которых происходит блокировка у нас. Будет висеть вот здесь вот ошибка, предупреждение о том, что насос включить нельзя. Ее блокировка на нем есть, если же нам нужно вот в обход блокировки. Запустить насос мы просто блокировки отключаем и запускаем нос. Естественно, вот эти все вещи нужно паролить, чтобы вот эту штуку нельзя было включить. Простому оператору, потому что ну он там запустит без блокировок. А потом нам как программистам или кому там исполнителю вот этой работы скажут вы, что? Там наделали, вы там все испортили. У вас блокировка не отработала, поэтому вот это все дело должно, конечно, фиксироваться где то, вот и также для насосов. Есть дополнительное окошко с аварийными сообщениями, также как с датчиками, и здесь мы можем, например, видеть то, что насос не включился, не отключился.
22:30 Вот так, но он сейчас запустился на 10 секунд, потому что я после запуска нажал поменять время. Вот насос не включился, видим то, что статус пришло. Вот такие вот дела, так показать аварийное сообщение. Также можно переключаться между насосами, все автоматически перепривяжется вот так, вот и можно. Закрыть все закроется, Фух, вот в общем я вам рассказал. Рассказал вам, что я сделал, и сейчас я вам расскажу, почему я не хочу этим пользоваться.
23:05 На самом деле вещь очень крутая, выглядит просто бомбезно, но. Ой, блин, это на самом деле было не так просто все сделать! Например, я давайте по порядку, я в самом начале ролика говорил то, что у меня был проект, и в этом проекте у меня кончились теги, когда я грузил панель, и поэтому я решил разрабатывать шаблон. Вот и в общем, я его разработал. И вот у меня сейчас 2 двигателя есть и 2 аналоговых датчика, и вы видели то, что это у меня занимает 97 тестов. Вот то есть можно в принципе это поровну поделить, да на 4 то есть по 25 тегов на каждый механизм, на каждый датчик так далее, то есть на каждый. Вот объект и на самом деле это так и есть примерно то есть, когда все наши проекты, вот которые я делал раньше. Наша компания, в которой я работаю, делала у нас реально на каждый от объект, было по 25 тегов. Ну, примерно да там, где то 15, где то 30 неважно, но В.
24:15 В моем случае вот какая штука, что я что я сделал, то давайте посмотрим. У меня есть аналоговый сенсор на самом деле здесь сейчас больше тегов, но. Когда грузишь почему, то он меньше выдает, потому что не все, наверное, используются, а ну да они не все используются. У меня там с запасом маленько есть, в общем. Прикол в том, что у меня сейчас создана для аналогового датчика, 71 ТЭК используется, вот и у меня сейчас есть 2. Вот этих вот датчика, и они используют 71 тек. Но если я добавлю в свой проект 10 датчиков, вот таких вот 10 баков у меня будет посчитайте, сколько будет использоваться тестов. У меня вот вам пару секунд на. Размышление, и я думаю, что вы не угадали, потому что даже если у меня будет 10 датчиков, у меня будет все равно использоваться. 71 ТЭК можем посмотреть сколько. У меня для двигателей 52 Тега и это 2 двигателя. Если у меня будет 10 двигателей, у меня будет использоваться все равно 52 тега, да я сделал вот такую вот. Херню эту, я перепривязываю теги, просто перепривязываю. То есть вот, например, открыли окно, и у этой кнопочки есть какой то тек. Вот то есть, когда мы открываем 2. Насос, и у нас тоже вот эта кнопочка есть, по сути, все так работают. Ну, насколько я знаю, 99 она для 2 вот этой кнопки должен использоваться 2 тек для 2 насоса, но у. Меня используется 1 и тот же так вот что для 1 насоса, что для 2 используется 1 и тот же так будет 10 насосов. У меня будет использоваться 1 и тот же так бум.
26:13 Я, я что, то устал говорить, у меня дыхалки уже не хватает. Да, я сделал такую херню, я перепривязываю все теги и этот процесс. Ну как сказать, он довольно таки небыстрый. Я написал, конечно, для этого свою библиотеку назвал ее панель Визард. Вот то есть, если мне нужно будет сделать, добавить 2 3 там 3 4 5 6 там сенсор или двигатель, то я все там настрою. Это будет не сильно долго, ну где то минут 5 у меня займет вот но. Прикол в том, что мне уже на панели отрисовывать ничего не придется. У меня уже вот это все нарисовано, 1 раз придется маленечко кое что пошаманить. Но суть не в этом суть в том, что. У меня производительность панели, она просто сейчас космическая, она выросла, потому что у меня очень мало. Тегов используется, и это все так так. Подождите, вы не видели у меня здесь? Косяк, я сделал переключение между баками вот так, вот и сделал переключение между насосами. Но когда я с насоса переключаюсь на бак, они у меня накладываются, вот это я не поправил.
27:30 В общем, у меня все это довольно быстро будет работать, потому что у меня очень мало. Тегов используется, когда 800 тегов там просто панель. Она вообще не вывозит, вот, но здесь есть и обратная сторона медали, то что. Вот эти вот все обработки перепривязки я провожу на стороне контроллера, и у меня уже в принципе тут в контролере занято. Ну вот, столько процентов места, а это я еще программу даже писать не начал, вот то есть. С этим тоже не совсем прикольно, потому что.
28:08 Я теперь гружу вот этим, вот делом всем гружу контроллер. То есть у меня панель теперь отдыхает, но у меня очень сильно грузится контроллер, не то ну как очень. Сильно на самом деле это незаметно, но я просто боюсь. Когда у меня проект разрастется до космических масштабов, то мне может просто памяти контроллера не хватить.
28:31 Я еще планировал сделать задвижки, вот чтобы таким же самым образом вызывались управление задвижками, дополнительные окна всякие. Вот еще чего нибудь, но что то мне уже опустились руки, я не знаю. Просто посмотрите, как это выглядит с этим работать, это просто. Ну вы сдохните, я честно не могу в этом во всем уже разобраться. Я это полгода назад делал, и сейчас я уже честно начинаю там тупить, когда мне надо что то. Посмотреть, но, в общем, вот эта вот вся каша находится на экране, и она всегда видна. То есть абсолютно всегда, если вы не знали, а вы, наверное, я не знаю, знали или нет.
29:17 На панелях вот этих бейсик нельзя сделать всплывающие окна. В принципе нельзя стандартными средствами на панелях комфорт, есть такая настройка. Там по пап Виндовс, всплывающие окна, их можно там настраивать. Но тоже это маленечко не то не то, что я сделал.
29:38 И вот эта вот вся штука, она у меня настраивается в слоях. Работа со слоями в теопортале она просто ужасная. Это катастрофа какая то в принципе с визуализации в Теопортале. Я бы не сказал, что все прям очень супер. Ну да ладно, вот у меня есть. Вот такая вот штука, у меня есть главный слой. На котором я располагаю эти все мнемосхему, где у меня будет, и потом у меня есть, например, двигатель. Вот это вот окошко, то есть это уже сразу, вот это вот окно и окно. С дополнительными настройками потом у меня есть слой с аварийными сообщениями для двигателя. Это тоже отдельная штука, вот и в этом отдельном слое у меня будут вот.
30:30 Вот эти вот штуки накладываться друг на друга. То есть у меня сейчас 2 двигателя у меня будет 2 отдельных вот таких окна с аварийными? Сообщениями если у меня будет 10 двигателей, то у меня будет 10 вот этих окон, наложенных друг на друга. Каждому окну надо будет привязать. Соответственно, теги вот по мотор Алярам стейт я их где то создаю. Вышиная Ларпс, наверное, я их создаю. И у меня, наверное, есть классы, да вот у меня есть классы для двигателей. То есть у меня будет новый двигатель, мне нужно будет для него новый класс создать.
31:10 И потом, соответственно, дискретные вот эти вот, Аляр, мы их надо будет привязать к этому классу. Для Аляром стоит 1 Аляром, стоит 2 3 4 5 6 так далее и потом к этому окошку. Мне надо его будет скопипастить и привязать нужный нужную группу.
31:32 Вот это вот отдельный слой, потом есть слой для аналоговых датчиков. Он выглядит вот так, вот и также для него есть слой с трендами отдельный. И отдельный слой с солярмами, вот и вот эти вот все вещи абсолютно все элементы. Ты не можешь слой скрыть, ты не можешь его скрыть, то. Есть, ты можешь его скрыть вот здесь. Ну вот, я его открыл, то есть ты не можешь в программе взять и сделать слой невидимым никак в принципе. Никак у меня у каждого объекта, вот любой куда ни ткни кнопка или фон, или что, или текст, если посмотреть, у него есть анимация в изобилите.
32:16 Вот и эти анимации у меня. То есть видимость объектов у меня по определенным условиям срабатывает, когда я нажимаю на тут, например, на кнопку. Вот это вот у меня кнопка такая прозрачная, то есть то есть. Да на сам вот этот вот вот эту вот хрень бака ты не можешь сделать нажатия кнопки в ивентах. Это нельзя, ты должен использовать кнопку, чтобы можно было по клику обработать.
32:44 Замечательно, правда ли, не правда ли? Вот такая вот хрень и и, например, если настройки нажимаю, то есть я тоже тут устанавливаю. Вот у меня есть параметр Хайд. Шоу Сеттингс, то есть скрыть или показать. Вот это вот окно, вот это вот окно вызывается по этой кнопки, а вот это вот окно нижнее вызывается, вот по этой кнопки.
33:10 Ах, вот в общем такая фигня, и вы, наверное, сейчас убедились, что такой хрени. Наверное, заморачиваться не стоит, потому что, блин, вот это. Вот время разработки, которые я потратил на эту херню, это капец. Я занимался в свободное время этим, но я потратил очень. Много времени вы знаете, почему вы думали, что вот это все так просто дохера? То, что я вам рассказал, то, что вот это я рассказал, это вообще на самом деле полная фигня. Это не так сложно было все сделать. Сложность заключается в том, что давайте я вам нарисую.
33:45 Ааа, смотрите, давайте рисовать, давайте рисовать. У меня есть здесь вот Эшимай панель, вот так вот шмай панель. Давайте я ее подпишу, вот у меня есть Ишимай. И у меня есть какой то функциональный блок. В программе функциональный блок и у этого блока есть, ну, куча экземплярных блоков данных. Они у меня все разные, почему то, хотя они должны быть все идентичные. Ну да ладно, вот у меня есть функциональный блок и экземплярные блоки данных к нему. То есть это на примере у меня есть? Библиотека вот есть двигатели, например, и у этого двигателя есть 2 экземплярных блока данных и теги этих экземплярных блоков данных. Я уже привязывал вот к этому насосу и к этому насосу, вот.
34:48 И когда мы делаем обычную фигню? Обычную панель, то мы просто. Теги этого экземплярного блока данных данных перетягиваем прям на шмай панель. Вот это сюда, вот это сюда и так далее. То есть у нас все отлично работает, вот в таком случае, но. Как вы поняли, у меня идет перепривязка тестов, поэтому вот эта вот штука у меня не работает. Мне нужно тепри перепривязать, а чтобы их перепривязать, а чтобы их перепривязать. Мне нужен какой то промежуточный блок данных я ровно удалить не смогу. Короче, вы поняли?
35:31 Из меня художник такой блин, я еще перфекционист. Вот в этом плане едут обрезку, надо подрисовать. Чтобы вот эти вот данные передать сюда выше моя панель и перезаписать их. Я использую дополнительный блок данных, такой промежуточный ДБ, вот и сначала я. Привязывал вот этот блок данных к шамай панели. То есть у меня связь вот такая, вот и. И когда я нажимаю на шмай панели на, например, вот этот двигатель на 2, то у меня там происходит. Программа кое что обрабатывается, и у меня программа понимает то, что в этот блок. Данных промежуточный нужно вытянуть значение из этого экземплярного блока. Вот и они у меня вот так вот сюда перетягивается, и я получаю информацию на шмай панели, когда я нажимаю. Слови какое то значение там изменил, нажал пуск или там скорость насоса поменял, то у меня соответственно данные с панели пишутся. Вот в этот блок данных и перезаписывается в. экземплярный блок данных вот в этот, когда я нажимаю, нажимай панели на 1 насос. Вот так вот, то у меня программа это дело понимает и уже данные берет и пишет вот сюда, в этот блок данных.
36:58 Вот происходит такая вот перепривязка, и, естественно, нужно это все в программе обрабатывать, что не так уж и просто оказывается вот, но дальше. Момент более прикольный, вот в таком случае, когда у нас, ну когда мы делаем по человечески, мы просто привязали те к панели, и мы получаем. Данные вот с этого экземплярного блока на панели отображения у нас идет, мы меняем какое то значение, и она тут же отправляется вот сюда, но. Когда мы используем промежуточный блок данных, то представьте, какая у нас ситуация происходит у нас одновременно, пытается панель писать.
37:43 Пытается писать в этот блок данных вот сюда, и одновременно она пытается с него считывать, чтобы данные обновлять у себя. Вот и точно такая же ситуация происходит вот здесь. У нас вот этот блок данных пытается писать в экземплярный блок данных, данные и одновременно их отсюда считывать. И получается у нас конфликт, что у нас одновременно идет?
38:11 Вот сюда запись отсюда и одновременно у нас идет запись вот отсюда, вот сюда. Вот и в таком случае у нас получается то, что контроллер у нас имеет приоритет над панелью. И в случае, когда я хочу задать частоту двигателя. Например, у меня значение в блоке данных, вот сейчас, 25 допустим, да вот в этом блоке данных мотор у меня значение. 25 И когда я, например, пытался сделать, поменять на панели, вот это вот задание частоты. Например, я меняю его на 30 нажимаю ок и у меня обратно возвращалась сюда значения 25. То есть панель не могла перезаписать контроллер, но, как мы видим, я контроллер перезаписал. Но если я сейчас попытаюсь перезаписать вот это вот значение, например, на 45.
39:13 То я не могу его перезаписать, у меня остается значение 30. Происходит это, потому что у меня сейчас панель имеет контроль над контроллером, чтобы. Чтобы это изменить, мне нужно просто нажать какую нибудь кнопку, вот и теперь. Я могу с контроллера значение перезаписать и увидеть то, что на панели у меня значение частоты изменилось на 45. Вот как это почему это происходит и. Как я уже сказал, у меня контроллер контроллер. Вот в этом случае он имел приоритет, то есть он перезаписывал все данные на шмай панели. Вот и мне как то надо было этот контроль перехватывать панелью.
40:04 И оказалось то, что для панели есть вот такая вот интересная функция. Когда мы нажимаем, на какой то объект, так давайте откроем вот частота. Например, когда мы его на него нажимаем, у нас есть такое вот свойство активейт и деактивейт, то есть на любой, когда нажали на кнопку неважно. Куда то мы нажимаем, мы объект активируем, пока у нас курсор стоит здесь и соответственно, когда у нас мы активировали вот это вот окно я. Устанавливаю определенный триггер и по этому триггеру. Я забираю контроль у контроллера, то то есть я просто не даю контроллеру записывать. Данные в блок данных вот в этот промежуточный, вот и то есть. Я активировал объект, когда нажала на него, так вот я его активировал, получил. Контроль над контроллером я пишу данные, перезаписал, и после этого я нажимаю в какое нибудь другое место. Вот сюда и тем самым я активировал. Вот эту кнопку и деактивировал вот эту кнопку. И то есть по деактивации, вот этот триггер я его сбрасываю, присев то есть, когда нажимаю. Я устанавливаю бита, когда ну нажимаю в другое место. У меня кнопка деактивируется, объект и у меня бит сбрасывается, то есть вот такими.
41:32 Штуками я забираю у контролера. Приоритет, кто будет писать в промежуточный блок данных, а промежуточный блок данных? Кстати, это, наверное, я даже не знаю, где он. Я уже забыл, я уже забыл, где я его создал. Вот он промежуточный блок данных, да и это рассчитано все дело на 10 насосов. На двигателей неважно и с датчиками тоже. Самое это рассчитано пока что только на 10. Датчиков, потому что нам нужно будет теги для показа трендов для показа аварийных сообщений. То есть, если мне нужно будет больше 10 датчиков, мне все? Это дело придется здесь расширить, так ребят. Знаете, на самом деле я вам еще не все показал, что хотел, но ролик уже и так сильно длинный получился.
42:33 И, наверное, о других вещах я как нибудь в другом ролике. Может, расскажу, что тут еще было использовано вот в этой визуализации? Какие, блин, на какие ухищрения приходилось? Идти вообще мораль этого видео, наверное, в том, что вы же программисты можно сделать вообще все, что вы хотите, даже если не позволяет функционал программного. Обеспечения и можно заморочиться на самом деле и похлеще, чем я вот это сделал. Считаю просто скада, блин, на обычной панели, которая просто не предусмотрена для. Этого и еще, наверное, такая главная причина, почему я просто не хочу больше этим заниматься. Я просто работал довольно долго в другом программном обеспечении. От ван дер Вейр может быть слышали интач для системной платформы, ну и сама системная платформа оркестра и де. И вот такие вот вещи в ней делаются, ну, в 2 клика. Мыши просто это делается очень быстро, очень легко и работать реально приятно. Не надо заморачиваться, вот совсем вот этим. Вот и когда я там поработал, я, конечно. Понял, что вот это вот делать я больше точно не хочу. Хотя, возможно, стоит это допинать, добить, привести к какому то реально шаблону, где это можно будет очень просто. Делать, но опять же вот ситуация, когда у нас в проекте будет другая панель, больше или меньше придется всю эту графику перерисовывать, адаптировать и в общем.
44:11 Заморочек очень много, но. Блин, выглядит оно, конечно, бомбезно, вот это бы хотелось все использовать. Вот и прикол то в том, что нам не нужно больше городить дополнительных окон, не нужно создавать дополнительное окно управления, например, ну как обычно это. Делается у нас тут мнемосхема, какая то и нам нужно включить какой то насос. Нужно перейти на окно управления, потом найти там этот насос в списке, нажать кнопочку. Включить, вернуться обратно и смотреть включился он или не включился. А тут 1 1 окно, 1 мнемосхема, и ты просто кликаешь, куда тебе нужно, и управляешь, блин, это же! Вообще прекрасно звучит очень заманчиво, но вот я не знаю, что что дальше ждет от этого дела, поэтому я решил вам это показать, рассказать, поделиться может быть.
45:06 Что то я не знаю, что вы из этого вынесете честно просто потренироваться. Ну, поделать такое, что то прокачать свой скилл. Да, возможно, стоит таким позаниматься, но я не знаю. Может быть, я вас вдохновил, и вы захотите что то подобное сделать и найдете. Более оптимальные способы не так, как я это сделал, но я пока что их не нашел. И вот и думаю, на этом я буду ролик сегодня заканчивать всем огромное спасибо, кто досмотрел до конца. Вы просто вы просто офигенно, я даже не знаю слов, каких подобрать. Спасибо ребят всем, кто оставался на этом канале, кто ждал новые ролики, писал комментарии. Буду рад, кстати, очень вашим комментариям, если вы напишите, что вас конкретно интересует. Может быть, я сниму об этом ролик, вот у меня уже есть, конечно. Задумки на будущее и, думаю, со следующей недели я начну что нибудь снимать, если меня работы не завалят. Ну а на этом, наверное, все как то так всем еще раз спасибо за просмотр. Не забывайте жмакать лайкосики подписываться на канал всем пока пока.
Расшифровка сделана автоматически (Yandex SpeechKit) и может содержать ошибки в терминах.