6: Sincronización de mediciones

La sincronización de mediciones es uno de los puntos más importantes a tener en cuenta al momento de escribir cualquier aplicación de control remoto. Descuidar este aspecto de su programa genera un comportamiento impredecible de su instrumento, resultados no reproducibles y mucha frustración. Una clara señal de que se ha realizado de manera incorrecta la sincronización de mediciones es, cuando tiene que insertarse pausas fijas en su aplicación para hacerlo funcionar.

Permítanos primeramente definir que es una sincronización de medicionesa efectos de este capítulo:

Los instrumentos de medición actuales son dispositivos complejos con sus propios sistemas operativos. Sus instrumentos de medición no tienen que preocuparse, todo el tiempo, por el estado del instrumento. La sincronización de mediciones es el método por el cual se asegura que, en los puntos importantes de su programa (SyncPoints), su instrumento esté en el estado que se espera.

Aquí tenemos un ejemplo de sincronización de mediciones con un osciloscopio y un dispositivo que genera una señal no periódica:

CH6_MeasSyncWithScope_16x9.png

En la imagen, puede verse que en su programa hay secciones inactivas que tienen que esperar a que el instrumento se actualice. Observe que estos tiempos de inactividad son dinámicos en longitud. Tienen que adaptarse a diferentes condiciones (por ejemplo, la velocidad de su computadora personal, las diferentes estabilizaciones del instrumento, así como los tiempos de adquisición). ¿Cómo puede lograrse esto? La mejor manera es dejar que el instrumento le avise cuando esté listo. En las notas adicionales presentamos diferentes métodos de sincronización.

Notas adicionales:

  • Siempre opere un instrumento de adquisición (osciloscopio, analizador de espectro, medidor de potencia…) en modo de adquisición única. Solo así, podrá estar seguro de que sus resultados de medición provengan de la última adquisición que se haya completado, no de la anterior ni de la que aún no se ha completado. Y lo más importante: cualquier método de sincronización solamente funciona correctamente en el modo de adquisición única.
  • No es necesario sincronizar ni las configuraciones básicas ni las de disparo. El único punto clave se encuentra al final, donde debe asegurarse de que todas las configuraciones se hayan aplicado (SyncPoint ‘SettingsApplied’).
  • Tras la llegada del disparo, el osciloscopio inicia el proceso de adquisición de las formas de onda. Su programa debe esperar hasta que este haya finalizado (SyncPoint ‘AcquisitionFinished’).
  • La lectura de las formas de onda tras este SyncPoint le asegura que el resultado proviene de la más reciente adquisición.

Generalidades de los mecanismos de sincronización

En los siguientes cuatro capítulos presentamos diferentes mecanismos de sincronización ordenados desde el más sencillo hasta el más complejo:

  • Query (consulta)? *OPC
  • Sondeo de bytes de estado (STB)
  • Espera de solicitud de servicio (SRQ)
  • Evento de solicitud de servicio (SRQ)

Sincronización de query? *OPC

Este es el método de sincronización más sencillo y el más utilizado.

Cuando se envía la query *OPC? a un instrumento, este no responde de inmediato, sino que espera hasta que todas las operaciones pendientes hayan finalizado. Por lo tanto, los periodos de inactividad de su programa se producen durante las operaciones « VISA Read », donde su programa espera a que el instrumento responda a la query? *OPC. No es la respuesta en sí lo que importa aquí, sino el retraso que genera.

Importante! Dado que *OPC? es una query, no debe olvidarse leer la respuesta del instrumento con la función « VISA Read() ». De lo contrario, su instrumento generará un error « Query Interrupted » (consulta interrumpida) a causa de la siguiente consulta. Esto es de suma importancia no solo para la query *OPC?,? sino para todas las consultas.

Aquí, debemos mencionar un parámetro adicional – el « VISA Timeout ». El « VISA Timeout » proporciona el mecanismo por el cual puede definirse el tiempo límite de las operaciones « VISA Read » antes de que terminen con error de tiempo límite del VISA. Dado que este valor es individual, y depende de la duración de su tarea actual, asegúrese de definir el « VISA Timeout » correctamente: un tiempo límite muy corto podría generar errores no deseados durante las operaciones regulares, un tiempo límite demasiado largo hace que su programa no responda en caso de que se produzca un error real.

