Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Class SAIDI_SAIFI

Esta classe foi implementada utilizando scripts, SS_SaidiSaifi para conter todos os procedimentos necessários para a facilidade de cálculo dos indicadores DEC e FEC (SAIDI e SAIFI). Sua função é a de obter as ocorrências de abertura e de-energização, calcular os indicadores para os alimentadores e calcular os indicadores para as regiões definidas.
Também implementa os métodos para manutenção de uma tabela de Alimentadores e da tabela de Ocorrências.
De fato há uma classe implementada dentro das bibliotecas do action.NET, em SPIN.ActionNet.Biz.Eletric.DLL, com o nome de SaidiSaifi, que implementa os detalhes do cálculo e manutenção das tabelas.

Método Initialize

É um método público da classe SS_SaidiSaifi, implementada em Scripts no projeto.
É o primeiro método a ser chamado: inicializa a classe estática e cria a classe dinâmica na biblioteca do action.NET.

Método UpdateFeeders

É um método público cuja função é criar e popular a tabela FEEDERS.
Obtém a lista de tags na tabela Objects e escolhe os que tiverem o atributo Category incluindo a categoria FEEDERS. Gera então a tabela com os campos: Level, Nome do Alimentador e Número de consumidores (Consumers). Nesta geração inicial todos os alimentadores são incluídos com um valor default inicial definido nas constantes da classe.
Após a criação inicial pode-se alterar a tabela, pelo uso da Tela Feeders. (Veja adiante)

Método Daily_saving_occurrencies

Este método serve para fazer a pesquisa na tabela de Alarms por registros de ocorrências de normalizações de energização, e gravá-los na tabela Occurrencies criada para armazenar estas ocorrências.
O método supõe que será executado diariamente, entre 00:00 e 1:00 da manhã (AM).
Obtém então a data do dia anterior, recém terminado.
Faz a pesquisa de todos os registros com tag like BAYSTATE, com categoria FEEDER, com data do dia anterior, e atributo DURATION maior que um intervalo pré-definido e valor 1 (Normalizado).
Os membros BAYSTATE devem ser colocados nesta categoria, FEEDER.
O parâmetro para duration é o tempo mínimo de abertura, em segundos, para a ocorrência ser considerada nos cálculos de DEC e FEC. Veja no tag BA_SAIDI_SAIFI.PARAMS (MinTimeOccurency).
Estas constantes estão no template BA_SAIDI_SAIFI na tabela Objects.
Os registros assim obtidos na tabela Alarms são utilizados para criar os registros de ocorrências a serem gravados na tabela Occurencies.
Durante esta gravação são criados alguns campos novos:
Planned– Criado com valor indicando o motivo da ocorrência, para ser utilizado na escolha do indicador totalizador de DEF e FEC. O método procura ocorrências da proteção ou de indicação de NO VOLT, próximos ao momento da interrupção e infere o motivo conforme o que foi encontrado.
0 = Occorreu atuação de proteção no alimentador
1 = Considerada ocorrência planejada, pois não foi encontrado sinal de trip ou falta de tensão.
2= Foi detectada atuação de proteção ou NO-VOLT em outro bay que não um alimentador, nesta subestação.
TripOnFeeder – Foi detectada ocorrência de atuação de proteção (trip) próximo ao momento da ocorrência, no próprio alimentador que teve seu fornecimento interrompido.
Consumers – Criado com o valor do atributo consumers do alimentador correspondente na tabela FEEDERS.
Comments – Se a ocorrência for considerada planejada, ou trip no próprio alimentador é deixado vazio. Se for ocorrência de Trip ou No Volt em outro bay, que não o próprio alimentador é indicado se foi Trip ou No volt e o nome do bay. Poderá ser alterado pelo operador para colocar algum texto com motivo da ocorrência.
O formato desta tabela, criada automaticamente na primeira execução, é o seguinte:

Método GetOccurencies

Método utilizado para obter um conjunto de ocorrências existentes na tabela Occurencies, datadas em um determinado intervalo de dias. É utilizado na tela de controle de DEC-FEC, para mostrar as ocorrências de um determinado período.
public DataTable GetOccurencies(string startDay, string endDay);
O resultado é uma DataTable.
O intervalo de dias é definido pelos parâmetros:
startDay e endDay , que são strings no formato 'yyyy-mm-dd', já envolvidos com as aspas simples.
Ex: '2019-11-29'

Método CalculateFeeders

Método utilizado para executar o cálculo de DEC e FEC dos alimentadores, subestações e regiões em que estão durante um intervalo de datas passadas. O intervalo de datas é utilizado para a seleção de ocorrências na tabela Occurencies, acima mencionada.
O método percorre os registros da tabela, durante o intervalo definido e calcula o DEC e FEC de cada alimentador que sofreu pelo menos uma ocorrência no período analisado.
O cálculo é separado em três indicadores, conforme o motivo determinado para a ocorrência: Planejado, por proteção no alimentador ou por ocorrência em bay supridor à montante do alimentador.
Para cada valor calculado envia registros para um relatório e também cria objetos com os dados de cada cálculo no período.
Após este cálculo, utilizando a lista de todos os alimentadores existentes (tabela Feeders) e sua localização em subestações, cidades, etc. faz o cálculo de DEF e FEC, no mesmo período para estes níveis conforme a atribuição dos alimentadores a estas regiões.
Todos os resultados são colocados no relatório gerado, e também nos tags para indicadores, definidos nos templates SDFS, para que fiquem armazenados em tabelas de medidas históricas.
public void CalculateFeeders(string period, string startDay, string endDay)
O resultado é um arquivo com relatório em notepad.exe com o nome de arquivo SAIDI_<startDay>.dat.
Os parâmetros de entrada são:
period – string com tipo do relatório: "Daily", "Weekly" ou "Monthly" ;
startDay e endDay - O intervalo de dias que são strings no formato 'yyyy-mm-dd', já envolvidos com as aspas simples.
Ex: '2019-11-29'

