Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Имеете ввиду FLOW_METER ?
это ПОУ вроде наоборот, из производительности получает суммирующее значение
Сама суть ошибочная.
"(при опросе раз в секунду) мощность(в кВт)/3600" - так Вы мгновенную мощность получите, а не количество потребляемой энергии.
Ведь само определение
«кВт⋅ч» (мощность, умноженная на время). Написание «кВт/ч» (киловатт в час), часто употребляемое во многих СМИ и даже иногда в официальных документах, неправильно. Такое обозначение соответствует изменению мощности в единицу времени (что обычно никого не интересует), но никак не количеству энергии.
Ежели все таки хотите использовать ежесекундные значения мощности, то код программы, вызываемой раз в секунду должен быть не такой как у Вас
kwt:=kwt+(IN/3600000);
а такой
summa:=summa+IN;
kwt:=summa/3600000;
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
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 ?