Ventajas:

  • Sencillo y efectivo en la mayoría de los casos.
  • No utiliza el canal de control de la sesión (véase el método de sondeo de bytes de estado), por lo que funciona con conexiones RawSockete serial.

Desventajas:

  • Boquea la comunicación con el instrumento hasta que este responda. Esto puede ser crítico para operaciones de larga duración, donde su aplicación deja de responder.

Sincronización de sondeo del byte de estado (STB)

Este método lo utilizan los drivers de instrumentos de Rohde & Schwarz. Si utiliza comandos SCPI directos, al final de este capítulo encontrará los ejemplos de implementación. Veamos primero el diagrama de flujo que muestra el procedimiento. La explicación viene después.

Para explicar el diagrama de flujo, necesitamos echar un vistazo al « Status Subsystem » (subsistema de estado)del instrumento: una estructura jerárquica de registros con el principal en la parte superior, llamado byte de estado(STB). Es un registro de 8 bits, definido en el estándar IEEE 488.2. Cada uno de sus bits tiene un significado diferente y sirve como un indicador de resumen para los registros que se encuentran más abajo en la cadena jerárquica de los registros de estado. La estructura completa del subsistema de estado se encuentra en cualquier manual de usuario de control de remoto de instrumentos de Rohde & Schwarz (buscar el término « Status Byte »). La siguiente imagen muestra el registro del byte de estado y el segundo registro « Event Status Register »(ESRo registro de estado de eventos ):

  • La primera operación del diagrama de flujo establece el Filtro ESEa 1 (Bit 0 = 1). Eso significa que solo nos interesa el ESR Bit 0 - OPC. Solo se necesita enviar este comando una vez, tras iniciar la conexión, o después del comando *RST.
  • La siguiente operación consulta el valor del registro de estado de eventos con el comando *ESR?. Este es un registro de EVENTO: su valor se borra después de leerse. Esto restablece el ESR Bit 0 - OPC de nuevo a 0.
  • La siguiente operación envía el comando que se desea sincronizar. En nuestro caso, será el comando SCPI SING, que arma el osciloscopio para una sola adquisición. *OPC (sin signo de interrogación!) al final de la string indica al instrumento que una vez ejecutados y finalizados todos los comandos de esta string, se establezca a 1 el ESR Bit 0 - OPC. Por esta razón, antes se lo ha debido restablecer a 0. De lo contrario, puede que alguna acción anterior lo haya establecido a 1 y su bucle de sondeo de byte de estado podría terminar de manera incorrecta después de su primera repetición.
  • La siguiente operación es el bucle de sondeo del byte de estado. Se consulta el byte de estado hasta que el Bit 5 - Event Status Summaryse establezca a 1. El valor del byte de estado puede recuperarse de dos formas diferentes: con el comando SCPI *STB?, con una función de VISA especial llamada « ReadSTB() ». ¿Cuál es la diferencia? El *STB? es un comando SCPI estándar que utiliza buffers VISA I/O. La función « ReadSTB() » se comunica por medio de un canal separado llamado « Control Channel »(canal de control), y no interfiere con la comunicación SCPI estándar de escritura o lectura. También se ha optimizado para tiempos de respuesta más rápidos. Recomendamos incluir un retardo de sondeo dentro de este bucle. Por ejemplo: sin retardo las primeros 10 veces, luego las siguientes 100 veces con un retardo de 1 ms, las siguientes 1000 veces con un retardo de 10ms y así sucesivamente. A fin de prevenir bucles sin fin, los drivers de instrumentos de Rohde & Schwarz utilizan un tiempo de límite llamado « OPC Timeout ».
  • Una vez finalizado el bucle, se restablece de nuevo el SR Bit 0 - OPC con el comando SCPI *ESR?

Ventajas:

  • No bloquea la comunicación con el instrumento. Puede enviar de manera paralela comandos SCPI y recibir respuestas.
  • Adecuado para operaciones de larga duración. Por ejemplo, alineaciones automáticas o autocomprobaciones.

Desventajas:

  • Su implementación es más compleja.
  • No funciona con conexiones RawSocket ni seriales, debido a que no admite el canal de control de la función « VISA ReadSTB() ».

