Intentar leer atributos definidos por el usuario como 'TagNameDisplayed' utilizando 'objObject.TagNameDisplayed' en WinCC Graphics Designer VBA produce el error de tiempo de ejecución 438 ('El objeto no es compatible con esta propiedad o método') porque 'TagNameDisplayed' no es una propiedad COM nativa de 'HMIObject'. Para leer y modificar correctamente las propiedades dinámicas o definidas por el usuario en VBA, se debe acceder a la colección 'Properties' del objeto utilizando la sintaxis 'objObject.Properties("TagNameDisplayed").Value'. Esto permite realizar auditorías por lotes automatizadas y el cambio de nombre de las etiquetas de los iconos de bloque de APL en todos los despliegues de proceso.
Índice de contenidos
- Resumen ejecutivo
- Mecánica arquitectónica y del sistema
- Procedimiento paso a paso de ingeniería e implementación
- Verificación
- Limitaciones y precauciones operativas
- Preguntas frecuentes para ingenieros
- Referencias técnicas
- Artículos relacionados
- Etiquetas relacionadas
Resumen ejecutivo
Durante proyectos de puesta en marcha a gran escala en PCS 7 o de estandarización de planta, los ingenieros de automatización escriben frecuentemente macros en Visual Basic for Applications (VBA) dentro de WinCC Graphics Designer para automatizar tareas repetitivas, tales como el cambio de nombre de variables o la actualización de etiquetas de visualización en cientos de iconos de bloque. Sin embargo, los desarrolladores que intentan leer propiedades personalizadas de APL —como TagNameDisplayed— a menudo se encuentran con un obstáculo de programación: el descriptor de acceso de objetos VBA estándar genera el Error 438: El objeto no admite esta propiedad o método. Este artículo explica el modelo de objetos interno de WinCC Graphics Designer, contrasta las propiedades COM nativas con las colecciones de propiedades dinámicas y proporciona scripts de VBA listos para producción para editar por lotes los atributos de los iconos de bloque.
Mecánica arquitectónica y del sistema
Arquitectura del modelo de objetos de WinCC Graphics Designer:
- Interfaz
HMIObject: Representa cualquier elemento gráfico (rectángulo, círculo, icono de bloque personalizado, control OLE) ubicado en una pantalla de imagen.pdl. - Propiedades nativas frente a la colección de propiedades dinámicas:
- Propiedades nativas: Se exponen directamente a través de los métodos de la interfaz COM (p. ej.,
objObject.ObjectName,objObject.Layer,objObject.Width,objObject.Height,objObject.Type). - Propiedades dinámicas / definidas por el usuario: Los atributos personalizados agregados a objetos agrupados o personalizados (como
TagNameDisplayed,ServerName,Type,HighlightColor) NO existen como métodos COM directos. En su lugar, residen en la colecciónobjObject.Properties. - Sintaxis de acceso correcta:
objObject.Properties("TagNameDisplayed").Value. - Mecanismo del error 438: Llamar a
objObject.TagNameDisplayedfuerza a VBA a consultar la tabla de distribución COM de vinculación anticipada deHMIObject, la cual carece de este miembro, generando el Error 438 de inmediato.
Procedimiento paso a paso de ingeniería e implementación
Paso 1: Abrir el editor de VBA en Graphics Designer
- Abra cualquier imagen de visualización de proceso en WinCC Graphics Designer.
- Presione
Alt + F11para iniciar el editor integrado de Microsoft Visual Basic for Applications (VBA). - Inserte un nuevo módulo en
VBA-Project (<PictureName>.pdl)-> 'Modules' -> 'Module1'.
Paso 2: Implementar la macro de lectura segura de atributos
Escriba una rutina de VBA que recorra en bucle todos los objetos de la pantalla, verifique la existencia de TagNameDisplayed y lea su valor:
Sub ReadAllTagNamesDisplayed()
Dim objObject As HMIObject
Dim objProp As HMIProperty
Dim strTag As String
For Each objObject In ActiveDocument.HMIObjects
On Error Resume Next
Set objProp = objObject.Properties("TagNameDisplayed")
On Error GoTo 0
If Not objProp Is Nothing Then
strTag = objProp.Value
Debug.Print "Object: " & objObject.ObjectName & " | TagNameDisplayed: " & strTag
Set objProp = Nothing
End If
Next objObject
End Sub
Paso 3: Implementar el script de modificación de atributos por lotes
Para modificar por lotes los prefijos o eliminar los nombres de las tendencias en todos los iconos de la pantalla:
Sub BatchModifyTagNameDisplayed()
Dim objObject As HMIObject
Dim objProp As HMIProperty
For Each objObject In ActiveDocument.HMIObjects
On Error Resume Next
Set objProp = objObject.Properties("TagNameDisplayed")
On Error GoTo 0
If Not objProp Is Nothing Then
' Example: Replace prefix "OLD_" with "NEW_"
If InStr(objProp.Value, "OLD_") > 0 Then
objProp.Value = Replace(objProp.Value, "OLD_", "NEW_")
End If
Set objProp = Nothing
End If
Next objObject
ActiveDocument.Save
End Sub
Paso 4: Ejecutar la macro y revisar la salida
Ejecute la macro mediante F5 en el editor de VBA. Inspeccione la ventana Inmediata (Ctrl + G) para verificar todas las variables analizadas.
Verificación
Para verificar la ejecución de la macro:
1. Verifique la ventana Inmediata en el editor de VBA; confirme que todos los iconos de bloque informen sus cadenas de visualización personalizadas sin generar el Error 438.
2. Cambie a Graphics Designer; seleccione un icono de bloque modificado e inspeccione su ventana de Propiedades de Objeto en 'System' -> 'TagNameDisplayed'.
3. Confirme que el campo de texto refleje la cadena actualizada del script.
4. Guarde la imagen y verifique la apariencia de la visualización en WinCC Graphics Runtime.
Limitaciones y precauciones operativas
Precauciones operativas:
- Modificar TagNameDisplayed altera únicamente la etiqueta de texto que se muestra en pantalla; NO altera la variable de conexión de tiempo de ejecución subyacente (Tag), por lo que la comunicación de proceso no se ve afectada.
- Cree siempre una copia de seguridad del archivo de imagen .pdl antes de ejecutar macros de modificación por lotes.
- Volver a ejecutar 'Create/Update Block Icons' en SIMATIC Manager sobrescribirá los valores personalizados de TagNameDisplayed a menos que las reglas de los iconos de bloque en la jerarquía de la planta estén sincronizadas.
Preguntas frecuentes para ingenieros
Q: Why did objObject.TagNameDisplayed trigger Error 438?
A: Because TagNameDisplayed is a user-defined property stored within the Properties collection, not a direct COM method of HMIObject.
Q: Can this VBA script run in WinCC Runtime?
A: No. VBA macros execute inside Graphics Designer during engineering. For runtime actions, use C-Script or VBScript (using ScreenItems("Object").TagNameDisplayed).
Q: How do I check if an object possesses a specific property?
A: Use On Error Resume Next, attempt to set objProp = objObject.Properties("PropertyName"), and check If Not objProp Is Nothing.
Q: Can VBA edit properties across multiple .pdl files automatically?
A: Yes, by utilizing Documents.Open within a VBA loop over all files in the GraCS directory.
Q: Does changing this property modify CFC block comments?
A: No. VBA edits the WinCC graphic display properties only; controller CFC configurations are unchanged.
Referencias técnicas
- SIMATIC WinCC V7.5 SP2 Script: C, VBS, VBA
- SIMATIC Process Control System PCS 7 Advanced Process Library (APL) Styleguide
- PCS 7 V9.0 SP3 Licenses and Configuration Limits
Artículos relacionados
- Customizing APL Block Icon Tag Name Formats and Stripping Hierarchy Prefixes in WinCC
- Creating Custom APL-Style Faceplate Popups and Block Icons in SIMATIC PCS 7 WinCC
- Resolving AxRulerControl Sizing and Width Limit Clamping in WinCC Trend Displays
Etiquetas relacionadas
WinCC VBA, TagNameDisplayed, HMIObject, Error 438, Graphics Designer