Эпиграф. Лучше картинкой.

Из "Вавилонского разговорника". Почитать можно, например, здесь. Минимум полчаса позитива гарантировано!
Лечение геморроя попытка разобраться в проблеме в котельной, в которой вообще никогда не был - по телефону - всегда увлекательное, и почти всегда бесполезное занятие.
Но прям сейчас приехать я не могу, так что попробуем.
Действующие лица:
Операторы, пришедшие в крышную котельную подрегулировать график отопления (О)
Я (Я)
(О) Мы тут меняли график отопления, и тут вдруг вообще все вырубилось!
(Я) Что и зачем меняли?
(О) Нужно похолоднее сделать по случаю весны.
(Я) Ну, так вполне может быть. На улице плюс восемь. Наверно, с вашими новыми уставками регулятор решил, что отопление пора отключать. А нагрузки по горячей воде прям сейчас нету. Для проверки - верните все как было, должно включиться обратно.
(О) Не-не-не, у нас и насосы вырубились! А вернуть на место мы не можем! Панель зависла!
(Я) Попробуйте перезагрузить шкаф управления. На нем должен быть большой рубильник. Выключите и через минуту включите.
(а у меня будет минута на подумать)
(О) Это мы первым делом сделали. Не помогает!
(фиг тебе, а не минута на подумать.)
Хотя о чем тут думать, явно контроллер свалился в стоп. Но вот почему, и как его оттуда выгнать?
Так, котельная новая, наверняка должен быть бесперебойник.
(Я) Можете открыть шкаф?
(О) Открыли. Но мы тут ни икса не понимаем.
(Я) Бесперебойник наверняка видели. Есть что-нито похожее?
(к этому моменту у меня появляются смутные соображения, чтовсе пропало без программатора уже никак. Но все ж попробуем)
(О) Ага, есть такая штука. Сейчас выключим-включим.
(через минуту)
(О) Все то же самое. Не помогло.
(finita la comedia).
(Я) Да я уж понял. Встретимся на месте в десять вечера. Нет, раньше никак. Нет, сами вы ничего не сделаете. Ничего, весна на дворе, насмерть не замерзнете...
С программатора разобраться, что произошло, несложно-недолго. Даже без исходников.
Лирическое отступление. Что такое график отопления? Это, как следует из названия, график. На котором везде температура. Только по иксу - температура на улице, а по игреку - температуры подачи и обратки теплоносителя.
Наиболее вероятный в стране график (но далеко не самый лучший) - вот такой.

Отсюда. Там же (и еще вот здесь) можно почитать подробнее. А также изучить обоснования "почему старые нерегулируемые системы с механическим элеватором и соплом, и даже с открытым водоразбором, никто переделывать не собирается".
У нас ситуация лучше. Новостройка с крышной котельной, контур отопления никак не завязан на ГВС, график по отопительной нагрузке - безо всяких "полок".
Просто отрезок прямой. Настраивается двумя парами значений "Т уличная максимум и минимум" и "Т подачи минимум и максимум".
Вот одно из них (Т уличная максимум) - и поменяли.
Каким же образом "совершенно безобидное" изменение одной уставки привело к полной и не устраняемой без программатора остановке котельной?
Чтобы вычислить нужную температуру подачи по актуальной температуре уличной и заданному графику, контроллер обсчитывает стандартное уравнение прямой.
Уравнение можно вспомнить из пятого класса школы, можно вывести на бумажке, или, наконец, нагуглить. Даже не знаю, что быстрее.
Вот оно:

