Pular para conteúdo

Controle de Pressão e Nível do Separador

Neste tutorial você controla um separador bifásico com duas malhas na GUI Clássica do DWSIM: um controlador de pressão que move a válvula de saída de gás e um controlador de nível que move a válvula de saída de líquido. Você parte o vaso de um estado vazio e em alta pressão, vê as duas malhas levá-lo aos setpoints, guarda esse estado, e depois programa duas mudanças de setpoint de pressão como eventos. A malha de pressão é rápida e a de nível é lenta, e cada uma perturba a outra; ler essa interação é o ponto da página.

O que você vai aprender

  • Como a pressão e o nível de um vaso são definidos pelas duas válvulas que o drenam, e por que cada uma precisa da própria malha
  • Como dimensionar as válvulas de gás e de líquido para que os controladores trabalhem no meio da faixa
  • Como escolher o span de uma malha cuja válvula fica em poucos por cento de abertura, e como programar mudanças de setpoint como eventos

Pré-requisitos

Visão Geral do Processo

Uma carga de ar, dióxido de carbono, água e metanol a 3 bar entra num vaso vertical por uma válvula; o gás sai pelo topo pela válvula de pressão, o líquido pelo fundo pela válvula de nível, os dois para linhas atmosféricas:

  1. Feed a 273 K, 3,03 bar, 4,415 mol/s (especificação de Vazão)
  2. FV-01, a válvula de alimentação, Kv de gás 430, meio aberta
  3. SG-01, o separador, 1 m³, 2 m de altura, vertical
  4. PV-01, a válvula de gás, Kv 16, movida por PIC-01 para manter 2 bar
  5. LV-01, a válvula de líquido, Kv 3, movida por LIC-01 para manter 0,3 m
  6. Gas e Liquid a 1 atm (especificações de Pressão)

Diagrama de Fluxo do Processo

graph LR
    F["Feed<br/>273 K, 3,03 bar<br/>4,415 mol/s"] --> FV["FV-01<br/>Kv 430"]
    FV --> SG["SG-01<br/>1 m³, 2 m"]
    SG -->|gás| PV["PV-01<br/>Kv 16"]
    SG -->|líquido| LV["LV-01<br/>Kv 3"]
    PV --> G["Gas<br/>1 atm"]
    LV --> L["Liquid<br/>1 atm"]
    SG -. pressão .-> PIC["PIC-01<br/>SP 2 bar"]
    PIC -. abertura .-> PV
    SG -. nível .-> LIC["LIC-01<br/>SP 0,3 m"]
    LIC -. abertura .-> LV

Parâmetros de Projeto

Parâmetro Valor Unidade
Compostos Ar, Dióxido de carbono, Água, Metanol -
Pacote termodinâmico Lei de Raoult -
Carga 273,25 K, 302600 Pa, 4,415 mol/s -
Composição da carga (molar) 9,09 % ar, 9,09 % CO2, 72,73 % água, 9,09 % metanol -
Kv (gás) e abertura da FV-01 430, 50 m³/h, %
Volume e altura de SG-01 1,0, 2,0 m³, m
Kv (gás) da PV-01 16 m³/h
Kv (líquido) da LV-01 3 m³/h
PIC-01 SP 2,0 bar, Kp 1, Ki 0,05, reversa, offset 13 %, span 20 % -
LIC-01 SP 0,3 m, Kp 3, Ki 0,05, reversa, offset 10 %, span 20 % -
Integrador passo 5 s; 120 min (partida), 30 min (setpoints) -

Passo a Passo na GUI Clássica

1. Configurar a simulação

File > New Chemical Process Model: compostos Air, Carbon dioxide, Water, Methanol; pacote Raoult's Law.

2. Montar o flowsheet

