Коттедж в Папушево: Щит Котельной на СПК110 (ОВЕН), часть 2: Сборка щита и программа для СПК110

Число просмотров: 5 422 

ВНИМАНИЕ! Мне не хотелось бы, чтобы этот пост был опубликован на других ресурсах (репост). Я хочу сохранить за собой право на его уникальность. Публикация поста возможна на определённых условиях.

Щит для котельной на базе СПК110 (готов к монтажу)

Щит для котельной на базе СПК110 (готов к монтажу)

Моя история про щит Котельной на ОВЕН СПК110 в Папушево продолжается!

В прошлой, первой части, я занимался металлобработкой — надо было врезать СПК110 в дверь щита, врезать ОВЕНские мониторы сети КМС-Ф1 в пластрон щита и сделать шлейфы проводов с разъёмами для того, чтобы дверь щита и пластрон можно было снимать.

Напоминаю, что хотя я употребляю в посте название ПЛК — «СПК110», на самом деле у ОВЕНа этот СПК давным-давно обновлён, и правильная модель СПК — это СПК110[М02].

Обычно так не делают, потому что в промавтоматике шкафы внутри монтируются без пластронов — на голую монтажную панель херачится перфокороб, а жгут проводов на дверь не отключается. Но у меня решение — инновационное: я не хочу, чтобы щит был безликим и грустным. Я заморочился и сделал щит красивым и внутри: ничего не должно напоминать о промке, всё должно быть закрыто и подписано так же, как и во всех остальных моих щитах. Дверь щита и пластроны надо снимать на время монтажа щита: пока он будет вешаться на стену и в него будут заводиться кабели. Ну не сверлить же прям на щит с СПК на двери?!

В этой второй части мы наконец-то оставим в покое металл и суровый инструмент и займёмся электрикой! Надо будет собрать щит, запрогать СПК110 и вкусить все прелести сенсорных экранов, WEB-интерфейса и автоматики!

1. Описалово идей по автоматике щита. Как чего будет работать?

Сейчас я расскажу вам подробнее о том, из чего состоит щит, что и как в нём действует технически.

Щит будет питаться от главного щита дома так же, как обычные щиты. В данном случае на этот щит у нас приходит два ввода: сеть и UPS. От сети питаются линии розеток, а от UPS — все линии котельной и её потребителей. Оба ввода в щите отключаются рубильниками, а для контроля напряжения и тока стоят мониторы сети от ОВЕН — КМС-Ф1. По ModBus информация с этих мониторов передаётся в СПК и дальше, если надо — в главный щит.

Основная задумка щита — автономность от ПЛК. Я уже нескольким людям это объяснял, так как почти каждый когда слышит «Щит автоматики котельной на ПЛК» — думает о том, что ПЛК рулит самим процессом работы котельной — управляет горелками котлов, циркуляционными насосами… хм! Возможно это так на производстве. Но здесь у нас обычный частный жилой дом, хоть и большой. Поэтому котлы и их логика работы являются тут автономной системой вида «включил в розетку и забыл».

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

Мне тут ребята подсказали про сигнальные контакты на дифы: надо было сделать через них мониторинг работы дифавтоматов на котёл. Гммм.. с одной стороны — да, надо. НО! Важнее всего нам именно котельная, а она работает по такой схеме: дифавтомат питает котёл, а котёл управляет насосами через контакторы в щите. В щит поступают сигналы (и их ПЛК уже отслеживает) об аварии котлов, работе их горелок, работе конкретных циркуляционных насосов. Поэтому вполне себе можно формировать сигнал «Пиздец котлу», если горелки и насосы не включались несколько часов. А вот в будущих разработках я уже думаю о том, чтобы закладывать в IO ПЛК все такие вот важные сигналы.

Все нагрузки в щите управляются через ПЛК при помощи реле и контакторов с ручным управлением. Реле — серии CR-M (с флажком ручного управления), контакторы — серии EN. ПЛК не просто управляет ими, а ещё и имеет от них обратную связь: один из контактов реле или контакторов заведён обратно в ПЛК как вход. Поэтому ПЛК может отслеживать ситуации вида «Должно включиться — не включилось» или «Выключено, а в реале включено» и реагировать на них. Например, одна из задачек по ТЗ — определить то, что пока ПЛК был выключен — человек пришёл к щиту и какой-то контактор включил вручную. И включить его программно! В конце поста будет видео, где я покажу вам то, как это сделано!

Всем этим рулит ОВЕН СПК110 — сенсорный ПЛК (в тексте поста я буду называть его «ПЛК»). Он работает (программируется) на CodeSys v3 и имеет сенсорный экран, возможность строить графики, вводить и выводить какие-нить данные. Ещё он умеет делать WEB-визуализации. То есть на него можно зайти прям из инета и пощёлкать щитом (несколько френдов застали этот момент, пока щит стоял на тестировании — и пощёлкали).

Вся периферия управляется через ОВЕНские модули ввода-вывода Mx110 (они мне нравятся тем, что не требуют Ethernet и ещё и по глубине более компактные, чем Mx210). Тут используется один модуль универсальных аналоговых входов (МВ110-224.8А), два модуля дискретных входов (МВ110-224.16ДН) и один модуль дискретных выходов (МУ110-224.16Р).

На всякий случай напомню вам ссылки на пост про разработку щитов на ПЛК и пост про большой щит на ПЛК для квартиры в Митино, в которых я расписывал особенности проектирования и сборки щитов: где чего надо учитывать в плане кросс-модулей, дополнительных резисторов нагрузки, скорости работы RS-485 и времени опроса данных по ModBus.

У СПК110 есть три интерфейса RS-485. Первый работает на скорости 115200 и отдан для внутренностей щита: на нём сидят модули ввода-вывода и КМСы. Второй и третий пока не используются. Они выведены на клеммы и выведены в щитовую дома. В будущем они будут использоваться (скорее всего, один из них) для связи с главным щитом дома, который по медленной скорости будет получать данные из этого щита Котельной.

В нашей системе мы меряем температуры (улица, внутри котельной, подача с котла и прочие) и давление в гидрострелке. Для этого я использовал датчики от ОВЕН. Для температуры — ДТС014-50М.B.3.20/0,2 (-50…+150 градусов), для давления — ПД100-ДИ-1,0-371-1,0 с резьбой под 1/2″. В третьей части поста вы увидите эти датчики вживую и я покажу то, как я их подключал в систему. Пока я попросил бы вас не удивляться тому, что датчики выбраны самые простые: так как мы НЕ управляем техпроцессами, а просто мониторим происходящее, то сразу было решено отказаться от сложных способв монтажа датчиков температур внутрь труб: мы решили просто прикрепить их на трубы хомутами. Ещё для контроля газовой обстановки над котлами стоит датчик метана от ОВЕНа: ДЗ-1-СН4. Его сигнал передаётся в щит, и СПК знает про наличие газа.

В прошлом посте я закончил всё с механикой — вырезать пластрон, дверь, собрал раму щита с DIN-рейками и расставил модульку (но момента с модулькой не сфоткал). А сейчас пререходим к электрике! =)

2. Запускаем железо!

Что мы делаем в щитах с автоматикой? Конечно же, первым делом мы вообще забываем о том, что у нас есть какая-то автоматика — и… и собираем обычный силовой щит! Вот это я и сделал: подал питание с вводных рубильников на кросс-модули, пропустив фазные провода через трансформаторы тока для КМСов. Потом через кросс-модуль раздал это питание на автоматы и дифавтоматы нагрузок.

И следующей задачей, которую можно сделать без ПЛК/СПК в два часа ночи, когда рабочий угар никак не хочет заканчиваться — это проверить работу КМСов. Эти шуктовины для меня были новыми, и я боялся того, что я как-то не так их подключу — ведь в инструкции ничего не было сказано о том, может ли КМС мерить тот же ввод, от которого он сам и питается.

Собрал схему по инструкции сначала на соплях (вот тут пригодились заранее сделанные шлейфы: на ответных разъёмах можно накрутить чего угодно, потестить, разобрать обратно, а шлейф к СПК не трогать), и стал проверять.

Включаю питание щита — КМСы слегка мигнули и вырубились. «Всё, пиздец», — думал я, — «Доигрался! Спалил их нахер!». Но ни фига подобного! Вы же помните, что я стараюсь все измерительные приборы и разные цепи управления защищать клеммами с предохранителями? Ну так вот тут предохранители сгорели! В двух КМСах!

Я давай думать… вспомнил канал Валерия Сиренко на YouTube и его ролики про поиск КЗ в лифтах (да вот хоть этот, и ещё мне вот этот нравится очень): «Ставим ещё один предохранитель, включаем… ТРИСЬ!» Так вот снова — трись, и не работает ни фига! Думаю-думаю… и решаю поставить предохранитель не на 0,25А (обычно его хватает для работы моих модульных контакторов, цепей импульсных реле), а на 1А.

И шо вы думаете? ЗАПУСТИЛОСЬ! Это были тоже стартовые токи, как у светодиодных ламп! Такие вот приколы бывают, совершенно неожиданные. А я-то думал, что схему не так собрал!

Идём дальше. Работают, значится, мои КМСы… лезу я в менюшки и настраиваю коэффициенты трансформации для напржений и токов. И… и напряжение они меряют, и очень даже прекрасно. А чего-то в режиме тока «LLLL»? Это ещё чего такое?..

Монитор сети ОВЕН КМС-Ф1 отображает слишким низкий ток

Монитор сети ОВЕН КМС-Ф1 отображает слишким низкий ток

Лезу в инструкцию, шерстю её — тишина, ничего не сказано. Думаю. Потом ещё раз думаю. Вспоминаю, что у трансформаторов тока есть полярность. Пробую переключать. А там же ж в схеме у трансформатора тока и ввода напряжения один провод общий… Туплю под ночь и получаю уже настоящий коротун! Снова минус предохранитель. Хорошо, что один, а не сразу два! =)) Ни фига не получается, возвращаю всё как было и пишу в ТехПоддержку ОВЕНу в полной уверенности, что получу ответ типа «Ты дурак, ты забыл настроить отключение тревог, какой-нить параметр связи и ещё чего-нибудь, и поэтому он у тебя валится в ошибку».

Ответ приходит совсем другой: «Эээ… так всё просто! LLLL КМС показывает, если измеряемый параметр слишком маленький и его нельзя нормально отобразить. Дайте на КМС нагрузку побольше!». Гммм.. а шо ж в инструкции не написали-то про LLLL? Я ж весь изволновался!

