PDA

Просмотр полной версии : Повышение/понижение температуры от количества дней.



EgorMasterov
19.09.2025, 01:26
Здравствуйте всем. Нужна помощь в создании или у кого то есть готовый макрос такого вида - есть допустим количество дней, пусть 35, и есть начальная температура первого дня допустим 32 градуса и конечная температура последнего дня, 23 градуса. Как с этими данными сделать макрос чтоб с каждым днем температура понижалась или повышалась на такой размер градуса, в зависимости какое количество дней задано. Может кто сталкивался? Спасибо.

In_Da_Cher_A
19.09.2025, 05:58
Как с этими данными сделать макрос ну для начала сформулировать внятно словесно описание работы макроса/программы со всеми входящими/выходящими и взять ОЛ, открыть и начать писать алгоритм
потмоу что то, что вы называете "готовый макрос" - это и есть программа, которую надо сделать

capzap
19.09.2025, 07:27
Нужна помощь в создании или у кого то есть готовый макрос такого вида - есть допустим количество дней, пусть 35, и есть начальная температура первого дня допустим 32 градуса и конечная температура последнего дня, 23 градуса. Как с этими данными сделать макрос чтоб с каждым днем температура понижалась или повышалась на такой размер градуса, в зависимости какое количество дней задано.

алиса (https://alice.yandex.ru/) на это придумала такой подход к решению задачи

FUNCTION CalculateTemperature : REAL
VAR_INPUT
StartTemp : REAL; // Начальная температура (например, 32°C)
EndTemp : REAL; // Конечная температура (например, 23°C)
TotalDays : INT; // Общее количество дней (например, 35)
CurrentDay : INT; // Текущий день для расчета
END_VAR
VAR
TempDifference : REAL; // Разница температур
DailyChange : REAL; // Ежедневное изменение
Result : REAL; // Результат расчета
END_VAR

// Проверка на корректность входных данных
IF TotalDays <= 0 THEN
Result := StartTemp; // Если дней нет, возвращаем начальную температуру
ELSE
// Рассчитываем разницу температур
TempDifference := EndTemp - StartTemp;

// Вычисляем ежедневное изменение
DailyChange := TempDifference / TotalDays;

// Рассчитываем температуру для заданного дня
Result := StartTemp + DailyChange * (CurrentDay - 1);
END_IF;

// Возвращаем результат
CalculateTemperature := Result;
END_FUNCTION


Особенности реализации

Функция работает как для понижения, так и для повышения температуры

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

Возвращает линейно изменяющееся значение

Можно легко модифицировать для других единиц измерения

Рекомендации по использованию

Добавьте проверку на корректность входных данных

При необходимости добавьте округление результата

Можно модифицировать для работы с массивом температур

Учтите особенности целочисленного деления при расчете DailyChange

МихаилГл
19.09.2025, 07:38
Алиса не подумала о том, как из пр брать время... И вроде не во всех пр есть время...

PS А нет, во всех есть часы реального времени. Но думаю работа со временем будет основной сложностью. Из координат прямой нам температура 100% известна, а время надо во-первых выбирать как то, а там уже начнутся во-вторых...

melky
19.09.2025, 08:27
Решал такую задачу на C# через шаблон дней. Причина проста, технолог должен изменить карту температур. И вторая причина, там не равномерное увеличение, уменьшение температуры если по курицы например смотреть. Макрос, который будет делать это равными кусками, только трата времени.

EgorMasterov
19.09.2025, 08:46
Есть фото примерного описания. Да, это для выращивания птицы. Вот такой алгоритм. На нем и споткнулся. Имеется инструкция от другого контроллера, необходимо это как то реализовать в OL.85823

melky
19.09.2025, 08:52
Пока забудьте про контроллер. Определитесь с конечной целью.
1. для разных птиц, разные уставки температуры по дням.
2. Технолог должен иметь возможность корректировать эти уставки.
3. Там не равномерные уставки Т и H по дням.
4. Возможность задать 0 день (точку старта)

если все это нужно, меняйте подход. Рецепты, массивы последовательных регистров (если на ПР), чтобы из scada или чего там записать сразу всем массивом новые уставки.
могу по курице табличку температур скинуть, вроде на перепелку еще было.

EgorMasterov
19.09.2025, 09:31
Пока забудьте про контроллер. Определитесь с конечной целью.
1. для разных птиц, разные уставки температуры по дням.
2. Технолог должен иметь возможность корректировать эти уставки.
3. Там не равномерные уставки Т и H по дням.
4. Возможность задать 0 день (точку старта)

если все это нужно, меняйте подход. Рецепты, массивы последовательных регистров (если на ПР), чтобы из scada или чего там записать сразу всем массивом новые уставки.
могу по курице табличку температур скинуть, вроде на перепелку еще было.

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

AlexCrane
19.09.2025, 09:41
Давайте, хоть от чего то начать разбираться. Я понимаю что не все так просто, птицы всегда разные, особых критериев там нет. Знаю что меняют дни и начальную и конечную температуру. Этот расчет и нужен чтоб создать алгоритм.

Может обычная рампа подойдет? Выкладывали где-то на форуме.

melky
19.09.2025, 09:43
EgorMasterov то, что я видел в забугорном, там тоже не начальная и конечная температура, а именно по дням и технолог все это настраивает.

kondor3000
19.09.2025, 09:43
Есть фото примерного описания. Да, это для выращивания птицы. Вот такой алгоритм. На нем и споткнулся. Имеется инструкция от другого контроллера, необходимо это как то реализовать в OL.85823

На рисунке температурный график, как для отопления, пример функции графика от температуры на 10 точек тут,
вам нужна температура от времени ( кол-ва дней).
https://owen.ru/forum/showthread.php?t=35489&p=369459&viewfull=1#post369459

1exan
19.09.2025, 09:52
Давайте, хоть от чего то начать разбираться. Я понимаю что не все так просто, птицы всегда разные, особых критериев там нет. Знаю что меняют дни и начальную и конечную температуру. Этот расчет и нужен чтоб создать алгоритм.

В конечном итоге это выглядит как линейный график по двум точкам (можно и больше точек сделать).
Будет удобней работать со временем в формате unix-time. Макросы кусочно-линейной аппроксимации и перевода времени в unix формат есть в библиотеке лоджика

EFrol
19.09.2025, 09:58
Хватит издеваться над человеком. Есть в библиотеке макрос SCALE, который масштабирует (натягивает) одну величину относительно другой.
Входная величина типа REAL - можно прошедшее время в долях суток указывать, т.е. в любой момент времени получить точное значение температуры.

melky
19.09.2025, 10:00
забудьте вы про линейный график при регулировке Т для птицы

RfSS
19.09.2025, 10:43
Есть еще Rise Fall (Линейное изменение величины по времени)

kondor3000
19.09.2025, 10:46
Можно ещё проще, на SCALE из Менеджера и счётчике дней 85829

Вместо дней можно использовать секунды. 85830 Проект плавно понижает температуру, после 1 суток.85845

melky
19.09.2025, 13:01
День ТВоздух
0 38,0
1 38,0
2 38,0
3 37,8
4 37,8
5 37,7
6 37,7
7 37,7
8 37,7
9 37,7
10 37,6
11 37,6
12 37,5
13 37,4
14 37,3
15 37,3
16 37,3
17 37,3
18 37,3
19 37,3
20 37,3

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

FPavel
19.09.2025, 17:44
Уточняющий вопрос на тему применимости выбранного средства управления - ПР.

ПР не является средством измерения, также температура при помощи термопреобразователей сопротивления измеряется с точностью до +/-10 градусов и зависит от сопротивления проводов к датчику.

А температурный график нужно менять в диапазоне 0,7 градуса (от 37,3 до 38,0).

Это адекватное решение по применению ПР?

Я уже не акцентирую внимание на том, что главный программист проекта на форуме подбирает решение.

Сергей0308
19.09.2025, 18:03
Уточняющий вопрос на тему применимости выбранного средства управления - ПР.

ПР не является средством измерения, также температура при помощи термопреобразователей сопротивления измеряется с точностью до +/-10 градусов и зависит от сопротивления проводов к датчику.

А температурный график нужно менять в диапазоне 0,7 градуса (от 37,3 до 38,0).

Это адекватное решение по применению ПР?

Я уже не акцентирую внимание на том, что главный программист проекта на форуме подбирает решение.

Есть же модули расширения для ПР по внутренней шине, нормирующие преобразователи, модули аналогового ввода по сети и многое другое, в смысле, об этом не стоит забывать!
Для нормального инкубатора ещё и влажность нужно поддерживать, в смысле, существуют датчики влажности и температуры, они решают все проблемы:
https://owen.ru/product/pvt110
https://owen.ru/product/pvt100

melky
19.09.2025, 18:53
Влажность я не выдергивал из таблицы, а так да, есть и она там тоже :)

Dimensy
19.09.2025, 20:30
Есть фото примерного описания. Да, это для выращивания птицы. Вот такой алгоритм. На нем и споткнулся. Имеется инструкция от другого контроллера, необходимо это как то реализовать в OL.85823

В первом приближении как-то так, но я сильно не проверял
Нюансы: энергонезависимость - после перезагрузки работа продолжится, и дежурный режим - температура, поддерживаемая, когда блок выключен

Dimensy
20.09.2025, 14:52
В первом приближении как-то так, но я сильно не проверял


Нашел косяк - после первого дня на блок SCALE должны подаваться секунды от 0 до последнего дня, а у меня подавались секунды начиная с первого дня. Исправил
Второй косяк - забыл что get_time выдает время в миллисекундах - исправил

Сергей0308
20.09.2025, 17:11
Мне кажется подобные устройства называются программными задатчиками, вот здесь обсуждали: https://owen.ru/forum/showthread.php?t=34853&page=4