Classe SS_CalcManager

Esta classe de domínio server foi implementada com a responsabilidade de chamar a classe SaidiSaifiIntervalCalculation da biblioteca SPIN.ActionNet.Biz.Electric.dll.
A classe SaidiSaifiIntervalCalculation contém o método CalculateIntervalWeightedAverage(eIntervalPeriod period), este responsável por pesquisar as tabelas de histórico para um determinado período, calcular a média ponderada para todas as tags e salvar o resultado em tags e tabelas específicas de período.

Método CalculateLastWeekSaidiSaifiAverage

Chama o método de cálculo para a semana anterior. Por default, a pesquisa busca valores de domingo até sábado da semana anterior.

Método CalculateLastMonthSaidiSaifiAverage

Chama o método de cálculo para o mês anterior.

Método CalculateLastQuarterSaidiSaifiAverage

Chama o método de cálculo para o trimestre anterior.

Método CalculateLastYearSaidiSaifiAverage

Chama o método de cálculo para o ano anterior.

Classe SS_SaveManager

Esta classe de domínio server foi implementada para verificar se a data atual corresponde às condições de período de cálculo e salva a média ponderada a partir de valores de DEC FEC diários.

Método VerifyPeriod

Este método é responsável por verificar se a data atual corresponde a uma das seguintes condições para cálculo das médias ponderadas dos valores diários de DEC FEC:

  • Se a data atual corresponde a um dia de domingo, calcula a média ponderada e salva os resultados para a semana anterior;

  • Se a data atual corresponde ao primeiro dia do mês, calcula a média ponderada e salva os resultados para o mês anterior;

  • Se a data atual corresponde ao primeiro dia do trimestre, calcula a média ponderada e salva os resultados para o trimestre anterior;

  • Se a data atual corresponde ao primeiro dia do ano, calcula a média ponderada e salva os resultados para o ano anterior;

SS_AverageCalculationTask

Esta tarefa de domínio server, foi desenvolvida apenas para chamar o método VerifyPeriod da classe SS_SaveManager a cada doze horas.

Classe SPIN.ActionNet.Biz.Electric.SaidiSaifiIntervalCalculation

Esta classe, implementada na biblioteca SPIN.ActionNet.Biz.Electric.dll, é responsável por pesquisar as tags diárias de DEC FEC nas tabelas de histórico para um determinado período, calcular as médias ponderadas e salvar os resultados nas tabelas apropriadas do período em questão.
Note que o cálculo da média ponderada utiliza as tags criadas no template SDSF_CALC.

Estas tags são descritas a seguir:

NOME

DESCRIÇÃO

DI_DAY

Tag DEC salva diariamente

FI_DAY

Tag FEC salva diariamente

CONS_DAY

Tag Consumidores salva diariamente

DI_WEEK

Média ponderada semanal do DEC

FI_WEEK

Média ponderada semanal do FEC

DI_MON

Média ponderada mensal do DEC

FI_MON

Média ponderada mensal do FEC

DI_QUA

Média ponderada trimestral do DEC

FI_QUA

Média ponderada trimestral do FEC

DI_YEA

Média ponderada anual do DEC

FI_YEA

Média ponderada anual do FEC

Método CalculateIntervalWeightedAverage

Este método é responsável por pesquisar as tags diárias de DEC FEC nas tabelas de histórico para um determinado período, calcular as médias ponderadas e salvar os resultados nas tabelas apropriadas do período em questão. O método recebe um único argumento, o período a ser pesquisado.
O período pode conter os seguintes valores:

Valor

Descrição

None

Este é o valor padrão. Se este valor é passado, o método é executado, porém nenhum cálculo é realizado ou salvo.

LastWeek

O método pesquisa dados para a semana anterior

Week

O método pesquisa dados para a semana atual

LastMonth

O método pesquisa dados para o mês anterior

Month

O método pesquisa dados para o mês atual

LastQuarter

O método pesquisa dados para o trimestre anterior

Quarter

O método pesquisa dados para o trimestre atual

LastYear

O método pesquisa dados para o ano anterior

Year

O método pesquisa dados para o ano atual


Após pesquisar os dados de histórico, um método interno utiliza os resultados da pesquisa para calcular a média ponderada para o período. Após o cálculo, outro método interno recebe os valores e os salva.
O salvamento dos valores consiste na utilização das tags

Tag.BA_SAIDI_SAIFI.TriggerSaveHistorian_WEEK, 
Tag.BA_SAIDI_SAIFI.TriggerSaveHistorian_MON, 
Tag.BA_SAIDI_SAIFI.TriggerSaveHistorian_QUA e 
Tag.BA_SAIDI_SAIFI.TriggerSaveHistorian_YEA 

como triggers das tabelas de histórico correspondentes por período e executando um toggle de valor nestas tags após o resultado dos cálculos ser passado às tags correspondentes de período.

Ex.: A execução do método CalculateIntervalWeightedAverage(eIntervalPeriod.LastQuarter) faria com que o mesmo pesquisasse todas as tags DI_DAY, FI_DAY e CONS_DAY para o período do trimestre anterior ao período atual. Após a pesquisa, o cálculo das médias ponderadas é executado e os resultados são passados a todas as tags DI_QUA e FI_QUA associadas à pesquisa. Finalmente, seria executado o toggle da tag Tag.BA_SAIDI_SAIFI.TriggerSaveHistorian_QUA que acionaria o gatilho de salvamento de todas as tabelas de histórico cuja propriedade trigger está associada a esta tag.

Nesta pagina:

  • No labels