Гммм.. а какую нагрузку им дать? У меня чего-то под рукой ничего нет… Генератор тумана завален щитами… Лампочек — небось мало будет… Во! ЧАЙНИК! Берём и херачим его через мой тестовый автомат на 6А (и сам щит ещё проводом на 0,75 квадратов запитан от розетки)!

Дал нагрузку чайником - ток стал отображаться! =)

Дал нагрузку чайником - ток стал отображаться! =)

Урррра! Работает! Показывает ток (и напряжение, конечно же, просело из-за мелкого сечения проводов).

Напряжение упало, ток появился =)

Напряжение упало, ток появился =)

Вот и весь секрет этих КМСов! Они в этом щите вообще постоянная притча во языцех — то монтажные крепления выпадали, то прикол со слишком низкими значениями… а потом ещё один прикол вылез в тот момент, когда я по ModBus с ними общаться начал… ойой!! Хоть пост пиши про «Особенности использования КМСов» (на самом деле я всё тут расскажу и в посте про ModBus) =)

Дальше работа пошла легче. Как будто эти КМСы были препятствием, которое надо было преодолеть для левел апа =)

Силовую часть щита я к тому времени уже собрал. Фиг ли там собирать — с дифавтоматов на контакторы, с контакторов — на клеммы. Основное внимание тут у нас сосредоточено на ОВЕНе и СПК с модулями ввода-вывода. И первое, что мы делаем — это подаём питание на них, а потом, подключаясь к каждому по одиночке, настраиваем параметры связи и сами каналы (типы датчиков, безопасные значения и прочие подобные параметры; отсылаю вас к первым постам про ОВЕН).

Настройка модулей ввода-вывода ОВЕН (адреса ModBus, параметры каналов)

Настройка модулей ввода-вывода ОВЕН (адреса ModBus, параметры каналов)

По моему ИМХО, первичную настройку модулей (хотя бы адреса и параметры связи) удобно делать до того момента, когда в щите уже проложен RS-485, так как у некоторых модулей может быть одинаковый базовый адрес, и для того чтобы настроить связь и адресацию надо будет этот RS-485 от них же и отключать.

А когда адреса модулей уже настроены — то по общей шине RS-485 можно коннектиться к каждому отдельному модулю и настраивать другие параметры (входов/выходов) без проблем. Для удобства программирования и отладки я придумал, распечатал и наклеил на все устройства RS-485 наклеечки с параметрами связи и адресами.

Пока я этим занимался, мне пришла мысль о том, что хорошо бы пробежаться сразу по всем настройкам всего того, что мы будем использовать внутри щита. И СПК110 в том числе. И ещё хорошо бы проверить, чего это там такое пишут в инструкции СПК про то, что его стартовые токи могут быть очень высокими.

В общем, опять я переволновался, притащил СПК дверь с СПК и подрубил к ней свои шлейфы (заодно надо было и правильность работы шлейфов проверить). Ни фига! Запустился СПК как миленький и никакие блоки питания мне своими стартовыми токами в защиту не увёл (тут стоит блок питания 24V 100W от Mean Well серии HDR).

Подали питание на дверь щита с СПК - СПК запустился, всё в порядке

Подали питание на дверь щита с СПК - СПК запустился, всё в порядке

А раз он запустился, то давайте и его настроим на DHCP! =) И вообще полазаем в его системном меню!

Когда СПК запускается, то он картинку отображает довольно быстро. Но в этот момент внутри у него ещё чего-то продолжает прогружаться, поэтому если сразу же начинать тыркать на нём кнопки — он будет немного подтормаживать. Этого не надо бояться — можно дать ему поработать около 30 секунд, а потом уже начинать его насиловать =)

Чтобы попасть в системное меню СПК, надо поймать самый момент включения питания и пока отображается надпись — три раза ткнуть на экран. Это чем-то напоминает запуск винды и её «Нажмите F8 для выбора режимов загрузки» =)

Системное меню СПК110: надо ввести пароль

Системное меню СПК110: надо ввести пароль

Даём СПК немного прогрузиться и жмакаем кнопку «Введите пароль». Открывается экранная клавиатура. Пароль по умолчанию (мой СПК только что из коробки) — «owen» маленькими буквами.

Ввод пароля для настроек СПК (owen)

Ввод пароля для настроек СПК (owen)

Хех, пока я не сообразил о том, что СПК после вывода картинки на экран ещё чуток подтормаживает — я этот пароль вводил наверное раза с десятого. Потому что я ж привык общаться с техникой на «Ёб твою мать! Ну-ка, работать! Быстро!» и сразу, как только показывалась кнопка «Введите пароль», начинал на неё тыркать. И это дело срабатывало через раз. А надо было чуток выждать =))

Если пароль введён верно — то вы попадаете в системное меню СПК. Тут можно настроить параметры связи по Ethernet (основной порт для загрузки программы и связи) или по USB (резервный канал связи). Ещё можно нафигачить дату-время, посмотреть занятое место, удалить программу.

Параметры сети Ethernet. Можно включить DHCP

Параметры сети Ethernet. Можно включить DHCP

Сначала я морочился и вбивал статический IP из своей домашней сетки, а потом врубил DHCP — всё равно CodeSys ищет СПК по всей сети целиком и точный IP там принудительно не укажешь.

Включили DHCP, чтобы не было привязки к конкретному адресу моей домашней сети

Включили DHCP, чтобы не было привязки к конкретному адресу моей домашней сети

А вот задать понятный ID (название) для этого СПК я очень рекомендую — он потом отобразится в CodeSys именно по этому ID и если у вас, как потом у этого заказчика, будет несколько СПК — вам гораздо удобнее будет видеть их как «SPK_Koteln», «SPK_VentOtopl», «SPK_Main» чем как три штуки «spkmxx[01]». А то так можно залить не то и не туда =)

После того, как мы настроили наш IPшник и имя СПК, можно жмакать на кнопку «Перезагрузка».

Всё, СПК настроен на DHCP и ему дано понятное имя устройства

Всё, СПК настроен на DHCP и ему дано понятное имя устройства

…ну и вот я думал, что на этом этапе все мои настройки закончатся. Заказчик же мне чего говорил? Что программу будет писать он сам, а моя задача — только собрать щит (как я раньше всем и делал). Почему я не писал программы под ОВЕНы (и писал под Logo) — я вам расскажу!

Гммм… знаете, как-то так случилось что я программировал с 96-97 года на всём, что надо (или даже так: «программировал всё, чего мне не хватало»). Это были Q-Basic под DOS, Turbo Pascal, Visual Basic 4, 5, 6, Visual C++ 6, PHP, Delphi, ASM-51, Atmel AtMega и… кого забыл? Ну пускай VBA ещё будет. И в какой-то момент, когда у меня пошла электрика, мне так остоебенило ночами пялиться в цветные строчки кода, что я радостно переключился на щиты и в те времена так открыто и писал (отвечая на ваши вопросы «почему ты не используешь логические реле или ПЛК»), что я не хочу снова погружаться в HTML-код визуализаций, снова херачить всякие циклы по массивам, указателям, просиживать ночи за дебагом среди кучи брейкпоинтов… и что я лучше возьму обычные импульсные реле с центральным управлением.

Ещё у меня всегда был страх по работе с аналоговыми величинами. Вообще, аналоговая техника мне никогда не давалсь. И транзисторы я всю жизнь юзал только в ключевом режиме — с ТТЛ-выхода релюшками щёлкать. Поэтому задач типа «померить температуру/давление/влажность» я избегал — боялся, что там будет нужна какая-то сложная калибровка, куча математических вычислений…

А получилось так, что я прошёл тот путь, который выдумывал в первом посте про «ПЛК и логические реле — как они работают«: там я придумал, что если вы переходите от простых щитовых реле — вы можете чертить схему на реле. Если вам нравятся блок-схемы, то берите FBD, а если вы скучаете по СИшнику — то берите ST… и вот так оно у меня и получилось само собой — то я нахерачил почти что релейную автоматику санузла на реле CL от ABB/Eaton, то освоил FBD в Siemens Logo, а то написал в 2016 году свой первый проект на CodeSys. Короче, я снова в строю по програмимрованию. История циклична, блин! =)

Вообще спасибо ОВЕНу! Когда я выбирал между Сименсом и ОВЕНом, меня привлекло то, что у ОВЕНа был CodeSys, который подходит и под другие ПЛК (в том числе АББшные). И ещё спасибо ОВЕНу за СПК! Я уже знаю, что потом я переделаю всю автоматику своей квартиры на СПК. В том числе и свет и санузел. Мне с этим СПК стало ТАК интересно, что я задержал щит и написал для него программу сам! И по ходу я же её и буду поддерживать и развивать дальше!

Гмм… ну к программе для СПК мы перейдём чуть позжее. Это я так вперёд забежал, отвечая на вопрос, который вы могли бы мне задать — про то, какого хера я так бегал от программирования эти годы.

А в те августовские дни, когда я собирал этот щит, я ещё не думал о том, что засяду на три компа с CodeSys. Я думал о совсем другом: в самом первом моём щите от 2016 года у меня почему-то криво работал RS-485. То ли я тогда его витой парой, а не специальными кабелями прокладывал, то ли тогда ОВЕН был сам по себе сильно глючный (сейчас его полностью переработали)…

Решил я написать на ПЛК110, который мне заказчик любезно подарил, тестовую программу, которая опрашивала бы все данные по ModBus и щёлкала бы релюшками и контакторами. А я бы смотрел бы — проваливаются ли где-то данные или нет, есть ли помехи или нет.

С этим ПЛК110 мне пришлось немного повозиться. Эта история тоже получилась как некое препятствие, которое заставляет тебя разобраться и перейти на новый уровень. Гммм… в ранних постах вы тоже можете найти такие же истории. Стало интересно, полез в чужое — всё сломал, стал разбираться — и не просто починил, а ещё и грамотно настроил и чего-то новое выдумал.

Заказчик мой баловался с ПЛК110 на полную. А иначе как объяснить то, что в памяти ПЛК теперь валяется файл «бегущаока.PRG», который теперь оттудова никак и ни чем не удалить, потому что консоль CodeSys не видит какие-то буквы в этом файле?)) Ещё оказалось, что заказчик побаловался с Target’ами и пока я их подбирал — у CodeSys пару раз напрочь слетали мозги, и он переставал видеть всю периферию ПЛК. Даже встроенную… =)

