Да, но мы то знаем что будет делать народ имея полный доступ к счетчику, что в последствии наказуемо.
Вид для печати
Вот почему доступ не давать непонятно, например у однофазных счётчиков меркурий несколько уровней доступа, тоесть можешь смотреть а изменить нет и какой здесь криминал посмотреть???
Просто мне стали задавать подобные вопросы, а я как-то и не подозревал, что доступ может быть закрыт. В принципе с меркурия по интерфейсу 485 мы просто снимаем показания..
У счетчика 2 уровня доступа (3-й заводской), если вам дадут 1-й уровень, вы не сможете в нем поменять диапазон 2-ого тарифа, добавить туда праздничных дней, изменить коэффициенты трансформации и т.д.) но читать его сможете.
А если вы поставите вторым счетчик для технического учета то делайте с ним что хотите.
Сергей0308 - у однофазных Меркуриев как раз таки НЕТ уровней доступа, там он один единственный. Несколько уровней только у их трехфазников.
Предлагаю адаптацию кода пользователя melky к Телемеханике Лайт.
Скриптовый блок рассчитывает профили мощности по значению активной энергии с модуля МЭ110-3М. Скриптовый блок позволяет рассчитывать потребление энергии по фазам, а так же рассчитывает профили мощности, за указанное пользователем время,например получасовые, или пятиминутные (более детальные для технического учета). Вложение 30386
Текст скрипта на Pascal:
Во вложении представлен проект Телемеханика Лайт, в котором расчет профилей ведется на ПЛК 323-ТЛ, а архивирование параметров ведется на верхнем уровне, где можно построить отчеты по профилям, посмотреть графики потребления. Вложение 30387Вложение 30388Вложение 30389Вложение 30390Код:var kwt_h ,active,kwt_summ, kwt_per_time, kwt_last, Ti: Real;
var time, count, iter: integer;
{---------- main program -----------}
begin
kwt_h:=0;
ReadFloat('P', active) ; //считываем текущие показания
ReadFloat('суммКВч', kwt_summ) ; // считываем последнее суммарное потребление
ReadFloat('Ti', Ti) ; // считываем период итегрирования( в секундах,по умолчания 1 секунда)
ReadInteger('Время', time) ; // считываем время,за которое считаем профиль (в минутах).
ReadInteger('count', count) ; // считываем значение счетчика
ReadInteger('iter', iter) ; // считываем значение счетчика итераций с начала расчета( с момента рестарта плк) - для контроля
if count=0 then kwt_last:= kwt_summ; // если счетчик только начал считать,записываем сум.потр во временную переменную
count:= count+1; // увеличиваем счетчик
iter:= iter+1;
WriteInteger('iter', iter);
WriteInteger('count', count); //записываем значение сч на выход
kwt_h:=active*Ti/3600/1; // вычисляем потребление в данном сл ВТ-ч
kwt_summ:=kwt_summ+kwt_h; //формируем суммарное потребление
WriteFloat('сумм квч', kwt_summ); // записываем на выход
if count = 60*time then //
begin
count:=0; //
kwt_per_time:= kwt_summ - kwt_last; //
kwt_last:= kwt_summ;
WriteFloat('Профиль мощности', kwt_per_time);
WriteInteger('count', count);
end;
end.
Всем привет. В принципе удобный скрипт. Расчёты ведутся логичные и правильные. Неудобство заключается в том, что при выключении питания всё сбрасывается на ноль. А так всё хорошо...
Я "случайно" купил МЭ110-224.1М
Скорее, нужно было купить счётчик с RS-485, но кто же знал?
Напишу о моих экспериментах.
Кому лень читать, краткие выводы:
За день у меня набежало примерно 16кВт*ч, и погрешность от "простого сложения показаний МЭ110" составляет 25%.
Вывод: учитывать энергию простым сложением "общего потребления" и "ежесекундного потребления" НЕЛЬЗЯ.
Поэтому варианты тов. melky и тов. Popov Boris неправильные.
Более хитрый вариант (с промежуточной переменной) у меня дал погрешность в 2%
Но, похоже, одна дополнительная не решает все проблемы с погрешностями. Надо попробовать ещё доработать в этой части.
-----
Участники забега:
Гранит-1М (счётчик на лестничной клетке, класс 1)
МЭ110-224.1М (написано Кл. 0,5;1.0) + трансформатор Меандр MES-62/20 (60A/5A, класс 1)
ПЛК110-М02
Потребление: 0.2...2кВт (где-то 0.9кВт в среднем)
МЭ110-224.1М настроен как "universal modbus device", с единственным "real input module" (register=55 -- активная мощность, read holding registers 0x03)
polling time = 1000ms
Рядом МУ110-6У (workmode=both, poll time=200ms)
Попробовал просто сложить ежесекундный расход.
Например, 200Вт*1с = 360/1000 кВт * 1/3600 ч = 0,0001 кВт*ч
И тут интересный момент. Суммарные показания счётчика -- минимум десятки тысяч кВт*ч
У меня, например, сейчас Гранит-1М показывает 3381.0 кВт*ч.
Если попробовать сложить 3381.0 + 0.0001, то окажется, что это сложение очень и очень сильно теряет точность. Точность REAL это примерно 7 значащих цифр.
В статье https://habrahabr.ru/post/331814/ приводится пример (видно, что последняя двойка теряется):
Зная это, я код написал двумя вариантами:Код:314155.6 +
3.12 =
314158.7
1) По-простому (в общую переменную добавляем ежесекундный расход)
2) "С промежуточной переменной, которая сливается в общий расход по достижению значения в 1кВт*ч"
3) Разумеется, между опросами может пройти неизвестное время, поэтому я анализирую то, сколько времени прошло с предыдущего опроса. Как в конфигураторе узнать "время последнего опроса -- неясно", поэтому сделал через R_TRIG(CLK := lastModbusAddress = 3)
Код:
Код:VAR_GLOBAL RETAIN SUPERRESISTENT
pwr : REAL;
pwr_bpm : REAL;
kwh_simple : REAL;
kwh_small : REAL;
kwh_better : REAL;
kwh_total : REAL;
END_VAR
PROGRAM ...
MB: R_TRIG;
dq : REAL;
pt, now : DWORD;
init : BOOL;
MB(CLK := lastModbusAddress = 3);
IF MB.Q THEN
now := T_PLC_MS();
IF NOT init THEN
pt := now;
init := TRUE;
END_IF;
pwr := power_consumption; (* это REAL значение в Ваттах, которое приходит из МЭ *)
pwr_bpm := pwr/1000*(6400/60); (* вычисляем "количество импульсов в минуту", которое должен выдавать Гранит-1М, т.к. у него 6400 имп/(кВт*ч) *)
dq := pwr * (now-pt) / 1000 / 3600 / 1000; (* ежесекундный расход *)
kwh_simple := kwh_simple + dq; (* по-простому увеличиваем счётчик общего потребления. Так делать не нужно, но попробуем *)
(* чуть более хитрый подсчёт *)
kwh_small := kwh_small + dq;
IF kwh_small > 1 THEN
kwh_better := kwh_better+kwh_small;
kwh_small := 0;
END_IF;
kwh_total := kwh_better+kwh_small; (* для того, чтобы в online видно было "общее" потребление *)
pt := now;
END_IF;
По факту: вчера запустил, сбросил kwh_simple и kwh_better в значение, которое показывает Гранит (он, собака, не цифровой, а барабанчатый) и там было около 3365
Сейчас
Гранит: 3381.25
kwh_simple: 3377.51
kwh_total: 3381.52
Т.е. "набежало" около 16кВт*ч, показания "простого сложения" сильно расходятся (сумма оказалась на 4кВт*ч меньше -- т.е. на 25%).
"хитрое" сложение тоже почему-то не сошлось, и разница получилась 0.27 кВт*ч (т.е. где-то 2%)
Возможно, эти 2% получаются из-за того, что у меня в цепи трансформатор и МЭ, и у обоих 1-ый класс. Т.е. ожидаемая погрешность (1%2+1%2)0.5=1.4%
Самое простое это поставить Меркурий 206 и написать ему опрос. Я тоже отказался от суммирования потребленной энергии на МЭ110, смотрю только ток, нагрузку и т.д.
И опрашивать МЭ надо максимально быстро, тогда точность увеличивается. То есть надо сажать на отдельный интерфейс, если есть такая возможность.
Вообще можно обойтись одним лишь электросчетчиком. Там есть в том числе и оперативные данные. Хотите точности, достаточно поменять опрос по изменению тока в процентном соотношении. И считать ничего не надо, всё итак чётко будет.