fixik_papus: (Default)
[personal profile] fixik_papus
Эпиграф. Лучше картинкой.



Из "Вавилонского разговорника". Почитать можно, например, здесь. Минимум полчаса позитива гарантировано!

Лечение геморроя попытка разобраться в проблеме в котельной, в которой вообще никогда не был - по телефону - всегда увлекательное, и почти всегда бесполезное занятие.
Но прям сейчас приехать я не могу, так что попробуем.
Действующие лица:
Операторы, пришедшие в крышную котельную подрегулировать график отопления (О)
Я (Я)

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

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

С программатора разобраться, что произошло, несложно-недолго. Даже без исходников.

Лирическое отступление. Что такое график отопления? Это, как следует из названия, график. На котором везде температура. Только по иксу - температура на улице, а по игреку - температуры подачи и обратки теплоносителя.
Наиболее вероятный в стране график (но далеко не самый лучший) - вот такой.



Отсюда. Там же (и еще вот здесь) можно почитать подробнее. А также изучить обоснования "почему старые нерегулируемые системы с механическим элеватором и соплом, и даже с открытым водоразбором, никто переделывать не собирается".

У нас ситуация лучше. Новостройка с крышной котельной, контур отопления никак не завязан на ГВС, график по отопительной нагрузке - безо всяких "полок".
Просто отрезок прямой. Настраивается двумя парами значений "Т уличная максимум и минимум" и "Т подачи минимум и максимум".
Вот одно из них (Т уличная максимум) - и поменяли.


Каким же образом "совершенно безобидное" изменение одной уставки привело к полной и не устраняемой без программатора остановке котельной?
Чтобы вычислить нужную температуру подачи по актуальной температуре уличной и заданному графику, контроллер обсчитывает стандартное уравнение прямой.
Уравнение можно вспомнить из пятого класса школы,  можно вывести на бумажке, или, наконец, нагуглить. Даже не знаю, что быстрее.
Вот оно:



X1,X2,Y1,Y2 - это у нас уставки с панели, задающие график.
X - температура с уличного датчика
Y - результат расчета, он же уставка для регулятора температуры, управления каскадом и так далее.

Но что будет, если случайно ткнуть на панели не туда и ввести X2 равное X1?

На самом деле, вариантов много....
Зависит от контроллера, программиста, объекта...

Контроллер S7-1200 от деления на ноль в стоп не сваливается, а ставит флаг ошибки.
Но сий прискорбный факт в нашей котельной никак не проверяется. Все последующие расчеты сходят с ума.
Что там происходит дальше и почему программа уходит в вечный цикл - в десять вечера и без исходников мне выяснять лень, да и незачем.
По тайм-ауту времени цикла контроллер уходит в стоп.
(нет, конечно, на такой случай предусмотрено системное исключение с диагностикой.... но про это ж надо знать! И мало знать, еще и запрограммировать надо! А если ничего не запрограммировано - вот тогда точно стоп)
После чего панель теряет с ним связь, и вернуть уставку в исходное состояние с панели уже невозможно.
Конфигурация контроллера выставлена "в режиме стоп выключить все выходы". Ну, вот все и потухло.

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

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

Задание лимитов на значения штатными средствами панели помогает далеко не всегда (хотя никогда не бывет лишним).
С динамическими лимитами лучше и проще, но далеко не все панели их поддерживают.
Единственный выход - сохранять то, что оператору пришло в голову ввести, не сразу в рабочие переменные, а во временный буфер. Там сперва проверить, годится ли эта циферка в это мест, и если нет - хотя бы вернуть прежнее значение.
(глядишь, с N неудачной попытки любой оператор сообразит "что-то я делаю не то").
Совсем хорошо - вывести большое красное сообщение с текстом, зависящим от настроения программиста.

Ну, а программисту данной конкретной котельной из неведомого мне ОББ (общества с безграничной безответственностью) "Вектор-Теплоснаб" - нужно подарить вышеупомянутый "Вавилонский разговорник". Открыв его на странице с парочкой подходящих к нему фраз, на выбор.


 
nnm9: (Default)
From: [personal profile] nnm9
А вам везёт на деление на ноль.
Прочёл статью по ссылке - огорчило регулирование форточкой.
Собственно, и сам так делаю, хотя и затратно, и неудобно, т.к. продуть может.

Вы как у себя в квартире поступили?
nnm9: (Default)
From: [personal profile] nnm9
Вы удивитесь, но выходит около 2,5 тыр в месяц. Ещё приемлемо:)