Снова я обратился в ТехПоддержку ОВЕНа. Я думал, что ПЛК запорот напрочь, а на самом деле оказалось, что если ты меняешь в CodeSys Target (а я перебирал Target’ы обычные и [M02] разных версий) — то надо снести нафиг всю конфигурацию ПЛК и заполнить её по умолчанию, иначе ПЛК теряет напрочь всю свою периферию.

Тут на фотке у меня как раз такая ситуация: программа в CodeSys работает, все выходы выставляются в нужные значения — а физичеки на ПЛК ноль реакции =) Ох, спасибо ТехПоддержке! Молодцы они, что и на такие тупые вопросы отвечают!

Пишу тестовую программу на ПЛК110 для проверки RS-485 внутри щита

Пишу тестовую программу на ПЛК110 для проверки RS-485 внутри щита

Итак, первые шаги этого щита начались! Вроде как я и не думал писать программу под СПК, а хотел просто протестить ModBus на стабильность. Забил его в конфигурацию ПЛК и стал смотреть на то, как светодиоды «Связь» мигают на разных модулях ввода-вывода с разной частотой (я использовал тот приём, про который говорил: разнести по важности модули — важные опрашивать чаще, а не важные — реже, чтобы не перегружать шину ненужными запросами).

Все приборы подтянулись и отвечают по ModBus нормально

Все приборы подтянулись и отвечают по ModBus нормально

В таком режиме щит у меня валялся несколько дней =) Сначала ПЛК110 просто опрашивал все устройства. Потом он начал щёлкать релюшками CR-M, а потом я как-то сидел-сидел… и не шёл у меня из головы тот странный файл «бегущаока.PRG». Это кто ж и что ж тут такое пытался писать и зачем?

Блин… а когда-то на ASM были всякие битовые маски выходов и входов… так… а если эту маску сдвигать? Или точнее, брать 2 в степени выхода, ANDдить его с переменной выхода… то можно ж написать бегущий огонь и контакторами пощёлкать! Так постепенно щит оброс проводами вокруг модулей ввода-вывода, а в ПЛК110 росла тестовая программа, которая щёлкала контакторами в разных режимах (я там конечный автомат с разными состояниями накатал потом — тоже вспомнил прошлое).

Ну а пока щит щёлкал реле и контакторами, я начал разбираться с тем, на какой из компов нормально встанет CodeSys v3.5.SP11P5 =))

На какой из компьютеров какая версия CodeSys и за сколько установится? %)

На какой из компьютеров какая версия CodeSys и за сколько установится? %)

Кое с чем понадобилось повозиться, потому что на одном компе система была совсем свежая безо всяких библиотек, которые CodeSys нервно требовал. А на другом компе всякие Target’ы не совпадали, и CodeSys туда встал, но сначала не видел СПК.

Однако опять же ближе к ночи всё завелось, и я трясущимися от волнения руками нажал кнопку «Загрузить проект в СПК». Загрузилось! =))

Первые попытки залить какой-нибудь проект в СПК (проверка связи с СПК)

Первые попытки залить какой-нибудь проект в СПК (проверка связи с СПК)

Ну, что? Вроде как наш щит готов! Программу же будет писать заказчик?;) Конечно, заказчик! Поэтому настало время сделать то, что я обычно делаю в остопиздевших вам (и мне) дежурных постах — очень абстрактно показываю некий собранный щит! =)

Нет, ну а правда! Мне тут в комментариях предъявили, что я все щиты делаю одинаковыми, потому что я мудак. Да как бы не так! В каждом новом этапе я нарабатываю свой опыт, а потом уже привожу всё это к отработанным, проверенным и универсальным типовым решениям. А потом такие щиты щёлкаются как орешки — и становится тухло от того, что про них нечего писать.

Ну, гхм, вы поняли ;) В общем, постепенно ОВЕНы у меня пошли в дело, так что вэлкам за такими вот щитами, всякими там консультациями и прочим. И главное, что тут надо оценивать (если вы собираетесь заказать такой щит) — это даже не деньги (хотя такой вот щит обошёлся заказчику в ~600 тыр на момент написания поста), а РАЗМЕРЫ ЩИТА! С ПЛК они ЕЩЁ БОЛЬШЕ, чем с Logo! И для квартиры вы легко можете еле-еле уложиться в шкаф 4х12, а для коттеджа или дома вам может и двух шкафов еле-еле хватить!

3. Любуемся собранным щитом и его монтажом!

Ну, да! =) Щит-то получился красивый, техничный и — главное — просторный: в нём есть свободное место, а по компоновке он сошёлся таким образом, что тут нет огрызков, не считая контакторов на нижней рейке. То есть, вся модулька логически собрана по DIN-рейкам и не наезжает друг на друга (это когда на одной рейке например модули IO от ПЛК и сразу же какие-нить реле стоят).

Щит собран и отлажен аппаратно. Ставим раму в корпус и начинаем фоткать! =)

Щит собран и отлажен аппаратно. Ставим раму в корпус и начинаем фоткать! =)

Самое неприятное тут то, что щит нужен был компактным (его обязательно надо было поставить на старое место под трубой… ГАЗА), поэтому по высоте мы были ограничены и тут не получилось оставить свободное место около клемм, которое я обычно стараюсь сделать. Ну, это фигня — так как пусконалаживать мы этот щит будем вместе с Киричем — то вот заодно и посмотрим, кто там как справится с подключением (про это в третьей части поста).

Как я раньше писал, силовая часть щита тут очень простая. Два ввода приходят на кросс-модуль 4х11 (фазные провода пропущены через трансформаты тока для КМСов). Шины кросса используются попарно (и промаркированы наклейками типа «L.UPS», «L.230», «N.230»). На верхней рейке стоят два блока питания: +24V на ПЛК и релюшки, +12V DC на питание электрозамков.

Силовая часть щита: ввод, модулька, исполнительные контакторы

Силовая часть щита: ввод, модулька, исполнительные контакторы

Дальше идут дифавтоматы и УЗО с автоматами для защиты нагрузок. По большей части щит, хоть и имеет однофазные вводы, собран на дифавтоматах — у нас же котельная, и проблема с одним потребителем не должна отрубать слишком много всего внутри щита.

Ну а после дифавтоматов практически все линии заведены на контакторы ABB EN25-40N-06 (с ручным управлением). Сначала я хотел наставить одномодульные контакторы с допконтактами, а потом подумал — и решил, что техничнее будет взять взять контактор на 4 контакта и один из них использовать как дополнительный.

Всякие фотки типа «как я промаркировал линии» не показываю, потому что это уже пройденный материал =) Если кому надо — то трансы тока — это АББшные TRF/M. Они на выходе имеют стандартные 5А, а форм-фактор у них — под обычную модульку на DIN-рейке, что позволяет пихать их в любые щиты. Хоть даже пластиковые (вон, давно я собирал на UK500 щит о стрелочным аутентичным амперметром).

ПЛКшечная часть щита вышла очень аккуратной: модули ввода-вывода, и релюшки:

Часть автоматики щита (модули ввода-вывода и исполнительные реле)

Часть автоматики щита (модули ввода-вывода и исполнительные реле)

Линии IO я распределял сам, поэтому я сделал так, чтобы все сигналы обратной связи от контакторов приходились на те же входы модулей, которые отвечают за управление ими. Например, сидит на каком-нить 11ом выходе контактор «Питание: Розетки у Входа». И на 11ом входе будет сидеть сигнал его состояния. А контакторы от восьми насосов затащил на второй модуль вводов и тоже на нижнюю его часть (входы с 9 по 16).

На момент теста щита я сделал перемычки из провода, которые имитировали включение насосов котлом (на самом деле просто часть выходов — те же розетки или питание дачиков — питали катушки контакторов насосов), поэтому все линии IO у нас ща задейстованы и все светодиоды снизу модулей IO горят:

Индикация сигналов на модулях ввода-вывода

Индикация сигналов на модулях ввода-вывода

Ещё вы можете разглядеть там клеммы с резисторами. Это нагрузка для датчиков давления с выходом 4..20 мА. Пока используется один такой датчик, но нагрузок я поставил две штуки — мало ли ещё какой-то датчик понадобится задействовать.

Самый правый модуль вывода управляет у меня контакторами по 230V AC и релюшками по 24V DC. Вот у той части модуля, где шляется 230V, я наклеил молнию, чтобы помнить про это и не снимать видео типа «А… а тут у меня ОВЕН управляет контакторааааааааАААААААААААААААА!!!!…» =)

На DIN-рейке, которая находится ниже модулей ввода-вывода, стоят кросс-модули для питания 230V на катушки контакторов (отключается отдельным автоматом — можно отрубить его и силовые линии точно никогда не включатся от ПЛК) и питания на +24V DC для ПЛК и релюшек. Ну и сами релюшки.

Исполнительные реле (развязки сигналов, открытие замков и прочие)

Исполнительные реле (развязки сигналов, открытие замков и прочие)

Релюшки разбиты на несколько групп. В первой части поста я говорил об аппаратной связи с щитовой, которая сделана при помощи сигналов типа СК («сухой контакт»). Для этого у нас заложен кабель МКШ 10х0,5 и релюшки, которые формируют эти самые сигналы или принимают их от главного щита.

Также есть релюшки для развязки разных синалов (статус защиты от протечек, датчика газа, статусов горелок и аварий котлов). Некоторые девайсы выдают активный уровень сигнала как 230V сети, причём той сети, от которой они питаются. Вот релюшки и развязывают эти сигналы, отдавая их в модули ввода для ПЛК/СПК.

Ну и есть релюшки для управления (с ручным включением серии CR-M). Их три штуки в самом конце DIN-рейки. Две релюшки отвечают за замки, а одна — за перезапуск защиты от протечек «Нептун». Перезапуск тут у меня — это синоним слов «сброс ошибки»: если Нептун сработал, то чтобы снять сигнал аварии, на нём надо просто передёрнуть питание. Вот этим и занимается релюшка. Причём в данном случае работать она должна кратковременно, поэтому питание заведено через нормально замкнутые контакты.

Не путайте это с правилами безопасности, про которые я жутко матерился (о том, чтобы не использовать нормально замкнутые контакторы в приводах/управлении питанием/нагрузками). В данном случае задача релюшки — именно передёргивать питание, а не управлять им. При этом здесь важна надёжность: если ПЛК/СПК не будет работать — то Нептун должен питаться, а не обесточиваться.

