Просмотр полной версии : Задание значения с заданной периодичностью
fizhimik
18.05.2023, 19:44
Подскажите пожалуйста, что следует использовать в Master SCADA 3 для управления скоростью нагрева/охлаждения чиллера. По сути нужно с заданной периодичностью (раз в минуту, две минуты ...) посылать значение температуры, затем его увеличивать на 0.01. А так же требуется удерживать до нагрева температуру заданное количество времени=просто задержка перед началом нагрева(например 5 часов). Какие следует использовать функциональные блоки? Либо надо писать программу ST(есть ли там функционал по управлению временем)?
SCADAMaster
18.05.2023, 21:54
Подскажите пожалуйста, что следует использовать в Master SCADA 3 для управления скоростью нагрева/охлаждения чиллера. По сути нужно с заданной периодичностью (раз в минуту, две минуты ...) посылать значение температуры, затем его увеличивать на 0.01. А так же требуется удерживать до нагрева температуру заданное количество времени=просто задержка перед началом нагрева(например 5 часов). Какие следует использовать функциональные блоки? Либо надо писать программу ST(есть ли там функционал по управлению временем)?
В палитре раздел "Работа со временем". На ST также можно. Вот раздел справки: https://support.mps-soft.ru/MasterSCADAHelp/index.html?sluzhebnie_st_script_st_script.html
fizhimik
22.05.2023, 12:39
В палитре раздел "Работа со временем". На ST также можно. Вот раздел справки: https://support.mps-soft.ru/MasterSCADAHelp/index.html?sluzhebnie_st_script_st_script.html
Спасибо, попробую.
Вот еще вопрос: а есть какой ни будь режим для эмуляции/отладки для проверки программы?
SCADAMaster
22.05.2023, 18:46
Спасибо, попробую.
Вот еще вопрос: а есть какой ни будь режим для эмуляции/отладки для проверки программы?
Ну вы запускайте проект в любом удобном вам режиме67947 без подключения к оборудованию - вот вам и эмуляция. Сигналы сами имитируете.
fizhimik
31.05.2023, 15:05
Добрый день! Подскажите пожалуйста что я делаю не так - почему код таймера не зациклен бесконечно? Режим опроса периодический. Почему переменная VAR_INPUT не меняет своего значения по условию программы?
Еще узнал что локальные переменные при их задании через меню с каждым тактом сбрасываются.
PROGRAM MAIN_PROGRAM
VAR_INPUT
in:bool;
T1:time;
END_VAR
VAR_OUTPUT
out:bool;
outT:time;
END_VAR
var
in1:bool;
Timer:TP;
T2:time:=T#10s;
interval:time:=T#10s;
end_var
(*TODO: TYPE PROGRAM CODE HERE*)
in1:=in;
Timer(In:=in1,PT:=T2);
out:=Timer.Q;
outT:=Timer.ET;
if outT=interval then
in:=False;
end_if;
END_PROGRAM
fizhimik
31.05.2023, 17:15
Добрый день! Подскажите пожалуйста что я делаю не так - почему код таймера не зациклен бесконечно? Режим опроса периодический. Почему переменная VAR_INPUT не меняет своего значения по условию программы?
Еще узнал что локальные переменные при их задании через меню с каждым тактом сбрасываются.
PROGRAM MAIN_PROGRAM
VAR_INPUT
in:bool;
T1:time;
END_VAR
VAR_OUTPUT
out:bool;
outT:time;
END_VAR
var
in1:bool;
Timer:TP;
T2:time:=T#10s;
interval:time:=T#10s;
end_var
(*TODO: TYPE PROGRAM CODE HERE*)
in1:=in;
Timer(In:=in1,PT:=T2);
out:=Timer.Q;
outT:=Timer.ET;
if outT=interval then
in:=False;
end_if;
END_PROGRAM
Немного разобрался - надо работать только с локальными переменными, а глобальными переменными управлять для старт-стоп всего таймера.
fizhimik
08.06.2023, 15:02
Добрый день! Подскажите пожалуйста по моей тестовой программе:
1. Правильно ли я делаю - уменьшая время работы таймера, из за периодического опроса блока с программой в 1000 мс-заметил что интервалы на тренде увеличения параметра(температуры) начали расти
2. Как можно поменять условие в программе чтобы вначале работал таймер, потом шло приращение температуры - по моему первому IF температура сразу приращается, если условия поменять - то не работает как надо.
PROGRAM MAIN_PROGRAM
VAR_INPUT
Start_Stop:bool;
Temp_Hold:real:=10;(*Начальная температура*)
Temp_end:real:=15;(*Конечная температура*)
time_Hold_hours:real:=5;(*Время удержания температуры*)
heat_speed_deg_per_min:real:=0.05;(*Скорость нагрева град\мин*)
reset_timer:bool; (*Сброс температуры и температурного приращения к начальной температуре*)
END_VAR
VAR_OUTPUT
ustavka:real;(*Значение температуры на запись в термостат*)
END_VAR
var
shag:real:=0.01; (*Минимальный шаг уставки температуры термостата*)
z:real; (*Время измнения температуры на 0.01 град в мин *)
delta:real; (*Приращение температуры*)
in1:bool;(*Запуск таймера*)
Timer1:TP; (*Таймер, пока один*)
Ti2:time:=T#1m;(*Время таймера в минутах*)
out:bool;(*смотреть что на выходе для отладки*)
outT:time;(*смотреть что на выходе для отладки*)
outint:time;(*смотреть что на выходе для отладки*)
periodOprosa:real:=0.0167; (*Период опроса программы ST в настройках = 1 секунда в минутах *)
period:real;(*уменьшение времени таймера из за периода опроса программы ST*)
end_var
(*TODO: TYPE PROGRAM CODE HERE*)
z:=shag/heat_speed_deg_per_min-period;
Timer1(In:=in1,PT:=MUL(Ti2,z));
out:=Timer1.Q;
outT:=Timer1.ET;
outint:=MUL(Ti2,z);
if Start_Stop=true and out=false then in1:=true; delta:=delta+shag; period:=period-periodOprosa;
else in1:=false;
end_if;
ustavka:=Temp_Hold+delta;
if Start_Stop=false and reset_timer=true then ustavka:=Temp_Hold; delta:=0; period:=0;
end_if;
END_PROGRAM
SCADAMaster
08.06.2023, 16:09
1. Правильно ли я делаю - уменьшая время работы таймера, из за периодического опроса блока с программой в 1000 мс-заметил что интервалы на тренде увеличения параметра(температуры) начали расти
Что значит "интервалы на тренде увеличения параметра(температуры) начали расти"? Пришлите скриншоты демонстрирующие проблему
2. Как можно поменять условие в программе чтобы вначале работал таймер, потом шло приращение температуры - по моему первому IF температура сразу приращается, если условия поменять - то не работает как надо.
У вас как то странно сделано.
Логичнее эту операцию помещать в if и увеличивать когда выполнится таймер.
ustavka:=Temp_Hold+delta;
fizhimik
08.06.2023, 16:57
Что значит "интервалы на тренде увеличения параметра(температуры) начали расти"? Пришлите скриншоты демонстрирующие проблему
У вас как то странно сделано.
Логичнее эту операцию помещать в if и увеличивать когда выполнится таймер.
ustavka:=Temp_Hold+delta;
При подготовке скриншотов понял, что не правильно интерпретировал показания тренда. Получается, что после суммирования чисел проходит 1 такт в 1000мс, что и отображается на графике. А я думал изменение будет мгновенное, П-образное. Теперь понятно откуда лишние секунды берутся и почему (скорость нагрева)*время ~=показаниям тренда. Надо просто 1 секунду вычесть.
68229
Подскажите как сравнить два значения времени - задание времени в таймере Timer1.PT и время на выходе из таймера Timer1.ET, я по этому и не смог загнать операцию под IF. Программа ругается на некорректный тип операндов.
В принципе получилось загнать все (TIME_TO_REAL(Timer1.ET)-TIME_TO_REAL(Timer1.PT))=0, но это условие не выполняется, а как еще подцепится к сработавшему таймеру не понимаю.
SCADAMaster
08.06.2023, 17:19
А зачем так делать вообще?
Когда ET дойдет до TP у вас включится выход таймера
fizhimik
08.06.2023, 19:44
А зачем так делать вообще?
Когда ET дойдет до TP у вас включится выход таймера
"Пока IN равен False, Q также False, выход ET=0. По переднему фронту на входе IN таймер запускается – на выходе Q устанавливается True, на выходе ET начинается отчет времени. По достижению времени равному заданному PT отчет прекращается, выход Q переходит в False. Таким образом таймер формирует импульс длительностью PT."
Так написано в справочном руководстве. OUT таймера включается, когда включается его вход.
SCADAMaster
08.06.2023, 20:07
Так в чем проблема? Таймеров несколько. Вам какое поведение нужно?
fizhimik
09.06.2023, 13:35
Так в чем проблема? Таймеров несколько. Вам какое поведение нужно?
Поменял таймер с TP на TON и логический выход таймера под IF загнал с приращением температуры - теперь все работает как надо! Спасибо за помощь!
Подскажите еще такой момент, почему у меня в VAR_INPUT установлено Temp_Hold:real:=10;(*Начальная температура*), но при запуске режима исполнения Temp_Hold упорно выставляется 60 - я такую цифру раньше вбивал, затем 10 выставил. Почему 60 не заменяется на 10. Это не критично, интересно почему так выходит.
SCADAMaster
09.06.2023, 13:48
Скорее всего у вас у ФБ включено восстановление при рестарте и это значение вы ввели в режиме исполнения. Теперь оно сохранилось и выводится.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot