LibS7Adv/TAG_MAPPING_BEHAVIOR.md

4.0 KiB

Comportamiento del Mapeo de Tags - LibS7Adv

Resumen

La biblioteca LibS7Adv ahora implementa un comportamiento diferencial para el manejo de tags según el tipo de driver utilizado:

  • AdvCoSimulator: Usa los tags directamente sin conversión
  • Sharp7: Usa MapTagToAddress() para convertir tags a direcciones absolutas

Comportamiento por Driver

AdvCoSimulator

// Para AdvCoSimulator, los tags se usan directamente
string tag = "DB1.DBX0.0";  // Se usa tal como está
connection.ReadBool(tag);

Sharp7

// Para Sharp7, los tags se convierten a direcciones absolutas
string tag = "PEW0";         // Se convierte a "IW0"
string address = MapTagToAddress(tag);  // "IW0"
connection.ReadBool(address);

Funciones Afectadas

Todas las siguientes funciones implementan este comportamiento diferencial:

  • LeerBool(string sTag)
  • EscribirBool(string sTag, bool Value)
  • LeerNumber(string sTag, bool Signed = false)
  • EscribirNumber(string sTag, object value)
  • EscribirTag(string pTag, SDataValue Value) *
  • LeerTag(string pTag) *
  • EscribirTagBool(string pTag, bool pValue)
  • EscribirTagInt16(string pTag, int pValue)
  • LeerTagBool(string pTag)
  • LeerTagInt16(string pTag)
  • LeerTagDInt(string pTag)
  • EscribirTagDInt(string pTag, int pValue)

* Funciones especiales - ver sección siguiente

Funciones con SDataValue

EscribirTag con Sharp7

Cuando se usa Sharp7, EscribirTag(string pTag, SDataValue Value) detecta automáticamente el tipo del SDataValue y usa la función específica correspondiente:

// Ejemplo de uso
SDataValue value = new SDataValue();
value.Bool = true;

// Con AdvCoSimulator: usa WriteTag directamente
// Con Sharp7: detecta que es Bool y usa EscribirBool internamente
EscribirTag("I0.0", value);

Tipos soportados en Sharp7:

  • EPrimitiveDataType.BoolEscribirBool
  • EPrimitiveDataType.Int8/UInt8EscribirNumber
  • EPrimitiveDataType.Int16EscribirNumber
  • EPrimitiveDataType.UInt16EscribirNumber
  • EPrimitiveDataType.Int32EscribirNumber
  • EPrimitiveDataType.UInt32EscribirNumber
  • EPrimitiveDataType.FloatEscribirNumber
  • EPrimitiveDataType.DoubleEscribirNumber

LeerTag con Sharp7

LeerTag(string pTag) no está soportado con Sharp7 ya que SDataValue es específico de AdvCoSimulator. Se recomienda usar las funciones específicas por tipo.

Normalización de Direcciones (Solo Sharp7)

El sistema MapTagToAddress() + NormalizePlcAddress() soporta múltiples notaciones de direcciones PLC:

Ejemplos de Conversión

"PEW0"   "IW0"   // Alemán con P → Americano
"EW0"    "IW0"   // Alemán → Americano  
"PIW0"   "IW0"   // Americano con P → Sin P
"PAW0"   "QW0"   // Alemán output con P → Americano
"AW0"    "QW0"   // Alemán output → Americano
"PE0.0"  "I0.0"  // Bit alemán con P → Americano
"E0.0"   "I0.0"  // Bit alemán → Americano

Migración de Código Existente

Código Anterior (Incorrecto)

// ANTES: MapTagToAddress se usaba siempre
string address = MapTagToAddress(tag);
connection.ReadBool(address);

Código Actual (Correcto)

// AHORA: El comportamiento es automático según el driver
var result = plcViewModel.LeerBool(tag);  // Se maneja internamente

Ventajas del Nuevo Comportamiento

  1. Compatibilidad Completa: Cada driver usa su método óptimo
  2. Transparencia: El usuario no necesita saber qué driver está usando
  3. Flexibilidad: AdvCoSimulator mantiene toda su funcionalidad de tags
  4. Normalización: Sharp7 soporta múltiples notaciones PLC internacionalmente
  5. Futuro-Proof: Base preparada para tablas de mapeo simbólico

Recomendaciones de Uso

  1. Para código nuevo: Usar las funciones del PLCViewModel directamente
  2. Para AdvCoSimulator: Seguir usando tags como "DB1.DBX0.0"
  3. Para Sharp7: Cualquier notación ("PEW0", "IW0", "EW0") funcionará
  4. Para SDataValue: Preferir AdvCoSimulator, o usar funciones específicas con Sharp7