Да и алкаш снизу- это очень приятная соседка-пенсионер-детский врач, так что не надо тут:)

Юмор я понимаю,и часть из него правда. В моём подъезде есть люди, которые мёрзнут. Мне же весь отопительный сезон жарко.

Я вот и думаю- что можно сделать в индивидуальном порядке.
Вроде есть на батарею автоматические перепускные клапана, которые сами регулируют температуру.
nnm9: (Default)
From: [personal profile] nnm9
А разве нет трёхходовых термостатированных клапанов?
Что бы: или в обход радиатора, или в радиатор?
nnm9: (Default)
From: [personal profile] nnm9
Правильно я понимаю- если я себе такое вкорячу, то у меня, может, и заработает, но систему в целом может начать лихорадить?

P.S. Если у вас the_high_performance_HMI_handbook с твирп-икс, могу выслать в более читабельном варианте.
nnm9: (Default)
From: [personal profile] nnm9
А погодные станции ставят на дом- это из той же оперы, или совсем другое устройство?
vlkamov: Рембрандт. Автопортрет с широко открытыми глазами. (Default)
From: [personal profile] vlkamov
> байпасы ко всем батареям

Закрыть ковектор заслонкой гораздо проще.


vlkamov: Рембрандт. Автопортрет с широко открытыми глазами. (Default)
From: [personal profile] vlkamov
В конвекторах раньше была штатная заслонка, вот здесь ее видно
http://водолей.рф/content/img_cache/catalog_big/catalog/1351664450.jpg

Можно по вкусу регулировать конвекцию через собственно пластинчатый теплообменник.
У нас в одной батарее ее не было, кладем картонку.

С другой стороны, пространство между пластинами со временем забивается пылью и это сильно ухудшает теплообмен. В морозы очень неприятно :-)
vlkamov: Рембрандт. Автопортрет с широко открытыми глазами. (Default)
From: [personal profile] vlkamov
Еще бы, байпас - штука сложная, дорогая ;-)
bobojamba: (Default)
From: [personal profile] bobojamba
Они в панельных 9/10-зтажках 75-й серии стоят.
Date: 8 May 2017 15:44 (UTC)

pritkiy_kaban: (Default)
From: [personal profile] pritkiy_kaban
Ай-ай-ай...весьма жалко что на объект пригнали не пресловутый вектортехснаб. Глядишь, выучили бы выражение "презумпция опасности пользователя".
Date: 8 May 2017 20:57 (UTC)

pritkiy_kaban: (Default)
From: [personal profile] pritkiy_kaban
Видимо, эти ребята из серии "Возьми (лучше всего гос)заказ, найми студентов, сдай и беги" (с)?
Date: 8 May 2017 16:34 (UTC)

dmarck: (Default)
From: [personal profile] dmarck
иллюстрацыи разговорником прекрасны.

история, увы, достаточно стандартна и распространена в самых различных областях человеческой деятельности :(
Date: 8 May 2017 20:16 (UTC)

dmarck: (Default)
From: [personal profile] dmarck
это да. удивительно, что у (вымарано) существуют весьма объёмные документы по сертификации (и обеспечения дополнительной живучести) решений на транспорт, энергетику, медицинские учреждения -- точнее, у нас они *вроде как* тоже существуют, но вот тем не менее...

но всё равно, что называется, "Жизнь богаче. И жёстче."©
Date: 8 May 2017 17:06 (UTC)

scif_yar: (Default)
From: [personal profile] scif_yar
>>Единственный выход - сохранять то, что оператору пришло в голову ввести, не сразу в рабочие переменные, а во временный буфер
-
все намного, намного проще.
Есть три набора переменных (три конфига).
1. Дефолтный. Прошит намертво, без спецпароля не меняется. При сбросе с нажатой кнопкой "сброс" - откатываемся на него
2. Гарантированно рабочий. Откатываемся на него при перезагрузке
3. Рабочий. Работает пока не перезагрузили. Особой магией (еще один пароль) может быть превращен в гарантированно рабочий.

Усе. Если что пошло не так - жмем ресет и откатываемся на рабочий конфиг
Date: 8 May 2017 21:12 (UTC)

pritkiy_kaban: (Default)
From: [personal profile] pritkiy_kaban
Если я правильно понял, лепившее исходную программу дарование не любит вражеское слово "вотчдог" (хотя не знаю в каком виде оно проявляется в ПЛК).
Date: 8 May 2017 21:28 (UTC)

pritkiy_kaban: (Default)
From: [personal profile] pritkiy_kaban
Почему спрашиваю: у всяческих маломерков (PIC-и, etc.) обычно два рубежа обороны: системные исключения/трэпы (лопнул стек, обосрался с указателем, поделил на ноль) и тупой как бревно вотчдог, который по истечении таймера за шкирку тащит чип в начало программы, вне зависимости от того где оно повисло. Если этим разумно пользоваться, то состояния "окуклился в вечном цикле" при минимальной осторожности еще надо добиться.

Правда, за это на программиста ложится задача обставить означенный внезапный резет, и не скажу что многие этим заморачиваются.
Date: 8 May 2017 22:07 (UTC)

pritkiy_kaban: (Default)
From: [personal profile] pritkiy_kaban
Увы, всё так.

Забавно бывает, кстати, когда заказывающее ПО подразделение глядит на растущий список вопросов "а что мы делаем когда то? А что мы делаем когда это? А что будет если в коровьем молоке сварить метеор?", и с ужасом начинает смотреть на своё поделие: неужели любовно выпестованный дизайн может принести столь разнообразные гадости?!
nnm9: (Default)
From: [personal profile] nnm9
Отлично, если такие вопросы поступают.

Бывает, приходится ТЗ писать на небольшие модификации промышленных программ.
Хороший подрядчик- заклюёт подобными вопросами, зато сделает как надо ( и с исключениями, и с обработкой нештатных ситуаций, и с заделом на будущее).

А кто вопросов не задаёт...потом переделывает:)
Edited Date: 9 May 2017 19:23 (UTC)
Date: 10 May 2017 11:20 (UTC)