Все клеммы и разъёмы шлейфов на пластрон у меня, как обычно, подписаны (используются держатели PEAD/EPR2).

Сами шлейфы пластрона отлично прячутся под поперечные элементы, на которых стоят разъёмы для них. Шлейфы можно просто так придавить пластроном, но лучше закрывать пластрон аккуратнее и заправить шлейфы ручками.

Настало время установить пластрон со шлейфами

Настало время установить пластрон со шлейфами

Защитные оплётки очень сгодились: задняя сторона поперечного элемента имеет острые края, и провода уже несколько раз поцарапались бы об них — а оплётке хренушки.

Для тестов щита я частично подзакрыл пластроны и так его и оставил на день работать. Хех! Вроде щит большой — а наклеек на модульку мало надо было резать =)

Всё! Все пластроны на своих местах, щит работает на тестовом ПЛК

Всё! Все пластроны на своих местах, щит работает на тестовом ПЛК

В этот момент я отснял видео про внутренности щита и то, как ПЛК110 щёлкает контакторами. Там аж музыка иногда получается =)

А потом наконец-то снял этот самый ПЛК и закрепил и подключил дверь щита с СПК. До этого я не смог бы этого сделать, потому что в сети ModBus было бы два мастера: ПЛК110 и СПК на двери. Пластрон с самым интересным оставил открытым =)

Установили дверь щита на место, подключили шлейфы СПК. Тестовый ПЛК110 убран

Установили дверь щита на место, подключили шлейфы СПК. Тестовый ПЛК110 убран

На этом сборка щита закончена! И его, по идее, можно сдавать заказчику!

СПК на двери работает и отображает первые шаги в проганьи =)

СПК на двери работает и отображает первые шаги в проганьи =)

А вот и видео того, как я мучаю периферию щита на ПЛК110:

4. Прогаем на CodeSys v3 под СПК110. Как я не хотел, но стало ТАК интересно, что я снова вернулся к программированию! На этот раз ПЛК =)

Что делать, если заказчик торопит со щитом (ибо уже холодать начинает), а руки тянутся к щиту и СПК? И ещё и в голове про Level Up и разные идеи о том, как я бы этот СПК дома бы приспособил крутятся?

Как что? Чуток задержать щит и «только одним глазком» заценить, как это там в CodeSys интерфейс рисуется под СПК! Признаться, ещё я думал о блоге и вас, мои камрады. Вот я писал о том, что мне щиты остоебенили (конечно, ремонт в Одинцово тоже сыграл в этом небольшую роль — когда всё свелось к «щиты = работа, ремонт = работа», то я возненавидел не только щиты, а вообще свою жизнь) — и что мне хочется какое-то новое вдохновение найти… И тут мне самому в руки Вселенная дала этот самый СПК и хорошего заказчика! Это ж нельзя упустить.

А во-вторых, каким-то подсознательным чутьём я уловил то, что мне интересно будет на этом вдохновении не просто показать вам очередной щит «в никуда» (собрал и отдал), а показать весь его цикл жизни — от разработки до пусконаладки, потому что я знал о том, что Кирич в этой же котельной проложил новую проводку и что скорее всего щит мы с ним будем подключать вместе.

Всё это собралось в такое сильное намерение, что я ещё щит не собрал до конца, а уже во снах и медитациях видел то, как я пальцем по СПК тыкаю и как красиво кабели в котельной в этот щит по лоткам заходят! И ещё мне было ОЧЕНЬ интересно посмотреть на то, как котлы будут выдавать свои сигналы о работе и аварии горелки, как будет подниматься температура в контуре воды котельной — и много ещё чего интересно. Да хотя бы проверить, что будет показывать датчик давления…

Программирование — штука такая… общая. Если ты програмировал на чём-нибудь — то дальше освоение других языков превращается в «Так, а как в этой среде делается такая-то фигня… Ага, вот так!». Точно так же и про ПЛК. Вот у меня были посты про CodeSys v2 и вообще про особенность работы ПЛК (про его циклы и задачи и конфигурацию периферии) — и там я изложил основные принципы работы. А дальше остаются вопросы типа «Так.. а как в CodeSys v3 конфигурация ModBus набивается? Ага… так, а ну-ка, а попробуем»… =)

Это самое «попробуем» кончилось таким вот рабочим набором:

Процесс кодинга под СПК110 на двух компах =)

Процесс кодинга под СПК110 на двух компах =)

Я ОЧЕНЬ не хотел снова возвращаться к проганью; в прошлой части поста я про это рассказывал. Я прогал на всём, что мне нравилось и было удобным. Из визуальных языков мне первым попался Visual Basic 4, потом 5 и 6. И заодно попалась книжка про проектированию интерфейса под Win-приложения — про то, как располагать меню, панели инструментов, группировать элементы управления и тестовые поля.

Вот и панеслась! Всякие утилиты, настройщики ещё Windows 95 и 98, каталогизаторы файлов, бэкапилки…

Програмирование 00ых на Visual Basic 6

Програмирование 00ых на Visual Basic 6

ОЧЕНЬ-ОЧЕНЬ много ночей было просижено за VBшкой! Красные глаза, сотни литров выпитого чая, потная задница и охреневший вид. Зато была отдача: «Оно РАБОТАЕТ!». Вот принцип отдачи (когда-то я писал несколько постов про самореализацию и там это рассматривал; сейчас посты скрыты — я потом их перепишу и верну взад) мне всегда очень важен, и я ненавижу то, когда сделанно уходит в пустоту (и ты не видишь то, что с этим происходит). Возможно, даже это и на щиты переходило: ну собрал, отдал — и всё. А шо дальше?

Потом мне перестало хватать VB в плане работы с Windows API. Например, одно время все тащились от Compound Storage-файлов — это когда внутри обычного файла на уровне самой системы реализована файловая система типа FAT, и ты обращаешься к файлу через функции типа «Создать/Открыть папку», «Создать/Открыть/Записать/Прочитать/Удалить файл». На VB такое написать было невозможно, а на VC с WinAPI — легко. Потому что там сплошняком были одни указатели, которые VB ни хрена толком не поддерживал.

Так я переполз на VC++6 и первым большим проектом начал катать библиотеку для работы с Compound Strorage, причём OLEшную, чтобы через VB работала =) Библиотека не дописана, исходники до сих пор валяются в архивах. Не дописана, потому что я потом на VC и переполз.

Самый мой большой проект на VC — это CS Notes Tree. Прога у меня до сих пор жива и я ей вовсю пользуюсь как хранилкой паролей и разных тестов и заметок из Сети. Вон исходник окошка поиска информации по банку:

Програмирование 00ых на Visual C++ 6 (принципы везде одни и те же)

Програмирование 00ых на Visual C++ 6 (принципы везде одни и те же)

Постепенно такое проганье начало сходить на нет. Зато попёр PHP и сайтостроительство. Ну а потом пошла другая винда, андроид, приложения под них — и мне стало не интересно. В те времена программирование и компы мне настолько надоели, что дошли до противопоставления: одно время я помнил список всех системных файлов WinXP, а потом — начал забывать о том, где в ресстре какие настройки находятся =)

И вот когда у меня началась электрика — она и стала отдушиной от эмоционального выгорания в компах и программировании. Ещё бы! Вместо сидения на жопе ты работаешь руками, реализуешь свои хотелки, бегаешь по квартирам с перфоратором, крушишь там всё — и тебе ещё и денег платят и дома не надо сидеть!

На блоге я сам много раз рассказывал о том, что моя жизнь местами циклична. Был огромный этап в компах и программировании — потом огромный этап электрики. А ща вот смотрите — за последние годы опять (с раннего детства) попёр свет, барабаны (с 2006-2008 года), и программирование (с 2010 года). Интересно как получается! А в простых щитах настало то самое эмоциональное выгорание — мне надоели вопросы про автомат, ввод, УЗО и подключение варочных. Я написал по ним охрененные посты — и мне скучно отвечать на одно и то же. И жизнь стала сидячая, потому что щитосборки на треть или даже половину состоят из расчётов.

В те времена, когда я прогал, у меня заложился мой стандарт интерфейсов — группировать элементы в рамки (Frame) и принцип «Разделяй на части, отлаживай и пользуйся результатами». Это вот структурирование так на всю жизнь и пошло. Например, принцип интерфейса, в котором мы группируем элементы в рамки Frame вы теперь можете увидеть в ЩИТАХ! Ага! Это моя фишка группировать или отделять друг от друга разные части щита разными пластронами! =) А концепт «иди от конечного результата назад и отлаживай по кускам» вообще во все работы вылился.

И первое, что я начал делать — это решил ради прикола накидать возможный будущий интерфейс стартового экрана на CodeSys. Ну, типа вывести важные параметры на одну страницу:

Наброски будущего интерфейса СПК

Наброски будущего интерфейса СПК

Нет, тогда я ещё сомневался в том, стоит ли возвращаться к программированию. Местами даже вспоминал свои красно-безумные глаза и ночные засиды и попытки впиховать невпихуемое или отладить сложные куски кода и точки брейкпоинтов…

Но чёрт побери!! Тут снова есть ОТДАЧА! Ты не просто собрал щит и сам заказчик его там начал прогать — а ты сам видишь то, как твой щит работает, выдаёт разную информацию и красиво показывает её!

Моё проганье пошло так же, как и все новые и захватывающие штуки в моей жизни: «Гммм… а если попробовать просто накатать ввод данных с датчика температуры, как было в примере ОВЕНа?» — «Ооо!! Чего-то отображает. А ну-ка ща датчик горелкой НАГРЕЕМ! ООо!! Попёрло!!!».

И за несколько дней жёсткого проганья у меня получилось ЭТО:

Главный экран СПК110 щита котельной с его состоянием

Главный экран СПК110 щита котельной с его состоянием

Сейчас я расскажу вам то, что может СПК от ОВЕНа — и вы офигеете! Короче, я принимаю заказы на продвинутые щиты, вот! =) Прогать буду сам (если где-то не справлюсь или сумею — буду брать денег поменьше и делать более простую программу, которую заказчик сможет потом дописать сам по месту).