Seis correntes materiais (Feed, 2, 3, Gas, 5, Liquid), três válvulas e um Gas-Liquid Separator conectados como no diagrama. Feed: 273,25 K, 302600 Pa, 4,415 mol/s, composição da tabela. Válvulas: FV-01 Gas Kv 430 a 50 %, PV-01 Gas Kv 16, LV-01 Liquid Kv 3, as três com Opening vs Kv/Kvmax marcado e 50 % de abertura para o regime permanente. Resolva.

O regime permanente passa 0,023 kg/s de gás e 0,077 kg/s de líquido. As válvulas estão largas para as vazões que carregam, então as pressões mal caem: esse regime permanente é um ponto de partida, e nada mais.

3. Configuração dinâmica

Modo Dinâmico ligado. SG-01, aba Dynamics: Volume 1 m³, Height 2 m, Vessel Orientation vertical, Initialize using Inlet Stream marcado. Feed: especificação dinâmica Flow. Gas e Liquid: Pressure, as duas a 101325 Pa.

4. Os dois controladores

PIC-01: variável controlada SG-01 Operating Pressure em bar, variável manipulada PV-01 Opening, setpoint 2, ação reversa, saída de 0 a 100, offset 13, span 20, Kp 1, Ki 0.05.

LIC-01: variável controlada SG-01 Liquid Level em m, variável manipulada LV-01 Opening, setpoint 0.3, ação reversa, saída de 0 a 100, offset 10, span 20, Kp 3, Ki 0.05.

Por que um span de 20 %

A 2 bar a válvula de gás passa 90 kg/h com 13 % de abertura e a válvula de líquido passa 270 kg/h com 28 %. Um span de 100 % deixaria um erro de 10 % na pressão mover a válvula de gás em 10 % de abertura, quase toda a sua faixa de trabalho, e a malha bateria entre fechada e escancarada. Um span de 20 % faz uma unidade de saída do controlador valer 20 % de abertura; com Kp 1 um erro de 10 % move a válvula em 2 %. Dimensione o span pela faixa que a válvula usa de verdade.

Duas malhas num vaso

5. Corrida de partida

Integrador Int1: passo 5 s, 120 min. Monitore SG-01 Operating Pressure (bar) e Liquid Level (m), as vazões mássicas das correntes 3 e 5 (kg/h), e as aberturas de PV-01 e LV-01. Schedule Startup a partir do estado atual. Rode.

O vaso parte na pressão da carga, 3,03 bar, quase vazio. PIC-01 fecha a PV-01 de 50 % para 13 % nos primeiros minutos e a pressão chega a 2,00 bar em 10 min. O nível sobe a 0,9 cm por minuto enquanto a LV-01 fica fechada, chega a 0,30 m em 30 min, ultrapassa até 0,33 m em 35 min e se acomoda em 0,300 m por volta de 55 min com a LV-01 em 28 %, passando 270 kg/h.

6. Guardar o estado e programar as mudanças de setpoint

Guarde o estado atual como Steady com Store Current (grupo Flowsheet States da barra de ferramentas). Conjunto de eventos SP: SetPointAbs de PIC-01 = 5 em 00:03:00, e 2 em 00:10:00. Schedule Sch1: integrador Int1 (mude a duração para 30 min), conjunto de eventos SP, estado inicial Steady. Rode.

7. Ler a interação

Em 3 min o setpoint salta para 5 bar. PIC-01 fecha a PV-01 por completo e a pressão sobe a cerca de 1,1 bar por minuto, a taxa com que 90 kg/h de gás enchem um espaço de 1 m³: 2,5 bar em 4 min, 3,6 em 6, 4,7 em 8, 5,0 em 10. Em 10 min o setpoint volta a 2 bar: a PV-01 abre até 51 %, a pressão cai a 1,65 bar em 12 min, e a malha a traz de volta a 2,00 bar por volta de 20 min. Enquanto isso o nível passeia: 0,32 m enquanto a pressão sobe, 0,28 m depois da queda, de volta a 0,30 m em 20 min. A válvula de líquido vê a pressão do vaso do lado de montante; quando a pressão se move, a vazão de líquido se move junto, e a LIC-01 precisa correr atrás.

