Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Расчёт удельной потребляемой мощности  (Прочитано 4720 раз)

razorqhex

  • Пользователь
  • **
  • Сообщений: 79
    • Просмотр профиля
Здравствуйте. Провожу пересчёт удельной потребляемой мощности, но выходит всегда ноль. Конечный результат должен быть 0.20, 0.30 кВт.

Действую таким образом:
Создаю часовой скрипт (мне нужно делать этот пересчёт каждый час) с таким кодом:
(Мне нужно узнать разницу между интервалом в час)
Код: (delphi)
var
  aDateSpecPower: TDateTime;
begin
  //Удельная потребляемая мощность ВНС 19
  aDateSpecPower := RecodeTime(Now, HourOf(Now), 0, 0, 0);
  ArchiveValueByTime(kWh_Counter_19, SpecificPowerConsumption_VNS19_End, aDateSpecPower);

  aDateSpecPower := IncHour(Now, -1);
  ArchiveValueByTime(kWh_Counter_19, SpecificPowerConsumption_VNS19_Start, aDateSpecPower);
end.
Далее я создал скрипт по изменению переменной и добавил туда 2 тега: SpecificPowerConsumption_VNS19_End и SpecificPowerConsumption_VNS19_Start
Код: (delphi)
begin
  //Получаю разницу
  SPC_VNS19.Value := SpecificPowerConsumption_VNS19_End.Value - SpecificPowerConsumption_VNS19_Start.Value;
  //Вычисляем удельную потребляемую мощность ВНС19
  SpecificPowerConsumption_VNS19_Result.Value := SPC_VNS19.value / HourlyWaterConsumption_VNS19_Result.Value;
end.
Но как я выше сказал, всегда выводится ноль как и в получении разницы, так и в вычислении удельной потребляемой мощности.

Теги:
kWh_Counter_19 - тег с ПЛК. С этого тега нужно узнать разницу по первому скрипту. Тип Integer
SpecificPowerConsumption_VNS19_End - внутренний тег. Записывает время с конца. Тип Integer
SpecificPowerConsumption_VNS19_Start - внутренний тег. Записывает время с начала. Тип Integer
SPC_VNS19 - внутренний тег. Хранит в себе разницу. Тип Integer
SpecificPowerConsumption_VNS19_Result - внутренний тег. Хранит в себе значение удельной потребляемой мощности. Тип Integer
HourlyWaterConsumption_VNS19_Result - внутренний тег. Хранит в себе значение расхода воды каждый час. Это значение участвует в пересчёте удельной потребляемой мощности. Тип LongWord

Буду признателен за помощь.
« Изменён: 17 Января 2020, 14:55:39 от razorqhex »

Neskad

  • Новичок
  • *
  • Сообщений: 31
    • Просмотр профиля
Re: Расчёт удельной потребляемой мощности
« Ответ #1 : 17 Января 2020, 18:55:20 »
Цитировать
SPC_VNS19 - внутренний тег. Хранит в себе разницу. Тип Integer
SpecificPowerConsumption_VNS19_Result - внутренний тег. Хранит в себе значение удельной потребляемой мощности. Тип Integer
Измените тип данных на Single, должно помочь, судя по всему.  :)

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Расчёт удельной потребляемой мощности
« Ответ #2 : 19 Января 2020, 10:45:55 »
Цитировать
Конечный результат должен быть 0.20, 0.30 кВт.
Как написал выше Neskad для вещественных значений нужно использовать тип данных Single, для переменных SPC_VNS19, SpecificPowerConsumption_VNS19_Result и, возможно, для HourlyWaterConsumption_VNS19_Result (если оно тоже может быть не целым числом).

Также в скрипте с вычислением удельной потребляемой мощности участвует переменная HourlyWaterConsumption_VNS19_Result, которая, как мы поняли, вычисляется в других скриптах. Нужно убедиться, что значение переменной HourlyWaterConsumption_VNS19_Result вычисляется первым и только потом выполняется вычисление удельной потребляемой мощности. Иначе сначала переменная будет равна 0 и будет деление на ноль.

razorqhex

  • Пользователь
  • **
  • Сообщений: 79
    • Просмотр профиля
Re: Расчёт удельной потребляемой мощности
« Ответ #3 : 21 Января 2020, 19:28:42 »
Цитировать
Конечный результат должен быть 0.20, 0.30 кВт.
Как написал выше Neskad для вещественных значений нужно использовать тип данных Single, для переменных SPC_VNS19, SpecificPowerConsumption_VNS19_Result и, возможно, для HourlyWaterConsumption_VNS19_Result (если оно тоже может быть не целым числом).

Также в скрипте с вычислением удельной потребляемой мощности участвует переменная HourlyWaterConsumption_VNS19_Result, которая, как мы поняли, вычисляется в других скриптах. Нужно убедиться, что значение переменной HourlyWaterConsumption_VNS19_Result вычисляется первым и только потом выполняется вычисление удельной потребляемой мощности. Иначе сначала переменная будет равна 0 и будет деление на ноль.
Как узнать какой из этих скриптов вычисляется первым?

По поводу работы скрипта, что NaN показывало, я решил проблему. Функция ArchiveValueByTime брала с архива значения, а я их не архивировал. А теперь показывает значение, но иногда снова NaN

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3210
    • Просмотр профиля
    • Simple-Scada
Re: Расчёт удельной потребляемой мощности
« Ответ #4 : 22 Января 2020, 09:58:11 »
Цитировать
Как узнать какой из этих скриптов вычисляется первым?
Если оба значения вычисляются через архивную функцию ArchiveValueByTime, то они выполнятся в порядке вызова ArсhiveValueByTime. Сначала та которая была вызвана первой, затем вторая.

Цитировать
По поводу работы скрипта, что NaN показывало, я решил проблему.
О чем речь, какая переменная становилась NAN?

razorqhex

  • Пользователь
  • **
  • Сообщений: 79
    • Просмотр профиля
Re: Расчёт удельной потребляемой мощности
« Ответ #5 : 22 Января 2020, 16:38:11 »
О чем речь, какая переменная становилась NAN?
Переменная SpecificPowerConsumption_VNS19_Result, но это возможно было из-за того, что было деление на ноль.

У меня другая проблема возникла, тег после перезапуска скады показывает ноль вместо последнего значения. В общем тег хранит в себе суточный расход воды и нужно при запуске скады последнее значение вернуть. Опция автоматического восстановление включена и также происходит запись в архив по изменению. Не знаете в чём может быть проблема?

Уже исправил. Спасибо всем :)
« Изменён: 22 Января 2020, 19:54:44 от razorqhex »