Commit a1ca7860 authored by Bernardo Quaresma Dias's avatar Bernardo Quaresma Dias
Browse files

Inclusão de versão 4_4 de lib-antigolf

INSTMPA-1245
parent 2e5a55f2
This diff is collapsed.
-- =============================================================================
-- Copyright (C) 2003-2020 Tecgraf/PUC-Rio, PETROBRAS S/A
-- Instituto Tecgraf <mpa@tecgraf.puc-rio.br>
-- Arquivo gerado pelo programa MPA
-- Verso: 6.4
-- Arquivo: lib-antigolf.mpae
-- Data: 02/02/2021 16:34:20
-- =============================================================================
MPA_3_3 = true
EXPANDED = {}
PLANTNAME = "no name"
WIDTHS = {
}
DISABLED = {
}
PLANT = {
permissoes = {
["perm-AntiGolf-CAv"] = {
l_cfg_perm_ids = {
"cav_dp",
},
},
["perm-AntiGolf-Full"] = {
l_cfg_perm_ids = {
"cav_dp",
"prot",
},
},
["perm-AntiGolf-None"] = {
},
["perm-AntiGolf-Prot"] = {
l_cfg_perm_ids = {
"prot",
},
},
},
registro = {
reg_antigolf = {
cabecalhos = {
"act_choke;act-choke;id_act;cmd_cur;du_act;du_real;pos_min;pos_max;cmd_lim;act",
"protecao;track-choke;pos_cur;pos_cmd;dif_pos",
"cav_dp;act-pos_alvo;id_act;du_alvo_act;pos_alvo_cur;pos_min;pos_max;margem;pos_alvo_calc",
"cav_dp;cav-calc;dp;dp_ant;erro_pos;du_press;du_pos;du_calc",
"cav_dp;track-pos_alvo;val_cur;val_rastreio;dif_val",
"mon_osc;mon_osc-calc;amp_osc;std_p_med;std_p_avg",
"otm_pos_alvo;otm-reset;pos_alvo;pos_alvo_otm",
"otm_pos_alvo;otm-calc;amp_osc;cmd_choke;d_pos_alvo",
"mon_prs;mon-prs_topo-updt;p_topo;p_topo_max;ret_mon_ant;ret_mon",
"mon_prs;mon-prs_fundo;sel_pressao;prs_fundo;prs_fundo_calc",
},
prefixo = "log-antigolf",
},
},
}
Dependencies = {
}
include 'lib-equips-2_0.mpam'
include 'lib-painel-2_1.mpam'
include 'lib-utils-1_1.mpam'
include 'lib-time-1_2.mpam'
include 'lib-blocos-4_0.mpam'
include 'lib-fuzzy-1_0.mpam'
include 'lib-access-1_0.mpam'
class{ id = "mod_antigolf_actChoke", name = "Anti-Golfadas: Atuação na Choke", group = "Anti-Golfadas",
bases = {},
description = [[
Modelagem de atuação de módulo anti-golfadas.
Esse módulo agrega é usado pelos os sub-módulos para avaliar e coordenar a atuação
na válvula choke do poço pra evitar golfadas e manter um posição alvo.
]],
code = [===[
]===],
attributes = {
{ id = "permissoes_act", name = "Permissões de Atuação", type = "permissoes", access = "g",
description = [[
Lista com permissões de atuação para módulo.
Essas permissões podem ser:
- 'prot', comandos de proteção podem ser realizados pelo módulo.
]],
},
{ id = "perm_ignorar_du_max", name = "Perm. Ignorar Delta U Máx.", type = "permissoes", access = "g",
description = [[
Lista com permissões de atuações maiores que Delta U Máximo.
Se não for configurado, apenas atuações 'prot' irão ignorar a configuração de Delta U Máximo.
Essas são customizáveis pelo desenvolvedor de módulos que fazem uso do
diagrama "{AntiGolf/actCmdChoke}" para atuações na choke.
]],
},
{ id = "ind_choke_pos_min", name = "Pos. Mín. de Choke", type = "REAL_POINT", access = "r",
description = [[Indicação de posição mínima permitida para choke.]],
},
{ id = "ind_choke_pos_max", name = "Pos. Máx. de Choke", type = "REAL_POINT", access = "r",
description = [[Indicação de posição máxima permitida para choke.]],
},
{ id = "cfg_choke_du_min", name = "Delta U Mín. na Choke", type = "REAL", access = "g",
description = [[
Configuração de variação mínima na posição da choke em uma atuação.
Variações menores serão acumuladas quando mantiverem o mesmo sinal e
serão aplicadas quando a variação acumulada alcançar esse valor.
]],
},
{ id = "cfg_choke_du_max", name = "Delta U Máx. na Choke", type = "REAL", access = "g",
description = [[
Configuração de variação máxima na posição da choke em uma atuação.
Variações maiores serão descartadas quando mantiverem o mesmo sinal e
serão aplicadas quando a variação mínima for alcançada.
]],
},
},
methods = {
{ id = "ajustar_du_acum", name = "Ajustar Delta U Acum.",
description = [[Ajusta o valor de Deltu U Acumulado para a próxima execução.]],
parameters = {
{ name = "Delta U", type = "REAL"}
},
results = {
},
code = [===[ function(self, du)
self._du_acum = du
end ]===],
},
{ id = "informar_du_acum", name = "Informar Delta U Acum.",
description = [[
Informa a o valor acumulado de Delta U na última execução.
O valor informado é apagado, tendo que ser definido novamente.
]],
parameters = {
},
results = {
{ name = "Delta U Acum.", type = "REAL"}
},
code = [===[ function(self, idact)
local du_acum = self._du_acum
self._du_acum = nil
return du_acum
end ]===],
},
},
}
class{ id = "mod_antigolf_monPrsTopo", name = "Anti-Golfadas: Mon. Pressão de Topo", group = "Anti-Golfadas",
bases = {},
description = [[Modelagem de módulo de monitoração de pressão de topo.
Esse módulo avalia a pressão de topo do poço retornando se esse valor está alto ou normal,
de acordo com o limite máximo corrente.
A pressão de topo avaliada é configurada via atributo Seleção Prs. Topo, que irá determinar
como o limite máximo é avaliado.
]],
code = [===[
]===],
attributes = {
{ id = "cfg_sel_prs", name = "Sel. de Pressão", type = "STRING", access = "g",
description = [[
Seleção de Pressão de Topo do Poço que deve ser considerada pela monitoração.
Essa configuração deve ser definida como:
- 'pmon', a pressão a montante será considerada e uma curva de cálculo de pressão
de entrada máxima deverá estar configurado.
- 'pjus', a pressão à jusante será usada e o valor de Pressão de Topo máxima
será usado de acordo com a configuração de indicador de pressão máxima.
]],
},
{ id = "ind_prs_topo_max", name = "Ind. P. Topo Máx.", type = "REAL_POINT", access = "g",
description = [[Indicador de Pressão de Topo Máxima para o Poço.]],
},
{ id = "curva_prs_topo_max", name = "Curva de P. Topo Máx.", type = "curva_interpolada", access = "g",
description = [[
Curva para Cálculo de Pressão de Topo Máxima em função de Posição Atual da Choke.
]],
},
{ id = "tmr_prs_topo_ok", name = "Tempor. P. Topo Normal", type = "timer", access = "g",
description = [[
Temporizador de pressão normal que, quando concluído,
indica que a proteção deve ser desativada.
]],
},
{ id = "tmr_prs_topo_alta", name = "Tempor. P. Topo Alta", type = "timer", access = "g",
description = [[
Temporizador de pressão alta que, quando concluído,
indica que a proteção deve ser ativada.
]],
},
{ id = "ret_mon", name = "Retorno de Monitoração", type = "STRING", access = "gs",
description = [[
Indica o resultado avaliado pela monitoração de acordo com a pressão de topo
selecionada e os temporizadores.
Esse valor pode ser:
- 'ok' - temporizou pressão abaixo da máxima avaliada
- 'alta' - temporizou pressão está acima da máxima avaliada
]],
},
{ id = "t_intervalo_s", name = "Intervalo", type = "REAL", access = "g",
description = [[Tempo em segundos que deve ser esperado entre passos do módulo.]],
},
},
methods = {
},
}
class{ id = "mod_antigolf_ProtPrsTopo", name = "Anti-Golfadas: Proteção", group = "Anti-Golfadas",
bases = {},
description = [[Modelagem de módulo de proteção anti-golfadas.
Esse módulo avalia a pressão de entrada do poço e, caso essa pressão esteja acima
de um limite máximo, atua levando a posição da choke do poço para o valor mínimo.
Se a posição atual estiver abaixo do mínimo a proteção não irá atuar.
]],
code = [===[
]===],
attributes = {
{ id = "cfg_modo_rastreio_prot", name = "Modo de Rastreio", type = "STRING", access = "g",
description = [[
Seleção de modo de rastreio de comando de choke auxiliar na inicialização e quando o
a proteção estiver desabilitada.
O rastreio só deve ser configurado quando o MPA escreve em uma válvula auxiliar.
Quando não configurado, o comando atual é mantido.
Para que o rastreio seja realizado, essa configuração deve ser definida como:
- 'pos', o comando da choke irá rastrear a posição atual da válvula do poço.
- 'cmd', o comando da choke irá rastrear o comando atual da válvula do poço.
]],
},
{ id = "cfg_du_prot", name = "Delta U de Proteção", type = "REAL", access = "g",
description = [[
Delta de proteção que deve ser aplicado por passo de proteção.
O sinal dessa configuração será ignorado, resultando em um delta negativo do valor absoluto configurado
com valor no mínimo do 'Delta U Mínimo' configurado para o Atuador configurado.
Quando não for configurado, será aplicado um delta de -100, levando a posição para o valor mínimo.
]],
},
{ id = "tmr_degrau_prot", name = "Tempo. Degrau Prot.", type = "timer", access = "g",
description = [[Temporizador de degraus de proteção que, quando concluído, indica que um novo degrau pode ser aplicado.]],
},
{ id = "t_intervalo_s", name = "Intervalo", type = "REAL", access = "g",
description = [[Tempo em segundos que deve ser esperado entre passos do módulo.]],
},
},
methods = {
},
}
class{ id = "mod_antigolf_monPrsFundo", name = "Anti-Golfadas: Mon. Pressão de Fundo", group = "Anti-Golfadas",
bases = {},
description = [[
Monitoração de pressão de fundo de acordo com a configuração de seleção.
]],
code = [===[
]===],
attributes = {
{ id = "cfg_sel_prs", name = "Sel. de Pressão", type = "STRING", access = "g",
description = [[
Seleção de variável de processo que será considerada como pressão de fundo do poço.
Essa configuração deve ser definida como:
- 'pmon', a pressão à montente da choke;
- 'pjus', a pressão à jusante da choke;
- 'pdg', a pressão de fundo medida pelo PDG;
- 'tpt', a pressão de fundo medida pelo TPT;
]],
},
{ id = "bl_calc_prs_fundo", name = "Bl. Cálc. Pressão de Fundo", type = "bloco_calculo", access = "g",
description = [[Configuração de bloco para valor de pressão usada para calcular de variação.]],
},
{ id = "ret_prs_fundo_calc", name = "Pressão Calculada", type = "REAL", access = "gs",
description = [[Resultado calculado para pessão de fundo.]],
},
{ id = "cfg_reg_step", name = "Registrar Passos", type = "BOOLEAN", access = "g",
description = [[
Configuração que, quando verdadeira, inclui linhas para cada passo de
monitoração no registro.
]],
},
{ id = "t_intervalo_s", name = "Intervalo", type = "REAL", access = "g",
description = [[Tempo em segundos que deve ser esperado entre passos do módulo.]],
},
},
methods = {
},
}
class{ id = "mod_antigolf_CAvDeltaPressao", name = "Anti-Golfadas: C. Av. de Variação de Pressão", group = "Anti-Golfadas",
bases = {},
description = [[
Módulo de controle avançado anti-golfadas baseado em algoritmo
de estabilização de dinâmica de poço com gas-lift com ponto de operação livre.
Esse módulo usa o algoritmo proposto pela UFSC [1] para determinar uma variação na
posição da válvula choke do poço em função da variações de pressão e uma posição alvo
para a válvula.
du(k) = gama_0*dp(k) + gama_1*dp(k-1) + beta*(sp_u-u(k-1))
* Onde du(k) é a variação calculada ppara a válvula no instante k:
* sp_u é a 'Posição Alvo' pela operação;
* dp(k) é a variação de pressão desde o instante k-1
* dp(k) = p(k) – p(k-1) -> que deve tender a zero
* a posição atual é calculada a partir da característica da válvula
* gama_0 - Fator dp atual
* gama_1 - Fator dp anterior
* beta - Fator de erro (realimentação)
[1] Plucenio, A., Ganzaroli, C. A., & Pagano, D. J. (2012).
Stabilizing gas-lift well dynamics with free operating point.
IFAC Proceedings Volumes, 45(8), 95-100.
]],
code = [===[
]===],
attributes = {
{ id = "ind_pos_alvo_choke", name = "Pos. Alvo de Choke", type = "REAL_POINT", access = "rw",
description = [[Indicação a posição alvo para a choke.]],
},
{ id = "cfg_margem_pos_alvo", name = "Margem para Pos. Alvo", type = "REAL", access = "g",
description = [[
Margem que deve ser mantida entre posição alvo e limites para garantir
grau de liberdade mínimo para realização de controle.
Se esse valor for maior que metade da faixa de operação (entre posição mínima e posição máxima),
a posição alvo será o metade da faixa.
]],
},
{ id = "cfg_modo_rastreio", name = "Modo de Rastreio", type = "STRING", access = "g",
description = [[
Seleção de modo de rastreio de posição alvo na inicialização e quando o controle estiver
desabilitado.
Se não houver um rastreio configurado a posição alvo será mantida.
Essa configuração deve ser definida como:
- 'min', a posição alvo irá rastrear a posição mínima;
- 'max', a posição alvo irá rastrear a posição máxima;
- 'pos', a posição alvo irá rastrear a posição atual.
- 'cmd', a posição alvo irá rastrear o comando atual.
]],
},
{ id = "cfg_fator_dp_atual", name = "Fator de Delta P. Atual", type = "REAL", access = "g",
description = [[
Configuração de fator proporcial da variação de pressão atual
no cálculo de variação de posição da choke.
]],
},
{ id = "cfg_fator_dp_anterior", name = "Fator de Delta P. Ant.", type = "REAL", access = "g",
description = [[
Configuração de fator proporcial da variação de pressão anterior
no cálculo de variação de posição da choke.
]],
},
{ id = "cfg_fator_erro", name = "Fator de Erro", type = "REAL", access = "g",
description = [[
Configuração de fator proporcial do erro para realimentação da posição alvo
no cálculo de variação de posição da choke.
]],
},
{ id = "cfg_dp_tol", name = "Variação Prs. Tolerada", type = "REAL", access = "g",
description = [[
Configuração de tolerância para considerar que não existe um variação de pressão
no passo atual.
]],
},
{ id = "cfg_erro_tol", name = "Erro Tolerado", type = "REAL", access = "g",
description = [[
Configuração de tolerância para considerar que não existe um erro entre a posição alvo
e a posição atual.
]],
},
{ id = "t_intervalo_s", name = "Intervalo", type = "REAL", access = "g",
description = [[Tempo em segundos que deve ser esperado entre passos do módulo.]],
},
},
methods = {
},
}
class{ id = "mod_antigolf_monOscPrsFundo", name = "Anti-Golfadas: Mon. Osc. Pressão de Fundo ", group = "Anti-Golfadas",
bases = {},
description = [[
Monitoração de Oscilação Anti-Golfadas.
Esse módulo realiza amostragens na pressão de fundo monitorada para determinar aumento no desvio
padrão local cuja média será usada para calcular a amplitude de oscilação.
]],
code = [===[
]===],
attributes = {
{ id = "b_media_p", name = "Média de Pressão", type = "bloco_media", access = "g",
description = [[Configuração de bloco para cálculo de valor médio, desvio padrão, máximo e mínimo de amostras de pressão.]],
},
{ id = "b_media_std_p", name = "Méd. de Desv. Padrão de P.", type = "bloco_media", access = "g",
description = [[Configuração de bloco média para cálculo de valor médio de desvio padrão local da pressão controlada.]],
},
{ id = "tmr_atualizacao", name = "Timer Atualização", type = "timer", access = "g",
description = [[Temporizador de atualização de diagnóstico de oscilação.]],
},
{ id = "calc_amp_osc", name = "Amp. de Osc. Calculada", type = "REAL", access = "gs",
description = [[
Indica o último valor de amplitude de oscilação calculada.
A amplitude de oscilação é calculada de acordo com cada implementação da interface.
]],
},
{ id = "cfg_intervalo_passos", name = "Intervalo entre Passos", type = "REAL", access = "g",
description = [[Tempo que deve ser esperado entre passos do módulo.]],
},
},
methods = {
{ id = "reset", name = "Iniciar",
description = [[Prepara as estruturas do diagnóstico para uma avaliação.]],
parameters = {
},
results = {
},
code = [===[ function(self)
self.b_media_p:apagar()
self.b_media_std_p:apagar()
self.tmr_atualizacao:iniciar()
self.calc_amp_osc = -1
end ]===],
},
},
}
class{ id = "mod_antigolf_OtmPosAlvoChoke", name = "Anti-Golfadas: Otm. Pos. Alvo da Choke", group = "Anti-Golfadas",
bases = {},
description = [[
Modelagem de Otimização de posição alvo para controle avançado anti-golfadas.
Esse módulo determina variações na posição alvo da válvula choke do poço de acordo com a amplitude
de oscilação avaliado para a pressão controlada.
]],
code = [===[
]===],
attributes = {
{ id = "chave_hab", name = "Chave Hab. Otim.", type = "chave", access = "g",
description = [[Chave que indica que a a Otimização de Posição Alvo está habilitada.]],
},
{ id = "fuzzy_otm", name = "Fuzzy Otimização", type = "fuzzy", access = "g",
description = [[Configuração de Controlador Fuzzy para posição alvo em função de grau de oscilação.]],
},
{ id = "ret_otm", name = "Retorno de Otimização", type = "REAL", access = "gs",
description = [[Último valor calculado ou identificado para Alvo de Posição.]],
},
{ id = "t_intervalo_s", name = "Intervalo", type = "REAL", access = "g",
description = [[Tempo em segundos que deve ser esperado entre passos do módulo.]],
},
},
methods = {
},
}
class{ id = "mod_antigolf", name = "Módulo Anti-Golfadas", group = "Anti-Golfadas",
bases = {},
description = [[
Modelagem de atuação de módulo anti-golfadas.
Esse módulo agrega é usado pelos os sub-módulos para avaliar e coordenar a atuação
na válvula choke do poço pra evitar golfadas e manter um posição alvo.
]],
code = [===[
]===],
attributes = {
{ id = "chave_hab", name = "Chave Habilitação", type = "chave", access = "g",
description = [[Chave que indica que a atuação do módulo está habilitada.]],
},
{ id = "e_poco", name = "Poço", type = "poco", access = "g",
description = [[Equipamento poço protegido pelo módulo.]],
},
{ id = "e_valv_act", name = "Válvula de Atuação", type = "valvula", access = "g",
description = [[
Válvula para atuação no poço.
Se o MPA escrever diretamente na válvula do poço, não há necessidade de configurar
esse atributo.
]],
},
-- sub-módulos
{ id = "m_act_choke", name = "Atuação na Choke", type = "mod_antigolf_actChoke", access = "g",
description = [[Módulo de atuação na choke.]],
},
{ id = "m_prot", name = "Proteção", type = "mod_antigolf_ProtPrsTopo", access = "g",
description = [[Módulo de proteção anti-golfadas.]],
},
{ id = "m_cav_dp", name = "C. Av. de Variação de Pressão", type = "mod_antigolf_CAvDeltaPressao", access = "g",
description = [[Módulo de conrole avançado de variação de pressão anti-golfadas.]],
},
{ id = "m_otm_pos_alvo_choke", name = "Otm. Posição Alvo", type = "mod_antigolf_OtmPosAlvoChoke", access = "g",
description = [[Módulo de Otimização da Posição Alvo do Controle Avançado.]],
},
-- motiorações
{ id = "m_mon_prs_topo", name = "Mon. Pressão de Topo", type = "mod_antigolf_monPrsTopo", access = "g",
description = [[Módulo de monitoração de pressão de topo.]],
},
{ id = "m_mon_prs_fundo", name = "Mon. Pressão de Fundo", type = "mod_antigolf_monPrsFundo", access = "g",
description = [[Módulo de monitoração de pressão de fundo.]],
},
{ id = "m_mon_osc_prs_fundo", name = "Mon. Osc. Pressão de Fundo", type = "mod_antigolf_monOscPrsFundo", access = "g",
description = [[Configuração de monitoração de oscilação de pressão de fundo.]],
},
},
methods = {
{ id = "get_act_valv", name = "Obter Válvula Atuação",
description = [[
Avalia a configuração do módulo para determinar a válvula que deve ser usada
para atuação.
]],
parameters = {
},
results = {
{ name = "Válvula Atuação", type = "valvula"}
},
code = [===[ function(self)
local valv_act = self.e_valv_act
if valv_act == nil then
local poco = getattribute(self, 'e_poco')
valv_act = getattribute(poco, 'valvula_choke')
end
return valv_act
end ]===],
},
},
}
-- =============================================================================
-- Copyright (C) 2003-2021 Tecgraf/PUC-Rio, PETROBRAS S/A
-- Instituto Tecgraf <mpa@tecgraf.puc-rio.br>
-- Arquivo gerado pelo programa MPA
-- Verso: 6.6rc20210713
-- Arquivo: lib-antigolf_tst.mpad
-- Data: 21/07/2021 10:12:51
-- =============================================================================
MPA_5_0 = true
EXPANDED = {
true,
}
DisabledDiagrams = {
}
Diagrams = {
{
id = "{TST-AntiGolf}",
name = "{TST-AntiGolf}",
kind = "Flow",
description = nil,
isApplication = false,
globals = {
{
name = "antigolf_tst",
type = "mod_antigolf",
list = false,
value = nil,
comment = nil,
is_arg = true,
is_ret = false,
},
},
errorFunction = nil,
haltDiagram = nil,
Nodes = {
{
type = "Command",
description = nil,
action = {
_switch = "DIAGRAMCALL",
beforemsg = nil,
aftermsg = nil,
expressions = {
"antigolf_tst",
},
variables = {},
diagramid = "AntiGolf/monPrsFundo: Mon. P. Fundo",
operation = "call",
},
xmin = 4720,
ymin = 4860,
xmax = 5200,
ymax = 4980,
},
{
type = "Fork",
description = nil,
x = 4520,
y = 4520,
r = 40,
},
{
type = "Command",
description = nil,
action = {
_switch = "DIAGRAMCALL",
beforemsg = nil,
aftermsg = nil,
expressions = {
"antigolf_tst",
},
variables = {},
diagramid = "AntiGolf/monPrsTopo: Mon. Presso de Topo",
operation = "call",
},
xmin = 4720,
ymin = 4660,
xmax = 5200,
ymax = 4780,
},
{
type = "Command",
description = nil,
action = {
_switch = "DIAGRAMCALL",
beforemsg = nil,
aftermsg = nil,
expressions = {
"antigolf_tst",
},
variables = {},
diagramid = "AntiGolf/monOscPrsFundo: Mon. Osc. P. Fundo",
operation = "call",
},
xmin = 4720,
ymin = 4460,
xmax = 5200,
ymax = 4580,
},
{
type = "Command",
description = nil,
action = {
_switch = "DIAGRAMCALL",
beforemsg = nil,
aftermsg = nil,