Mudanças de setpoint de pressão e a resposta do nível

Resultados e Validação

Variável Esperado Unidade
Pressão ao fim da partida 2,00 bar
Abertura da PV-01 a 2 bar 13 %
Nível ao fim da partida 0,300 m
Abertura da LV-01 a 0,3 m 28 %
Tempo para a pressão chegar a 5 bar depois do degrau cerca de 7 min -
Mínimo de pressão depois da volta a 2 bar 1,65 bar
Excursão do nível durante as mudanças de pressão 0,28 a 0,32 m

Resultados esperados

A malha de pressão se acomoda em dez minutos e segue as mudanças de setpoint tão rápido quanto o inventário de gás permite; a malha de nível leva uma hora para encher o vaso e mantém 0,30 m dentro de 2 cm durante as mudanças de pressão. Vazão de gás de 90 kg/h e de líquido de 270 kg/h em regime permanente são a divisão da carga.

Entendendo os Resultados

As duas malhas têm naturezas diferentes. A pressão de um vaso de 1 m³ alimentado com 90 kg/h de gás só muda tão rápido quanto o inventário de gás: fechar a saída a sobe a cerca de 1 bar por minuto, e nenhuma sintonia faz mais rápido. Abrir a válvula de par em par a derruba mais rápido do que isso, e é por isso que a volta a 2 bar passa por 1,65 bar. O nível do mesmo vaso alimentado com 270 kg/h de líquido se move a cerca de um centímetro por minuto: a malha de nível é dez vezes mais lenta, e os ganhos dela refletem isso.

Elas também interagem pela equação da válvula. A força motriz da válvula de líquido é a pressão do vaso mais a coluna de líquido menos a pressão de saída; quando a pressão vai de 2 a 5 bar a vazão de líquido dobra na mesma abertura, o nível cai, e a LIC-01 fecha a válvula. Quando a pressão volta acontece o contrário. Num separador real esse acoplamento é o motivo de a malha de pressão ser sintonizada primeiro e mantida estável, e a de nível ser sintonizada com a de pressão fechada.

Lendo as aberturas

Uma válvula trabalhando a 13 % de abertura está sobredimensionada para o serviço; os valores originais de Kv do sample (164 para a válvula de gás, 30 para a de líquido) põem os pontos de trabalho em 1 % e 3 %, onde uma fração de por cento de abertura é uma mudança grande de vazão. Escolher o Kv de modo que a vazão de projeto passe entre 30 e 60 % de abertura é a primeira coisa a conferir quando uma malha se recusa a acomodar.

Automatizando Este Tutorial

Arquivos neste repositório

import os
import sys

import pythonnet
pythonnet.load("netfx")              # DWSIM is a .NET Framework application
import clr  # noqa: E402

DWSIM_BIN = os.environ.get("DWSIM_BIN")
if not DWSIM_BIN:
    raise SystemExit("Set DWSIM_BIN to the DWSIM installation folder before running.")
for sub in ("", "unitops", "ppacks", "extenders"):
    sys.path.append(os.path.join(DWSIM_BIN, sub))
clr.AddReference("DWSIM.Automation")
clr.AddReference("DWSIM.Automation.FluentAPI")
clr.AddReference("DWSIM.UnitOperations")

from DWSIM.Automation.FluentAPI import Flowsheet, PropertyPackages, Q
from DWSIM.UnitOperations.UnitOperations import Valve
from System import TimeSpan

fs = (Flowsheet.Create("SeparatorControl")
      .WithCompounds("Air", "Carbon dioxide", "Water", "Methanol")
      .WithPropertyPackage(PropertyPackages.Raoult))
