Менеджер тарификации cFos позволяет динамически оценивать формулы. Эта функциональность доступна для счетчика типа "Выражение" и для правил тарификации типа "Формула".
Поэтому можно настроить счетчики, которые вычисляют значения от других счетчиков или EVSE, держат их наготове и отображают. Правила зарядки могут также использовать формулы для динамического расчета тока зарядки, а также обращаться к счетчикам и EVSE (включая счетчики типа "Выражение").
С формулами возможны следующие операции:
+ - * / % | Сложение, вычитание, умножение, деление, модуль |
& | | побитовое И и ИЛИ |
^ | Расчет мощности, например, 10^2 = 100 |
min(x,y) | Минимум x и y, возможно более 2 аргументов |
max(x,y) | Максимум x и y, возможно более 2 аргументов |
abs(x) | Абсолютное значение x, например, abs(-2) = 2 |
clamp(x,min,max) | Значение x = min (если x < min), x = max (если x > max), иначе сохранить x |
round(x) | Округлите x до целого числа. Пример: округление до 1 десятичного знака: round(10*x)/10. |
sqrt(x) | Квадратный корень из x |
exists(x) | true, если переменная x существует, иначе false |
Кроме того, возможны следующие логические выражения:==
(равно), !=
(неравно), <
(меньше), <=
(меньше-равно), >
(больше), >=
(больше-равно), !
(не), ||
(логическое Or), &&
(логическое And), ?
(условный оператор, например, x ? y : z
, возвращает y, если x истинно, иначе z
)
Это позволяет, например, отключать ток в зависимости от условий: M1.current >= 6500 ? M1.current : 0
возвращает ток M1, если он больше 6.5A, и 0 в противном случае, что приостанавливает зарядку. Для таких условий можно также запросить входы (см. ниже)
Возможны следующие названия:
Mx | Счетчик с идентификатором устройства x, например, M1 |
Ex | EVSE с идентификатором устройства x, например, E1 |
Также можно получить доступ к виртуальным счетчикам, таким как избыток солнечной энергии, потребление сети или "Power avail. for EVSEs" (мощность, доступная для настенных блоков), установив счетчик, а затем используя соответствующий ID устройства в формуле.
Затем вы можете получить доступ к отдельным значениям единиц измерения с помощью точки. Они вызываются следующим образом:
current_l1 | Ток фазы 1 в мА |
current_l2 | Ток фазы 2 в мА |
current_l3 | Ток фазы 3 в мА |
current | Ток текущей фазы в мА (для правил зарядки Менеджер зарядки запрашивает все фазы последовательно; для счетчиков типа "Выражение" применяется соответствующая фаза, к которой относится формула. Если вы задали формулу для "Тока L1", вы можете опустить поля для Тока L2 и L3. Тогда будет использоваться формула для тока L1) |
power_w | Текущая активная мощность в ваттах |
offered | Настенная коробка: Предлагаемый ток в мА |
import_wh | Потребляемая энергия в Вт |
export_wh | Инжектированная энергия в Втч |
dt | Время, прошедшее с момента последнего обновления (в секундах), только для счетчика "Expression", см. также CM._dt. |
inputN | Номер входа N устройства, 1 = активный, 0 = неактивный, N - номер входа, начиная с 1. |
soc | SOC, уровень заряда в процентах (счетчик/память) - если поддерживается устройством |
id | Идентификатор устройства, идентификатор Modbus |
txn_duration | Продолжительность текущей операции в секундах (EVSE) |
charging_dur | Фактическое время зарядки текущей транзакции в секундах (Wallbox) |
txn_energy | Заряженная энергия текущей транзакции в Втч (EVSE) |
min_current | Минимальный зарядный ток в мА (EVSE) |
max_current | Максимальный зарядный ток в мА (EVSE) |
state | Статус: 1 ожидание, 2 подключен, 3 заряжается, 4 заряжается с вентиляцией, 5 ошибка, 6 отключен (EVSE) |
cphases | Количество фаз зарядки (0-3) |
pphases | Количество прогнозируемых фаз зарядки (0-3) |
lb_cur_l1 | Текущий расчетный ток фазы 1 в мА (настенный ящик). Только при расчете правил зарядки настенного блока, иначе 0 |
lb_cur_l2 | Текущий расчетный ток фазы 2 в мА (настенный блок). Только при расчете правил зарядки настенного блока, иначе 0 |
lb_cur_l3 | Текущий расчетный ток фазы 3 в мА (настенный ящик). Только при расчете правил зарядки настенного блока, иначе 0 |
lb_cur | Ток, рассчитанный для текущей фазы, в мА (настенный ящик). Только при расчете правил зарядки настенного ящика, иначе 0. Менеджер зарядки запрашивает все фазы по очереди. |
surplus_pcur | Ток превышения ПВ на (прогнозируемую) фазу в мА |
surplus_wanted | 1, если правило PV surplus уже применялось, иначе 0 |
budget | КВт/ч или минут по текущему бюджету |
budget_amount | Максимальное количество кВт/ч или минут в рамках текущего бюджета |
budget_used | КВт/ч или минут, использованных в рамках текущего бюджета |
com_err | 1, если есть ошибка COM, иначе 0 |
com_err2 | 1, если ошибка COM присутствует более 12 секунд, иначе 0 |
reactive_power | Спецификация реактивной мощности в ваттах (если поддерживается устройством), положительные значения: Индуктивная, отрицательные значения: Емкостная |
switch_phases | Для настенных коробок с переключением фаз: ручное переключение фаз, 1 = 1-фазное, 3 = 3-фазное, -1 = автоматическое переключение фаз |
departure | Время отправления ISO 15118 в виде временной метки (для настенных ящиков, поддерживающих эту функцию, иначе 0) |
req_energy | ISO 15118 Требуемая энергия в Втч (для настенных блоков, поддерживающих эту функцию, иначе 0) |
plugin_start | Временная метка Unix, время прокладки кабеля |
plugin_energy | Энергия предыдущего заряда в Вт с момента подключения кабеля к сети |
M1.current_l1 | Ток счетчика M1, фаза 1 |
E2.import_wh | Потребляемый Вт от EVSE E2 |
E3.power_w | Текущая мощность зарядки E3 в ваттах |
Если вы используете формулы для измерителя типа "Expression", то идентификатор устройства можно не указывать. Тогда имена полей относятся к этому счетчику, например, 'power_w' - это мощность этого счетчика в ваттах. С помощью функции 'dt' можно реализовать несколько расширенных функций, например, для счетчика типа "Выражение":
import_wh + M1.power_w * dt / 3600
обновляется энергия, полученная из источника, на основе мощности за прошедшее время обновления(power_w * (20 - dt) + M1.power_w * dt) / 20
сглаживает мощность за последние 20 секунд.date
date.year | Текущий год |
date.month | Месяц от 0..11 |
date.day | День от 1..31 |
date.weekday | Будний день SO=0, Mon=1, Tue=2, ... Сб=6 |
date.yearday | День в году от 0...366 |
date.hour | Час от 0..23 |
date.minute | Минута от 0...60 |
date.second | Секунда от 0...60 |
date.daysecond | Второе число текущего дня от 0...86399 |
date.dayminute | Минута текущего дня от 0..1439 |
date.dst | 0 = зимнее время, 1 = летнее время |
date.timestamp | Unix timespamp, secs since 1.1.1970 |
PB (nur cFos Power Brain)
PB.input1 | S0 Input 1, 1 = активен, 0 = неактивен |
PB.input2 | S0 Input 2, 1 = активен, 0 = неактивен |
CM Переменные менеджера зарядки
Эти переменные могут быть установлены администратором в разделе "Конфигурация". Например, если администратор установит переменную 'var_x' равной 1,5, CM.var_x вернет значение 1,5.
Предопределенные переменные:
_num_зарядка: Количество настенных ящиков, которые в настоящее время заряжаются
_num_charging1: количество заряжающихся в данный момент настенных ящиков, 1, если ни один из них не заряжается
_max_total_current: Максимальный ток подключения дома в мА на фазу
_max_total_evse_current: Максимальный ток для стенных коробок в мА на фазу
_price: Текущая цена на электроэнергию
_price_level: Текущий уровень цен на электроэнергию, -2=очень дорогая, -3=дорогая, -4=нормальная, -5=дешевая, -6=очень дешевая
_surplus: Текущий избыток солнечной энергии в ваттах
_org_surplus: Солнечный излишек, который был бы рассчитан Управляющим по тарифам независимо от его собственных формул
_storage_home_max_capacity: Общая емкость хранилища, дома, если она указана в конфигурации счетчика, в Втч
_storage_home_capacity: Текущая емкость хранилища, дома, если она указана в конфигурации счетчика, в Втч
_storage_all_max_capacity: общая емкость хранилища, All, если указано в конфигурации счетчика, в Wh
_storage_all_capacity: текущая емкость хранилища, All, если указано в конфигурации счетчика, в Wh
_max_total_current_prc: Процент от доступного максимального общего зарядного тока. Эта переменная также может быть записана (с помощью определений счетчика и переменных менеджера зарядки)
_dt: время, прошедшее с момента последнего обновления (в секундах).
Использование глобальных объектов:
charge 8A starting at 8:00am: date.dayminute >= 480 ? 8000 : 0
charge 16A on Saturday and Sunday: date.weekday == 5 || date.weekday == 6 ? 16000 : 0
charge 6A if input 2 active: PB.input2 ? 6000 : 0
charge 6A if CM variable non-zero: cm.var1 ? 6000 : 0
Примечание:
В разделе Пользовательские счетчики вы также найдете инструкции по использованию формул с глобальными переменными и выходами Charging Manager.
GM Глобальные счетчики
GM.grid_demand | Ссылка на сеть |
GM.consumed | Потребление |
GM.produced | Поколение |
GM.consumed_evse | Потребительские электронные автомобили |
GM.available_evse | Доступная мощность |
GM.surplus | Положительное сальдо PV |
GM.storage_home | Дом памяти |
GM.storage_all | Память обо всем |
GM.error | Производительность через ошибку |
Использование глобальных счетчиков
Jeder Zähler hat die Felder power_w, current, current_l1, current_l2, current_l3, import_wh und export_wh,
z.B. GM.prod_pwr.current_l1 oder GM.cons_pwr.power_w
. Bei 'current' wird der Strom der gerade betrachteten Phase ausgewertet. Ströme werden in mA geliefert, Leistung in W, Energie in Wh.
Вы хотите дополнительно ограничить зарядный ток по отношению к счетчику потребления квартиры. Для этого вы можете установить правило зарядки с формулой 16000 - M1.current
.
M1 - это счетчик, который измеряет потребление квартиры. Управление нагрузкой cFos Charging Manager сначала пытается обеспечить EVSE максимальным током по отношению к мощности подключения дома, но затем ограничивает его до 16A минус потребление квартиры.
Используя min_price(s), max_price(s), вы можете определить самую дешевую цену поставщика энергии в евро, при этом поиск цен ведется с текущего времени до max s секунд дня или следующего дня, например min_price(25200) возвращает самую дешевую цену до 7:00 утра. Например, вы можете создать правило зарядки с условием CM._price <= min_price(25200), чтобы заряжать в наиболее благоприятное время, но с условием, что вы хотите отправляться, например, с 8:00 утра (предполагается, что время зарядки составляет 1 час). Аналогично, есть две функции min_price_secs(s) и max_price_secs(s), которые возвращают время начала самой дешевой цены в секундах за начатый день. Затем их можно сравнить, например, с date.daysecond.