Métodos de última generación con solicitud de servicio (SRQ)

Espera de la sincronización de la solicitud de servicio (SRQ)

Este método es parecido al método anterior de sincronización de sondeo del byte de estado, pero en lugar del bucle de sondeo de byte de estado, utiliza una función « VISA WaitOnEvent() »configurada para esperar el evento de solicitud de servicio. Al final de este capítulo encontrará ejemplos de este tipo de sincronización.

Para utilizar este mecanismo, es necesario:

  • Realizar una configuración única después de restablecer *ESE 1;*SRE 32(véase la imagen anterior: registros del subsistema de estado del instrumento). Este configura el filtro ESE para que reaccione al bit ESR OPC al igual que en el método de sincronización previo con sondeo de byte de estado. La función « *SRE 32 » define el filtro SREpara generar la solicitud de serviciosi el « Event Status Summary bit » (bit de resumen de estado de eventos) del registro de byte de estado se establezca a 1.
  • Antes de enviar el comando de sincronización, active el evento de solicitud de servicio con la función « VISA EnableEvent() ».
  • Envíe el comando de sincronización con ;*OPCal final.
  • Llame (call) la función « VISA WaitOnEvent() ». Esta función espera hasta que el evento de solicitud de servicio llegue, o el tiempo límite expire.
  • Desactive el evento de solicitud de servicio con la función « VISA DisableEvent() ».

Ventajas:

  • En comparación con el método anterior, no se necesita implementar un bucle de sondeo de byte de estado.
  • La traza IO es más pequeña y puede leerse mejor.

Desventajas:

  • Su aplicación en LabVIEW y MATLAB no puede interrumpirse durante la ejecución de la función « VISA WaitOnEvent() ». Esto puede ser un problema cuando se utilizan comandos que les toma mucho tiempo completarse, por ejemplo, la query de autocomprobación *TST?
  • No admite conexión RawSocket ni serial.

Sincronización del evento de solicitud de servicio (SRQ)

La idea principal es que inicie una tarea del instrumento mientras se centra en otra tarea. Cuando el instrumento haya terminado la tarea, VISA aplica una función de su elección. Esta función se denomina « Event handler »(controlador de eventos).

Al final de este capítulo encontrará ejemplos de este tipo de sincronización tanto en C# como en LabWindows/CVI.

Para utilizar el mecanismo de sincronización del evento de solicitud de servicio, es necesario:

  • Realizar una configuración única después de restablecer *ESE 1;*SRE 32(véase la imagen anterior: registros del subsistema de estado del instrumento). Este configura el filtro ESE para que reaccione al bit ESR OPC al igual que en el método de sincronización previo con sondeo de byte de estado. El *SRE 32configura el filtro SRE para generar una solicitud de servicio si el « Event Status Summary bit »(Bit de resumen de estado de eventos) del registro del byte de estadose establezca a 1.
  • Antes de enviar el comando de sincronización, debe registrar su función de callback (retrollamada) con la función « VISA InstallHandler() », así como habilitar el mecanismo de solicitud de servicio con la función « VISA EnableEvent() ».
  • Envíe el comando de sincronización con ;*OPCal final. Una vez finalizada la ejecución del comando, VISA llama a su función registrada.

Ventajas:

  • Puede enfocarse en otras labores mientras que su instrumento realiza tareas de prueba y medición.
  • Ideal para aplicaciones multi-threading.

Desventajas:

  • Su implementación es más compleja.
  • No admite conexión RawSocket ni serial.
  • No es compatible con LabVIEW ni con MATLAB.

Ejemplos de comandos SCPI directos

Ejemplos de la tarea de medición anterior con la sincronización de query? *OPC, más:

  • Sincronización de sondeo de byte de estado
  • Espera de la sincronización de solicitud de servicio
  • Sincronización del evento de solicitud de servicio (en Python, C# y LabWindows/CVI)

Ejemplos de drivers de instrumentos

Ejemplos de la tarea de medición anterior:

Otros recursos

Puede encontrar más información sobre el tema de sincronización de mediciones en:

Request information

Do you have questions or need additional information? Simply fill out this form and we will get right back to you.

Permiso de marketing

Se ha enviado su solicitud. Nos pondremos en contacto con usted en breve.
An error is occurred, please try it again later.