feed = (fs.AddMaterialStream("Feed").At(Q.Kelvin(273.25), Q.Pascal(302600.0))
        .WithMolarFlow(Q.MolPerSecond(4.415))
        .SetCompoundMolarFlow("Air", 0.4013).SetCompoundMolarFlow("Carbon dioxide", 0.4013)
        .SetCompoundMolarFlow("Water", 3.2111).SetCompoundMolarFlow("Methanol", 0.4013)
        .AsFlowSpec())
s2 = fs.AddMaterialStream("2").AsPressureSpec()
s3 = fs.AddMaterialStream("3").AsPressureSpec()
gas = fs.AddMaterialStream("Gas").AsPressureSpec()
s5 = fs.AddMaterialStream("5").AsPressureSpec()
liq = fs.AddMaterialStream("Liquid").AsPressureSpec()
(fs.AddValve("FV-01").WithCalcMode(Valve.CalculationMode.Kv_Gas).WithKv(430.0)
   .WithOpeningKvRelationship().WithOpeningPercent(50.0).ConnectFeed(feed, 0).ConnectProduct(s2, 0))
sep = (fs.AddSeparator("SG-01").WithVolume(Q.CubicMeters(1.0)).WithHeight(Q.Meters(2.0))
       .InitializeFromInlet(True).ConnectFeed(s2, 0).ConnectProduct(s3, 0).ConnectProduct(s5, 1))
(fs.AddValve("PV-01").WithCalcMode(Valve.CalculationMode.Kv_Gas).WithKv(16.0)
   .WithOpeningKvRelationship().WithOpeningPercent(50.0).ConnectFeed(s3, 0).ConnectProduct(gas, 0))
(fs.AddValve("LV-01").WithCalcMode(Valve.CalculationMode.Kv_Liquid).WithKv(3.0)
   .WithOpeningKvRelationship().WithOpeningPercent(50.0).ConnectFeed(s5, 0).ConnectProduct(liq, 0))
fs.AutoLayout()
fs.Solve()
gas.Object.Phases[0].Properties.pressure = 101325.0
liq.Object.Phases[0].Properties.pressure = 101325.0

pic = (fs.AddPIDController("PIC-01").Controls("SG-01", "Operating Pressure", "bar")
       .Manipulates("PV-01", "PROP_VA_5", "").WithSetPoint(2.0).WithTuning(1.0, 0.05, 0.0)
       .WithOutputLimits(0.0, 100.0).WithOffset(13.0).ReverseActing(True))
pic.Object.ManipulatedVariableSpan = 20.0
lic = (fs.AddPIDController("LIC-01").Controls("SG-01", "Liquid Level", "m")
       .Manipulates("LV-01", "PROP_VA_5", "").WithSetPoint(0.3).WithTuning(3.0, 0.05, 0.0)
       .WithOutputLimits(0.0, 100.0).WithOffset(10.0).ReverseActing(True))
lic.Object.ManipulatedVariableSpan = 20.0

def integrator(name, minutes):
    return (fs.Dynamics.DefineIntegrator(name)
            .WithIntegrationStep(TimeSpan.FromSeconds(5)).WithDuration(TimeSpan.FromMinutes(minutes))
            .Monitor("SG-01", "Operating Pressure", "bar", "pressure")
            .Monitor("SG-01", "Liquid Level", "m", "level")
            .Monitor("3", "PROP_MS_2", "kg/h", "gas flow").Monitor("5", "PROP_MS_2", "kg/h", "liquid flow")
            .Monitor("PV-01", "PROP_VA_5", "", "PV opening").Monitor("LV-01", "PROP_VA_5", "", "LV opening"))

integrator("Long", 120)
integrator("Int1", 30)
fs.Dynamics.WithHistorian(True, 5000)
fs.Dynamics.DefineSchedule("Startup").WithIntegrator("Long").UseCurrentStateAsInitial(True).MakeCurrent()
r = fs.RunDynamics("Startup").Execute()
print(f"startup: pressure {r.GetSeries('pressure').Final:.3f} bar, level {r.GetSeries('level').Final:.3f} m")
fs.Dynamics.StoreCurrentStateAs("Steady")