X1,X2,Y1,Y2 - это у нас уставки с панели, задающие график.
X - температура с уличного датчика
Y - результат расчета, он же уставка для регулятора температуры, управления каскадом и так далее.
Но что будет, если случайно ткнуть на панели не туда и ввести X2 равное X1?
На самом деле, вариантов много....
Зависит от контроллера, программиста, объекта...
Контроллер S7-1200 от деления на ноль в стоп не сваливается, а ставит флаг ошибки.
Но сий прискорбный факт в нашей котельной никак не проверяется. Все последующие расчеты сходят с ума.
Что там происходит дальше и почему программа уходит в вечный цикл - в десять вечера и без исходников мне выяснять лень, да и незачем.
По тайм-ауту времени цикла контроллер уходит в стоп.
(нет, конечно, на такой случай предусмотрено системное исключение с диагностикой.... но про это ж надо знать! И мало знать, еще и запрограммировать надо! А если ничего не запрограммировано - вот тогда точно стоп)
После чего панель теряет с ним связь, и вернуть уставку в исходное состояние с панели уже невозможно.
Конфигурация контроллера выставлена "в режиме стоп выключить все выходы". Ну, вот все и потухло.
С программатора я вернул уставки графика на место и перезапустил контроллер. Объяснил операторам причину и попросил больше не вводить одинаковые значения сюда и вот сюда.
На сим моя работа закончена. Править чужую программу без согласования, да еще и на гарантийном объекте, совершенно незачем.
Как бороться с такими фокусами?
Правило первое: если оператору не мешать - он может ввести все, что ему придет в голову. (и не сможет объяснить, почему ему пришло в голову именно это)
Правило второе: программа при этом обязана выжить. "если не обругаться, то хотя бы съесть и не подавиться".
Задание лимитов на значения штатными средствами панели помогает далеко не всегда (хотя никогда не бывет лишним).
С динамическими лимитами лучше и проще, но далеко не все панели их поддерживают.
Единственный выход - сохранять то, что оператору пришло в голову ввести, не сразу в рабочие переменные, а во временный буфер. Там сперва проверить, годится ли эта циферка в это мест, и если нет - хотя бы вернуть прежнее значение.
(глядишь, с N неудачной попытки любой оператор сообразит "что-то я делаю не то").
Совсем хорошо - вывести большое красное сообщение с текстом, зависящим от настроения программиста.
Ну, а программисту данной конкретной котельной из неведомого мне ОББ (общества с безграничной безответственностью) "Вектор-Теплоснаб" - нужно подарить вышеупомянутый "Вавилонский разговорник". Открыв его на странице с парочкой подходящих к нему фраз, на выбор.


