Вот почему доступ не давать непонятно, например у однофазных счётчиков меркурий несколько уровней доступа, тоесть можешь смотреть а изменить нет и какой здесь криминал посмотреть???
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Просто мне стали задавать подобные вопросы, а я как-то и не подозревал, что доступ может быть закрыт. В принципе с меркурия по интерфейсу 485 мы просто снимаем показания..
У счетчика 2 уровня доступа (3-й заводской), если вам дадут 1-й уровень, вы не сможете в нем поменять диапазон 2-ого тарифа, добавить туда праздничных дней, изменить коэффициенты трансформации и т.д.) но читать его сможете.
А если вы поставите вторым счетчик для технического учета то делайте с ним что хотите.
Сергей0308 - у однофазных Меркуриев как раз таки НЕТ уровней доступа, там он один единственный. Несколько уровней только у их трехфазников.
Последний раз редактировалось Сергей0308; 24.03.2017 в 11:39.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Предлагаю адаптацию кода пользователя melky к Телемеханике Лайт.
Скриптовый блок рассчитывает профили мощности по значению активной энергии с модуля МЭ110-3М. Скриптовый блок позволяет рассчитывать потребление энергии по фазам, а так же рассчитывает профили мощности, за указанное пользователем время,например получасовые, или пятиминутные (более детальные для технического учета). IMG_03042017_151142_0.png
Текст скрипта на Pascal:
Во вложении представлен проект Телемеханика Лайт, в котором расчет профилей ведется на ПЛК 323-ТЛ, а архивирование параметров ведется на верхнем уровне, где можно построить отчеты по профилям, посмотреть графики потребления. 2017-04-03_151329.png2017-04-03_151007.png2017-04-03_151022.png2017-04-03_151052.pngКод: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%
Последний раз редактировалось Владимир Ситников; 13.02.2018 в 00:15.
Самое простое это поставить Меркурий 206 и написать ему опрос. Я тоже отказался от суммирования потребленной энергии на МЭ110, смотрю только ток, нагрузку и т.д.
И опрашивать МЭ надо максимально быстро, тогда точность увеличивается. То есть надо сажать на отдельный интерфейс, если есть такая возможность.
Вообще можно обойтись одним лишь электросчетчиком. Там есть в том числе и оперативные данные. Хотите точности, достаточно поменять опрос по изменению тока в процентном соотношении. И считать ничего не надо, всё итак чётко будет.