(fs.Dynamics.DefineEventSet("SP")
   .AddStepChange("PIC-01", "SetPointAbs", 5.0, Q.Minutes(3.0), "", "P1")
   .AddStepChange("PIC-01", "SetPointAbs", 2.0, Q.Minutes(10.0), "", "P2"))
fs.Dynamics.DefineSchedule("Sch1").WithIntegrator("Int1").WithEventSet("SP").WithInitialState("Steady").MakeCurrent()
r = fs.RunDynamics("Sch1").Execute()
p = r.GetSeries("pressure")
print(f"pressure at 10 min {p.ValueAt(600.0):.2f} bar, minimum after the drop {p.Min:.2f} bar")
lv = r.GetSeries("level")
print(f"level excursion {lv.Min:.3f} to {lv.Max:.3f} m")
fs.Save("dynamic_separator_control.dwxmz")

Monte o vaso e as válvulas com dwsim.unitop.add e dwsim.unitop.connect, adicione os dois controladores PID, depois defina os integradores, o estado guardado, o conjunto de eventos e os schedules com as ferramentas dwsim.dynamics.*.

A saída pode variar

Os resultados dependem da qualidade de raciocínio do LLM e da precisão no uso das ferramentas. Sempre verifique se a simulação corresponde à sua intenção antes de confiar nos números.

Use o DWSIM (via servidor MCP) para montar um separador bifásico com controle de
pressão e nível:

- Compostos Air, Carbon dioxide, Water, Methanol; Lei de Raoult
- Carga a 273,25 K, 302600 Pa, 4,415 mol/s (9,09 % ar, 9,09 % CO2, 72,73 % água,
  9,09 % metanol), especificação dinâmica Flow
- Válvula de alimentação FV-01 (Kv gás 430, 50 %), separador vertical SG-01 (1 m3,
  2 m, inicializar pela entrada), válvula de gás PV-01 (Kv gás 16), válvula de líquido
  LV-01 (Kv líquido 3); saídas Gas e Liquid a 101325 Pa com especificação Pressure
- PIC-01: pressão de operação de SG-01 (bar) -> abertura de PV-01, SP 2 bar, reversa,
  offset 13 %, span 20, Kp 1, Ki 0,05; LIC-01: nível de SG-01 (m) -> abertura de
  LV-01, SP 0,3 m, reversa, offset 10 %, span 20, Kp 3, Ki 0,05
- Integrador com passo 5 s; rode 120 min a partir do estado atual; guarde o estado
  como "Steady"
- Conjunto de eventos: setpoint de PIC-01 5 bar em 3 min, 2 bar em 10 min; rode
  30 min a partir de "Steady"
- Informe a pressão em 10 min, o mínimo dela depois da queda, e a excursão do nível

Exercícios

  1. Dobre a carga para 8,83 mol/s em 5 min num novo conjunto de eventos. Quanto a pressão se move antes de a PIC-01 segurá-la, e onde as duas aberturas se acomodam?
  2. Ponha a LIC-01 em manual (evento ManualOverride = 1) e repita o schedule de setpoints. O que o nível faz durante a subida de pressão?
  3. Devolva a PV-01 ao Kv original de 164 e ressintonize a PIC-01 para manter 2 bar. Que span e ganhos você precisa, e como o traço de pressão se compara?

Leitura Complementar

Referências selecionadas da bibliografia técnica do DWSIM.

  • W. L. Luyben. (1990). Process Modeling, Simulation and Control for Chemical Engineers. McGraw-Hill
  • B. G. Liptak (ed.). (2006). Instrument Engineers' Handbook: Process Control and Optimization. CRC Press

Próximos Passos

Em Eventos, Schedules e Estados, os eventos viram o assunto: degraus e rampas, gauges com alarmes, uma matriz de causa e efeito e os estados guardados que tornam toda corrida repetível.