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
- Ter completado Controle de Nível PID: ligação, direção, offset e span são usados aqui sem explicação
- O separador bifásico de Vaso de Flash Simples
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:
- Feed a 273 K, 3,03 bar, 4,415 mol/s (especificação de Vazão)
- FV-01, a válvula de alimentação, Kv de gás 430, meio aberta
- SG-01, o separador, 1 m³, 2 m de altura, vertical
- PV-01, a válvula de gás, Kv 16, movida por PIC-01 para manter 2 bar
- LV-01, a válvula de líquido, Kv 3, movida por LIC-01 para manter 0,3 m
- 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.

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.

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
- Script Python:
examples/dynamics/03_separator_control.py - Flowsheet pronto:
examples/saved/dynamic_separator_control.dwxmz - No DWSIM: lista Samples na tela inicial,
Dynamic Simulation - Separator Pressure and Level Control(o mesmo vaso com os tamanhos de válvula e ganhos originais)
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
- 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?
- 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? - 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.