Documentação

cFos Charging Manager - Fórmulas

O cFos Charging Manager permite a avaliação dinâmica das fórmulas. Esta funcionalidade está disponível para um contador do tipo "Expressão" e para regras de carregamento do tipo "Fórmula".

Pode, portanto, configurar contadores que calculam valores de outros contadores ou EVSEs e mantê-los prontos e exibi-los. As regras de carregamento podem também utilizar fórmulas para calcular dinamicamente a corrente de carregamento e também aceder a contadores e EVSEs (incluindo contadores do tipo "Expressão").

As seguintes operações são possíveis com as fórmulas:

+ - * / %Adição, subtracção, multiplicação, divisão, módulo
& |bitwise AND e OR
^Cálculo de potência, por exemplo 10^2 = 100
min(x,y)Mínimo de x e y, mais de 2 argumentos possíveis
max(x,y)Máximo de x e y, mais de 2 argumentos possíveis
abs(x)Valor absoluto de x, por exemplo abs(-2) = 2
clamp(x,min,max)Valor x = min (se x < min), x = max (se x > max), caso contrário manter x
round(x)Ronda x para número inteiro. Exemplo: Arredondamento para 1 casa decimal: arredondamento(10*x)/10.
sqrt(x)Raiz quadrada de x
exists(x)verdadeiro se a variável x existir, caso contrário falso

Além disso, são possíveis as seguintes expressões lógicas:

== (igual), != (desigual), <= (menos), <= (menos igual), >= (maior), >= (maior igual), ! (não), || (lógico Ou), && (lógico E), ? (operador condicional, por exemplo x ? y : z, retorna y se x for verdadeiro, caso contrário z)

Isto permite, por exemplo, que a corrente seja desligada em função das condições: M1.current >= 6500 ? M1.current : 0 retorna a corrente de M1 se for superior a 6,5A e 0 caso contrário, o que faz uma pausa na carga. Para tais condições, é também possível consultar as entradas (ver abaixo)

Os seguintes nomes são possíveis:

MxMedidor com unidade ID x, por exemplo M1
ExEVSE com dispositivo ID x, por exemplo E1

Também é possível aceder aos contadores virtuais, tais como o excedente solar, o desenho da rede ou "Power avail. for EVSEs" (energia disponível para caixas de parede), através da configuração do contador e depois utilizando a ID do dispositivo correspondente na fórmula.

Pode então aceder aos valores individuais das unidades por meio do ponto. Estes são chamados da seguinte forma:

current_l1Corrente da fase 1 em mA
current_l2Corrente da fase 2 em mA
current_l3Corrente da fase 3 em mA
currentCorrente da fase actual em mA (para regras de carregamento, o Gestor de Carregamento consulta todas as fases uma após a outra; para contadores do tipo "Expressão", aplica-se a respectiva fase a que a fórmula se refere. Se tiver especificado uma fórmula para "Corrente L1", pode omitir os campos para as Correntes L2 e L3. Depois é utilizada a fórmula para a corrente L1)
power_wPotência activa actual em watts
offeredWallbox: Corrente oferecida em mA
import_whEnergia atraída em Wh
export_whEnergia injectada em Wh
dtO tempo que passou desde a última atualização (em segundos), apenas para o contador "Expressão", ver também CM._dt.
inputNNúmero de entrada N do dispositivo, 1 = ativo, 0 = inativo, N é o número da entrada, começando por 1.
socSOC, nível de carga em percentagem (contador/memória) - se suportado pelo dispositivo
idIdentificação do dispositivo, ID do Modbus
txn_durationDuração da transacção actual em segundos (EVSE)
charging_durTempo real de carregamento da transação atual, em segundos (Wallbox)
txn_energyEnergia carregada da actual transacção em Wh (EVSE)
min_currentCorrente mínima de carga em mA (EVSE)
max_currentCorrente máxima de carga em mA (EVSE)
stateEstado: 1 espera, 2 ligado, 3 carregamento, 4 carregamento com ventilação, 5 erro, 6 offline (EVSE)
cphasesNúmero de fases de carregamento (0-3)
pphasesNúmero de fases de carga previstas (0-3)
lb_cur_l1Corrente calculada da fase 1 em mA (caixa de parede). Apenas durante o cálculo das regras de carregamento da caixa de parede; caso contrário, 0
lb_cur_l2Corrente calculada da fase 2 em mA (caixa de parede). Apenas durante o cálculo das regras de carregamento da caixa de parede; caso contrário, 0
lb_cur_l3Corrente atualmente calculada da fase 3 em mA (Wallbox). Apenas durante o cálculo das regras de carregamento da caixa de parede; caso contrário, 0
lb_curCorrente calculada para a fase atual em mA (wallbox). Apenas durante o cálculo das regras de carregamento da caixa de parede; caso contrário, 0. O gestor de carregamento consulta todas as fases, uma após a outra.
surplus_pcurExcesso de corrente PV por fase (prevista) em mA
surplus_wanted1, se já tiver sido aplicada uma regra de excedente de PV, caso contrário 0
budgetKWh ou minutos no orçamento atual
budget_amountMáximo de kWh ou minutos no orçamento atual
budget_usedKWh ou minutos utilizados no orçamento atual
com_err1, se houver um erro COM, caso contrário 0
com_err21, se um erro COM estiver presente durante mais de 12 segundos; caso contrário, 0
reactive_powerEspecificação da potência reactiva em watts (se suportada pelo dispositivo), valores positivos: Indutivo, valores negativos: Capacitivo
switch_phasesPara caixas de parede com comutação de fases: Comutação manual de fases, 1 = monofásico, 3 = trifásico, -1 = comutação automática de fases
departureHora de partida ISO 15118 como carimbo de data/hora unitário (para wallboxes que o suportem; caso contrário, 0)
req_energyISO 15118 Energia necessária em Wh (para wallboxes que o suportem, caso contrário 0)
plugin_startCarimbo de data/hora Unix, hora de inserção do cabo
plugin_energyEnergia previamente carregada em Wh desde o momento em que o cabo foi ligado à corrente

