- Created by Jose Porto on Dec 28, 2021
- Translations
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