#include #include using namespace std; // Clase que actúa como la plantilla para cualquier Gemelo Digital de máquina class GemeloDigitalPrensa { private: string idMaquina; double temperaturaActual; // en °C double presionActual; // en PSI double limiteTemperaturaMax; // Umbral de alerta bool enAlarma; public: // Constructor: Inicializa la réplica digital con sus datos de identificación y límites GemeloDigitalPrensa(std::string id, double limiteTemp) : idMaquina(id), limiteTemperaturaMax(limiteTemp) { // Uso del puntero 'this' para asignar valores iniciales de seguridad this->temperaturaActual = 25.0; // Temperatura ambiente por defecto this->presionActual = 0.0; this->enAlarma = false; cout << "[SISTEMA] Gemelo Digital creado para la máquina: " << this->idMaquina << std::endl; } // Método para sincronizar datos que vienen de los sensores físicos (IoT) void actualizarSensores(double tempSensor, double presionSensor) { this->temperaturaActual = tempSensor; this->presionActual = presionSensor; // Evaluar el estado de salud de la máquina real this->evaluarEstado(); } // Método privado de evaluación interna void evaluarEstado() { if (this->temperaturaActual > this->limiteTemperaturaMax) { this->enAlarma = true; } else { this->enAlarma = false; } } // Método para realizar simulaciones "What-If" antes de aplicarlas en la planta física void simularSobrecarga(double incrementoPresion) { cout << "\n--- Ejecutando simulación 'What-If' para " << this->idMaquina << " ---" << std::endl; double presionSimulada = this->presionActual + incrementoPresion; // Supongamos que por cada 100 PSI extra, la temperatura sube 5 °C double tempSimulada = this->temperaturaActual + (incrementoPresion / 100.0) * 5.0; cout << "Presion proyectada: " << presionSimulada << " PSI" << std::endl; cout << "Temperatura proyectada: " << tempSimulada << " °C" << std::endl; if (tempSimulada > this->limiteTemperaturaMax) { cout << "[ALERTA SIMULADA] Si aplicas este cambio, la prensa sobrepasará el límite seguro." << std::endl; } else { cout << "[OK SIMULACION] El cambio de operación es seguro para la máquina física." << std::endl; } } // Método para reportar el estado actual del Gemelo Digital void mostrarReporte() const { cout << "\n=== ESTADO EN TIEMPO REAL DEL GEMELO DIGITAL ===" << std::endl; cout << "ID Maquina: " << this->idMaquina << std::endl; cout << "Temperatura: " << this->temperaturaActual << " °C" << std::endl; cout << "Presión: " << this->presionActual << " PSI" << std::endl; cout << "Estado de Alarma: " << (this->enAlarma ? "CRITICO (Revisión necesaria)" : "NORMAL") << std::endl; cout << "=================================================" << std::endl; } }; int main() { // 1. Instanciación: Se crea el gemelo digital para la prensa #01 del pasillo de producción // con un límite máximo seguro de 85.0 °C. GemeloDigitalPrensa prensaLinea1("Prensa-Hydraulic-01", 85.0); // 2. Telemetría en tiempo real: Se simula la recepción de lecturas de sensores IoT cout << "\n[IoT] Recibiendo datos de la planta física..." << std::endl; prensaLinea1.actualizarSensores(72.5, 1200.0); prensaLinea1.mostrarReporte(); // 3. Simulación de un escenario operacional ("What-If"): // El ingeniero evalúa qué pasaría si aumentan la presión en 300 PSI para aumentar el ritmo de producción. prensaLinea1.simularSobrecarga(300.0); // 4. Recepción de un evento de sobrecalentamiento real en la planta cout << "\n[IoT] Recibiendo actualización crítica de sensores..." << std::endl; prensaLinea1.actualizarSensores(88.2, 1500.0); prensaLinea1.mostrarReporte(); return 0; }