Кайф СПК в том, что это реально экран! Сенсорный! Разрешение у него 800х600, но этого хватает для дофига задач, потому что сами экраны (визуализации, которые я условно обозвал страницами) можно переключать между собой (…и тут вспоминается Visual Basic с его формами и всякими там «frmSettings.Show(vbModal)»). Можно писать все стандартные фишки — ввод, отображение значений и параметров. Есть экранная клавиатура. То есть сделать ввод параметра типа «Считать аварией, если температура упала ниже хх градусов» — раз плюнуть. А так как у нас настоящий ПЛК — то все параметры и настройки можно в Retain хранить =)

На самих визуализациях можно херачить фоновые картинки и просто картинки, изображение которых переключается по программной переменной. Собственно, так и делают разные мнемосхемы на промке. Мне уже рисуется страничка моего санузла со схемой всех труб и кранов, реальное положение этих кранов и кнопки типа «Промыть фильтры» и анимация открытых и закрытых кранов! =)

Чтобы пользователи не баловали, в СПК можно создать девять (сейчас пишу по памяти, могу путать) уровней доступа со своими логинами и паролями. В этом щите это пока не реализовано, потому что у меня было около четырёх дней на то, чтобы выучить CodeSys и написать программу, которая полность запускала бы щит.

Ну а ещё тут есть ГРАФИКИ! =)) Для графиков можно задать время, за которое система будет хранить данные (в секундах, минутах, часах, днях) и накидать туда сразу несколько параметров. А для самих параметров задать пределы, по выходу за которые они рисуются другим цветом:

Тестируем графики температур: холодим сжатым газом и греем датчик горелкой

Тестируем графики температур: холодим сжатым газом и греем датчик горелкой

Я вытащил на график все температуры, в легенде нарисовал цвета и задал аварийные значения графиков (если температура в котельной ниже +10, то она рисуется синим, а если выше +50 — то красным). А потом взял сжатый воздух в баллоне и горелку, чтобы побаловаться и сильно охладить, а потом нагреть датчик. Вау! =) Всё делается галочками и переменными в программе. Детально расскажу про это через несколько лет, когда накатаю опыт и перестану бояться, что очередные чуваки, у которых язык совсем без костей, спиздят все идеи и выдадут их за свои достижений. Ррр!!! Берёте инфу отсюда — так вставляйте копирайты и ссылку на то, откуда чего узнали!

Всё управление щитом я вытащил на отдельную визуализацию, чтобы никакие случайные фишки типа «ща-ка мы экран протрём» не привели к включению/отключению того, чего не надо.

Страница управления нагрузками щита

Страница управления нагрузками щита

Большинство управления у нас тут простое — включить-выключить. Я нашёл элемент управления «Переключатель On-Off» и использовал его. Блин, ну реально Visual Basic. Я утирал ностальгические слёзы и радовался как ребёнок. Особенно после того, как настроил сетку (к которой привязываются элементы управления) на более мелкий шаг! Главное только в задрота тех годов не превратиться, а то была и другая сторона — когда я говорил, что лучше нет картины, чем старая мать, на стену прибитая… =)

Ещё тут есть кнопка перезапуска аварий (которая как раз позволяет передёрнуть питание Нептуна при помощи релюшки, про которую я рассказывал). Сигнал аварии с датчика газа можно снять, перевключив его питание. Для этого у нас уже есть элемент управления, и я не стал рисовать кнопку «Сброс аварии Метан».

Перезапускаем Нептун, чтобы снять сигнал аварии

Перезапускаем Нептун, чтобы снять сигнал аварии

Кое-где вы видите прочерки вместо пустых полей «Авария». Вот на это я убил день, но как я не пихал переменные статуса «Обычный/Alarm» для полей (там можно задать разную раскраску и шрифты для разных статусов поля) — не получалось это дело задействовать. Код верный, настройки верные — и хрен там. Даже цвета текста не получалось изменить через переменные.

Замки тоже рулятся по кнопкам:

Нажимаем на кнопку и открываем один из замков

Нажимаем на кнопку и открываем один из замков

А самая моя главная фишка — это ручное управление контакторами с обратной связью! Вы уже заметили флажок «[Ав]» около состояния нагрузок, которые контакторами рулятся? Вот-вот! Это вот и есть обратная связь с восстановлением состояния.

Задумка такая: мой щит может определить, как включен или отключен контактор: вручную или с СПК. В первой части поста я уже упоминал о том, как это сделано — да тупо выход и вход управления сравниваются. Я даже функцию под это дело написал, которая на основании этого сравнения выставляет нужные флаги для каждой переменной ENxx.

А самая главная фишка этого алгоритма — это то, что когда СПК перезапускается, он не просто достаёт из Retain-переменных предыдущие значения и включает по ним контакторы, а смотрит на то, были ли какие-то контакторы включены до запуска СПК. И если такие есть — то подтягивает интерфейс (переключатели On-Off) в нужное состояние и выдаёт штатный сигнал на включение таких контакторов.

Для вас со стороны это будет выглядеть так. Если вы в щит не лазили, всё работало в штатном режиме (нужные нагрузки были с экрана СПК включены) — и увас пропало и потом появилось питание — то щит придёт в то же состояние, в каком был до выключения.

А вот если СПК глючил, или например (что выдумать?) подох блок питания 24V и СПК не работал, пока блок питания меняли. В этом случае нам пригодилось ручное управление на контакторах, так? Силовая часть щита не зависит от СПК, и поэтому мы открыли дверь щита, вручную повключали контакторы — и работаем дальше. Играем в аварии дальше (аварийные игры — как в метро). А теперь вам понадобилось включить ещё какую-то нагрузку, которая не работала в то время, пока СПК управлял щитом. Ну, вы снова подошли к щиту и врубили какой-то контактор вручную.

А потом вы починили питание СПК и запустили его. Что будет? Блин, да если не морочиться — то он тупо поврубает всё так, как у него в Retain было. Такое напишет любой программист за три секунды (хех, из VAR и VAR_RETAIN перенести-то). И вот тогда-то ваш включенный вручную контактор, который не был включен (и запомнен) через СПК и… выключится!

Чтобы такого не было — я написал свой алгоритм, который при запуске СПК смотрит на то, есть ли контакторы, включенные вручную и врубает их программно. Рассчитан он именно на включение. Поэтому если контактор на СПК был включен, а вручную его не включили — то СПК на это забьёт и снова его включит. Если штатно контактор заблокирован в OFF — то ничего не будет. А вот подтянуть включенные вручную контакторы — это важно и нужно.

Я хочу, чтобы эта идея в такой реализации осталась моим копирайтом. Если вы будете использовать и развивать её — обязательно сошлитесь на первоисточник — эти посты про этот щит! Поставьте на них ссылки.

Плавненько переползаем к CodeSys v3.5. Огромного мега-гайда не будет (по причинам, про которые я написал выше — вы знаете, кому бля спасибо сказать и кто меня разозлил; чтобы я ещё раз проводил бесплатное обучение — ни хера!). Скриншоты у меня сделаны с другого компа с WinXP и CodeSys v3.5. А прогается этот СПК на CodeSys v3.5 SP11 Patch 5. Вот с этими версиями затрахаешься разбираться. Мне иногда интересно, почему нельзя было написать одну среду, а сами варианты программирования подцеплять туда чем-то типа плагинов. Ща как получается? Прогаешь под разные ядра ПЛК — держи на компе (или компах) разные версии CodeSys…

Конфигурация ModBus тут примерно такая же, как в ПЛК110. ОВЕН написал библиотеки модулей ввода-вывода под линейки своих модулей (Mx110 и Mx210), поэтому в общем случае вы берёте нужный модуль IO из библиотеки, подключаете его в проект — и радуетесь. Единственное что плохо — время опроса не настроить. Я бы его убыстрил, как на тестах с ПЛК110 было. Так что возможно в будущем я перепишу всё так, чтобы вместо ОВЕНских библиотек использовать переменные, введённые вручную.

ОВЕНы в своих библиотеках хорошо позаботились о переменных IO и разложили все каналы модулей так, чтобы на какой-нибудь бит WORD’а можно было накидать обычных булевых переменных. В CodeSys v2 с этим было сложнее, а тут остаётся только назначить переменные и названия линий IO — прям как в Logo =)

Назначаем переменные модулей ввода-вывода в CodeSys

Назначаем переменные модулей ввода-вывода в CodeSys

Саму прогу я писал обычным кодом на ST. Многие любят FBD или CFC, но у меня уже сложился более прикольный концепт — всякие сложные херовины ты пишешь на ST, а потом заворачиваешь это всё в простую FBD типа «Кнопка на вход, контактор на выход», хехе =)) Общая логика получается наглядной, а сложные детали проще кодом расписать.

Один из кусков кода по сбору и отображению инфы на СПК110 (используются написанные мной же функции)

Один из кусков кода по сбору и отображению инфы на СПК110 (используются написанные мной же функции)

Для удобства я накатал структуру хранения статуса контакторов ENxx и несколько функций обсчёта этого статуса и отображаемых текстов. Например выше вы видите вызов функции CalcOnOffText, которая позволяет удобно выводить отображаемое значение на визуализацию. Эх!! Жалко, что в CodeSys нет аналога конструкции «?( , , )» как в 1Ске! Это такая функция языка, которая смотрит условие на True/False и возвращает второй или третий параметр. То есть, можно было бы написать что-то типа «DispHomeFPStatus := ?(StatusHomeFPower, ‘Включено’, ‘Отключено’)» и не париться. А тут пришлось функцию сделать, чтобы код красивый был.

…но больше всего мне добавили жару пресловутые КМСы!! Сцуко, они так никак не желали запускаться ещё и по ModBus! =)) То вживую я с ними тупил и они мне предохранители жгли, а то по ModBus… запускаю проект — а КМСовские узлы ModBus отваливаются и не работают, хоть тресни! Я перерыл всё! В том числе и поиск по запросу «CodeSys v3 ModBus не запущен». Что в поиске пишут? Да стандартное — что узел отваливается, если параметры по ModBus не те или устройство не отвечает. А вот те хрен! Параметры взяты из инструкции на КМС, а на КМСах индикатор активности мигает — значит есть опрос…

Снова я пошёл на форум ОВЕНа (в техподдержку постеснялся) и поднял там эту тему. Ииии… всё оказалось интереснее: у ОВЕНа в инструкции к КМСам, которая выложена на сайте у ОВЕНа, ошибка в адресации регистров ModBus. Тупо кто-то делал Ctrl-C/Ctrl-V и одно и то же скопировал в места про протокол ОВЕН и ModBus. То-то меня смущали странные красивые магические числа регистров типа «0xA4A4» или «0xB343»! Обычно ж регистры ModBus просто нумеруют по порядку, а кто ж такие красивые числа подбирал (назвали бы ещё типа 0xDEADC0DE) и зачем?..

