using System; namespace LibS7Adv { /// /// Ejemplos de uso del nuevo sistema de normalización de direcciones PLC /// Demuestra cómo diferentes notaciones se convierten automáticamente al formato Sharp7 /// public class ExampleAddressNormalization { private PLCViewModel plc; public ExampleAddressNormalization() { plc = new PLCViewModel(); } /// /// Demuestra la normalización automática de direcciones con diferentes notaciones /// public void ExampleAddressNormalizationUsage() { Console.WriteLine("=== Ejemplo de Normalización de Direcciones PLC ==="); Console.WriteLine("Todas estas direcciones se normalizan automáticamente para Sharp7:"); Console.WriteLine(); // Configurar para Sharp7 plc.PlcData.ConnectionType = ConnectionType.Sharp7; plc.PlcData.IP = "192.168.1.100"; // Nota: No necesitamos conectar para demostrar la normalización // plc.Connect(); Console.WriteLine("=== NOTACIONES DE INPUTS (Entradas) ==="); // Todas estas formas son equivalentes y se normalizan a IW0, IW2, etc. Console.WriteLine("Notación Alemana con P:"); Console.WriteLine(" PEW0 → Normalizado a: IW0"); Console.WriteLine(" PEW2 → Normalizado a: IW2"); Console.WriteLine(" PEB0 → Normalizado a: IB0"); Console.WriteLine(" PED0 → Normalizado a: ID0"); Console.WriteLine(); Console.WriteLine("Notación Alemana sin P:"); Console.WriteLine(" EW0 → Normalizado a: IW0"); Console.WriteLine(" EW2 → Normalizado a: IW2"); Console.WriteLine(" EB0 → Normalizado a: IB0"); Console.WriteLine(" ED0 → Normalizado a: ID0"); Console.WriteLine(); Console.WriteLine("Notación Americana con P:"); Console.WriteLine(" PIW0 → Normalizado a: IW0"); Console.WriteLine(" PIW2 → Normalizado a: IW2"); Console.WriteLine(" PIB0 → Normalizado a: IB0"); Console.WriteLine(" PID0 → Normalizado a: ID0"); Console.WriteLine(); Console.WriteLine("Notación Americana (ya compatible):"); Console.WriteLine(" IW0 → Sin cambios: IW0"); Console.WriteLine(" IW2 → Sin cambios: IW2"); Console.WriteLine(" IB0 → Sin cambios: IB0"); Console.WriteLine(" ID0 → Sin cambios: ID0"); Console.WriteLine(); Console.WriteLine("=== NOTACIONES DE OUTPUTS (Salidas) ==="); Console.WriteLine("Notación Alemana con P:"); Console.WriteLine(" PAW0 → Normalizado a: QW0"); Console.WriteLine(" PAW2 → Normalizado a: QW2"); Console.WriteLine(" PAB0 → Normalizado a: QB0"); Console.WriteLine(" PAD0 → Normalizado a: QD0"); Console.WriteLine(); Console.WriteLine("Notación Alemana sin P:"); Console.WriteLine(" AW0 → Normalizado a: QW0"); Console.WriteLine(" AW2 → Normalizado a: QW2"); Console.WriteLine(" AB0 → Normalizado a: QB0"); Console.WriteLine(" AD0 → Normalizado a: QD0"); Console.WriteLine(); Console.WriteLine("Notación Americana con P:"); Console.WriteLine(" POW0 → Normalizado a: QW0"); Console.WriteLine(" POW2 → Normalizado a: QW2"); Console.WriteLine(" POB0 → Normalizado a: QB0"); Console.WriteLine(" POD0 → Normalizado a: QD0"); Console.WriteLine(); Console.WriteLine("Notación Americana (ya compatible):"); Console.WriteLine(" QW0 → Sin cambios: QW0"); Console.WriteLine(" QW2 → Sin cambios: QW2"); Console.WriteLine(" QB0 → Sin cambios: QB0"); Console.WriteLine(" QD0 → Sin cambios: QD0"); Console.WriteLine(); Console.WriteLine("=== NOTACIONES DE BITS ==="); Console.WriteLine("Entradas (Inputs):"); Console.WriteLine(" PE0.0 → Normalizado a: I0.0"); Console.WriteLine(" E0.0 → Normalizado a: I0.0"); Console.WriteLine(" PI0.0 → Normalizado a: I0.0"); Console.WriteLine(" I0.0 → Sin cambios: I0.0"); Console.WriteLine(); Console.WriteLine("Salidas (Outputs):"); Console.WriteLine(" PA0.0 → Normalizado a: Q0.0"); Console.WriteLine(" A0.0 → Normalizado a: Q0.0"); Console.WriteLine(" PO0.0 → Normalizado a: Q0.0"); Console.WriteLine(" Q0.0 → Sin cambios: Q0.0"); Console.WriteLine(); Console.WriteLine("=== DATA BLOCKS (sin cambios) ==="); Console.WriteLine(" DB1.DBX0.0 → Sin cambios: DB1.DBX0.0"); Console.WriteLine(" DB1.DBW0 → Sin cambios: DB1.DBW0"); Console.WriteLine(" DB1.DBD0 → Sin cambios: DB1.DBD0"); Console.WriteLine(); Console.WriteLine("=== MARCAS/MEMORY (sin cambios) ==="); Console.WriteLine(" M0.0 → Sin cambios: M0.0"); Console.WriteLine(" MW0 → Sin cambios: MW0"); Console.WriteLine(" MD0 → Sin cambios: MD0"); } /// /// Ejemplo práctico mostrando cómo usar diferentes notaciones en el código /// public void ExamplePracticalUsage() { Console.WriteLine("=== Ejemplo Práctico de Uso ==="); Console.WriteLine("Ahora puedes usar cualquier notación en tu código:"); Console.WriteLine(); // Configurar conexión plc.PlcData.ConnectionType = ConnectionType.Sharp7; plc.PlcData.IP = "192.168.1.100"; plc.Connect(); if (plc.IsConnected) { Console.WriteLine("=== Usando diferentes notaciones (todas equivalentes) ==="); try { // Todas estas formas de leer Input Word 0 son equivalentes: Console.WriteLine("Leyendo Input Word 0 con diferentes notaciones:"); string? value1 = plc.LeerNumber("IW0"); // Americano estándar string? value2 = plc.LeerNumber("PIW0"); // Americano con P string? value3 = plc.LeerNumber("EW0"); // Alemán string? value4 = plc.LeerNumber("PEW0"); // Alemán con P Console.WriteLine($" IW0 = {value1}"); Console.WriteLine($" PIW0 = {value2} (normalizado a IW0)"); Console.WriteLine($" EW0 = {value3} (normalizado a IW0)"); Console.WriteLine($" PEW0 = {value4} (normalizado a IW0)"); Console.WriteLine(); Console.WriteLine("Leyendo Input Bits con diferentes notaciones:"); bool? bit1 = plc.LeerBool("I0.0"); // Americano estándar bool? bit2 = plc.LeerBool("PI0.0"); // Americano con P bool? bit3 = plc.LeerBool("E0.0"); // Alemán bool? bit4 = plc.LeerBool("PE0.0"); // Alemán con P Console.WriteLine($" I0.0 = {bit1}"); Console.WriteLine($" PI0.0 = {bit2} (normalizado a I0.0)"); Console.WriteLine($" E0.0 = {bit3} (normalizado a I0.0)"); Console.WriteLine($" PE0.0 = {bit4} (normalizado a I0.0)"); Console.WriteLine(); Console.WriteLine("Escribiendo Output con diferentes notaciones:"); // Todas estas formas de escribir Output Word 0 son equivalentes: plc.EscribirNumber("QW0", 1000); // Americano estándar plc.EscribirNumber("POW0", 1001); // Americano con P (normalizado a QW0) plc.EscribirNumber("AW0", 1002); // Alemán (normalizado a QW0) plc.EscribirNumber("PAW0", 1003); // Alemán con P (normalizado a QW0) Console.WriteLine(" ✓ Escrito en QW0 usando notación americana"); Console.WriteLine(" ✓ Escrito en POW0 (normalizado a QW0)"); Console.WriteLine(" ✓ Escrito en AW0 (normalizado a QW0)"); Console.WriteLine(" ✓ Escrito en PAW0 (normalizado a QW0)"); Console.WriteLine(); Console.WriteLine("=== Usando funciones Tag con normalización ==="); // Las funciones Tag también usan la normalización automática int? inputValue = plc.LeerTagInt16("PEW2"); // Alemán con P → IW2 plc.EscribirTagInt16("PAW2", 2500); // Alemán con P → QW2 bool inputBit = plc.LeerTagBool("E0.1"); // Alemán → I0.1 plc.EscribirTagBool("A0.1", true); // Alemán → Q0.1 Console.WriteLine($" PEW2 (→IW2) = {inputValue}"); Console.WriteLine($" E0.1 (→I0.1) = {inputBit}"); Console.WriteLine(" ✓ PAW2 (→QW2) = 2500"); Console.WriteLine(" ✓ A0.1 (→Q0.1) = true"); Console.WriteLine(); Console.WriteLine("¡La normalización es completamente transparente!"); Console.WriteLine("Puedes usar la notación que prefieras o con la que estés familiarizado."); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } } else { Console.WriteLine($"Error de conexión: {plc.PlcData.LastError}"); } plc.Disconnect(); } /// /// Muestra todas las conversiones soportadas /// public void ShowSupportedConversions() { Console.WriteLine("=== Tabla Completa de Conversiones Soportadas ==="); Console.WriteLine(); Console.WriteLine("INPUTS (Entradas):"); Console.WriteLine(" Alemán con P: PEW0, PEB0, PED0, PE0.0"); Console.WriteLine(" Alemán sin P: EW0, EB0, ED0, E0.0"); Console.WriteLine(" Americano+P: PIW0, PIB0, PID0, PI0.0"); Console.WriteLine(" Americano: IW0, IB0, ID0, I0.0 ← Formato destino"); Console.WriteLine(); Console.WriteLine("OUTPUTS (Salidas):"); Console.WriteLine(" Alemán con P: PAW0, PAB0, PAD0, PA0.0"); Console.WriteLine(" Alemán sin P: AW0, AB0, AD0, A0.0"); Console.WriteLine(" Americano+P: POW0, POB0, POD0, PO0.0"); Console.WriteLine(" Americano: QW0, QB0, QD0, Q0.0 ← Formato destino"); Console.WriteLine(); Console.WriteLine("SIN CAMBIOS:"); Console.WriteLine(" Data Blocks: DB1.DBX0.0, DB1.DBW0, DB1.DBD0"); Console.WriteLine(" Marcas: M0.0, MW0, MD0"); Console.WriteLine(" Ya americano: IW0, QW0, I0.0, Q0.0"); Console.WriteLine(); Console.WriteLine("TIPOS DE DATOS:"); Console.WriteLine(" W = Word (16 bits)"); Console.WriteLine(" B = Byte (8 bits)"); Console.WriteLine(" D = DWord (32 bits)"); Console.WriteLine(" X = Bit (para DB), sin sufijo para I/Q bits"); } } }