в оскат библиотеке есть нечто подобное только там связано с кубами в час, Вы бы изучили её, ведь почти вё что здесь было показано в примерах там имеется
Вид для печати
Имеете ввиду FLOW_METER ?
это ПОУ вроде наоборот, из производительности получает суммирующее значение
Сама суть ошибочная.
"(при опросе раз в секунду) мощность(в кВт)/3600" - так Вы мгновенную мощность получите, а не количество потребляемой энергии.
Ведь само определение
«кВт⋅ч» (мощность, умноженная на время). Написание «кВт/ч» (киловатт в час), часто употребляемое во многих СМИ и даже иногда в официальных документах, неправильно. Такое обозначение соответствует изменению мощности в единицу времени (что обычно никого не интересует), но никак не количеству энергии.
Ежели все таки хотите использовать ежесекундные значения мощности, то код программы, вызываемой раз в секунду должен быть не такой как у Вас
kwt:=kwt+(IN/3600000);
а такой
summa:=summa+IN;
kwt:=summa/3600000;
petera вы написали две одинаковых формулы, только по разному считающих.
если сделать по приходу, то вместо 3600 необходимо ввести и расчет периода. данные будут еще точнее и потом делить на 1000, так как прибор дает в Вт, а нам надо в кВт.
типа *1/период расчитанный относительно 1 часа
Между приходами - неизвестность. Вычислять что либо при неизвестности - рукоблудие. Реальность - приход данных.Цитата:
Ведь приход может быть как раньше секунды, так и позже секунды и как тогда программировать время ?
Так расчет времени я Вам и предложил.Цитата:
если сделать по приходу, то вместо 3600 необходимо ввести и расчет периода. данные будут еще точнее и потом делить на 1000, так как прибор дает в Вт, а нам надо в кВт.
S Ai * dt, где dt = time() - t
Кстати, странно, что никто не предложил трапеции для максимально достижимой точности в данном железе.
Код:if pre <> ai then
интеграл := интеграл + (pre + ai) / 2 * time_to_real(time()-t) / 1000;
pre := ai;
t := time();
end_if
Замерил сегодня показания счетчика и ПЛК при использовании таймера опроса раз в 1 с в программе. За 2 часа набегает разница в 0,08 сотых кВт часа.
За сутки набежит примерно 1 кВт час, за месяц соответственно 30. Многовато.
Буду пробовать следующие варианты.
Погрешность лучше описывать в %.Цитата:
разница в 0,08 сотых кВт часа.
"За сутки набежит примерно 1 кВт час" - это 0 на Красноярской ГЭС
И начните хотя бы с погрешности самого МЭ.
Валенок погрешность МЭ +- 0,5% вроде
Соврал, по активной мощности +- 1 %
Решил использовать ET таймера, а не time(), которое дает время от начала запуска. Единственное, может не правильный сброс таймера ???Код:PROGRAM Kwt_hours
VAR
kwt_summ: REAL;
kwt: REAL;
prihod: BOOL;
tm: TON;
END_VAR
TM(in:=NOT tm.q, pt:=t#1.5S);
prihod:=kwt <> activeP OR tm.Q;
kwt:=activeP;
IF prihod THEN
kwt_summ:=kwt_summ+kwt/(3600/(TIME_TO_REAL(tm.et)/1000))/1000;
tm.IN:=FALSE;
END_IF
Кстати в примерах t: ton и тут же time_to_real(time()-t) - что же тут t ?