Para acceder correctamente a un miembro de un tipo de datos estructurado (PLC UDT o HMI UDT) vinculado a la interfaz de propiedades (Tag Interface) de un Faceplate en Siemens WinCC Unified mediante JavaScript, debe evaluar la propiedad mediante la sintaxis de corchetes con cadena de texto (Faceplate.Properties.Data["Man"]) o leer directamente el nombre de la propiedad personalizada. Intentar acceder al elemento secundario como si fuera una propiedad de objeto estándar en la instrucción Tags() (por ejemplo, Tags(Faceplate.Properties.Data.Man)) genera una excepción de runtime de tipo TypeError: PROPERTY_GET GetIdsOfNames failed debido a la forma en que el motor de JavaScript de WinCC Unified resuelve las interfaces de datos complejas.
Tabla de contenido
- Causa técnica: resolución de miembros en la interfaz de tags del Faceplate
- Requisitos previos
- Pasos para acceder a elementos de un UDT en JavaScript de WinCC Unified
- Verificación
- Limitaciones y precauciones operativas
- Preguntas frecuentes para ingenieros
- Artículos relacionados
- Etiquetas relacionadas
Causa técnica: resolución de miembros en la interfaz de tags del Faceplate
En SIMATIC WinCC Unified (a partir de TIA Portal V16), los tipos de datos estructurados (UDT) pasados como interfaz de datos (Tag Interface) a un tipo de Faceplate no se exponen dentro del objeto de scripts como un objeto de datos de JavaScript convencional. Cuando una propiedad de la interfaz se define con un tipo de dato estructurado (denominada por ejemplo Data), el objeto Faceplate.Properties.Data representa una interfaz de comunicación HMI, no una estructura de variables nativa.
Al ejecutar una línea de código como:
JavaScript
// Sintaxis incorrecta que genera excepción en Runtime
let tag1 = Tags(Faceplate.Properties.Data.Man);
El motor de scripts de WinCC Unified intenta evaluar .Man directamente sobre la propiedad antes de pasársela a la función Tags(). Debido a que la propiedad .Man no existe como un miembro directo en la interfaz de propiedades del objeto de pantalla antes de resolver la referencia del tag, el subsistema de runtime devuelve el error de automatización:
Plaintext
TypeError: JavaScript exception: PROPERTY_GET GetIdsOfNames failed (property='Man', id=-1, error=0x8000001c)
Para evitar que el motor de JavaScript intente resolver la propiedad como un miembro inexistente en tiempo de compilación de la expresión, se debe acceder a la variable HMI utilizando la notación de corchetes sobre la interfaz de propiedades o referenciando la interfaz de variables del Faceplate según la sintaxis soportada por el sistema.
Requisitos previos
- SIMATIC WinCC Unified V16 o posterior en TIA Portal.
- Un tipo de dato de PLC (UDT) o tipo de dato de HMI estructurado definido en el proyecto.
- Un tipo de Faceplate creado dentro de la librería del proyecto, con una interfaz de tipo tag (Tag Interface) configurada con el UDT.
- Una instancia del Faceplate insertada en una pantalla de WinCC Unified y vinculada a un tag estructurado del PLC o HMI.
Pasos para acceder a elementos de un UDT en JavaScript de WinCC Unified
Se utiliza mejor cuando: Se requiere leer o escribir miembros individuales de una estructura UDT (como variables de estado binarias, modos de operación o consignas) dentro de los scripts de eventos o dinámicas gráficas de un Faceplate.
Procedimiento
- Abra el editor del Tipo de Faceplate dentro de la librería del proyecto en TIA Portal.
- Acceda a la pestaña Interfaz de usuario (User Interface) -> Propiedades de la interfaz (Interface Properties).
- Verifique que la propiedad contenedora (por ejemplo,
Data) tenga asignado el tipo de dato estructurado (UDT) correspondiente. - Seleccione el objeto gráfico dentro del Faceplate donde desea ejecutar el script (por ejemplo, el evento de dinamización de color de fondo
BackColor_Trigger). - En el editor de JavaScript, sustituya el acceso directo de propiedades por la sintaxis de corchetes o mediante la concatenación del nombre de la variable de interfaz:
JavaScript
// Opción A: Lectura del objeto de tag mediante corchetes sobre la propiedad de interfaz
let tagValue = Tags(Faceplate.Properties.Data["Man"]).Read();
// Opción B: Construcción de la referencia cuando la interfaz expone la ruta del tag
let tagPath = Faceplate.Properties.Data.PropertyName + ".Man";
let tagValue = Tags(tagPath).Read();
- Si requiere realizar una lectura asíncrona o evaluar la calidad del tag antes de procesar la lógica visual:
JavaScript
// Ejemplo de lectura segura dentro del script del Faceplate
let myTag = Tags(Faceplate.Properties.Data["Man"]);
let tagState = myTag.Read();
if (tagState.QualityCode === 0x80) {
// El valor leído es válido; aplicar lógica gráfica
ScreenItems("Rectangle_1").BackColor = tagState.Value ? HMIRuntime.Math.RGB(0, 255, 0) : HMIRuntime.Math.RGB(128, 128, 128);
}
- Guarde y compile el tipo de Faceplate en la librería.
- En la pantalla principal, instancie el Faceplate y asigne la variable estructurada global al parámetro
Datade la interfaz.
Resultado esperado: El motor de scripts de WinCC Unified resuelve la ruta de la variable miembro sin lanzar excepciones TypeError y actualiza la dinámica gráfica en pantalla.
Verificación: Ejecute el proyecto en WinCC Unified Runtime y abra la consola de diagnóstico de scripts de navegador o WebRH. Confirme que la función Rectangle_1_BackColor_Trigger no registre errores de ejecución GetIdsOfNames failed.
Limitación: El acceso mediante notación de corchetes requiere que el nombre del miembro interno dentro del UDT (por ejemplo, "Man") coincida de manera exacta en mayúsculas y minúsculas con la definición del tipo de dato en TIA Portal.
Verificación
El acceso a los elementos del UDT en el Faceplate se considera exitoso cuando:
- La consola de diagnóstico de WinCC Unified Runtime no registra excepciones de JavaScript
0x8000001cal abrir la pantalla que contiene el Faceplate. - Las variables estructuradas vinculadas (como bits de estado o valores analógicos) modifican el comportamiento visual de los objetos internos del Faceplate en tiempo real.
- Las operaciones de lectura (
Read()) y escritura (Write()) sobre los miembros del UDT desde el script se completan con un código de calidad (QualityCode) equivalente a bueno (0x80).
Limitaciones y precauciones operativas
- Sensibilidad a mayúsculas y minúsculas: Los nombres de los miembros accesibles mediante corchetes (por ejemplo,
"Man") son estrictamente sensibles a mayúsculas y minúsculas en JavaScript. Un error tipográfico en la cadena de texto no provocará un error de compilación en TIA Portal, pero fallará en tiempo de ejecución. - Rendimiento de scripts en disparadores cíclicos: Evite utilizar llamadas de lectura sincrónica (
Tags(...).Read()) de múltiples miembros de un UDT dentro de scripts de dinamización con ciclos de refresco muy cortos (por ejemplo, 100 ms), ya que puede incrementar el tiempo de ciclo de procesamiento de la pantalla HMI.
Preguntas frecuentes para ingenieros
¿Por qué TIA Portal no detecta este error durante la compilación del proyecto?
El compilador de TIA Portal valida la sintaxis general de JavaScript, pero no puede comprobar en tiempo de compilación la existencia de miembros internos dentro de interfaces dinámicas de Faceplates, ya que la resolución del tag se realiza mediante el subsistema de automatización COM/Runtime al cargar la pantalla.
¿Este método de acceso es compatible con versiones de WinCC Unified posteriores a la V16?
Sí. El mecanismo de resolución de interfaces de tags mediante la sintaxis de corchetes Faceplate.Properties.InterfaceName["MemberName"] se mantiene como el estándar recomendado en WinCC Unified V17, V18 y V19.
¿Se pueden escribir valores en los miembros del UDT desde el script del Faceplate?
Sí. Para escribir en un miembro de la estructura desde el script, utilice el método .Write(). Por ejemplo: Tags(Faceplate.Properties.Data["Man"]).Write(true);.
Artículos relacionados
- Cómo crear y dinamizar Faceplates en Siemens WinCC Unified
- Uso del objeto Tags y lectura de variables en JavaScript de WinCC Unified
- Manejo de errores y diagnóstico de scripts de Runtime en WinCC Unified
Etiquetas relacionadas
Code: C335