pritkiy_kaban: (Default)
From: [personal profile] pritkiy_kaban
Эх, да ведь по большей части вопросы приходится задавать самому, пока головной разработчик поделия чешет в ухе :(

И выходит дивная ситуация в духе "глухой спрашивает слепого, понравился ли ему фильм". И хорошо если оно не выходит по нотам: poor requirements -> Therac-25.
Date: 8 May 2017 18:48 (UTC)

From: [personal profile] baech
А со школьных олимпиад (только это был 9-й класс, а не пятый), можно также узнать, что лучше уравнение прямой задавать тремя числами Ax + By + C = 0 (aka Общее уравнение прямой). Не сильно сложнее чем ваше уравнение с угловым коэффициентом, но зато не подвержено уходу в бесконечность для вертикальных прямых, или численной нестабильности для близких к вертикальным прямым. Не зря его называют "общим" или "стандартным" уравнением прямой.
С ним ещё легче работать, если нужно найти перпендикуляр, пересечение, расстояние и т. д., поэтому в аналитической геометрии используется только оно, но я думаю в котельной это не надо :)

По двум точкам коэффициенты находятся вообще без деления:
A = y2 - y1
B = x1 - x2
C = x2y1 - x1y2
Date: 8 May 2017 20:05 (UTC)

From: [personal profile] baech
Всё, молчу :)
Date: 9 May 2017 00:09 (UTC)

agalakhov: (Default)
From: [personal profile] agalakhov
Что мне лично совершенно непонятно: задача-то типовая, почему ее каждый раз заново решают?
Date: 9 May 2017 05:48 (UTC)

nnm9: (Default)
From: [personal profile] nnm9
Ха.
Так же как и самолёты- вроде 747ых построили много, вроде типовой- но КАЖДЫЙ самолёт уникален.

Думаю, так же и в отоплении.
Набор датчиков может быть разный, нагрузка- разная. Климат тоже не везде одинаков.
А уж как у каждого рука зачешется...
Date: 8 May 2017 19:26 (UTC)

From: [personal profile] reedcat1965
Погромист не допер поставить проверку на валидность X2>X1?
Date: 8 May 2017 20:19 (UTC)

dmarck: (Default)
From: [personal profile] dmarck
Троешники! © ты ;-P
Date: 9 May 2017 18:02 (UTC)

From: [personal profile] spretor12
Ха! Я в свое время на те-же грабли наступил... Только вот в такой конструкции:

if(timersrc%valdes[2]==0){
// выполнение кода каждые per секунд

Вроде бы % - это ОСТАТОК от деления, и самого деления на ноль тут не произойдет.... ОДНАКО! при valdes[2]=0 - контроллер улетал в перезапуск :-)

Отловил, конечно.... Но нервов мне попортил изрядно!

P.S.

if(valdes[2] != 0){
if(timersrc%valdes[2]==0){
// выполнение кода каждые per секунд

И все....
Edited Date: 9 May 2017 18:08 (UTC)
Page generated 24 Sep 2017 23:07
Powered by Dreamwidth Studios