Integración de controles de gráficos de .NET Windows Forms en pantallas WinCC de SIMATIC PCS 7

En el Graphics Designer de SIMATIC PCS 7 WinCC, incrustar controles de Microsoft .NET Windows Forms (como el control de gráficos de Microsoft para histogramas de distribución normal) a menudo resulta en ventanas en tiempo de ejecución en blanco debido a restricciones de ejecución de contenedores de 32 bits, propiedades de control no inicializadas o falta de registros en el Global Assembly Cache (GAC). Para mostrar con éxito gráficos de .NET es necesario parametrizar el control mediante VBScript durante el evento OpenPicture o utilizar el control nativo WinCC Function Trend Control.

Índice de contenidos

Arquitectura del alojamiento de controles .NET en el Runtime de WinCC de 32 bits

A menudo, los ingenieros necesitan visualizaciones estadísticas avanzadas (como campanas de distribución normal de Gauss, histogramas o gráficos de Seis Sigma) que superan los gráficos de barras básicos. En el Graphics Designer de SIMATIC PCS 7 WinCC:
* El lienzo gráfico admite la incrustación de controles ActiveX, objetos OLE y controles de .NET Windows Forms (a través de la paleta .NET Controls).
* Arquitectura de contenedor: El runtime de WinCC (PdlRT.exe) opera como un proceso nativo de Windows de 32 bits. Al alojar un ensamblado .NET, inicializa el Common Language Runtime (CLR) de Microsoft mediante un puente de interoperabilidad COM a .NET.
* Aunque controles como System.Windows.Forms.DataVisualization.Charting.Chart renderizan propiedades en tiempo de diseño en el Graphics Designer, no persiguen automáticamente matrices de datos dinámicos sin scripts de inicialización en tiempo de ejecución.

Causas raíz de las ventanas en blanco: ejecución en diseño frente a ejecución en runtime

Cuando un ingeniero coloca un control de gráficos de Microsoft en una imagen .pdl y activa el runtime, el control se renderiza con frecuencia como un rectángulo gris vacío:
1. Falta de enlace de datos en runtime: A diferencia de los controles APL estándar de WinCC que se enlazan directamente a estructuras de variables S7, los controles .NET no leen de forma nativa variables de etiquetas de WinCC sin código de script personalizado.
2. Falta de inicialización de series: Las series, áreas de gráficos y colecciones de puntos definidas en los cuadros de diálogo de propiedades del Graphics Designer pueden fallar al serializarse en el almacenamiento binario PDL si el ensamblado carece de interfaces completas de serialización COM.
3. Profundidad de bits y confianza de seguridad: Si el ensamblado .NET se compiló para una arquitectura de 64 bits (x64) o apunta a una versión de .NET Framework no instalada, el host de runtime de WinCC de 32 bits no logra cargar el ensamblado.
4. Registro de ensamblados en el GAC: Si el ensamblado de destino no está registrado en el Global Assembly Cache (GAC) de Windows en el cliente de runtime, Windows bloquea la ejecución.

Flujo de trabajo de implementación: inicialización del control de gráficos de Microsoft mediante VBScript

Para mostrar de forma fiable un histograma de distribución normal utilizando el control de gráficos de .NET:
1. Verificar la disponibilidad del ensamblado: Asegúrese de que System.Windows.Forms.DataVisualization.dll (.NET Framework 4.x) esté instalado en el GAC o colocado en el directorio bin/ de WinCC.
2. Insertar el control en Graphics Designer:
* Abra la imagen de destino en el Graphics Designer.
* En Controls, seleccione .NET Controls -> Chart. Arrastre el control al lienzo y asígnele el nombre Chart_NormalDist.
3. Configurar la inicialización del script de runtime:
* Seleccione el fondo de la imagen, abra Object Properties y navegue hasta Events -> Picture Object -> Miscellaneous -> Open Picture.
* Agregue una acción de VBScript para definir programáticamente las áreas de los gráficos e inyectar puntos de datos al cargar la pantalla:

Dim objChart, i, x, y, mean, stdDev
Set objChart = ScreenItems("Chart_NormalDist")

' Configure Chart Area and Series
objChart.Series.Clear
objChart.Series.Add "NormalDistribution"
objChart.Series("NormalDistribution").ChartType = 3 ' 3 = SplineArea / Column
objChart.Series("NormalDistribution").Color = RGB(0, 120, 215)

mean = 50.0
stdDev = 10.0

' Generate Gaussian curve points
For i = 20 To 80 Step 2
    x = CDbl(i)
    y = (1.0 / (stdDev * Sqr(2 * 3.14159))) * Exp(-0.5 * ((x - mean) / stdDev) ^ 2)
    objChart.Series("NormalDistribution").Points.AddXY x, y * 1000
Next

Set objChart = Nothing
  1. Guarde la imagen y active el runtime. El script se ejecuta al cargar la pantalla y genera dinámicamente la curva de Gauss.

