LibS7Adv/MAPPING_IMPLEMENTATION_SUMM...

4.1 KiB

Resumen de Cambios: Adaptación para Mapeo de Tags a Direcciones Absolutas

Cambios Implementados

1. Nueva Función de Mapeo

  • Archivo: PLCViewModel.cs
  • Función: MapTagToAddress(string tag)
  • Propósito: Mapear tags a direcciones absolutas
  • Estado actual: Retorna el mismo string (asume direcciones absolutas)
  • Futuro: Permitirá tabla de mapeo de tags simbólicos a direcciones absolutas

2. Funciones Modificadas para Usar Mapeo

Funciones Principales de Lectura/Escritura:

  • LeerBool(string sTag)
  • EscribirBool(string sTag, bool Value)
  • LeerNumber(string sTag, bool Signed = false)
  • NUEVA: EscribirNumber(string sTag, object value)

Funciones de Tags (AdvCoSimulator):

  • EscribirTag(string pTag, SDataValue Value)
  • LeerTag(string pTag)
  • EscribirTagBool(string pTag, bool pValue)
  • LeerTagBool(string pTag)
  • EscribirTagInt16(string pTag, int pValue)
  • LeerTagInt16(string pTag)
  • LeerTagDInt(string pTag)
  • EscribirTagDInt(string pTag, int pValue)

3. Mensajes de Error Mejorados

Los métodos de tags ahora muestran mensajes más informativos para Sharp7:

  • Antes: "Tag operations not supported in Snap7 mode"
  • Ahora: "Tag operations not supported in Sharp7 mode. Use LeerBool, EscribirBool, LeerNumber instead with absolute addresses."

4. Documentación Mejorada

  • README.md: Actualizado con información sobre mapeo automático
  • ExampleAbsoluteAddresses.cs: Nuevo archivo con ejemplos de uso
  • Documentación inline: Comentarios detallados sobre el uso futuro

5. Compatibilidad Preservada

  • AdvCoSimulator: Funcionamiento sin cambios (mapeo transparente)
  • Sharp7: Mejora en la gestión de direcciones absolutas
  • Interfaz existente: Sin cambios breaking

🔄 Comportamiento Actual vs Futuro

Estado Actual

// Todas las llamadas usan direcciones absolutas directamente
bool result = plc.LeerBool("DB1.DBX0.0");  // Input: "DB1.DBX0.0" -> Output: "DB1.DBX0.0"

Implementación Futura

// MapTagToAddress() podrá hacer conversiones:
bool result = plc.LeerBool("MotorRunning");  // Input: "MotorRunning" -> Output: "DB1.DBX0.0"

// Ejemplo de tabla de mapeo futura:
private Dictionary<string, string> _tagMappingTable = new Dictionary<string, string>
{
    { "MotorRunning", "DB1.DBX0.0" },
    { "MotorSpeed", "DB1.DBW2" },
    { "Temperature", "DB2.DBD4" },
    { "AlarmOutput", "Q0.1" }
};

🎯 Ventajas de la Implementación

Para Sharp7:

  1. Direcciones absolutas garantizadas: Todas las llamadas pasan por el mapeo
  2. Preparado para futuro: Cuando se implemente la tabla de mapeo, funcionará automáticamente
  3. Sin cambios en el uso actual: Los usuarios pueden seguir usando direcciones absolutas

Para AdvCoSimulator:

  1. Compatibilidad completa: Sin cambios en el comportamiento
  2. Unificación de interfaz: Misma lógica de mapeo que Sharp7
  3. Preparado para mapeo: Podrá usar la misma tabla de mapeo que Sharp7

Para Desarrolladores:

  1. Interfaz unificada: Una sola forma de manejar tags/direcciones
  2. Extensibilidad: Fácil agregar tabla de mapeo en el futuro
  3. Mantenimiento: Lógica centralizada en MapTagToAddress()

🚀 Próximos Pasos para Implementar Tabla de Mapeo

  1. Agregar propiedad de configuración:

    private Dictionary<string, string>? _tagMappingTable;
    
  2. Cargar tabla desde archivo/configuración:

    public void LoadTagMappingTable(string configFile) { }
    
  3. Modificar MapTagToAddress():

    private string MapTagToAddress(string tag)
    {
        if (_tagMappingTable?.ContainsKey(tag) == true)
            return _tagMappingTable[tag];
        return tag; // Fallback para direcciones absolutas
    }
    

Verificación

  • Proyecto compila correctamente
  • Todas las funciones principales usan el mapeo
  • Compatibilidad con ambos drivers preservada
  • Documentación actualizada
  • Ejemplos de uso creados
  • Sin cambios breaking en la API existente