И наконец-то я вписал правильные регистры — и всё начало работать! Я позжее напишу пост про ModBus (я уже упоминал про него, я хочу там вжечь с ПЛК110 и Logo одновременно), и там покажу то, как я сами данные с КМСов обрабатывал. Для поста нам надо знать то, что в CodeSys можно или внести устройство через библиотеку (как было с ОВЕНскими модулями IO) или просто вбить нужные регистры и время их опроса, как было в CodeSys v2:

Переменные для опроса монитора сети КМС-Ф1 (время опроса установлено в 1 секунду)

Переменные для опроса монитора сети КМС-Ф1 (время опроса установлено в 1 секунду)

Сам проект в CodeSys поддерживает разные внутренние элементы СПК как отдельные устройства. Например, есть элемент «Screen», при помощи которого можно добавить в программу переменные и рулить подсветкой экрана:

Переменные и данные работы экрана СПК110: через сколько времени тушить его

Переменные и данные работы экрана СПК110: через сколько времени тушить его

У меня заложена такая логика: внутри щита есть аппаратный переключатель управления подсветкой экрана. Если переключатель включен — то экран работает всегда и не гаснет. Если переключатель выключен — то экран через некоторое время притушивается, а ещё через некоторое время совсем гаснет. Переключатель нужен только на время отладки щита, когда надо держать экран постоянно включенным. В обычном режиме, когда экран погас, достаточно просто его коснуться — и он снова включится. Как на обычном компе, в общем!

Ещё ОВЕН имеет блок «OwenRTC», который отвечает за точное время. Если туда добавить переменных, то можно устанавливать или получать точное время, причём даже из инета по NTP! =)

Переменные для пинания СПК получать время по NTP из инета

Переменные для пинания СПК получать время по NTP из инета

Вот я надобавлял этих переменных, а потом взял системную задачу «ПЛК запустился», воткнул туда программу «PLCStartOK» и там написал код инициализации этих переменных. Может быть и на коленке, но он уже работает. По идее в будущем надо будет дописать страничку настроек СПК, где все эти времена и пресеты можно будет настраивать под себя. Блин! Хочу себе личный СПК110!

Код задачи "ПЛК Запущен", в котором настраиваются экран и NTP

Код задачи

Ну а САМОЕ ВКУСНОЕ в этом всём — это WEB-визуализации! Некоторые чуваки (вон, Генерал Дрозду повезло успеть) вкусили это в реале — я по мылу им кинул тестовую ссылку, пока щит был у меня на тестировании =))

А ещё.. а ещё СПК доступен по HTTP и им оттудова тоже можно управлять!

А ещё.. а ещё СПК доступен по HTTP и им оттудова тоже можно управлять!

Берёшь браузер… и заходишь на IP-адрес СПК и портом 8080. Прокручивается заставка:

Процесс загрузки визуализации (в момент подключения к СПК)

Процесс загрузки визуализации (в момент подключения к СПК)

И мы получаем наши визуализации в браузере! Причём для этого не надо писать ни строчки HTML-кода: СПК автоматически делает это за нас, и в CodeSys нам надо нарисовать интерфейс только один раз.

Как выглядит основная страница щита в браузере

Как выглядит основная страница щита в браузере

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

Конечно же, можно чем-нить поуправлять:

Как выглядит страница управления щитом в браузере

Как выглядит страница управления щитом в браузере

По сравнению с этим встроенные WEB-визуализации от Logo отдыхают в сторонке. Я пока баловался — вывел из щита три датчика. Один кинул за окно и подключил ко входу «Температура на улице». Второй — оставил в комнате и подключил к «Температура котельной», а третий — прикрутил стяжкой на трубу отопления и подключил к «Подача котёл». И пока щит ждал нас с Киричем (а я ремонтил в Одинцово), заходил на него через инет и смотрел, как у меня там в Москве топится =))

Несколько дней роутер был открыт и некоторые камрады, кто успел, могли вкусить прелести щита с управлением через интернет.

На всякий случай допишу. Не расстраивайтесь, если я собрал вам щит на обычном ПЛК110, а вам хочется такой фарш! ОВЕН выпускает не только СПКшки, а ещё и отдельно панели оператора (сенсорные экраны) серии СП3хх. Это не CodeSys, но на них тоже можно сделать визуализацию и прицепить её к ПЛК110. Хотя цена СП310 и СПК110 почти одинаковая и проще СПК110 брать, чтобы WEB-визуализация была.

В общем, если вам потом захочется иметь сенсорный экран и веб-визуализацию — то её легко можно прикрутить к уже готовому щиту на ПЛК110!

5. Финал! Предмонтажные сборы!

Щит простоял у меня на тестировании несколько дней, пока я был в Одинцово =) Прям вот стоял, работал и экраном светил. И всё это время порт 8080 был открыт наружу =)) Это было и баловство и тест одновременно: вдруг чего накроется или заглючит?

Щит готов к монтажу: все работы завершены

Щит готов к монтажу: все работы завершены

Мы с Киричем ждали того, когда он освободится, чтобы провернуть мега-квест: приехать ко мне в Москву, собрать разные монтажные мелочи, которые нам понадобятся, отснять финальный видос про щит, всё запаковать и перевезти его заказчику в котельную!

Прикрываем двери щита и оставляем его так работать на несколько дней =)

Прикрываем двери щита и оставляем его так работать на несколько дней =)

Время у нас было жёстко ограничено, потому что в тот день, когда я закончил сдачу щита — мне надо было резко рвать в Одинцово, и поэтому не было времени нормально отснять видео. А когда мы с Киричем приехали за щитом — то надо было побыстрее собираться назад, так как на дорогах были пробки! =)

У меня всё получилось, и в этом видосе вы увидите щит в работе и то, как он подтягивает контакторы, включенные вручную, при перезапуске питания!

А нас ждёт третья часть и рассказ о том, как мы переделывали подключение котлов Viessman за сертифицированными спецами и как кое-кто так и мечтал дать некоторым монтажникам проводами ШВВП по лицу!

