/* ========================================================================== ARTICLE PAGE - Critical CSS (above-the-fold styles) MUST match FINAL values from articles.css + Bootstrap to prevent CLS ========================================================================== */ /* Bootstrap utilities used in article template above the fold */ .bg-white { background-color: #fff !important; } .rounded-lg { border-radius: 0.5rem !important; } .shadow-sm { box-shadow: 0 .125rem .25rem rgba(0,0,0,.075) !important; } .p-4 { padding: 1.5rem !important; } .mb-3 { margin-bottom: 1rem !important; } .mb-4 { margin-bottom: 1.5rem !important; } .mb-5 { margin-bottom: 3rem !important; } .mb-2 { margin-bottom: .5rem !important; } .mt-2 { margin-top: .5rem !important; } .pt-4 { padding-top: 1.5rem !important; } .fw-bold { font-weight: 700 !important; } .d-flex { display: flex !important; } .d-inline-flex { display: inline-flex !important; } .d-inline-block { display: inline-block !important; } .d-block { display: block !important; } .align-items-center { align-items: center !important; } .gap-4 { gap: 1.5rem !important; } .flex-wrap { flex-wrap: wrap !important; } .justify-content-end { justify-content: flex-end !important; } .border-top { border-top: 1px solid #dee2e6 !important; } .me-2 { margin-right: .5rem !important; } .me-3 { margin-right: 1rem !important; } .ms-2 { margin-left: .5rem !important; } .px-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .py-2 { padding-top: .5rem !important; padding-bottom: .5rem !important; } .py-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .text-decoration-none { text-decoration: none !important; } .text-body { color: #212529 !important; } .text-dark { color: #212529 !important; } .text-center { text-align: center !important; } .text-primary { color: #0d6efd !important; } .rounded-pill { border-radius: 50rem !important; } .border-0 { border: 0 !important; } .justify-content-center { justify-content: center !important; } /* Bootstrap button base (used in back button + CTA) */ .btn { display: inline-block; font-weight: 400; line-height: 1.5; text-align: center; text-decoration: none; vertical-align: middle; cursor: pointer; user-select: none; border: 1px solid transparent; padding: .375rem .75rem; font-size: 1rem; border-radius: .375rem; transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out; } .btn-outline-secondary { color: #6c757d; border-color: #6c757d; background-color: transparent; } .btn-outline-primary { color: #0d6efd; border-color: #0d6efd; background-color: transparent; } /* Bootstrap list-group (related articles) */ .list-group { display: flex; flex-direction: column; padding-left: 0; margin-bottom: 0; border-radius: .375rem; } .list-group-item { position: relative; display: block; padding: .5rem 1rem; color: #212529; text-decoration: none; background-color: #fff; border: 1px solid rgba(0,0,0,.125); } .list-group-item-action { width: 100%; text-align: inherit; } .list-group-item:first-child { border-top-left-radius: inherit; border-top-right-radius: inherit; } .list-group-item:last-child { border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; } .list-group-item + .list-group-item { border-top-width: 0; } /* ===== ARTICLE CONTENT — FINAL values matching articles.css ===== */ /* These MUST match async articles.css exactly to prevent layout shifts */ .article-content { font-family: Arial, sans-serif !important; line-height: 1.6 !important; max-width: 1200px !important; margin: 0 auto !important; font-size: 1rem; color: #2c3e50; } .article-content img { max-width: 100%; height: auto; border-radius: 8px; margin: auto; display: block; } /* Paragraphs — FINAL values from articles.css (18px, text-indent, justify) */ .article-content p, .article-content * p { font-size: 18px !important; text-indent: 50px !important; display: block !important; margin-block-start: 1em !important; margin-block-end: 1em !important; margin-inline-start: 0 !important; margin-inline-end: 0 !important; unicode-bidi: isolate !important; text-align: justify !important; line-height: 1.5em !important; } /* Headings — FINAL values from articles.css */ .article-content h1, .article-content * h1 { font-size: 32px !important; } .article-content h2, .article-content * h2 { font-size: 22px !important; font-weight: 700 !important; line-height: 1.2 !important; } .article-content h3, .article-content * h3 { font-size: 24px !important; } .article-content h4, .article-content * h4 { font-size: 20px !important; } /* Article intro image — FINAL values */ /* Explicit width (not just max-width): the float would otherwise shrink-to-fit its child, which is itself width:100% of the float — circular, so the box stays 0x0 until the image decodes and the whole article body reflows around the new float. */ .article-intro-img { float: left; margin: 0 1.25rem 1rem 0; width: 320px; max-width: 320px; } .article-intro-img img { width: 100%; height: auto; border-radius: 8px; object-fit: cover; } /* Article heading CLS prevention */ h2 { color: #1e293b !important; } article h1, .bg-white h1 { font-size: 32px !important; font-weight: 700 !important; line-height: 1.25 !important; margin-bottom: 0.5rem !important; } .related-articles h2 { font-size: 26px !important; font-weight: 700 !important; line-height: 1.25 !important; } /* Article author container + meta */ .article-author { display: flex; align-items: center; } .article-author__meta { display: flex; flex-direction: column; } .article-author__avatar { width: 44px; height: 44px; border-radius: 50%; object-fit: cover; border: 2px solid #f1f3f5; background: #f8f9fa; } .article-author__label { font-size: 0.8rem; line-height: 1.2; color: #6c757d; } .article-author__name { font-size: 0.98rem; line-height: 1.25; color: #212529; } .article-author__divider { border-left: 1px solid #dee2e6; height: 36px; align-self: center; flex-shrink: 0; } /* Article CTA banner — SOLE geometry definition for this component. The block in shop/article/one.blade.php must only add non-layout properties (box-shadow, :hover/:active) on top of these values. */ .article-cta { background-color: #e6f6eb; border: 1px solid #00a443; border-radius: 12px; padding: 2rem; text-align: center; margin-bottom: 2rem; } .article-cta__icon { font-size: 2rem; margin-bottom: 0.5rem; } .article-cta__title { font-size: 1.25rem !important; font-weight: 700 !important; color: #071d39; margin-bottom: 0.5rem; } .article-cta__text { color: #64748b; font-size: 0.95rem; margin-bottom: 1.25rem; } .article-cta__buttons { display: flex; justify-content: center; gap: 0.75rem; flex-wrap: wrap; } .article-cta__btn { display: inline-flex; align-items: center; gap: 0.5rem; padding: 10px 24px; font-weight: 600; font-size: 0.95rem; text-decoration: none; } .article-cta__btn--primary { background: #00a443; color: #fff; border-radius: 12px; } .article-cta__btn--secondary { background: #fff; color: #00a443; border: 1px solid #00a443; border-radius: 8px; } /* Article tags */ .article-tags { display: flex; flex-wrap: wrap; gap: 4px; } .card-tag-chip { font-size: 0.85rem; padding: 4px 12px; border-radius: 999px; background: #eef2ff; color: #3b5bdb; text-decoration: none; font-weight: 500; } /* FAQ accordion — prevent shifts when FAQ component renders */ .article-faq-block__title { font-size: 26px !important; font-weight: 700 !important; line-height: 1.2 !important; color: #1f2d3d !important; margin: 0 0 1rem !important; } .article-faq-block h2 { font-size: 24px !important; color: #c2cfe0 !important; margin: 19.92px 0 0 !important; } .article-faq-block__item { border: 1px solid #e8edf3; border-radius: 10px; margin-bottom: 10px; overflow: hidden; } .article-faq-block__question { width: 100%; border: 0; background: #f8fafc; padding: 14px 16px; display: flex; align-items: center; justify-content: space-between; text-align: left; font-weight: 600; color: #2c3e50; cursor: pointer; } .article-faq-block__answer { padding: 12px 16px 14px; background: #fff; color: #34495e; border-top: 1px solid #eef2f7; } .article-faq-block__answer p { margin-bottom: 0; } /* Breadcrumb — prevent shift on article page */ .breadcrumb { padding: 0.75rem 1rem; background-color: #f8f9fa; border-radius: 0.5rem; display: flex; flex-wrap: wrap; list-style: none; margin-bottom: 1rem; } /* Utility classes used in buttons */ .custom-btn, .custom-btn-secondary { display: inline-flex; align-items: center; } .hover-shadow-sm { transition: all 0.3s ease; } .transition { transition: all 0.3s ease; } /* Related articles */ .related-articles { margin-bottom: 2rem; } /* Lists — FINAL values from articles.css */ .article-content ul, .article-content * ul { list-style-type: disc !important; } /* padding-left must match bootstrap.min.css reboot `ol,ul{padding-left:2rem}`. The global reset in critical-css-screen.blade.php zeroes it, so article lists rendered flush left and then indented 32px when Bootstrap landed. Scoped to .article-content so nav/menu lists keep the reset. */ .article-content ul, .article-content ol, .article-content * ul, .article-content * ol { padding-left: 2rem; } /* Mobile responsive — FINAL values from articles.css mobile overrides */ @media (max-width: 767px) { article.p-4 { padding: 12px !important; } .article-intro-img { float: none; width: auto; max-width: 100%; margin: 0 0 1rem 0; } .mainContent { max-width: 100%; padding: 0 8px; } .article-content p, .article-content * p { text-align: left !important; text-indent: 0 !important; font-size: 16px !important; line-height: 1.7em !important; margin-block-start: 0.7em !important; margin-block-end: 0.7em !important; } .article-content h1, .article-content * h1 { font-size: 1.3em !important; margin-bottom: 0.5rem !important; } .article-content h2, .article-content * h2 { font-size: 22px !important; margin-top: 1.8em !important; margin-bottom: 0.6em !important; padding-bottom: 0.3em !important; border-bottom: 2px solid #e9ecef !important; } .article-content h3, .article-content * h3 { font-size: 1.1em !important; margin-top: 1.4em !important; margin-bottom: 0.5em !important; line-height: 1.4 !important; } .article-content h4, .article-content * h4 { font-size: 1em !important; } .article-content ul, .article-content * ul, .article-content ol, .article-content * ol { padding-left: 1.2em !important; margin: 0.6em 0 !important; } .article-content ul li, .article-content * ul li, .article-content ol li, .article-content * ol li { font-size: 16px !important; line-height: 1.6em !important; margin-bottom: 0.3em !important; text-indent: 0 !important; } } Перейти к содержимому

Автоматизация музыкального фонтана в городе Киев

Автоматизация музыкального фонтана в городе Киев

Автоматизация музыкального фонтана: синхронизация воды, света и музыки на промышленном ПЛК и частотных преобразователях

Автоматизация музыкального фонтана в городе Киев

Музыкальный фонтан это шоу, где водяные струи, RGB-подсветка и музыка должны идти синхронно с точностью до доли секунды. За зрелищем стоит обычная промышленная автоматика: контроллер ведёт сценарий, частотные преобразователи регулируют давление насосов, а DMX управляет светом. Ниже описываем архитектуру такой системы функционально, без привязки к конкретной модели контроллера, потому что выбор зависит от масштаба объекта, а не от «бюджета».

Задача

Музыкальный фонтан в Киеве как объект ставит несколько технических задач. Высота и форма струй должны меняться плавно и точно под музыку, поэтому насосы нельзя включать в режиме «включено–выключено», ведь нужно регулирование давления в реальном времени. Свет должен реагировать на ритм и темп, что требует синхронизации DMX со сценарием. Всё это работает на улице и круглосуточно, поэтому критичны защита оборудования, аварийное оповещение и безопасность для посетителей.

Решение

Архитектуру строим так. Сценарием шоу управляет промышленный программируемый логический контроллер (ПЛК): он синхронизирует водяные эффекты, свет и музыку по заданным сценам и расписанию. Давление водяных насосов регулируют частотные преобразователи (VFD): плавное изменение оборотов даёт точную высоту струй и убирает гидроудары. RGB-подсветкой управляют DMX-контроллеры, синхронизированные со сценарием по ритму и темпу. Аудио и мультимедиа воспроизводит медиасервер или ПК, сведённый в единый таймлайн с водой и светом.

Оператор работает с системой через панель HMI и SCADA: выбор сцен, настройка эффектов в реальном времени, расписание шоу, аварийное оповещение. Модули ввода/вывода (I/O) управляют насосами, клапанами и подсветкой. Конкретную модель контроллера и преобразователей подбираем под количество струй, насосов и каналов света, потому что это инженерное решение под масштаб, а не вопрос бюджета.

Что здесь наша зона поставки, а что интеграция, чтобы не было путаницы. Силовую часть фонтана мы поставляем из своего каталога: частотные преобразователи для насосов (серия Veichi AC310), промышленный ПЛК и модули I/O и аксессуары автоматики. Это готовый продуктовый вход в проект: насосная группа фонтана на регулируемом приводе с логикой на ПЛК. Шоу-часть (DMX-контроллеры RGB-подсветки, медиасервер для аудио, SCADA-сценарии) это интеграция: мы сводим её в единый таймлайн с силовой частью. То есть даже если свет и звук делает другой подрядчик, привод насосов и управление мы можем взять на себя как отдельный пакет.

Планируете фонтан или другую зрелищную водяную систему? Посчитаем насосную группу на частотных преобразователях и ПЛК под ваш проект. Оставить заявку.

Использованное оборудование

Каталог приводов собран в разделе частотные преобразователи, номенклатура Veichi на странице бренда.

Результат

Это инфраструктурный объект, поэтому главный результат измеряется не процентом экономии, а качеством и надёжностью шоу: водяные струи точно следуют за музыкой, свет синхронен с ритмом, сцены воспроизводятся повторяемо по расписанию. По нашей практике регулирование насосов частотными преобразователями вместо дросселирования, кроме точности, типично снижает потребление и нагрузку на насосы, потому что для центробежных машин мощность пропорциональна кубу скорости (P ∝ n³). Защита оборудования и аварийное оповещение обеспечивают бесперебойную и безопасную работу на улице. Конкретные характеристики системы определяются проектом под масштаб фонтана.

Функциональные возможности

  • Синхронизация водяных струй с музыкальным сопровождением.
  • Динамическое управление RGB-подсветкой по ритму и темпу (DMX).
  • Настройка сценических эффектов в реальном времени через HMI.
  • Автоматическое расписание шоу (по времени, в праздники и т.п.).
  • Удалённый мониторинг и управление.
  • Аварийное оповещение и защита оборудования.

Частые вопросы

Какой контроллер нужен для музыкального фонтана?
Промышленный ПЛК, синхронизирующий воду, свет и музыку. Конкретную модель и производительность подбираем под количество струй, насосов и каналов света, потому что это инженерное решение под масштаб объекта, а не выбор «по бюджету».

Зачем частотные преобразователи, если можно включать насосы напрямую?
Прямое включение даёт только два состояния, «включено» и «выключено», тогда как шоу требует плавного изменения высоты струй. Частотный преобразователь регулирует обороты насоса в реальном времени, убирает гидроудары и точно держит высоту струи по сценарию.

Как синхронизируются вода, свет и музыка?
Все каналы сведены в единый таймлайн: ПЛК ведёт сценарий, частотные преобразователи управляют насосами, DMX управляет подсветкой, медиасервер воспроизводит звук. Сцены воспроизводятся повторяемо по расписанию.

Безопасна ли такая система на улице?
Да, при правильном проектировании: защита оборудования, аварийные цепи, соответствующий класс защиты компонентов и безопасность для посетителей закладываются в проект с самого начала.

Можно ли масштабировать фонтан позже?
Да, контроллер и I/O закладываются с запасом, поэтому добавление струй, насосов или каналов света возможно без полной переработки системы.

Сколько стоит силовая часть фонтана?
Стоимость зависит от количества и мощности насосов и объёма автоматики, поэтому единой цены нет. Ориентировочные цены на приводы насосов смотрите в разделе частотные преобразователи для насосов и серии Veichi AC310; цены там динамические и актуальные. Силовую группу (привод + ПЛК + I/O) можем посчитать отдельным пакетом после описания проекта фонтана.

Похожие решения

Планируете музыкальный фонтан или другую зрелищную систему? Опишите объект, и мы подберём контроллер, частотные преобразователи и автоматику под масштаб. Связаться с нами или посмотреть услуги по автоматизации.

Нужен частотный преобразователь для вашего двигателя?

Подберём оптимальное решение по мощности, напряжению и типу нагрузки

Смотреть каталог Консультация