LibS7Adv/MAPPING_IMPLEMENTATION_SUMM...

115 lines
4.1 KiB
Markdown

# 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
```csharp
// 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
```csharp
// 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**:
```csharp
private Dictionary<string, string>? _tagMappingTable;
```
2. **Cargar tabla desde archivo/configuración**:
```csharp
public void LoadTagMappingTable(string configFile) { }
```
3. **Modificar MapTagToAddress()**:
```csharp
private string MapTagToAddress(string tag)
{
if (_tagMappingTable?.ContainsKey(tag) == true)
return _tagMappingTable[tag];
return tag; // Fallback para direcciones absolutas
}
```
## ✅ Verificación
- [x] Proyecto compila correctamente
- [x] Todas las funciones principales usan el mapeo
- [x] Compatibilidad con ambos drivers preservada
- [x] Documentación actualizada
- [x] Ejemplos de uso creados
- [x] Sin cambios breaking en la API existente