Alternativas nativas: WinCC Function Trend Control (f(x)) frente a HTML5/WebBrowser

Debido a que los controles .NET de terceros introducen costos generales de mantenimiento en las migraciones de clientes OS, Siemens recomienda dos alternativas nativas:
* WinCC Function Trend Control ($f(x)$): El control integrado de WinCC traza de forma nativa una variable de proceso frente a otra ($Y = f(X)$) o traza matrices de bloques de datos S7 sin necesidad de scripts.
* WinCC WebBrowser Control (HTML5): Coloque el control nativo WinCC WebBrowser en la pantalla y asígnele un panel HTML5/JavaScript interno utilizando Chart.js o D3.js. Esto proporciona un estilo moderno al tiempo que elimina los problemas de interoperabilidad con .NET.

Verificación

  • Active el runtime de WinCC en la estación de operador.
  • Abra la pantalla gráfica: verifique que el control de gráficos .NET renderice una curva de distribución gaussiana suave y rellena de color.
  • En la ventana de salida de APDIAG, confirme que no se registren excepciones de tiempo de ejecución de VBScript ni fallos de interoperabilidad COM.
  • Cierre y vuelva a abrir la pantalla en múltiples clientes: confirme que el uso de memoria se mantenga estable sin fugas de controladores GDI.

Limitaciones y precauciones operativas

  • Los controles .NET de terceros deben compilarse apuntando a la arquitectura x86 de 32 bits para que coincidan con el motor de runtime de WinCC de 32 bits (PdlRT.exe).
  • Asegúrese de que todos los clientes OS en la sala de control tengan instalados la versión exacta de .NET Framework y los ensamblados de gráficos.
  • Modificar las propiedades de los gráficos .NET con temporizadores cíclicos de alta frecuencia (p. ej., 100 ms) saturará los núcleos de CPU del cliente; actualice los gráficos estadísticos bajo demanda o al finalizar un lote.

Preguntas frecuentes de ingeniería

  • ¿Por qué el control de gráficos .NET se muestra en el Graphics Designer pero aparece vacío en runtime?
    El diseño en tiempo de diseño utiliza los diseñadores de Visual Studio; el runtime requiere un enlace de datos explícito por script para poblar los puntos de la serie.
  • ¿Qué arquitectura de bits requiere el runtime de WinCC para los controles .NET?
    WinCC Picture Runtime (PdlRT.exe) es una aplicación de 32 bits; todos los ensamblados .NET alojados deben admitir la ejecución de 32 bits.
  • ¿Dónde se deben almacenar las DLL de .NET de terceros en una estación de trabajo WinCC?
    En el Global Assembly Cache (GAC) de Windows o en el directorio de instalación de WinCC bajo C:/Program Files (x86)/Siemens/WinCC/bin/.
  • ¿Puede el WinCC Function Trend Control mostrar histogramas sin .NET?
    Sí, el WinCC Function Trend Control nativo traza curvas X-Y directamente desde matrices de variables sin dependencias de terceros.
  • ¿Qué evento de VBScript se recomienda para inicializar los datos del control .NET?
    El evento Open Picture de la pantalla .pdl anfitriona.
  • ¿Cómo paso una matriz de puntos de datos desde un DB de S7-400 al gráfico .NET?
    Lea la matriz del bloque de datos en WinCC como una variable sin procesar o estructurada, descomprima en VBScript y llame a Points.AddXY.
  • ¿Puedo usar controles .NET en clientes de Web Navigator?
    No, los clientes ligeros de WinCC Web Navigator no admiten controles de Windows Forms .NET; utilice controles estándar de WinCC o WebViewer HTML5.
  • ¿Qué sucede si a un PC cliente OS le falta el ensamblado .NET requerido?
    La ventana de imagen se abrirá, pero el área que contiene el control mostrará un cuadro blanco vacío con una cruz roja (marcador de fallo).
  • ¿El uso de controles .NET consume objetos de proceso de WinCC?
    No, los controles son elementos de visualización gráfica y no consumen licencias de objetos de proceso.
  • ¿Cómo evito fugas de GDI al actualizar gráficos .NET dinámicamente?
    Llame siempre a Series.Clear o actualice los valores de los puntos existentes en su lugar antes de volver a poblar las colecciones de puntos.

Referencias técnicas

  • Manual del Graphics Designer de SIMATIC HMI WinCC V7.5
  • Guía de Windows Forms DataVisualization de Microsoft .NET Framework
  • Entrada del Servicio de Asistencia en Línea de la Industria de Siemens: Uso de controles .NET en WinCC (Entrada ID 299227)
  • Manual de operación del sistema de control de procesos OS de SIMATIC PCS 7

Artículos relacionados

Etiquetas relacionadas

PCS 7, WinCC, .NET Controls, Chart Control, Graphics Designer, VBScript, Histogram, Function Trend Control, PdlRT, Visualization

20 respuestas