Из "Вавилонского разговорника". Почитать можно, например, здесь. Минимум полчаса позитива гарантировано!
Но прям сейчас приехать я не могу, так что попробуем.
Действующие лица:
Операторы, пришедшие в крышную котельную подрегулировать график отопления (О)
Я (Я)
(О) Мы тут меняли график отопления, и тут вдруг вообще все вырубилось!
(Я) Что и зачем меняли?
(О) Нужно похолоднее сделать по случаю весны.
(Я) Ну, так вполне может быть. На улице плюс восемь. Наверно, с вашими новыми уставками регулятор решил, что отопление пора отключать. А нагрузки по горячей воде прям сейчас нету. Для проверки - верните все как было, должно включиться обратно.
(О) Не-не-не, у нас и насосы вырубились! А вернуть на место мы не можем! Панель зависла!
(Я) Попробуйте перезагрузить шкаф управления. На нем должен быть большой рубильник. Выключите и через минуту включите.
(а у меня будет минута на подумать)
(О) Это мы первым делом сделали. Не помогает!
(фиг тебе, а не минута на подумать.)
Хотя о чем тут думать, явно контроллер свалился в стоп. Но вот почему, и как его оттуда выгнать?
Так, котельная новая, наверняка должен быть бесперебойник.
(Я) Можете открыть шкаф?
(О) Открыли. Но мы тут ни икса не понимаем.
(Я) Бесперебойник наверняка видели. Есть что-нито похожее?
(к этому моменту у меня появляются смутные соображения, что
(О) Ага, есть такая штука. Сейчас выключим-включим.
(через минуту)
(О) Все то же самое. Не помогло.
(finita la comedia).
(Я) Да я уж понял. Встретимся на месте в десять вечера. Нет, раньше никак. Нет, сами вы ничего не сделаете. Ничего, весна на дворе, насмерть не замерзнете...
С программатора разобраться, что произошло, несложно-недолго. Даже без исходников.
Лирическое отступление. Что такое график отопления? Это, как следует из названия, график. На котором везде температура. Только по иксу - температура на улице, а по игреку - температуры подачи и обратки теплоносителя.
Наиболее вероятный в стране график (но далеко не самый лучший) - вот такой.

Отсюда. Там же (и еще вот здесь) можно почитать подробнее. А также изучить обоснования "почему старые нерегулируемые системы с механическим элеватором и соплом, и даже с открытым водоразбором, никто переделывать не собирается".
У нас ситуация лучше. Новостройка с крышной котельной, контур отопления никак не завязан на ГВС, график по отопительной нагрузке - безо всяких "полок".
Просто отрезок прямой. Настраивается двумя парами значений "Т уличная максимум и минимум" и "Т подачи минимум и максимум".
Вот одно из них (Т уличная максимум) - и поменяли.
Каким же образом "совершенно безобидное" изменение одной уставки привело к полной и не устраняемой без программатора остановке котельной?
Чтобы вычислить нужную температуру подачи по актуальной температуре уличной и заданному графику, контроллер обсчитывает стандартное уравнение прямой.
Уравнение можно вспомнить из пятого класса школы, можно вывести на бумажке, или, наконец, нагуглить. Даже не знаю, что быстрее.
Вот оно:

X1,X2,Y1,Y2 - это у нас уставки с панели, задающие график.
X - температура с уличного датчика
Y - результат расчета, он же уставка для регулятора температуры, управления каскадом и так далее.
Но что будет, если случайно ткнуть на панели не туда и ввести X2 равное X1?
На самом деле, вариантов много....
Зависит от контроллера, программиста, объекта...
Контроллер S7-1200 от деления на ноль в стоп не сваливается, а ставит флаг ошибки.
Но сий прискорбный факт в нашей котельной никак не проверяется. Все последующие расчеты сходят с ума.
Что там происходит дальше и почему программа уходит в вечный цикл - в десять вечера и без исходников мне выяснять лень, да и незачем.
По тайм-ауту времени цикла контроллер уходит в стоп.
(нет, конечно, на такой случай предусмотрено системное исключение с диагностикой.... но про это ж надо знать! И мало знать, еще и запрограммировать надо! А если ничего не запрограммировано - вот тогда точно стоп)
После чего панель теряет с ним связь, и вернуть уставку в исходное состояние с панели уже невозможно.
Конфигурация контроллера выставлена "в режиме стоп выключить все выходы". Ну, вот все и потухло.
С программатора я вернул уставки графика на место и перезапустил контроллер. Объяснил операторам причину и попросил больше не вводить одинаковые значения сюда и вот сюда.
На сим моя работа закончена. Править чужую программу без согласования, да еще и на гарантийном объекте, совершенно незачем.
Как бороться с такими фокусами?
Правило первое: если оператору не мешать - он может ввести все, что ему придет в голову. (и не сможет объяснить, почему ему пришло в голову именно это)
Правило второе: программа при этом обязана выжить. "если не обругаться, то хотя бы съесть и не подавиться".
Задание лимитов на значения штатными средствами панели помогает далеко не всегда (хотя никогда не бывет лишним).
С динамическими лимитами лучше и проще, но далеко не все панели их поддерживают.
Единственный выход - сохранять то, что оператору пришло в голову ввести, не сразу в рабочие переменные, а во временный буфер. Там сперва проверить, годится ли эта циферка в это мест, и если нет - хотя бы вернуть прежнее значение.
(глядишь, с N неудачной попытки любой оператор сообразит "что-то я делаю не то").
Совсем хорошо - вывести большое красное сообщение с текстом, зависящим от настроения программиста.
Ну, а программисту данной конкретной котельной из неведомого мне ОББ (общества с безграничной безответственностью) "Вектор-Теплоснаб" - нужно подарить вышеупомянутый "Вавилонский разговорник". Открыв его на странице с парочкой подходящих к нему фраз, на выбор.

Tags:
У вас уже не впервые такой случай
Прочёл статью по ссылке - огорчило регулирование форточкой.
Собственно, и сам так делаю, хотя и затратно, и неудобно, т.к. продуть может.
Вы как у себя в квартире поступили?
Re: У вас уже не впервые такой случай
В квартире?
Есть два варианта.
Первый - прилетели алиены-рептилоиды с Нибиру и воздействовали на мозги населения пси-волнами.
После чего все дружно установили у себя двухкамерные стеклопакеты, скинулись по 15тыс и заменили нерегулируемый элеватор на изолированный теплопункт с насосной циркуляцией и погодозависимым регулятором подачи, переделали систему отопления, сделав байпасы ко всем батареям для нормальной независимой работы локальных регуляторов, заодно утеплили фасады и техэтаж и так далее... при этом все службы от ЖЭУ до теплосетей всячески одобряют все эти мероприятия, согласовывают за 1 рабочий день, и помогают автолюлькой и сварщиком.
Второй - понять и простить соседа этажом выше, у которого нет денег на стеклопакеты и рамы сгнили до состояния "можно проткнуть пальцем", алкаша этажом ниже, который как разбил пару внутренних стекол два года назад - так и пофих, неизвестно кого, кинувшего шланг от батареи в ванную потому что это дешевле чем горячую воду лить, и бабушку на первом этаже, которая никогда не закрывает форточку потому что через нее ходить гулять кот. При этом все дружно жалуются на счет за отопление 6 тыс в месяц, но не испытывают ни малейшего желания скинуться по нескольку тысяч на модернизацию, окупающуюся за одну зиму путем снижения расхода тепла.
Понять, простить, поставить хорошие стеклопакеты и регулировать температуру форточкой.
Re: У вас уже не впервые такой случай
Да и алкаш снизу- это очень приятная соседка-пенсионер-детский врач, так что не надо тут:)
Юмор я понимаю,и часть из него правда. В моём подъезде есть люди, которые мёрзнут. Мне же весь отопительный сезон жарко.
Я вот и думаю- что можно сделать в индивидуальном порядке.
Вроде есть на батарею автоматические перепускные клапана, которые сами регулируют температуру.
Re: У вас уже не впервые такой случай
Потому что получается разбалансировка системы.
Может быть и еще хуже. Например, у нас изначально не было байпасов к батареям вообще. Я у себя сделал, но и только.
Если я без байпаса подожму расход - остальной подъезд вообще вымерзнет
Re: У вас уже не впервые такой случай
Что бы: или в обход радиатора, или в радиатор?
Re: У вас уже не впервые такой случай
(спойлер: никак)
Посему любые ковыряния у себя в батареях - просто сбивают режим и разбалансируют систему
Если в наличии теплопункт с регулируемой температурой подачи - вот тогда все будет работать как нужно
Re: У вас уже не впервые такой случай
P.S. Если у вас the_high_performance_HMI_handbook с твирп-икс, могу выслать в более читабельном варианте.
Re: У вас уже не впервые такой случай
Причем бяки бывают разные.
Из услышанного в курилке:
Видите "опциональную полочку" справа-вверху на графике отопления в посте?
Откуда она берется?
А это ограничение максимальной температуры, допускаемое современной ППУ изоляцией (всем хороша. но больше +130 нельзя)
Так вот:
"Точечно застроили" новый дом вместо старых, проложили к нему кусок теплотрассы с ППУ изоляцией.
Но по неизвестной причине воткнули классический теплоузел с элеватором (и, наверно, с подбором сопла и диафрагмы чуть ошиблись)
Дом новый, везде стеклопакеты, на всех батареях отсечные краны, теплосчетчик домовой...
Жильцам жарко, они начали зажимать подачу в батареи.
А регулятор на ТЭЦ не может под каждый дом подстраиваться.
Итог - нескомпенсированный малый отбор тепла, перегрев подающей трубы и физическое разрушение теплоизоляци...
Re: У вас уже не впервые такой случай
Re: У вас уже не впервые такой случай
Ставить метеостанцию в обычный дом можно только для "посмотреть на циферки"
Re: У вас уже не впервые такой случай
Закрыть ковектор заслонкой гораздо проще.
Re: У вас уже не впервые такой случай
Тряпку на него положить?
Или краном поджать?
Re: У вас уже не впервые такой случай
http://водолей.рф/content/img_cache/catalog_big/catalog/1351664450.jpg
Можно по вкусу регулировать конвекцию через собственно пластинчатый теплообменник.
У нас в одной батарее ее не было, кладем картонку.
С другой стороны, пространство между пластинами со временем забивается пылью и это сильно ухудшает теплообмен. В морозы очень неприятно :-)
Re: У вас уже не впервые такой случай
Re: У вас уже не впервые такой случай
Re: У вас уже не впервые такой случай
no subject
no subject
:(
се ля ви
no subject
no subject
Как сейчас вообще строят дома - это вообще тихий ужас.
no subject
история, увы, достаточно стандартна и распространена в самых различных областях человеческой деятельности :(
no subject
no subject
но всё равно, что называется, "Жизнь богаче. И жёстче."©
no subject
-
все намного, намного проще.
Есть три набора переменных (три конфига).
1. Дефолтный. Прошит намертво, без спецпароля не меняется. При сбросе с нажатой кнопкой "сброс" - откатываемся на него
2. Гарантированно рабочий. Откатываемся на него при перезагрузке
3. Рабочий. Работает пока не перезагрузили. Особой магией (еще один пароль) может быть превращен в гарантированно рабочий.
Усе. Если что пошло не так - жмем ресет и откатываемся на рабочий конфиг
no subject
Можно совместить с работой с рецептами, и прочая
Да, на большинстве контроллеров нету кнопки ресет. А даже если есть - чтобы ее нажать, нужно прилететь на вертолете.
Кнопка ресет рисуется на панели, либо хардварная на шкафу... но чтобы это работало - контроллер должен работать и выполнять программу
Посему задача номер ноль - контроллер не должен сваливаться в стоп ни при каких обстоятельствах.
Без этого любые извращения-ухищрения малополезны
no subject
no subject
Время срабатывания настраивается, время цикла можно хоть в программаторе посмотреть со всякими гистограммами, хоть из программы узнать системной функцией.
Все вполне разумно и удобно.
Но вот если обработка исключения НЕ запрограммирована (наш случай) - тады ой. Контроллер уходит в СТОП.
no subject
Правда, за это на программиста ложится задача обставить означенный внезапный резет, и не скажу что многие этим заморачиваются.
no subject
Только в "больших" контроллерах число исключений измеряется десятками.
Вообще идеология ПЛК и встраиваемых систем весьма близка. Ну, в ПЛК массу "служебных" дел делает операционка и на них можно не отвлекаться - так и в Ардуино то же самое :)
"состояния "окуклился в вечном цикле" при минимальной осторожности еще надо добиться"
Если программа один раз со старта свалилась в мертвый цикл и ничего не изменилось - в следующий ресет она свалится ровно туда же
Посему и делается ИСКЛЮЧЕНИЕ - для возможности как-то обработать такую ситуацию
Еще нюанс: есть разница между холодным и горячим стартами. Во втором случае не нужно инициализировать память и периферию
"Правда, за это на программиста ложится задача обставить означенный внезапный резет, и не скажу что многие этим заморачиваются."
Об чем и речь!
no subject
Забавно бывает, кстати, когда заказывающее ПО подразделение глядит на растущий список вопросов "а что мы делаем когда то? А что мы делаем когда это?
А что будет если в коровьем молоке сварить метеор?", и с ужасом начинает смотреть на своё поделие: неужели любовно выпестованный дизайн может принести столь разнообразные гадости?!Это если прогеры адекватные
Бывает, приходится ТЗ писать на небольшие модификации промышленных программ.
Хороший подрядчик- заклюёт подобными вопросами, зато сделает как надо ( и с исключениями, и с обработкой нештатных ситуаций, и с заделом на будущее).
А кто вопросов не задаёт...потом переделывает:)
no subject
Сперва кажется вредным... а на самом деле хороший и добрый
no subject
И выходит дивная ситуация в духе "глухой спрашивает слепого, понравился ли ему фильм". И хорошо если оно не выходит по нотам: poor requirements -> Therac-25.
no subject
no subject
С ним ещё легче работать, если нужно найти перпендикуляр, пересечение, расстояние и т. д., поэтому в аналитической геометрии используется только оно, но я думаю в котельной это не надо :)
По двум точкам коэффициенты находятся вообще без деления:
A = y2 - y1
B = x1 - x2
C = x2y1 - x1y2
no subject
А то что в посте - это уже готовая выведенная формула для конкретной задачи "найти ординату точки на отрезке, заданной координатами концов, по данной абсциссе"
Ну, и если уж говорить о реальных задачах, еще чуть-чуть сложнее. Нужно не забыть, что если абсцисса данная - выходит за интервал абсцисс отрезка, то мы все равно должны получить нечто осмысленное. Обычно при выходе в минус (снижение температуры) - работаем на максимальной ординате отрезка, при выходе в плюс есть варианты: работать на минимальной ординате, либо выключить отопление нафих, либо сперва одно, а через N часов другое...
Ах, да, чисто математические результаты расчетов, равно как и исходные данные, нам надобно еще сопоставить с "железом". Например, вскипятить водогрейный котел категорически низзя. То бишь нужно поглядывать за давлением и ставить независимый лимит по температуре закипания воды при данном давлении (и запас!). Нельзя гнать в котел слишком холодную обратку: дело может дойти до конденсации уходящих газов и разъедании котла кислотой из них. Для этого может быть рециркуляция со своим насосом (и своими условиями включения). Да, в любом случае котел (и все остальное) нужно не заморозить (и зря смеетесь! случаи были)
Ой, я совсем забыл: любой датчик, в том числе уличной температуры - может сломаться, при этом нужно как минимум не заморозить жителей микрорайона (стало быть, наша матмодель должна такую ситуацию предусматривать)
Ой, а бывает, что наш график - переменный по времени... ну, скажем, с пн по пт народ в офисе есть и нужна одна температура, в сб-вс - пофигу, абы только росы не было и не замерзло, но мгновенно прогреть помещение невозможно, и к утру понедельника нужно включить прогрев заранее...
Это отопление... а бывают случаи, что тот же контур используется еще и для вентиляции, с осушением.
Тут все наоборот: для осушения - наибольшая температура в горячем теплообменнике потребна в июльскую грозу...
Уже страшно?
А это всего-то небольшой кусочек алгоритма управления простенькой водогрейной котельной.
no subject
no subject
no subject
Так же как и самолёты- вроде 747ых построили много, вроде типовой- но КАЖДЫЙ самолёт уникален.
Думаю, так же и в отоплении.
Набор датчиков может быть разный, нагрузка- разная. Климат тоже не везде одинаков.
А уж как у каждого рука зачешется...
no subject
Вот большие / нестандартные объекты - там да, каждый раз есть над чем поломать голову.
no subject
Такого рода объекты вообще производятся серийно.
no subject
no subject
no subject
no subject
if(timersrc%valdes[2]==0){
// выполнение кода каждые per секунд
Вроде бы % - это ОСТАТОК от деления, и самого деления на ноль тут не произойдет.... ОДНАКО! при valdes[2]=0 - контроллер улетал в перезапуск :-)
Отловил, конечно.... Но нервов мне попортил изрядно!
P.S.
if(valdes[2] != 0){
if(timersrc%valdes[2]==0){
// выполнение кода каждые per секунд
И все....
no subject