4.1 KiB
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:
- Direcciones absolutas garantizadas: Todas las llamadas pasan por el mapeo
- Preparado para futuro: Cuando se implemente la tabla de mapeo, funcionará automáticamente
- Sin cambios en el uso actual: Los usuarios pueden seguir usando direcciones absolutas
Para AdvCoSimulator:
- Compatibilidad completa: Sin cambios en el comportamiento
- Unificación de interfaz: Misma lógica de mapeo que Sharp7
- Preparado para mapeo: Podrá usar la misma tabla de mapeo que Sharp7
Para Desarrolladores:
- Interfaz unificada: Una sola forma de manejar tags/direcciones
- Extensibilidad: Fácil agregar tabla de mapeo en el futuro
- Mantenimiento: Lógica centralizada en
MapTagToAddress()
🚀 Próximos Pasos para Implementar Tabla de Mapeo
-
Agregar propiedad de configuración:
private Dictionary<string, string>? _tagMappingTable;
-
Cargar tabla desde archivo/configuración:
public void LoadTagMappingTable(string configFile) { }
-
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