Exemplo
M1.current_l1Corrente do contador M1, fase 1
E2.import_whPorquê consumido do EVSE E2
E3.power_wPotência de carga atual do E3 em watts

Se utilizar as fórmulas para um aparelho do tipo "Expressão", também pode omitir a ID do aparelho. Assim, os nomes dos campos referem-se a este contador, por exemplo, 'power_w' é a potência deste contador em watts. Através de 'dt' é possível realizar algumas funções alargadas, por exemplo, num contador do tipo "Expressão":

  • Como fórmula para "import_wh": import_wh + M1.power_w * dt / 3600 actualiza a energia de origem com base na energia durante o tempo de atualização anterior
  • Como fórmula para 'power_w': (power_w * (20 - dt) + M1.power_w * dt) / 20 suaviza a potência nos últimos 20 segundos.

Variáveis globais

date

date.yearAno actual
date.monthMês a partir de 0..11
date.dayDia a partir de 1..31
date.weekdayDia da semana SO=0, Seg=1, Ter=2, ... Sáb=6
date.yeardayDia do ano a partir de 0..366
date.hourHora a partir de 0..23
date.minuteMinuto a partir de 0...60
date.secondSegundo a partir de 0...60
date.daysecondSegundo deste dia a partir de 0..86399
date.dayminuteMinuto deste dia a partir de 0..1439
date.dst0 = hora de Inverno, 1 = hora de Verão
date.timestampUnix timespamp, secs since 1.1.1970

PB (nur cFos Power Brain)

PB.input1S0 Input 1, 1 = ativo, 0 = inativo
PB.input2S0 Input 2, 1 = ativo, 0 = inativo

CM Variáveis do gestor de carregamento

Estas variáveis podem ser definidas pelo administrador em 'Configuração'. Por exemplo, se o administrador definir a variável 'var_x' para 1,5, CM.var_x devolve o valor 1,5.

Variáveis pré-definidas:
_num_charging: Número de caixas de parede actualmente em carga
_num_charging1: Número de caixas de parede actualmente a carregar, 1 se nenhuma estiver a carregar
corrente_max_total: Corrente máxima da ligação da casa em mA por fase
_max_total_evse_current: Corrente máxima das caixas de parede em mA por fase
preço: preço actual da electricidade
_preço_nível: nível actual do preço da electricidade, -2=muito caro, -3=barato, -4=normal, -5=preço normal, -6=muito barato
excedente: Excedente solar actual em watts
excedente solar: Excedente solar como teria sido calculado pelo Gestor de Carregamento independentemente das suas próprias fórmulas
_storage_home_max_capacity: Capacidade total do armazenamento, casa, se especificado na configuração do contador, em Wh
_storage_home_capacity: Capacidade atual do armazenamento, Casa, se especificado na configuração do contador, em Wh
_storage_all_max_capacity: Capacidade total do armazenamento, Todos, se especificado na configuração do contador, em Wh
_storage_all_capacity: Capacidade atual do armazenamento, Todos, se especificado na configuração do contador, em Wh
_max_total_current_prc: Percentagem da corrente de carga total máxima disponível. Esta variável pode também ser escrita (por definições do contador e variáveis do gestor de carregamento)
_dt: O tempo decorrido desde a última atualização (em segundos).

Utilização dos objectos globais:
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
Nota:
Em Contadores personalizados, encontrará também instruções sobre como utilizar fórmulas com variáveis e saídas globais do Charging Manager.

GM Contadores globais

GM.grid_demandReferência da rede eléctrica
GM.consumedConsumo
GM.producedGeração
GM.consumed_evseConsumo de automóveis eléctricos
GM.available_evsePotência disponível
GM.surplusExcedente fotovoltaico
GM.storage_homeCasa da Memória
GM.storage_allMemória Tudo
GM.errorDesempenho através do erro

Utilização dos contadores globais
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.

Exemplo de aplicação

Pretende-se ainda limitar a corrente de carga em relação a um contador de consumo de um apartamento. Para o fazer, pode estabelecer uma regra de carga com a fórmula 16000 - M1.current.
M1 é o medidor que mede o consumo do apartamento. A gestão da carga do Gestor de Carga cFos tenta primeiro fornecer ao EVSE a corrente máxima em relação à potência de ligação da casa, mas depois limita esta a 16A menos o consumo do apartamento.

Funções

Utilizando min_price(s), max_price(s), pode determinar o preço mais barato do seu fornecedor de energia em euros, sendo os preços pesquisados desde a hora atual até ao máximo de s segundos do dia ou do dia seguinte, por exemplo, min_price(25200) devolve o preço mais barato até às 7:00 horas. Por exemplo, é possível criar uma regra de carregamento com a condição CM._price <= min_price(25200) para carregar à hora mais favorável, mas com a condição de que se pretende partir a partir das 8h00, por exemplo (assumindo um tempo de carregamento de 1 hora). Da mesma forma, existem as duas funções min_price_secs(s) e max_price_secs(s), que devolvem a hora de início do preço mais barato em segundos do dia iniciado. Pode então compará-las com date.daysecond, por exemplo.