Счетчик Eastron SDM630 + modbus, округление данных, графики и история по данным.
Исходные данные:
Счетчик: EASTRON SDM630, подключено 3 фазы
Majordomo с установленными модулями charts и modbus.
Получаем данные (подразумевается, что шлюз или USB<>RS485 ("свисток") настроен и работает = отдает нужные нам данные).
При заполнении полей "Название" - не используем кириллицу (это касается всей статьи)!!!
Заполняем как на скриншоте (меняя данные на свои).
Данных можно выдернуть очень много - подробное описание реестров (поле "Стартовый адрес") http://www.eastrongroup.com/data/uploads/Eastron_SDM630MV_CT_protocol_V1_0_.pdf
Пример: нам нужно получить значение "Текущей потребляемой мощности на первой фазе".
a) Ищем реестр в мануале, его значение 30013. Выбираем Тип запроса: "FC4" и в стартовом адресе пишем номер реестра (300013-30000-1=12), единицу надо обязательно отнимать, так как отчет идет с "0".
b) кол-во элементов устанавливаем "2"
По аналогии делаем со всеми интересующими нас данными.
Добавляем счетчик как объект в MD. Сначала создадим новый класс "Counter Eastron":
Нажимаем "Добавить" и переходим в раздел "Объекты" класса "Counter Eastron". Добавляем новый "Объект":
Создаем свойства по одному вписываем все параметры к нашему устройству:
Volts_phase_1, Volts_phase_2, Volts_phase_3
Watt_phase_1, Watt_phase_2, Watt_phase_3
Amper_phase_1, Amper_phase_2, Amper_phase_3
...
по аналогии с тем, что заводили в модуле Modbus.
Мы должны получить:
На этом этапе, названия Объектов у Вас не будут выделены жирным (как на скриншоте), к этому мы вернемся позже.
Возвращаемся в модуль modbus, заходим в каждую из наших созданных записей и привязываем поля "Связанный объект" к нашему счетчику и "Связанное свойство" к соответствующему свойству, как на скриншоте ниже.
Приступим к округлению полученных значений. Создаем новый метод в классе "Counter Eastron":
1234567 // Получаем данные$value = $params['PROPERTY'];// Выполняем округление с точностью целого значения$value = round($params['NEW_VALUE'], 0);// Сохраняем обработанное значение в новое свойство объекта$round=$params['PROPERTY']."_round";$this->setProperty($round, $value);
Сообщим MD, чтобы он хранил все округленные значения 365 дней - это делается с помощью добавления нового свойства в классе "Counter EASTRON". В названии мы указываем имя нашего свойства полученного от modbus добавляя _round в конце (мы так решили в скрипте выше, предпоследней строкой).
Как только Вы заполните все, переходим в свойства нашего объекта SDM630 и убеждаемся, что все свойства почернели (т.е. мы объявили для них "глобальные свойства"), если что то не почернело - смотрите внимательно, видимо где то опечатка.
Мы получили данные с модуля modbus, создали свойства для объекта, создали глобальные свойства, создали метод ValueRound к которому обращаются наши свойства, для округления и складываем округленные значения в новые свойства, научили MD хранить историю наших округленных данных.
Давайте теперь нарисуем пару простых графиков.
Переходим в вкладку Данные:
В настройках можно добавить html:
123456789101112131415 min: 160,max: 280,plotBands: [{from: 200,to: 240,color: '#55BF3B' // green}, {from: 160,to: 200,color: '#DDDF0D' // yellow}, {from: 240,to: 280,color: '#DF5353' // red}]
и тогда после сохранения мы увидим вот такой график:
Пример графика напряджения по фазам: