289 lines
9.6 KiB
Markdown
289 lines
9.6 KiB
Markdown
# 🧪 Sistema de Gestión de Fluidos - CtrEditor
|
||
|
||
En base a :
|
||
|
||
"Quisiera mejorar el sistema hidraulico, quiero eliminar los parametros inncesarios de #file:osHydTank.cs y usar para todo el sistema hidraulico bar en vez PA, ademas quisiera poder modificar el nivel o los litros actuales del tanque y el tipo de fluido actual. Los fluidos pueden ser agua o jarabe con sacarosa en donde se permite usar el brix. quiero lograr que el motor hidraulico sea suficientemente correcto pero principalmente simple de usar. El objetivo de la aplicacion es una rapida simulacion de distintos fluidos hacia un mixer industrial, que puede recibir agua, jarabe o un mix o liquido con soda caustica para el cip. El fluido puede tener temperaturas diferentes. No estoy enfocado en los transitorios muy rapidos pero si en transitorios de mezcla como por ejemplo agua y luego jarabe. La idea es que el tanque puede tener una funcion de mezcla gradual, el tanque debe permitir tener un fluido principal y otro secundario y cantidad de litros de cada uno. Luego el secundario se vaciara primero y en un momento se mezclara ambos fluidos por una cantidad de litros de mezcla hasta que luego quedara solo el segundo fluido. En los pipe solo puede haber un solo tipo de fluido, que es el que esta saliendo actualmente del tanque que puede ser del tipo primario o secundario o mezcla durante los litros de mezcla. La idea es que las propiedades de fluido son transmitidas desde el tanque a el pipe segun el sentido del pipe actualmente ya que esto depende de el equilibrio de flujo actual en los pipes dado por las presiones de los tanques y por la presion de las bombas que generan un diferencial de presion. Los pipe en realidad no tiene sentido este es definido en funcion del flujo. Esto significa que segun el flujo el tipo de fluido se toma de la interfaz A o B . Los tanques en realidad solo tiene una presion definida y un nivel y un tipo primario / secundario de fluido. Las bombas son generadoras de presiones en un sentido con una cuva y con control de falta de nivel de fluido. Cuando un tanque no tiene nivel el fluido es de tipo aire. Este fluido hace que las bombas no puedan generar mas presion. Acepto sugerencias."
|
||
|
||
|
||
## 📋 Resumen del Sistema
|
||
|
||
Este documento describe el nuevo sistema avanzado de gestión de fluidos implementado en CtrEditor. El sistema permite manejar múltiples tipos de fluidos industriales con capacidades de mezcla, control de temperatura y concentración, diseñado específicamente para simulaciones de procesos industriales alimentarios y sistemas CIP (Clean In Place).
|
||
|
||
---
|
||
|
||
## 🎯 Arquitectura del Sistema
|
||
|
||
### **FluidProperties** - Sistema Central de Fluidos
|
||
```csharp
|
||
public class FluidProperties
|
||
{
|
||
public FluidType FluidType { get; set; } = FluidType.Water;
|
||
public double ConcentrationBrix { get; set; } = 0.0;
|
||
public double Temperature { get; set; } = 20.0;
|
||
public SolidColorBrush FluidColor { get; }
|
||
public double Density { get; }
|
||
public double Viscosity { get; }
|
||
}
|
||
```
|
||
|
||
### **Tipos de Fluidos Soportados**
|
||
```csharp
|
||
public enum FluidType
|
||
{
|
||
Air, // Aire (sistema vacío)
|
||
Water, // Agua (procesos básicos)
|
||
Syrup, // Jarabe con sacarosa (industria alimentaria)
|
||
CausticSoda, // Soda cáustica (sistemas CIP)
|
||
Mix // Mezcla de fluidos
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Nuevas Funcionalidades del Tanque Hidráulico
|
||
|
||
### **Gestión de Fluidos Dual**
|
||
- **Fluido Primario**: Principal contenido del tanque
|
||
- **Fluido Secundario**: Para operaciones de mezcla
|
||
- **Mezcla Gradual**: Algoritmo de combinación automática
|
||
|
||
### **Control de Mezcla Industrial**
|
||
```csharp
|
||
public enum MixingState
|
||
{
|
||
Idle, // Motor de mezcla apagado
|
||
Active, // Mezcla activa a RPM constantes
|
||
Gradual // Mezcla gradual automática
|
||
}
|
||
```
|
||
|
||
### **Propiedades de Control Editables**
|
||
- **CurrentLevelM**: Nivel actual en metros (editable)
|
||
- **CurrentVolumeL**: Volumen actual en litros (editable)
|
||
- **TankPressureBar**: Presión en bar (convertido de Pa)
|
||
- **MixingMotorRpm**: Velocidad del motor de mezcla (0-100 RPM)
|
||
|
||
---
|
||
|
||
## 📊 Unidades de Medida Actualizadas
|
||
|
||
### **Presión**
|
||
- **Antigua**: Pascales (Pa)
|
||
- **Nueva**: Bar (más práctica para aplicaciones industriales)
|
||
- **Conversión**: 1 bar = 100,000 Pa
|
||
|
||
### **Flujo**
|
||
- **Antigua**: m³/s (metros cúbicos por segundo)
|
||
- **Nueva**: L/min (litros por minuto)
|
||
- **Conversión**: 1 m³/s = 60,000 L/min
|
||
|
||
### **Volumen**
|
||
- **Unidades**: Litros (L)
|
||
- **Conversión**: m³ × 1000 = L
|
||
|
||
---
|
||
|
||
## 🧪 Cálculos de Propiedades de Fluidos
|
||
|
||
### **Densidad (kg/m³)**
|
||
```csharp
|
||
public double Density => FluidType switch
|
||
{
|
||
FluidType.Air => 1.225,
|
||
FluidType.Water => 1000.0,
|
||
FluidType.Syrup => 1000.0 + (ConcentrationBrix * 6.0), // Aumenta con Brix
|
||
FluidType.CausticSoda => 1530.0, // NaOH concentrado
|
||
FluidType.Mix => CalculateMixedDensity(),
|
||
_ => 1000.0
|
||
};
|
||
```
|
||
|
||
### **Viscosidad (Pa·s)**
|
||
```csharp
|
||
public double Viscosity => FluidType switch
|
||
{
|
||
FluidType.Air => 1.81e-5,
|
||
FluidType.Water => 0.001,
|
||
FluidType.Syrup => 0.001 * Math.Pow(10, ConcentrationBrix / 25.0), // Exponencial con Brix
|
||
FluidType.CausticSoda => 0.003, // Más viscoso que agua
|
||
FluidType.Mix => CalculateMixedViscosity(),
|
||
_ => 0.001
|
||
};
|
||
```
|
||
|
||
### **Colores Distintivos**
|
||
- **Agua**: Azul claro (`#87CEEB`)
|
||
- **Jarabe**: Marrón dorado (`#DAA520`)
|
||
- **Soda Cáustica**: Púrpura (`#800080`)
|
||
- **Aire**: Gris claro (`#D3D3D3`)
|
||
- **Mezcla**: Color calculado por interpolación
|
||
|
||
---
|
||
|
||
## 🔄 Sistema de Mezcla Gradual
|
||
|
||
### **Algoritmo de Mezcla**
|
||
```csharp
|
||
public FluidProperties MixWith(FluidProperties other, double ratio)
|
||
{
|
||
// Ratio: 0.0 = 100% this, 1.0 = 100% other
|
||
return new FluidProperties
|
||
{
|
||
FluidType = FluidType.Mix,
|
||
ConcentrationBrix = Lerp(this.ConcentrationBrix, other.ConcentrationBrix, ratio),
|
||
Temperature = Lerp(this.Temperature, other.Temperature, ratio)
|
||
};
|
||
}
|
||
```
|
||
|
||
### **Estados de Mezcla**
|
||
1. **Idle**: Sin mezcla activa
|
||
2. **Active**: Mezcla continua a RPM constantes
|
||
3. **Gradual**: Transición automática de fluido secundario a primario
|
||
|
||
---
|
||
|
||
## 🏭 Aplicaciones Industriales
|
||
|
||
### **Industria Alimentaria**
|
||
- **Jarabes**: Control preciso de concentración Brix (0-100%)
|
||
- **Temperaturas**: Rango operativo de 5°C a 120°C
|
||
- **Mezcla**: Dilución controlada de jarabes concentrados
|
||
|
||
### **Sistemas CIP (Clean In Place)**
|
||
- **Soda Cáustica**: Para limpieza de tuberías y tanques
|
||
- **Agua de Enjuague**: Etapas de pre y post lavado
|
||
- **Control de Temperatura**: Limpieza a temperaturas elevadas (60-85°C)
|
||
|
||
### **Procesos de Mezcla**
|
||
- **Control de RPM**: 0-100 RPM para diferentes tipos de mezcla
|
||
- **Tiempo de Mezcla**: Control mediante estados de mezcla
|
||
- **Homogeneización**: Algoritmos de mezcla gradual
|
||
|
||
---
|
||
|
||
## 🔧 Migración desde el Sistema Anterior
|
||
|
||
### **Parámetros Eliminados**
|
||
- `ConnectedInletPipe` / `ConnectedOutletPipe`: Reemplazado por gestión automática
|
||
- Unidades en Pa: Convertidas automáticamente a bar
|
||
- Flujos en m³/s: Convertidos automáticamente a L/min
|
||
|
||
### **Nuevas Propiedades**
|
||
```csharp
|
||
// Gestión de fluidos
|
||
public FluidProperties PrimaryFluid { get; set; }
|
||
public FluidProperties SecondaryFluid { get; set; }
|
||
|
||
// Control de mezcla
|
||
public MixingState MixingState { get; set; }
|
||
public double MixingMotorRpm { get; set; }
|
||
|
||
// Unidades actualizadas
|
||
public double TankPressureBar { get; set; }
|
||
public double CurrentVolumeL { get; set; }
|
||
public double FlowRateInletLMin { get; set; }
|
||
public double FlowRateOutletLMin { get; set; }
|
||
```
|
||
|
||
### **Compatibilidad**
|
||
- Conversión automática de unidades existentes
|
||
- Valores por defecto para nuevas propiedades
|
||
- Fluido primario inicializado como agua a 20°C
|
||
|
||
---
|
||
|
||
## 📋 Lineamientos de Implementación
|
||
|
||
### **1. Inicialización de Tanques**
|
||
```csharp
|
||
// Nuevo tanque con fluido predeterminado
|
||
var tank = new osHydTank()
|
||
{
|
||
PrimaryFluid = new FluidProperties
|
||
{
|
||
FluidType = FluidType.Water,
|
||
Temperature = 20.0
|
||
},
|
||
CurrentLevelM = 1.0,
|
||
TankPressureBar = 1.013, // Presión atmosférica
|
||
MixingState = MixingState.Idle
|
||
};
|
||
```
|
||
|
||
### **2. Operaciones de Mezcla**
|
||
```csharp
|
||
// Preparar mezcla de jarabe
|
||
tank.SecondaryFluid = new FluidProperties
|
||
{
|
||
FluidType = FluidType.Syrup,
|
||
ConcentrationBrix = 65.0,
|
||
Temperature = 85.0
|
||
};
|
||
tank.MixingState = MixingState.Gradual;
|
||
tank.MixingMotorRpm = 25.0;
|
||
```
|
||
|
||
### **3. Sistemas CIP**
|
||
```csharp
|
||
// Configurar limpieza con soda cáustica
|
||
tank.PrimaryFluid = new FluidProperties
|
||
{
|
||
FluidType = FluidType.CausticSoda,
|
||
Temperature = 75.0
|
||
};
|
||
tank.MixingState = MixingState.Active;
|
||
tank.MixingMotorRpm = 50.0;
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 Ventajas del Nuevo Sistema
|
||
|
||
### **Precisión Industrial**
|
||
- Unidades estándar de la industria (bar, L/min)
|
||
- Cálculos precisos de propiedades de fluidos
|
||
- Control de concentración y temperatura
|
||
|
||
### **Flexibilidad Operativa**
|
||
- Múltiples tipos de fluidos soportados
|
||
- Operaciones de mezcla complejas
|
||
- Estados de mezcla configurables
|
||
|
||
### **Facilidad de Uso**
|
||
- Propiedades editables directamente
|
||
- Colores distintivos para identificación visual
|
||
- Conversiones automáticas de unidades
|
||
|
||
### **Aplicabilidad Real**
|
||
- Diseñado para procesos industriales reales
|
||
- Soporte para sistemas CIP
|
||
- Escalabilidad para diferentes industrias
|
||
|
||
---
|
||
|
||
## 📈 Futuras Expansiones
|
||
|
||
### **Fluidos Adicionales**
|
||
- Alcoholes (etanol, isopropanol)
|
||
- Ácidos (acético, cítrico)
|
||
- Detergentes industriales
|
||
- Gases industriales
|
||
|
||
### **Propiedades Avanzadas**
|
||
- pH y conductividad
|
||
- Punto de ebullición/congelación
|
||
- Tensión superficial
|
||
- Compatibilidad química
|
||
|
||
### **Control Avanzado**
|
||
- Perfiles de temperatura
|
||
- Recetas de mezcla automáticas
|
||
- Optimización energética
|
||
- Trazabilidad de lotes
|
||
|
||
---
|
||
|
||
*Documento actualizado: Septiembre 2025*
|
||
*Versión del Sistema: 2.0*
|