39 Отзывов на “Коттедж в Папушево: Щит Котельной на СПК110 (ОВЕН), часть 2: Сборка щита и программа для СПК110”


  • 1 makon

    Я, конечно, сейчас скажу неприятное, но. На одних скриншотах айпишники заботливо замазаны, а на других, да и в видео тоже, во всей красе! А в остальном, как всегда, респектище!

  • 2 pryanic

    Респект, с удовольствием прочел пост. Тоже в одном проекте на пр220 (установка для экспонирования шелкографии) была идея использовать обратную связь с контракторов, даже софт почти накатал, но заказчики слились.

  • 3 CS  [Москва]

    makon Да шут с ними, с IP — я ж даже и не знаю, зачем я их мажу =) Всё равно дапазон внутренний. Привычка из старых времён асек и «Да я тебя по IP вычислю!»

    pryanic Я хочу ПРки затестить и с Logo сравнить ) Мне интересно, какой у ПРок ModBus там — быстрее, чем в Logo или нет =)
    Жаль, что заказчик слился — но главное ж идея! Идеи живут и когда надо выстреливают =)

  • 4 sharkwood

    Вот не ожидал упоминание Валеры Сиренко здесь, как говориться — лайк.
    Жаль только что запретило ему руководство снимать, а так было самобытно.
    Игра контрастов — красивые щиты и полный трешак харьковских (по крайней мере салтовских) лифтов.

  • 5 CS  [Москва]

    sharkwood Да, Сиренко молодец! Но он говорил, вроде, что ему просто надоело про одно и то же снимать.
    Так, гм… если запретили — надо будет поскачивать видосы! =)

  • 6 sharkwood

    CS -> я у него спрашивал — сказал запретили; не зря он шифровал название «организации».
    Давно уже кстати, если видео не удалил, значит так и будут висеть.

  • 7 CS  [Москва]

    Не, всё равно то что понравилось — сохраню!

  • 8 pryanic

    Шаман, давно хотел спросить: по каким причинам не юзаешь наконечники НВИ для подключения к выводам ПЛК. Они ж как раз для таких контактов сделаны.

    Единственный минус — нет двойных как у НШВИ, но обычно следующий размер использую, если нужно 2 провода зайти.

  • 9 CS  [Москва]

    Не хочу, не нравятся.

  • 10 Derspiwak

    CS а какой лютый IPM можно сделать с такой панелью, ух прям моя мечта) Графики, статистика, еще и удаленный контроль.
    Я по тихой копаю в эту сторону, выпросил у ОВЕНа на тесты МЭ210-701, для контроля параметров сети, прикольная штука!

  • 11 CS  [Москва]

    Хмммм… лютый? А питать его откуда? Это ж самое западлище =)
    Вот у тебя два ввода. Оба вмэрли, надо переключиться. И откуда СПК заработает? =)

  • 12 Derspiwak

    От ОВЕНа же ИБП60Б с резервной батареей))

  • 13 serafim

    Интерфейс — просто конфетка. Очень все понятно и четко. Все-таки в 1990-х основные принципы «интерфейсостроения» ценятся мною примерно как аудиотехника 1970х аудиофилами).

    В январе буду ковырять контроллер вообще без интерфейса — от Weintek cMT-srv-100/102. Попробую статью накатать по опыту работы с ним… Его особенность — любой планшет может быть его экраном в локалке, и можно отдельно где-то поставить фирменную сенсорную панель, связав только по локалке. Экран при этом более «интерьерный». Это может пригодиться для понтовых проектов…

  • 14 Boris Kalinin

    что-то типа «DispHomeFPStatus := ?(StatusHomeFPower, ‘Включено’, ‘Отключено’)»

    Есть такая функция (SEL) и много чего другого, даже ООП использовал в CDS3.5

    DispHomeFPStatus := SEL(StatusHomeFPower, ‘Отключено’, ‘Включено’)

  • 15 CS  [Москва]

    Boris Kalinin Спасибо! Я даже и не думал, что такое может быть, поэтому написал свой SEL.
    Этот штатный SEL с любыми переменными работает, или только с ANSI-строками?
    ООП не хочу, а вот указатели юзаю — обрадовался, что они там есть.

  • 16 Boris Kalinin

    С любыми типами переменных. Как и многие стандартные функции кодесиса SEL перегружена. В отличие от IF при вызове она вычисляет и истинную и ложную часть, но возвращает ту, что надо.

    Очень давно писал небольшую статейку про нюансы второго кодесиса, в том числе и про SEL.

    А про визуализацию согласен, она очень хорошо сделана в третьем кодесисе, и с каждой версией всё больше всяких дополнений. Еще два года назад рассказывали про кучу наворотов в новой версии, но обманули и не выпустили. Но пример сделали: https://www.youtube.com/watch?v=PuhGwod-rDE&t=187s

    Возможностей всё равно очень много. Например, графики от двух переменных (кнопка «График», можно подвигать кружки), создание своих стилей, картинки в SVG, удобная работа с iFrame, нарисовал свою клавиатуру, есть даже листание свайпом (но работает плохо)
    http://heatpump.boriskalinin.ru/

    А использую, кстати, ПЛК110. СПК не люблю с тех пор как они выпустили кучу забагованных первого образца. Для веб-визуализации ставлю в шкаф Raspberry Pi, на ней запускаю бесплатный CODESYS 3, она же шлюз для всякого специфического оборудования и сервисов, с ПЛК 110 общается по Modbus TCP. Советую, разобраться с Raspberry один раз, потом просто копии ОС делать и работать к с обычным ПЛК. Несколько лет работают на разных объектах, не ломались ни разу.

  • 17 CS  [Москва]

    Boris Kalinin Тваюмать!!! Как-то SEL у меня в CDS прошёл мимо… а он мне уже в трёх случаях был нужен.
    Причём я уже понимаю про чего ты говоришь, так как ща готовлю посты про ПРки и OWEN Logic и там как раз пишу про SEL… Эхх!
    СПАСИБО тебе — буду знать и учиться новому!

    Заглянул на демку. Какая красота!!! Это ты на CDS сделал всё штатными средствами (пока туплю)?
    Мне 110ый нравится вовсю как решение без визаулизации.
    С Rapsberry я ни хрена не умею и не понимаю, как этим пользоваться. Там же страшный Linux, в котором я не разбираюсь совсем… Каким образом там CDS появляется? Я думал, что там надо будет с нуля голый HTML херачить…

    Добавлю ещё про библиотеки (из твоей статьи). Меня ещё выбесило, когда много программистов и создателей библиотек ни хрена не именуют переменные ПОНЯТНО.
    Я давно учился по книжке про Visual Basic и с тех пор жёстко привил себе концепт именований вида bPumpOn.
    И когда смотришь на чужие библиотеки и видишь там какие-то входные параметры типа «T», «N», «P», то тоже хочется переписать нормально под себя.
    Я в итге так от OSCAT отказался, потому что затрахался в их коде разбираться.

  • 18 Boris Kalinin

    На ПР200 тоже часто делаю проекты, но небольшие. И, кстати, к ним тоже Raspberry прикуручиваю для веб-визуализации. Жаль для Линукса нет OwenLogic, а то можно было бы и программировать и отлаживать удаленно, как раз они отладку добавили в ПР. Это главный минус ПР, отсутствие программирование через Ethernet. Все остальные объекты делаю на ПЛК и роутерах Mikrotik, подключенных в VNP-сеть. Объекты раскиданы по России, но могу из дома к любому подключиться и перепрограммировать, очень удобно.

    Демку сделал в CODESYS 3.5.13 штатными средствами. Она уже старая даже, года 2 ей. Сейчас уже покруче нарисовал. Просто это серийное производство, поэтому улучшаю годами. Все показания, кстати, с реального объекта в Москве, считываются моим домашним Raspberry в Волгограде из ПЛК в шкафу заказчика. Работает только на чтение, запись назад не идёт, поэтому можно жать на любые кнопки и ползунки.

    Про то как CODESYS3 на Raspberry поставить тоже писал. Статья устарела, но суть осталась. CODESYS ставится очень легко через саму среду, запущенную под Windows. На Raspberry надо только установить ОС, CODESYS автоматом определит и установит на него. Это очень просто и не нужно знать Линукс (сам его почти не знаю). Всё можно запустить и всё будет работать. Но сложности дальше — так как делаю на года Линукс надо настроить так чтобы он по минимуму писал на SD-карту и крутил почти всё в операционной память (типа READ-ONLY ОС). Но я с этим разобрался, теперь просто втыкаю через USB-адаптер новую SD-карту и копирую ОС на неё в два клика (работаю, кстати, в графической оболочке). И втыкаю эту карту в новый Raspberry. На ней прописываю новый IP-адрес и всё. 10 минут занимает.
    https://asutp-volgograd.com/blog/raspberry-pi-codesys-intro.html

    Да, переменные надо правильно именовать, это основная проблема по началу. Как и повторение кода и неиспользование массивов и циклов. Сам только наполовину этому следую, потому как использую вложенные в друг друга Функциональные блоки (FB) с десятками переменных и массивов. Сложно сразу давать правильные названия абстрактым сущностям. «bPumpOn» — это очень правильно, сразу видно что булева команда пуска насосу. У меня обычно типа: Zone[2].Pump[1].Run

    В этом второе отличие ПЛК — можно создавать массивы матрешечных FB и прогонять их в цикле. Вот делаю программы для котельных и отопления «умных домов», где то одна зона отопления, где-то пять, ещё и различаться могут. В каких-то зонах, есть приводы смесительных клапанов, в каких-то комнатные датчики температуры, в каких-то ничего нет. А программа-шаблон одна — просто в одном месте поменял количество зон и расставил различия через переменные-параметры. В ПР же надо добавлять или удалять куски кода.

  • 19 CS  [Москва]

    Я уже засыпаю, но пока мысль не ушла — черкну про про именования ещё, про «Zone[2].Pump[1].Run».
    В обычном проганьи это называется «магические числа» — числа, назначание которых хер поймёшь. Избавляться от этого нужно обязательно. Я использую константы или ENUM.
    То есть, к примеру, создаю константы типа
    ZnDom = 1,
    ZnBassein = 2,
    PmpGVS = 1,
    PmpOtopl = 2…
    Тогда твой код превращается в наглядную вещь: «Zone[ZnBassein].Pump[PmpGVS].Run» — всё читаемо и легко понятно.

    Гммм.. я боюсь показаться зазнайкой или не так понять тон — но допишу, что такие стандарты програмирования валяются в инете везде (если копнуть обычные языки типа СИшника). Например, вот тут есть немного https://www.rsdn.org/article/mag/200401/codestyle.XML.
    Так как я прогал на обычных языках, то оттуда и привык.

  • 20 MechMan  [Москва]

    Добавлю 5 копеек про расбери, поскольку с ним давно. Все таки линух знать придется. Хотя по мне убунта проще. Но когда нужна тонкая настройка — все равно в линух придется лезть. Только что дописал на Codesys опрос датчиков DHT22, пришлось тюнить производительность системы.
    Иначе отзывы датчика в микросекундах читаются через раз. И конечно, если делать что-то серьезное, не обойтись одноядерным runtime. А многоядерный уже денег стоит.

    ЗЫ. Борис, спасибо! По твоему блогу я кодесис на расбери и вкорячил!

  • 21 CS  [Москва]

    Boris Kalinin СПАСИБО! Правда, спасибо тебе огромное за инфу!
    Теперь есть, чего интересного почитать!! А то из моей сферы мне уже скучно — хочется чего-то нового!
    Как я понял, ты купил CodeSys для распсбери, и потом его тупо тиражируешь. То есть распсбери является ПЛКшкой, к которой мы коннектимся и имеем визуализацию. Или же она мастером коннектится по ModBus к какой-нить ПРке или ПЛК110, забирает от них нужные переменные — и херачит для них визуализацию?
    Так? Если так — то это ГЕНИАЛЬНО прям ВАЩЕ!!! И я понял, почему ты ПЛК110 юзаешь — потому что на распсбери потом можно CDS 3 прикрутить! ВАУУУ!!! Для меня это открытие уровня, когда я узнал что автоматы бывают B и C! =)

    Про переменные я тебе дописал, а про массивы FB — это вообще охуенно! Особенно в том, что ещё этот массив мелких FB (или матрёшечных) можно как Retain объявить. Прям такая тема крутая (я использовал в проекте сценарного управления светом как раз)!

    MechMan Я ни разу ничего не щупал. Планшета, WiFi и телефона на андроиде у меня так и не появилось (зато пульт появился), поэтому я как-то себя отрезал от этого, считая что там просто LAN не зайти, а нужен этот блядский WiFi и телефон…

  • 22 Boris Kalinin

    Абсолютно согласен про ENUM, тоже всегда использую их в нумерации групп механизмов(насосы: CWS:=1, DHW:=2, HEAT:=3, FEED:=4) и их статусов, но в серийных шкафах домашнего отопления чаще не даём названия зонам отопления, а просто нумеруем, поэтому Zone[1].

    Про стандарты програмирования. Есть такая организация PLCOpen, они разработали много стандартов для ПЛК, а крутые ребята из ОВЕНа в свободное время перевели основные документы, вот про кодирование:
    https://ftp.owen.ru/CoDeSys3/98_Books/plcopen_coding_guidelines_v10_11_ru.pdf

    MechMan, спасибо, рад что чем-то мои заметки помогли!

    CS, разок купил лицензию, но не пользуюсь. Дорого из-за того, что жестко привязывается и только к одной железке. И сложный процесс покупки.

    Использую бесплатную версию. Она работает 2 часа, потом средствами Линукса перезапускаю процесс, перезапуск занимает секунд 10. Поэтому как ПЛК не использую (лишь на одном объекте). Верно понял:

    мастером коннектится по ModBus к какой-нить ПРке или ПЛК110, забирает от них нужные переменные — и херачит для них визуализацию

    Ещё активно юзаю NODE-RED как шлюз для различных протоколов и сервисов. Для всех платформ существует, и для Raspberry и для Windows и кучи всего. На ней тоже рисую визуализации если нужно несложно и быстро.

  • 23 MechMan  [Москва]

    Лицензии
    https://store.codesys.com/codesys-control-for-raspberry-pi-sl.html
    или мултиядерная
    https://store.codesys.com/codesys-control-for-raspberry-pi-mc-sl.html
    Лицензируется либо soft-container или аппаратный ключ +35 евро.
    В первом случае — привязан к конкретной малинке, во втором можно переткнуть в другую.
    Без лицензии работает 2 часа (KNX, BACNet — 30 минут), лечится перезапуском по cron
    К ограничениям — минимальный цикл задачи 50мкс и не гарантированный, поскольку система не real-time.
    Но можно обойти и собрать real-time ядро для малинки

    У немцев купить нельзя, отправляют к дистрибьютору. ПК Пролог, Смоленск. Те с удовольствием все продают юрикам и ИП +20% НДС от цены немцев.
    Директор Игорь Петров. Есть много его статей и книги по CDS

    ЗЫ. Как я понимаю, у Овена под капотом то же самое, АРМ + расширенное железо +Linux RTOS + Лицензия CODESYS + промышленное исполнение

  • 24 CS  [Москва]

    Boris Kalinin Примерно понял про эту рапсбери. Гммм… постоянно перезагружать — нууу, я чего-то расстроился с этого.
    Я думал, что там будет всё нормально и правильно работать сразу. А это ж получаются бытовые костыли чуток: там перезагружай, там подправляй.
    Идею я на заметку возьму, потому что у меня несколько заказчиков как раз мозгуют в эту сторону. Вот будет наработанный опыт — я тогда и посоображаю, что из этого мне подойдёт.

    MechMan Не, ну если брать CDS на рапсбери только для визуализации — то похер на 50 мс/мкс.
    А безнал и прочее — это фигня, если надо будет — то куплю.
    Я-то думал, что можно и через сайт CDS купить с карточки, как на Алишке.

  • 25 MechMan  [Москва]

    Немцы позиционируют это как система для обучения и домашней автоматизации.
    А у тебя все равно решения коммерческие. Соответственно и выбор по другим критериям.

    Я-то думал, что можно и через сайт CDS купить с карточки, как на Алишке.

    Хрен там.

    Dear Sir or Madam,
    Unfortunately, delivery is not possible at this time due to legal and shipping conditions.
    Please contact our Distributor, Prolog Co. in Smolensk. info@prolog-plc.ru / http://www.prolog-plc.ru

    Пытался в овене купить — 2 раза переключали на специалиста по CDS — 2 раза никто не ответил

  • 26 CS  [Москва]

    Так я же ж юрлицо — я могу купить, если захочу.

  • 27 MechMan  [Москва]

    Дык ктож тебе мешает. С их сайта https://store.codesys.com/ не можешь

  • Boris Kalinin, пешиисчо :)

  • Господа программисты, и CS, и зашедшие на огонёк!

    Имею к вам научный вопрос. Стал осваивать ПЛК, худо-бедно могу накарябать схемки на FBD. В принципе, если логика какого-то макроса прописана, то ничего сверхсложного нет.
    Сложности возникают на другом уровне: в более-менее формально и наглядном описании работы всей системы, создание иерархии каких-то общих сигналов и т.п.

    Блок-схема (классическая) как инструмент тут не годится, поскольку процесс управления непрерывный. Больше похож на очередь сообщений в винде; когда-то маленько программировал под ней, но давно и немного.

    Понимаю, что не понимаю, что можно на эту тему почитать. По идее, должно быть много всяких способов описания алгоритмов, что-то по смыслу ближе и к ПЛК (или, может быть, системам управления вообще).

    Ткните пальцем, плиз )

  • 30 CS  [Москва]

    Слушай, набери вон щасм щас меня по телефону на 10 минут, а? И я тебе голосом всё поясню. Я на блоге такие простые вещи не разжёвывал сильно же…
    Так, основное описалово у меня было в посте «Логические реле и ПЛК: Как это работает«. И ещё было в описании ПЛК ОВЕН-110: https://cs-cs.net/plk-oven-110-programmiruem-na-codesys

    Очереди сообщений тут нет ни хера. Тут есть тупо ЗАДАЧИ. Которые ВСЕГДА крутятся в цикле. Бесконечно-постоянно.

  • Спасибо за предложение. Прежде чем отнимать твое драгоценное время, вначале прочитаю те посты.

  • Прочитал те посты. Там про другое. Видимо, я непонятно спросил, так бывает.

    Пример. Есть некий объект управления. Назовем его Шмательная в Мамушево :)
    На входе ПЛК будет несколько десятков сигналов от датчиков, всяких аварий оборудования, ошибки самих датчиков и т.п. К выходу прицеплено тоже много всяких котлов, насосов, кранов и прочей дребедени.

    Далее возникает необходимость структурировать все эти сигналы, выделить какие-то блоки обработки ошибок, управления. И тут начинается какая-то мешанина и путаница. Даже чисто визуально (если на FBD) уже хрен чего поймешь.
    Понятно, что надо сделать проект с несколькими уровнями иерархии и небольшим количеством макросов/связей в каждом из них.
    Вот у меня с проектированием структуры (сравнительно абстрактной) возникают проблемы, не знаю практичных подходов к этому.
    Если объяснить по-другому. Представим, что у нас обычный софтовый проект с несколькими исполнителями и архитектором. Вот я как исполнитель мелкие задачи для ПЛК решать могу, а как архитектор поделить всё на части и выдать самому себе какую-либо часть — нет.

  • 33 CS  [Москва]

    Теперь мне ни хера не понятно, что тебе непонятно.
    1. С софтовыми проектами сравнивать это НЕ надо и даже вредно, потому что в ПЛК совсем другие приёмы проганья. Например, тут вовсю используются глобальные переменные. Для ПЛК это норма, а для софта — вредно.
    2. Ну, проект в котором около 30 групп света, 4 набора тёплых полов (датчик — нагреватель), 4 электроклапана на отопление и датчики температуры-влажности в помещениях — вот это типа твоей котельной? Тоже датчики и исполнительные механизмы же. Я такие вещи ща прогаю только в путь.
    3. Всё равно я ни хрена не понял, что там не так. Забудь ты нахуй программирование под компы. Считай что на ПЛК ты делаешь щит, обычный. Вот как ты в случае сборки щита на отдельных реле температуры, реле времени, промежуточных реле собирал бы под эту котельную? Что там тогда было бы с обработкой ошибок и прочими херовинами?

    Ни хрена я тебя не понимаю. Так как я людей вообще не понимаю, то у меня уже складывается ощущение, что ты просто хочешь весь мой опыт из меня вытянуть и им пользоваться. Поэтому ты или набери и словами скажи, или яснее напиши детали.
    Что блин там в этой котельной не так-то? Ну датчики, оборудование, аварии. И? Ну сделай себе UDF (аналог) типа «Один контур котельной», который на вход будет принимать сигналы от датчиков и статуса оборудования, а не выходе будет выдавать сигналы ОК/Аварии, управления нужной фигнёй.
    А потом из этих UDF набираешь несколько одинаковых херовин.

  • По поводу вытягивания ценной информации. Отчасти, да, хотелось бы получить полезные знания. Обычно для этого люди задают друг другу вопросы, за исключением светской беседы о погоде или общения в каких-нибудь соцсетях )

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

    Относительно «проблематики». Я тоже пришел к тому, что ПЛК к обычному программированию не имеет прямого отношения. И к ООП, кстати, тоже. Хотя и слышал мнение, что FBD типа ООП-языка. Но нет.
    Поэтому, видимо, блок-схемы и прочие штуки плохо годятся.

    Насчет «ассемблерности» и глобальных переменных. Вот это тепло! В том смысле, что программирование ПЛК очень подталкивает к этим дурным практикам, от которых в других направлениях сумели отказаться. А тут — бери любой сигнал и обрабатывай где угодно. Сразу каша и бардак. Очень похоже даже на машинные коды, когда логика перемешана с данными.
    Значит, надо как-то искусственно структурировать проект. «Чтобы не думать», как ты часто повторяешь.

    Почитал малость про то, какие вообще существуют подходы, кроме старинных.
    Наткнулся на пару интересных — event-driven и reactive. Вот тут уже общий подход к обработке информации близок к тому, с чем мы имеем дело. Например, изначально есть понятие потока информации (данных), потока ошибок и поток управления потоками. Плюс еще один принцип, что любое сообщение в потоке используется строго одним получателем. Это мой весьма вольный перевод ) Но идеи весьма интересные. Можно добиться гораздо большей надежности программ, масштабируемости, гибкости и пр.

    Вопрос в том, как конкретно увязать эти (или какие-то еще) абстракции с практическим проектированием/программированием. Условно говоря, придумать тупые способы записи исходных условий, чтобы потом тупо брать тот или иной элемент в готовом виде (из макросов) или немного корректировать.

    Сории за сумбур вместо музыки: у меня в голове сейчас смесь каши с ирландким рагу ) Поэтому просто мысли, какие есть, некий режим мозгового штурма.

  • 35 CS  [Москва]

    БЛЯДЬ! СЦУКО! НАБЕРИ МНЕ НА ТЕЛЕФОН!! И попиздим минут 30 — и всё рассортируем в мозгах!
    И меня что бесит ещё, блядь — так это то, что вместо прямого «Да, сэр, так точно, сэр! Нужна помощь» ты ходишь вокруг да около и что-то там пытаешься выспросить.

  • 36 eteh  [Санкт-Петербург]

    loa
    https://habrastorage.org/webt/pg/or/0p/pgor0plj5atrogeuobxhgm9ntdm.png мой проект на сименс
    https://habrastorage.org/webt/wp/dr/1t/wpdr1t-u2k9ossn1qnlyjl3f26i.png тестовое осваивание овена в офисе

    То есть получается — суть в чем в ПЛК:
    1. любую программу в нормальной скаде можно разделить на подпрограммы
    2. подпрограммы могут быть написаны на любом языке
    3. соответственно на входа вышестоящей программы ты можешь подавать данные из результата выполнения любой из нижестоящей подпрограммы или базы данных

  • 37 CS  [Москва]

    eteh Телефон публично писать не надо.
    А мне он так и не набрал. Странно это всё, странно.

  • 38 eteh  [Санкт-Петербург]

    CS
    спасибо за редактирование и безопасность=)
    ну я в принципе понимаю человека — я даже имея высшее по автоматизации первые объекты пытался сделать сам — я же инженер, а потом вызванивал опытных товарищей — потому что, то электрическая часть глючила, то программу не так писал, и по опыту знакомых набрал какой-то свой минимум…

  • Наберу, просто не получилось выбрать время. Ненавижу на бегу общаться, отвлекаться на то, на сё.

Оставить отзыв

Вы должны войти на блог, чтобы оставить комментарий.