“Uma Árvore de Falhas é um diagrama lógico que mostra a relação entre uma falha do sistema e falhas de componentes deste sistema.” Aven T. Reliability and risk analysis
Uma árvore de falhas descreve a relação das falhas dos componentes (eventos-base) com um modo de falha específico do sistema (evento-topo) através de portas lógicas. A análise de uma árvore de falhas segue os seguintes estágios:
No propósito de praticarmos a construção das árvores de falhas e alguns conceitos básicos de confiabilidade, tomemos como exemplo uma simples torre de destilação e os equipamentos associados a ela. Para os não-conhecedores dos mistérios destas torres, segue descrição do funcionamento do processo.
Vamos empregar dois pacotes neste conjunto de exercícios: o dplyr e o FaultTree. Vamos carregá-los:
# Instalaçao dos pacotes
if (!require("FaultTree")) install.packages("FaultTree", repos="http://R-Forge.R-project.org") ; library(FaultTree)
if (!require("dplyr")) install.packages("dplyr") ; library(dplyr)
Agora estamos preparados para as análises!
Partimos do controle de pressão da coluna. Por hora vamos acrescentar ao sub-sistema um transmissor de pressão (PT-101). Logo teremos a seguinte configuração para o sub-sistema em estudo:
Neste exercício, o evento-topo é a “Falha no contole da pressão da destiladora”. O nível de detalhamento da análise se limita aos equipamentos responsáveis pelo controle da pressão da torre. Ou seja, a série que vai do sensor/transmissor até o elemento final de controle. Logo, podemos iniciar a construção da árvore de falhas.
# Construção da árvore (ex. confiabilidade em série)
ex01 <- ftree.make(type="or", name="Falha no contole da", name2="pressao da destiladora")
Já definimos o evento-topo e o escopo de estudo. Agora, passamos à construção da árvore. Que eventos são causas imediatas (sem necessidade de eventos intermediários) do evento-topo?
É imediato notarmos que a falha em qualquer um dos equipamentos da série leva diretamente ao evento-topo. Portanto, eles estão diretamente ligados ao evento-topo. Além disso, como a fronteira de nosso escopo são os equipamentos em si e não nenhum componente interno dos mesmos, então a falha de cada um destes equipamentos é um evento-base.
ex01 <- addProbability(ex01, at=1, prob=0.1, name="Falha no transmissor", name2="de pressao (PT-101)") %>%
addProbability(at=1, prob=0.1, name="Falha no controlador", name2="de pressao (PIC-101)") %>%
addProbability(at=1, prob=0.1, name="Falha na valvula", name2="de controle (Vent)")
O símbolo %>% (pipe) nos permite propagar a variável que está sendo modificada pelas várias linhas de comando sem a necessidade de chamar a mesma variável várias vezes.
Por hora, iremos ignorar a definição dos conjuntos de cortes mínimos. Assim sendo, podemos enfim propagar as probabilidades ao longo da árvore, obter a probabilidade de ocorrência do evento-topo e gerar um documento html contendo a árvore datravés da funções ftree.calc e ftree2html.
ex01 <- ftree.calc(ex01)
ftree2html(ex01, write_file=TRUE)
Note que os elementos que aparecem em série no diagrama de blocos de confiabilidade, na árvore de falhas têm suas falhas ligadas ao evento-topo por uma porta lógica OU. Essa inversão ocorre por causa da complementariedade dos conceitos de falha e confiabilidade (não-falha).
Quando uma árvore contém somente portas E e OU ela pode ser descrita alternativamente por meio de um diagrama de confiabilidade.
Ainda, é importante notar que a probabilidade de um evento associado a uma porta lógica OU não é a mera soma das probabilidade dos eventos que afluem para a mesma e sim esta soma compensada pelas recontagens de eventos combinados. Todavia, se tais eventos são raros a soma é uma aproximação adequada.
O cálculo de probabilidades unidas por uma porta lógica OU pode ser aproximado para uma soma se tais eventos são raros.
Agora, deixemos de lado o sistema de controle de pressão e observemos o sistema de supervisão do nível da coluna. Vamos ignorar a válvula e o controlador de nível (LIC-102) e iremos acrescentar um indicador de nível (LI-101) e um alarme de nível baixo (LAL-101) ambos montados no painel principal de controle. Incluiremos também um visor de nível (LG-101) montado no corpo da coluna.
Neste exemplo, o evento-topo é a “Falha em detectar nível baixo”. Mais uma vez iremos descrever os eventos até os equipamentos sem maior detalhamento. Em verdade, em alguns aspectos este caso é análogo ao exemplo em série. Assim, as falhas dos equipamentos irão levar diretamente ao modo de falha sob estudo e também serão eventos-base. A diferença entre os exemplos é a relação funcional entre os componentes do sistema. Neste exemplo temos instrumentos redundantes. O que implica afirmar que eles estão em paralelo.
# Construção da árvore (ex. confiabilidade em paralelo)
ex02 <- ftree.make(type="and", name="Falha em detectar", name2="nivel baixo")
Enfim podemos propagar as probabilidades ao longo da árvore.
ex02 <- addProbability(ex02, at=1, prob=0.1, name="Falha no indicador", name2="de nivel (LI-101)") %>%
addProbability(at=1, prob=0.1, name="Falha no visor", name2="de nivel (LG -101)") %>%
addProbability(at=1, prob=0.1, name="Falha no alarme de", name2="nivel baixo (LAL - 101)") %>%
ftree.calc()
ftree2html(ex02, write_file=TRUE)
Ainda trabalhando no problema de supervisão do nível da coluna, inserimos transmissores comunicando-se com alarmes no painel principal de controle de forma a termos um arranjo em paralelo com redundância em alto nível.
Dado o evento-topo, “Falha em detectar nível baixo”, construímos a árvore:
# Construção da árvore (ex. confiabilidade em paralelo - redundância em alto nível)
ex03 <- ftree.make(type="and", name="Falha em detectar", name2="nivel baixo") %>%
addLogic(at=1, type="or", name="Falha no sinal", name2=" da conexao 01") %>%
addProbability(at=2, prob=0.1, name="Falha no transmissor", name2="de nivel (LT-101)") %>%
addProbability(at=2, prob=0.1, name="Falha no alarme de", name2="nivel baixo (LAL - 101)") %>%
addLogic(at=1, type="or", name="Falha no sinal", name2=" da conexao 02") %>%
addProbability(at=5, prob=0.1, name="Falha no transmissor", name2="de nivel (LT-102)") %>%
addProbability(at=5, prob=0.1, name="Falha no alarme de", name2="nivel baixo (LAL - 102)") %>%
ftree.calc()
ftree2html(ex03, write_file=TRUE)
Para confirmar se a árvore está estruturalmente correta vamos calcular a probabilidade do evento-topo de duas formas: uma usando a equação da confiabilidade para sistemas em redundância em alto nível e outra usando a fórmula para um sistema de redundância k-N.
Confiabilidade de um sistema com redundância em alto nível com dois subsistemas com dois componentes cada apresentando confiabilidades idênticas (com \(F = 0.1\), \(n = 2\) e \(m = 2\)):
\[R_{SIST} = 1 - (1-R^n)^m\] \[R_{SIST} = 1 - (1-R^2)^2\] \[R_{SIST} = 2R^2 - R^4\] \[1-F_{SIST} = 2(1-F)^2 - (1-F)^4\] \[F_{SIST} =1 - 2(1-0.1)^2 + (1-0.1)^4\] \[F_{SIST} = 0.0361\]
Agora calculemos a probabilidade de falha de um sistema 2-4 (com \(k = 2\), \(N = 4\) e \(F = 0.1\)):
\[R_{SIST} = \sum_{x=k}^{N} \frac{N!}{x!(N-x)!} R^{x} (1-R)^{N-x}\] \[1-F_{SIST} = \sum_{x=2}^{4} \frac{4!}{x!(4-x)!} (1-F)^{x} F^{4-x}\] \[F_{SIST} = 1 - \sum_{x=2}^{4} \frac{4!}{x!(4-x)!} (1-F)^{x} F^{4-x}\] \[F_{SIST} = 1 -\frac{4!}{2!(4-2)!} (1-0.1)^{2} 0.1^{4-2}-\frac{4!}{3!(4-3)!} (1-0.1)^{3} 0.1^{4-3}-\frac{4!}{4!(4-4)!} (1-0.1)^{4} 0.1^{4-4}\] \[F_{SIST} = 0.0037\]
Tivemos um valor abaixo do esperado. A que se deve tal erro? O que acontece é que esta equação considera que todos os casos onde ao menos 4, 3 ou 2 componentes funcionam geram sucesso. Todavia dos seis possíveis arranjos onde ao menos dois componentes funcionam apenas dois levam ao sucesso. Observe a tabela abaixo:
Para corrigir isto, basta adicionarmos as probabilidades de ocorrência dos quatro cenários que geram falha:
\[F_{SIST} = 0.0037 + 4(F^{2}(1-F)^{2})\] \[F_{SIST} = 0.0037 + 4(0.1^{2}(1-0.1)^{2})\] \[F_{SIST} = 0.0037 + 0.0324\] \[F_{SIST} = 0.0361\]
Passemos agora a um arranjo com redundância em baixo nível.
Dado o evento-topo, “Falha em detectar nível baixo”, construímos a árvore:
# Construção da árvore (ex. confiabilidade em paralelo - redundância em baixo nível)
ex04.1 <- ftree.make(type="and", name="Falha em detectar", name2="nivel baixo") %>%
addLogic(at=1, type="or", name="Falha no sinal", name2=" da conexao 01") %>%
addProbability(at=2, prob=0.1, name="Falha no alarme de", name2="nivel baixo (LAL - 101)") %>%
addLogic(at=2, type="and", name="Falha na transmissao", name2=" de nivel") %>%
addProbability(at=4, prob=0.1, name="Falha no transmissor", name2="de nivel (LT-101)") %>%
addProbability(at=4, prob=0.1, name="Falha no transmissor", name2="de nivel (LT-102)") %>%
addLogic(at=1, type="or", name="Falha no sinal", name2=" da conexao 02") %>%
addProbability(at=7, prob=0.1, name="Falha no alarme de", name2="nivel baixo (LAL - 102)") %>%
addDuplicate(at=7, dup_id=4) %>%
ftree.calc()
ftree2html(ex04.1, write_file=TRUE)
Novamente, para confirmar se a árvore está estruturalmente correta vamos calcular a probabilidade do evento-topo de duas formas: uma usando a equação da confiabilidade para sistemas em redundância em baixo nível e outra usando a fórmula para um sistema de redundância k-N.
Confiabilidade de um sistema com redundância em baixo nível com dois subsistemas com dois componentes cada apresentando confiabilidades idênticas (com \(F = 0.1\), \(n = 2\) e \(m = 2\)):
\[R_{SIST} = (1 - (1-R^n))^m\] \[R_{SIST} = 1 - (1-R^2)^2\] \[R_{SIST} = (2R - R^2)^2\] \[1 - F_{SIST} = (2(1-F) - (1-F)^2)^2\] \[F_{SIST} = 1 - (2(1-0.1) - (1-0.1)^2)^2\] \[F_{SIST} = 0.0199\]
Desta vez, o próprio resultado da árvore foi contradito pelo cálculo da fórmula. Por hora, vamos nos ater à diferença entre os arranjos em paralelo. Já calculamos a probabilidade de falha de um sistema 2-4 (com \(F = 0.1\)) e obtivemos \(F_{SIST} = 0.0037\). Fica evidente mais uma vez, que alguns eventos não foram contabilizados entre os cenários com dois sucessos e duas falhas:
A correção advém da adição das probabilidades de ocorrência dos dois cenários que geram falha:
\[F_{SIST} = 0.0037 + 2(F^{2}(1-F)^{2})\] \[F_{SIST} = 0.0037 + 2(0.1^{2}(1-0.1)^{2})\] \[F_{SIST} = 0.0037 + 0.0162\] \[F_{SIST} = 0.0199\]
Este resultado reconcilia as duas fórmulas. Comparando as probabilidades de falha nos cenários de alto (\(F_{SIST} = 0.0361\)) e baixo nível (\(F_{SIST} = 0.0199\)) notamos a superior confiabilidade do sistema de baixo nível.
Agora, retomemos ao problema estrutural da árvore proposta para o sistema de baixo nível. Apesar de sua aparência promissora, ela subestimou a probabilidade do evento-topo. Como obter então a verdadeira estrutura de uma árvore de falhas equivalente a tal sistema proposto?
Neste momento a determinação dos conjuntos de corte mínimo se torna providencial para auxiliar na identificação de erros estruturais da árvore e, ainda além, como alternativa para calcular a probabilidade do evento-topo sem a necessidade de propagar as chances dos eventos-base por vários eventos intermediários.
Os cortes mínimos são os conjuntos que agregam a menor porção de eventos cuja ocorrência simultânea leva diretamente ao evento-topo. A ocorrência de qualquer um dos cortes mínimos leva ao evento-topo.
É evidente que obter tais conjuntos por inspeção visual pode ser extremamente demandante, logo, vamos fazer bom uso do R e do pacote FaultTree:
# Cortes mínimos (ex. confiabilidade em paralelo - redundância em baixo nível)
ex04.1_cs <- cutsets(ex04.1)
Evento-base 1 | Evento-base 2 | |
---|---|---|
Corte mínimo 1 | Falha no alarme de nivel baixo (LAL - 101) | Falha no alarme de nivel baixo (LAL - 102) |
Corte mínimo 2 | Falha no transmissor de nivel (LT-101) | Falha no transmissor de nivel (LT-102) |
Esta função fornece os cortes mínimos de 1ª a 4ª ordem. A árvore deste exemplo somente apresenta dois conjutos os quais são de 2ª ordem. Na posse desta informação vamos reconstruir a árvore:
# Construção da árvore (ex. confiabilidade em paralelo - redundância em baixo nível)
ex04.2 <- ftree.make(type="or", name="Falha em detectar", name2="nivel baixo") %>%
addLogic(at=1, type="and", name="Falha na exibicao", name2=" de nivel baixo") %>%
addProbability(at=2, prob=0.1, name="Falha no alarme de", name2="nivel baixo (LAL - 101)") %>%
addProbability(at=2, prob=0.1, name="Falha no alarme de", name2="nivel baixo (LAL - 102)") %>%
addLogic(at=1, type="and", name="Falha na transmissao", name2=" de nivel") %>%
addProbability(at=5, prob=0.1, name="Falha no transmissor", name2="de nivel (LT-101)") %>%
addProbability(at=5, prob=0.1, name="Falha no transmissor", name2="de nivel (LT-102)") %>%
ftree.calc()
ftree2html(ex04.2, write_file=TRUE)
Agora, com o auxílio dos cortes mínimos, atingimos de maneira exata a probabilidade esperada. Em verdade, estes conjuntos apresentam duas excelentes funções:
Os cortes mínimos são úteis na correção de problemas estruturais das árvores, mas é preciso cuidado na análise. Verifique sempre a coerência dos cortes propostos. Estruturas muito absurdas podem produzir cortes mínimos absurdos.
Vamos, enfim, discutir de maneira completa o procedimento de análise de uma árvore de falhas. Para tal, iremos estudar o controle de nível de líquido na torre além de outros elementos que afetam este nível.
A estes elementos são associados os seguintes modos de falha:
modos <- data.frame(
Componentes = c(rep("Fluido de aquecimento",2), rep("Controlador de vazão - FRC-104",2), "Válvula de controle (FRC-104)", "Válvula de controle (LIC-102)", "Refervedor", rep("Controlador de nível - LIC-102",2)),
Modos = c("Temperatura do fluido é inadequada", "Vazão do fluido é inadequada", "Controlador comprometido (FRC-104)", "Ação de controle além do limite físico (FRC-104)", "Falha na válvula (FRC-104)", "Falha na válvula (LIC-102)", "Refervedor comprometido", "Controlador comprometido (LIC-102)", "Ação de controle além do limite físico (LIC-102)"),
Distribuicao = c(rep("Exponencial",2), rep("Weibull",2), rep("Exponencial",2), "Lognormal", rep("Weibull",2)),
Par1 = c(1, 1, 2000, 1000, 1, 1, 8, 2000, 1000),
Par2 = c(1/1000, 0.002, 0.8, 0.8, 0.004, 0.004, 0.7, 0.8, 0.8),
Prob = rep(NA, 9),
MTTF = rep(NA, 9)
)
tempo <- 10 # Instante representado no estudo
modos$Prob[c(1:2,5:6)] <- 1-exp(-modos$Par2[c(1:2,5:6)]*tempo) # Prob. de falha (dist. Exponencial)
modos$Prob[c(3:4,8:9)] <- 1-exp(-(tempo/modos$Par1[c(3:4,8:9)])^(modos$Par2[c(3:4,8:9)])) # Prob. de falha (dist. Weibull)
modos$Prob[7] <- 1-pnorm((-log(tempo) + modos$Par1[7])/modos$Par2[7]) # Prob. de falha (dist. Lognormal)
modos$MTTF[c(1:2,5:6)] <- 1/modos$Par2[c(1:2,5:6)] # MTTF (dist. Exponencial)
modos$MTTF[c(3:4,8:9)] <- round(modos$Par1[c(3:4,8:9)]*gamma(1+1/modos$Par2[c(3:4,8:9)])) # MTTF (dist. Weibull) - Arredondado
modos$MTTF[7] <- round(exp(modos$Par1[7] + (modos$Par2[7]^2)/2)) # MTTF (dist. Lognormal) - Arredondado
colnames(modos)[c(2:6)] = c("Modos de falha", "Distribuição", "Parâmetros de localização e forma", "Parâmetros de escala e de frequência", "Prob. de falha")
Componentes | Modos de falha | Distribuição | Parâmetros de localização e forma | Parâmetros de escala e de frequência | Prob. de falha | MTTF |
---|---|---|---|---|---|---|
Fluido de aquecimento | Temperatura do fluido é inadequada | Exponencial | 1 | 0.001 | 0.0099502 | 1000 |
Vazão do fluido é inadequada | 0.002 | 0.0198013 | 500 | |||
Controlador de vazão - FRC-104 | Controlador comprometido (FRC-104) | Weibull | 2000 | 0.800 | 0.0143234 | 2266 |
Ação de controle além do limite físico (FRC-104) | 1000 | 0.0248060 | 1133 | |||
Válvula de controle (FRC-104) | Falha na válvula (FRC-104) | Exponencial | 1 | 0.004 | 0.0392106 | 250 |
Válvula de controle (LIC-102) | Falha na válvula (LIC-102) | 0.0392106 | 250 | |||
Refervedor | Refervedor comprometido | Lognormal | 8 | 0.700 | 0.0000000 | 3809 |
Controlador de nível - LIC-102 | Controlador comprometido (LIC-102) | Weibull | 2000 | 0.800 | 0.0143234 | 2266 |
Ação de controle além do limite físico (LIC-102) | 1000 | 0.0248060 | 1133 |
Para cada modo de falha dos equipamentos temos uma expressão conhecida para sua confiabilidade em função do tempo. Portanto, dado um instante qualquer podemos calcular a confiabilidade do equipamento em relação a cada falha. Analogamente podemos calcular as probabilidades de falha conforme as equações já conhecidas:
\[F(t) = 1-e^{-\lambda t}\] \[F(t) = 1-e^{ -\left (t/\beta \right )^{\alpha }}\] \[F(t) = \Phi \left ( \frac{ln t - \mu }{\sigma} \right )^{2} ; \Phi \left ( z \right ) = \frac{1}{\sqrt{2\pi z}} exp\left ( \frac{-z^{2}}{2} \right )\] Onde:
Para criar o objeto que guardará a árvore partimos do evento-topo. Para tal é preciso definir com zelo o conceito de falha do sistema (evento-topo) e indicar qual a porta lógica ligada a tal evento. Neste exemplo, o evento-topo é nível fora de especificacao e controle. As causas imediatas de falha que supomos são: nível fora de especificacao e nível fora de controle. Podemos então buscar as causas-raiz até o nível dos equipamentos e elementos em si (escopo).
# Construção da árvore
ex <- ftree.make(type="and", name="Nivel fora de", name2="especificacao e controle")
1ª etapa: Definição do evento-topo e do escopo de estudo - Concluída!
Devemos, agora, detalhar a combinação de eventos em cada ramo da árvore. As causas imediatas e suficientes para deixar o nível fora de especificacao são ligadas ao processo de troca de calor entre os fluidos:
ex <- addLogic(ex, at=1, type="or", name="Nivel fora", name2="de especificacao")
ftree2html(ex, write_file=TRUE)
Temos informações sobre as duas primeiras causas, mas não sobre a última. Na ausência de dados, informação da literatura ou interesse em modelar um modo de falha, a árvore será construída sem poder de previsão dos cenários relacionados a tal falha. Esta situação é um importante lembrete das limitações e hipóteses de nossos modelos.
O comprometimento do refervedor já é um evento-base e não precisa de maior detalhamento. Já os problemas com o fluido aquecedor partem dos problemas com vazão e temperatura.
ex <- addProbability(ex, at=2, prob=modos[7,6], name="Refervedor", name2="comprometido")
ftree2html(ex, write_file=TRUE)
Quando simultaneamente:
então o fluido aquecedor tem problemas devido à vazão.
ex <- addLogic(ex, at=2, type="or", name="Problemas com o", name2="fluido aquecedor") %>%
addLogic(at=4, type="and", name="Problemas com", name2="a vazao") %>%
addProbability(at=5, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addLogic(at=5, type="or", name="Malha de controle", name2="de vazao inefetiva")
ftree2html(ex, write_file=TRUE)
Quando a temperatura do fluido é inadequada (evento-base), então o fluido aquecedor tem problemas devido à temperatura. Lembre que o controlador FRC-104 está cego à temperatura do fluido de aquecimento.
ex <- addProbability(ex, at=4, prob=modos[1,6], name="Temperatura do fluido", name2="inadequada")
ftree2html(ex, write_file=TRUE)
Porém, o que pode tornar a ação da malha de controle de vazão inefetiva?
Sabemos que a ação de controle parte do controlador, é transmitida para a válvula de controle e é efetuada pela mesma. A falha da válvula ou do controlador já é suficiente para que o controle não seja efetivo. Outra forma de falha ocorre quando o sinal de saída do controlador exige da válvula uma abertura além de 0% ou 100% (limites físicos). O sinal de erro continuará chegando ao controlador, mas o problema não será resolvido.
ex <- addLogic(ex, at=7, type="or", name="Falha de componentes", name2="da malha de vazao") %>%
addProbability(at=7, prob=modos[4,6], name="Acao de controle alem", name2="do limite fisico (FRC-104)") %>%
addProbability(at=9, prob=modos[3,6], name="Controlador FRC-104", name2="comprometido") %>%
addProbability(at=9, prob=modos[5,6], name="Falha na", name2="valvula (FRC-104)")
ftree2html(ex, write_file=TRUE)
A estrutura dos modos de falha que levam a uma ação inefetiva da malha de controle de nível é a mesma que foi discutida logo acima para a malha de vazão.
ex <- addLogic(ex, at=1, type="or", name="Nivel fora", name2="de controle") %>%
addLogic(at=13, type="or", name="Falha de componentes", name2="da malha de nivel") %>%
addProbability(at=13, prob=modos[9,6], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addProbability(at=14, prob=modos[8,6], name="Controlador LIC-102", name2="comprometido") %>%
addProbability(at=14, prob=modos[6,6], name="Falha na", name2="valvula (LIC-102)")
ftree2html(ex, write_file=TRUE)
Com a árvore completa, podemos efetuar a parte inicial da análise qualitativa e calcular uma estimativa da probabilidade do evento-topo:
ex <- ftree.calc(ex)
Prob.Topo <- ex$PBF[1]
ftree2html(ex, write_file=TRUE)
2ª etapa: Construção da árvore de falhas - Concluída!
Adentramos, então, nas análises qualitativa e quantitativa:
# Cortes mínimos
ex_cs <- cutsets(ex)
Evento-base 1 | Evento-base 2 | Evento-base 3 | |
---|---|---|---|
Cortes mínimos de 2ª ordem | |||
Corte mínimo 1 | Refervedor comprometido | Acao de controle alem do limite fisico (LIC-102) | |
Corte mínimo 2 | Controlador LIC-102 comprometido | ||
Corte mínimo 3 | Falha na valvula (LIC-102) | ||
Corte mínimo 4 | Temperatura do fluido inadequada | Acao de controle alem do limite fisico (LIC-102) | |
Corte mínimo 5 | Controlador LIC-102 comprometido | ||
Corte mínimo 6 | Falha na valvula (LIC-102) | ||
Cortes mínimos de 3ª ordem | |||
Corte mínimo 7 | Vazao do fluido inadequada | Acao de controle alem do limite fisico (FRC-104) | Acao de controle alem do limite fisico (LIC-102) |
Corte mínimo 8 | Controlador LIC-102 comprometido | ||
Corte mínimo 9 | Falha na valvula (LIC-102) | ||
Corte mínimo 10 | Controlador FRC-104 comprometido | Acao de controle alem do limite fisico (LIC-102) | |
Corte mínimo 11 | Controlador LIC-102 comprometido | ||
Corte mínimo 12 | Falha na valvula (LIC-102) | ||
Corte mínimo 13 | Falha na valvula (FRC-104) | Acao de controle alem do limite fisico (LIC-102) | |
Corte mínimo 14 | Controlador LIC-102 comprometido | ||
Corte mínimo 15 | Falha na valvula (LIC-102) |
3ª etapa: Identicação dos conjutos de corte mínimo - Concluída!
A priori, apenas observando a estrutura dos cortes mínimos notamos a onipresença dos eventos relacionados à falhas na malha de controle de nível. O que é extremamente coerente já que tal malha é diretamente responsável pela variável afetada pelo evento-topo. Ainda ignorando a informação da probabilidade de ocorrência, supomos que esse conjunto de eventos é o maior ponto-fraco do sistema.
4ª etapa: Análise qualitativa da árvore - Concluída!
Agora, estruturamos a árvore de acordo com seus cortes mínimos:
exCM <- ftree.make(type="or", name="Nivel fora de", name2="especificacao e controle") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 01") %>%
addProbability(at=2, prob=modos[7,6], name="Refervedor", name2="comprometido") %>%
addProbability(at=2, prob=modos[9,6], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 02") %>%
addProbability(at=5, prob=modos[7,6], name="Refervedor", name2="comprometido") %>%
addProbability(at=5, prob=modos[8,6], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 03") %>%
addProbability(at=8, prob=modos[7,6], name="Refervedor", name2="comprometido") %>%
addProbability(at=8, prob=modos[6,6], name="Falha na", name2="valvula (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 04") %>%
addProbability(at=11, prob=modos[1,6], name="Temperatura do fluido", name2="inadequada") %>%
addProbability(at=11, prob=modos[9,6], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 05") %>%
addProbability(at=14, prob=modos[1,6], name="Temperatura do fluido", name2="inadequada") %>%
addProbability(at=14, prob=modos[8,6], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 06") %>%
addProbability(at=17, prob=modos[1,6], name="Temperatura do fluido", name2="inadequada") %>%
addProbability(at=17, prob=modos[6,6], name="Falha na", name2="valvula (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 01") %>%
addProbability(at=20, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=20, prob=modos[4,6], name="Acao de controle alem", name2="do limite fisico (FRC-104)") %>%
addProbability(at=20, prob=modos[9,6], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 02") %>%
addProbability(at=24, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=24, prob=modos[4,6], name="Acao de controle alem", name2="do limite fisico (FRC-104)") %>%
addProbability(at=24, prob=modos[8,6], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 03") %>%
addProbability(at=28, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=28, prob=modos[4,6], name="Acao de controle alem", name2="do limite fisico (FRC-104)") %>%
addProbability(at=28, prob=modos[6,6], name="Falha na", name2="valvula (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 04") %>%
addProbability(at=32, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=32, prob=modos[3,6], name="Controlador FRC-104", name2="comprometido") %>%
addProbability(at=32, prob=modos[9,6], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 05") %>%
addProbability(at=36, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=36, prob=modos[3,6], name="Controlador FRC-104", name2="comprometido") %>%
addProbability(at=36, prob=modos[8,6], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 06") %>%
addProbability(at=40, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=40, prob=modos[3,6], name="Controlador FRC-104", name2="comprometido") %>%
addProbability(at=40, prob=modos[6,6], name="Falha na", name2="valvula (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 07") %>%
addProbability(at=44, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=44, prob=modos[5,6], name="Falha na", name2="valvula (FRC-104)") %>%
addProbability(at=44, prob=modos[9,6], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 08") %>%
addProbability(at=48, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=48, prob=modos[5,6], name="Falha na", name2="valvula (FRC-104)") %>%
addProbability(at=48, prob=modos[8,6], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 09") %>%
addProbability(at=52, prob=modos[2,6], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=52, prob=modos[5,6], name="Falha na", name2="valvula (FRC-104)") %>%
addProbability(at=52, prob=modos[6,6], name="Falha na", name2="valvula (LIC-102)")
ftree2html(exCM, write_file=TRUE)
Comparemos os valores de probabilidade do evento-topo calculados a partir da árvore original e da árvore composta de corte mínimos:
Prob. Topo (Árvore original) | Prob. Topo (Cortes mínimos) |
---|---|
0.0008755 | 0.0009007 |
Aparentemente a estrutura proposta originalmente para a árvore de falhas subestimou a probabilidade do evento-topo. Todavia perceba que há eventos que pertencem a múltiplos cortes mínimos. Quando isso ocorre, a árvore construída diretamente a partir dos cortes mínimos perde precisão, pois ignora a identidade dos eventos-bases durante os cálculos. Mais a frente iremos explicar como surge a imprecisão. Por hora, vamos reconstruir a árvore condensando os cortes mínimos de acordo com suas semelhanças e também nomeando os eventos intermediários necessários.
Partamos do 1º corte mínimo que contém os eventos Refervedor comprometido e Ação de controle além do limite físico (LIC-102). Sabemos que a ocorrência simultânea de todos os eventos de um corte mínimo é condição suficiente para a ocorrência do evento-topo. Ou seja, eles estão ligados a um evento intermediário, ainda indefinido, por meio de uma porta E.
Evento-base 1 | Evento-base 2 | Evento-base 3 | |
---|---|---|---|
Cortes mínimos de 2ª ordem | |||
Corte mínimo 1 | Refervedor comprometido | Acao de controle alem do limite fisico (LIC-102) |
Agora, observando os cortes de 1 a 3, notamos que o evento Refervedor comprometido é comum a todos os conjuntos. Qualquer um dos três outros eventos que ocorrer simultaneamente com o comprometimento do refervedor leva ao evento-topo. Ou seja, os três eventos estão ligados a um evento intermediário por meio de uma porta OU. Já este evento intermediário e o comprometimento do refervedor estão ligados a outro evento intermediário.
Evento-base 1 | Evento-base 2 | Evento-base 3 | |
---|---|---|---|
Cortes mínimos de 2ª ordem | |||
Corte mínimo 1 | Refervedor comprometido | Acao de controle alem do limite fisico (LIC-102) | |
Corte mínimo 2 | Controlador LIC-102 comprometido | ||
Corte mínimo 3 | Falha na valvula (LIC-102) |
Esta estrutura proposta para condensar os cortes mínimos de 1 a 3 é conveniente para explicar como é gerado um erro no cálculo da probabilidade do evento-topo advindo de cortes mínimos com eventos em comum. Inicialmente temos a estrutura condensada:
A probabilidade do evento intermediário que engloba \(P_{2}\), \(P_{3}\) e \(P_{4}\) é dada por:
\[P_{2} + P_{3} + P_{4} -P_{2}P_{3} -P_{2}P_{4} -P_{3}P_{4} +P_{2}P_{3}P_{4}\]
A probabilidade do evento-topo, enfim, é dada por:
\[P_{1}P_{2} + P_{1}P_{3} + P_{1}P_{4} -P_{1}P_{2}P_{3} -P_{1}P_{2}P_{4} -P_{1}P_{3}P_{4} +P_{1}P_{2}P_{3}P_{4}\]
Retornamos, assim, à árvore composta por cortes mínimos:
As probabilidades dos eventos intermediários são: \(P_{1}P_{2}\), \(P_{1}P_{3}\) e \(P_{1}P_{4}\). Já a probabilidade do evento-topo é:
\[P_{1}P_{2} + P_{1}P_{3} + P_{1}P_{4} -P_{1}P_{2}P_{1}P_{3} -P_{1}P_{2}P_{1}P_{4} -P_{1}P_{3}P_{1}P_{4} +P_{1}P_{2}P_{1}P_{3}P_{1}P_{4}\]
Note que há as quatro últimas parcelas da soma apresentam produtos de \(P_{1}\) por si mesmo. Porém, \(P_{1} \times P_{1} = P_{1}\), pois este produto representa a interseção entre dois eventos. A interseção de um evento consigo mesmo é o próprio evento (\(P_{1} \cap P_{1} = P_{1}\)).
Se aplicarmos esta propriedade ao resultado obtido, alcançamos a mesma formulação advinda da árvore condensada:
\[P_{1}P_{2} + P_{1}P_{3} + P_{1}P_{4} -P_{1}P_{2}P_{3} -P_{1}P_{2}P_{4} -P_{1}P_{3}P_{4} +P_{1}P_{2}P_{3}P_{4}\]
Infelizmente, o pacote não é capaz de fazer a identificação necessária para corrigir esta imprecisão. Logo, somente poderemos utilizar os cortes mínimos para efetuar a análise qualitativa da árvore e corrigir sua estrutura apenas observando se existiram caminhos para a falha que não foram representados. Com a estrutura ratificada, poderemos confirmar o valor da probabilidade do evento-topo.
Retornando aos cortes mínimos, entre os de 4 a 6, percebemos que podemos sintetizar a estrutura de maneira análoga à apresentada logo acima. Ainda melhor, o trio de eventos que conduzem ao evento intermediário é o mesmo tanto nos cortes de 1 a 3 quanto nos cortes de 4 a 6. Portanto podemos aplicar a mesma lógica que utilizamos na discussão anterior e unir os eventos Refervedor comprometido e Temperatura do fluido inadequada sob um outro evento intermediário acessado por uma porta OU.
Evento-base 1 | Evento-base 2 | Evento-base 3 | |
---|---|---|---|
Cortes mínimos de 2ª ordem | |||
Corte mínimo 1 | Refervedor comprometido | Acao de controle alem do limite fisico (LIC-102) | |
Corte mínimo 2 | Controlador LIC-102 comprometido | ||
Corte mínimo 3 | Falha na valvula (LIC-102) | ||
Corte mínimo 4 | Temperatura do fluido inadequada | Acao de controle alem do limite fisico (LIC-102) | |
Corte mínimo 5 | Controlador LIC-102 comprometido | ||
Corte mínimo 6 | Falha na valvula (LIC-102) |
Deixando de lado os cortes mínimos de 2ª ordem por um instante, observemos os cortes de 3ª ordem. Para tal conjunto de cortes ocorre uma situação análoga à que acabamos de analisar.
Evento-base 1 | Evento-base 2 | Evento-base 3 | |
---|---|---|---|
Cortes mínimos de 23ª ordem | |||
Corte mínimo 7 | Vazao do fluido inadequada | Acao de controle alem do limite fisico (FRC-104) | Acao de controle alem do limite fisico (LIC-102) |
Corte mínimo 8 | Controlador LIC-102 comprometido | ||
Corte mínimo 9 | Falha na valvula (LIC-102) | ||
Corte mínimo 10 | Controlador FRC-104 comprometido | Acao de controle alem do limite fisico (LIC-102) | |
Corte mínimo 11 | Controlador LIC-102 comprometido | ||
Corte mínimo 12 | Falha na valvula (LIC-102) | ||
Corte mínimo 13 | Falha na valvula (FRC-104) | Acao de controle alem do limite fisico (LIC-102) | |
Corte mínimo 14 | Controlador LIC-102 comprometido | ||
Corte mínimo 15 | Falha na valvula (LIC-102) |
Enfim, vamos observar a árvore com todos seus conjuntos, mas somente exibindo os eventos intermediários:
Observe mais uma repetição na estrutura: desta vez o evento intermediário 02 está presente em duas seções da árvore. Ou seja, a ocorrência do evento intermediário 02 simultânea à ocorrência dos eventos intermediários 03 e 04 OU da ocorrência simultânea apenas do evento intermediário 01 leva ao evento-topo.
Alcançamos então uma organização bastante simples da árvore. Assim, podemos definir a identidade dos eventos intermediários:
Com a árvore completa, podemos reordená-la para verificar visualmente se algum encadeamento de eventos foi ignorado na estimativa original.
Com as duas árvores lado a lado fica claro que a estrutura original e a nova são descrições equivalentes para o sistema. Tanto que produzem o mesmo resultado para a probabilidade do evento-topo.
Por fim, temos uma estrutura corroborada para a árvore de falhas, conhecemos seus cortes mínimos e a probabilidade de ocorrência da falha do sistema. A última análise que nos resta é a avaliação dos pontos de fragilidade do sistema. Tal feito é atingido sob estudo das medidas de importância dos cortes mínimos.
# Medidas de importância (Porcentagem)
Mimp <- 100*exCM$PBF[c(2,5,8,11,14,17,20,24,28,32,36,40,44,48,52)]/exCM$PBF[1]
Evento-base 1 | Evento-base 2 | Evento-base 3 | Medida de importância | |
---|---|---|---|---|
Cortes mínimos de 2ª ordem | ||||
Corte mínimo 1 | Refervedor comprometido | Acao de controle alem do limite fisico (LIC-102) | 0 % | |
Corte mínimo 2 | Controlador LIC-102 comprometido | 0 % | ||
Corte mínimo 3 | Falha na valvula (LIC-102) | 0 % | ||
Corte mínimo 4 | Temperatura do fluido inadequada | Acao de controle alem do limite fisico (LIC-102) | 27.4 % | |
Corte mínimo 5 | Controlador LIC-102 comprometido | 15.82 % | ||
Corte mínimo 6 | Falha na valvula (LIC-102) | 43.31 % | ||
Cortes mínimos de 3ª ordem | ||||
Corte mínimo 7 | Vazao do fluido inadequada | Acao de controle alem do limite fisico (FRC-104) | Acao de controle alem do limite fisico (LIC-102) | 1.35 % |
Corte mínimo 8 | Controlador LIC-102 comprometido | 0.78 % | ||
Corte mínimo 9 | Falha na valvula (LIC-102) | 2.14 % | ||
Corte mínimo 10 | Controlador FRC-104 comprometido | Acao de controle alem do limite fisico (LIC-102) | 0.78 % | |
Corte mínimo 11 | Controlador LIC-102 comprometido | 0.45 % | ||
Corte mínimo 12 | Falha na valvula (LIC-102) | 1.23 % | ||
Corte mínimo 13 | Falha na valvula (FRC-104) | Acao de controle alem do limite fisico (LIC-102) | 2.14 % | |
Corte mínimo 14 | Controlador LIC-102 comprometido | 1.23 % | ||
Corte mínimo 15 | Falha na valvula (LIC-102) | 3.38 % |
Note que se houver uma falha exatamente após 10 dias de estudo há uma chance em torno de 85% de que a falha tenha tido origem numa inadequação na temperatura do fluido que tenha ocorrido simultaneamente a uma falha na válvula da LIC-102, OU quando a ação de controle do LIC-102 foi além dos limites da válvula, OU devido a um comprometimento do LIC-102. Portanto as ações mais efetivas para impedir que o nível na destiladora se encontre fora de controle e especificação serão aquelas capazes de proteger estes componentes.
5ª etapa: Análise quantitativa da árvore - Concluída!
Ainda podemos observar a dinâmica temporal das probabilidades de cada modo de falha, corte mínimo e do evento-topo. Para tal, simplesmente precisamos transformar a variável tempo em um vetor de instantes para cada um dos quais serão feitas árvores.
points <- 50 # Nº de pontos no estudo
info <- data.frame(
E1 = rep(NA, points),
E2 = rep(NA, points),
E3 = rep(NA, points),
E4 = rep(NA, points),
E5 = rep(NA, points),
E6 = rep(NA, points),
E7 = rep(NA, points),
E8 = rep(NA, points),
E9 = rep(NA, points),
Etopo = rep(NA, points),
CM01 = rep(NA, points),
CM02 = rep(NA, points),
CM03 = rep(NA, points),
CM04 = rep(NA, points),
CM05 = rep(NA, points),
CM06 = rep(NA, points),
CM07 = rep(NA, points),
CM08 = rep(NA, points),
CM09 = rep(NA, points),
CM10 = rep(NA, points),
CM11 = rep(NA, points),
CM12 = rep(NA, points),
CM13 = rep(NA, points),
CM14 = rep(NA, points),
CM15 = rep(NA, points),
ECM = rep(NA, points),
Tempo = seq(10, by = 50, length.out = points) # Instantes representados no estudo
)
Par1 <- c(1, 1, 2000, 1000, 1, 1, 8, 2000, 1000)
Par2 <- c(1/1000, 0.002, 0.8, 0.8, 0.004, 0.004, 0.7, 0.8, 0.8)
for (i in 1:points) {
# Prob. de cada modo de falha
info[i,c(1:2,5:6)] <- 1-exp(-Par2[c(1:2,5:6)]*info$Tempo[i]) # Prob. de falha (dist. Exponencial)
info[i,c(3:4,8:9)] <- 1-exp(-(info$Tempo[i]/Par1[c(3:4,8:9)])^(Par2[c(3:4,8:9)])) # Prob. de falha (dist. Weibull)
info[i,7] <- 1-pnorm((-log(info$Tempo[i]) + Par1[7])/Par2[7]) # Prob. de falha (dist. Lognormal)
# Árvore de falhas
ex_new <- ftree.make(type="and", name="Nivel fora de", name2="especificacao e controle") %>%
addLogic(at=1, type="or", name="Nivel fora de", name2="especificacao") %>%
addLogic(at=2, type="or", name="Inadequacao termica", name2="ou mecanica") %>%
addProbability(at=3, prob=info[i,7], name="Refervedor", name2="comprometido") %>%
addProbability(at=3, prob=info[i,1], name="Temperatura do fluido", name2="inadequada") %>%
addLogic(at=2, type="and", name="Problemas com", name2="a vazao") %>%
addProbability(at=6, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addLogic(at=6, type="or", name="Malha de controle", name2="de vazao inefetiva") %>%
addProbability(at=8, prob=info[i,4], name="Acao de controle alem", name2="do limite fisico (FRC-104)") %>%
addProbability(at=8, prob=info[i,3], name="Controlador FRC-104", name2="comprometido") %>%
addProbability(at=8, prob=info[i,5], name="Falha na", name2="valvula (FRC-104)") %>%
addLogic(at=1, type="or", name="Nivel fora de", name2="controle") %>%
addProbability(at=12, prob=info[i,9], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addProbability(at=12, prob=info[i,8], name="Controlador LIC-102", name2="comprometido") %>%
addProbability(at=12, prob=info[i,6], name="Falha na", name2="valvula (LIC-102)") %>%
ftree.calc()
# Prob. evento-topo
info$Etopo[i] <- ex_new$PBF[1]
# Árvore de falhas (c/ cortes mínimos)
exCM <- ftree.make(type="or", name="Nivel fora de", name2="especificacao e controle") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 01") %>%
addProbability(at=2, prob=info[i,7], name="Refervedor", name2="comprometido") %>%
addProbability(at=2, prob=info[i,9], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 02") %>%
addProbability(at=5, prob=info[i,7], name="Refervedor", name2="comprometido") %>%
addProbability(at=5, prob=info[i,8], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 03") %>%
addProbability(at=8, prob=info[i,7], name="Refervedor", name2="comprometido") %>%
addProbability(at=8, prob=info[i,6], name="Falha na", name2="valvula (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 04") %>%
addProbability(at=11, prob=info[i,1], name="Temperatura do fluido", name2="inadequada") %>%
addProbability(at=11, prob=info[i,9], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 05") %>%
addProbability(at=14, prob=info[i,1], name="Temperatura do fluido", name2="inadequada") %>%
addProbability(at=14, prob=info[i,8], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="2a ordem 06") %>%
addProbability(at=17, prob=info[i,1], name="Temperatura do fluido", name2="inadequada") %>%
addProbability(at=17, prob=info[i,6], name="Falha na", name2="valvula (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 01") %>%
addProbability(at=20, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=20, prob=info[i,4], name="Acao de controle alem", name2="do limite fisico (FRC-104)") %>%
addProbability(at=20, prob=info[i,9], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 02") %>%
addProbability(at=24, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=24, prob=info[i,4], name="Acao de controle alem", name2="do limite fisico (FRC-104)") %>%
addProbability(at=24, prob=info[i,8], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 03") %>%
addProbability(at=28, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=28, prob=info[i,4], name="Acao de controle alem", name2="do limite fisico (FRC-104)") %>%
addProbability(at=28, prob=info[i,6], name="Falha na", name2="valvula (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 04") %>%
addProbability(at=32, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=32, prob=info[i,3], name="Controlador FRC-104", name2="comprometido") %>%
addProbability(at=32, prob=info[i,9], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 05") %>%
addProbability(at=36, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=36, prob=info[i,3], name="Controlador FRC-104", name2="comprometido") %>%
addProbability(at=36, prob=info[i,8], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 06") %>%
addProbability(at=40, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=40, prob=info[i,3], name="Controlador FRC-104", name2="comprometido") %>%
addProbability(at=40, prob=info[i,6], name="Falha na", name2="valvula (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 07") %>%
addProbability(at=44, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=44, prob=info[i,5], name="Falha na", name2="valvula (FRC-104)") %>%
addProbability(at=44, prob=info[i,9], name="Acao de controle alem", name2="do limite fisico (LIC-102)") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 08") %>%
addProbability(at=48, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=48, prob=info[i,5], name="Falha na", name2="valvula (FRC-104)") %>%
addProbability(at=48, prob=info[i,8], name="Controlador LIC-102", name2="comprometido") %>%
addLogic(at=1, type="and", name="Corte minimo de", name2="3a ordem 09") %>%
addProbability(at=52, prob=info[i,2], name="Vazao do fluido", name2="inadequada") %>%
addProbability(at=52, prob=info[i,5], name="Falha na", name2="valvula (FRC-104)") %>%
addProbability(at=52, prob=info[i,6], name="Falha na", name2="valvula (LIC-102)") %>%
ftree.calc()
# Prob. evento-topo
info$ECM[i] <- exCM$PBF[1]
# Medidas de importância (Porcentagem)
info[i,c(11:25)] <- exCM$PBF[c(2,5,8,11,14,17,20,24,28,32,36,40,44,48,52)]
}
# Perfil temporal das prob. dos eventos-base e do evento-topo
png("plot1.png", width=960, height=700)
par(mai=c(0.90,0.90,0.45,0.45))
aux <- c(10,1:5,7)
color <- rainbow(7)
plot(info[,c(27,aux[1])], col = color[1], type = "b", ylab = "Probabilidade", ylim = c(0, 1.05), pch = 1)
lines(info[,27], rep(1,points), xaxt = "n", yaxt = "n", col = "black", lwd = 2, lty = "dashed")
for (i in 2:7) {
lines(info[,c(27,aux[i])], xaxt = "n", yaxt = "n", col = color[i], type = "b", pch = i)
}
names <- c("Evento-topo", "Temperatura do fluido é inadequada", "Vazão do fluido é inadequada", "Controlador comprometido", "Ação de controle além do limite físico", "Falha na válvula", "Refervedor comprometido")
legend("bottomright", names, col = color, pch = 1:7)
dev.off()
# Perfil temporal das prob. das medidas de importância
png("plot2.png", width=960, height=700)
par(mai=c(0.90,0.90,0.45,0.45))
aux <- c(26,11:19,21:22,25)
color <- rainbow(13)
plot(info[,c(27,aux[1])], col = color[1], type = "b", ylab = "Probabilidade", ylim = c(0, 1.05), pch = 1)
lines(info[,27], rep(1,points), xaxt = "n", yaxt = "n", col = "black", lwd = 2, lty = "dashed")
for (i in 2:13) {
lines(info[,c(27,aux[i])], xaxt = "n", yaxt = "n", col = color[i], type = "b", pch = i)
}
names <- c("Evento-topo CM", "Corte mínimo 01", "Corte mínimo 02", "Corte mínimo 03", "Corte mínimo 04", "Corte mínimo 05", "Corte mínimo 06", "Corte mínimo 07", "Corte mínimo 08/10", "Corte mínimo 09/13", "Corte mínimo 11", "Corte mínimo 12/14", "Corte mínimo 15")
legend("bottomright", names, col = color, pch = 1:13)
dev.off()