Puede configurar y controlar instrumentos seriales, GPIB y VXI a través de una única interfaz: VISA, la interfaz de programación de aplicaciones (API) de la arquitectura de software de instrumentos virtuales. Es un controlador de alto nivel que llama a los controladores de nivel inferior para cada instrumento. En esta nota de aplicación se presenta VISA y se explica cómo aprovechar VISA utilizando el control ActiveX de Measurement Studio VISA (CWVISA) en Visual Basic para realizar el control instrumental con instrumentos seriales, GPIB y VXI, con una única interfaz de programación.
VISA es una arquitectura de software de controladores desarrollada por NI para unificar la comunicación con instrumentos seriales, GPIB y VXI y simplificar sus programas de control de instrumentos. La API de VISA accede a instrumentos seriales, GPIB y VXI a través de llamadas al sistema operativo y el software controlador NI-488.2 y NI-VXI, como se muestra en la Figura 1.
VISA ofrece los siguientes beneficios:
Funcionalidad incorporada para la programación de instrumentación en un conjunto de comandos muy compacto.
CWVISA es un control ActiveX que abstrae la API de VISA, para que pueda interactuar con instrumentos seriales, GPIB y VXI a través de páginas de propiedades interactivas y una API simplificada. Por ejemplo, utilice las páginas de propiedades de CWVISA para encontrar y comunicarse interactivamente con sus instrumentos, descubrir problemas de interfaz o verificar la comunicación con su instrumento durante el tiempo de diseño. Puede utilizar el control ActiveX de VISA en cualquier contenedor de control ActiveX, incluidos Microsoft Visual Basic, Visual C++ y Borland Delphi.
| Comience colocando el control CWVISA en el formulario de interfaz de usuario. Tenga en cuenta que Visual Basic nombra este control CWVisa1. Haga clic con el botón derecho en el control y seleccione Properties. El resto de esta nota de aplicación explica cómo usar las páginas de propiedades para seleccionar las propiedades de recursos y comunicación, probar la comunicación y analizar los datos del instrumento, así como cómo controlar la comunicación mediante programación a través de la API simplificada. |
Determinación del nombre del recurso del instrumento
Un recurso es el instrumento o controlador serial, GPIB o VXI con el que desea comunicarse. El nombre del recurso especifica el nombre exacto y la ubicación del recurso VISA. Por ejemplo, el nombre del recurso ASRL1::INSTR describe el instrumento en el puerto COM 1 de su computadora, y GPIB0::13::INSTR, mostrado en la Figura 2, describe un instrumento GPIB en la dirección 13.
El primer desafío en la interacción con un instrumento es a menudo determinar su dirección y nombre del recurso. CWVISA busca en su PC todos los puertos COM disponibles y los instrumentos GPIB y VXI activos; incluye todos los recursos disponibles en la lista de Nombre del recurso. Si conoce el nombre del recurso del instrumento con el que desea comunicarse o desea cambiar el recurso durante el tiempo de ejecución, especifique el nombre del recurso mediante programación, como en la siguiente línea de código:
CWVisa1.RsrcName = "GPIB::13::INSTR"
Configuración de ajustes de lectura y escritura
Configure los siguientes ajustes generales de interfaz y comunicación en la página de propiedades de RdWrt. La Figura 3 muestra una forma en que puede configurar los ajustes de comunicación.
Protocolo de E/S Serie: seleccione Normal o ASRL488. Utilice la configuración ASRL488 si su instrumento serie acepta comandos de estilo 488.2. Con la configuración ASRL488, puede comunicarse con su instrumento como lo haría con cualquier otro dispositivo basado en mensajes, como en el siguiente ejemplo:
Estado tenue como variante
'Establecer la transferencia de datos del protocolo de E/S ASRL488
CWVisa1.RdWrt.IOProtocolo = cwvisaProtocoloASRL488
'Dispositivo claro
CWVisa1.Clear
'Escribe "*IDN?" en el instrumento
CWVisa1.Write "*IDN?"
'Obtener el valor de sondeo en serie (byte de estado)
estado = CWVisa1.ReadSTB
'Leer y mostrar la respuesta en un cuadro de texto en la interfaz de usuario
Text1.Text = CWVisa1.Read
Protocolo de E/S GPIB: seleccione Normal para la comunicación normal IEEE488, o bien HS488 para la transferencia de datos a alta velocidad 488.
Protocolo de E/S VXI -- Para la mayoría de los instrumentos VXI, seleccione Normal. Unos pocos instrumentos soportan la E/S FDC (Fast Data Channel).
Swap Bytes invierte los bytes del dispositivo. Active esta opción si su dispositivo es Big Endian. Consulte la documentación de su dispositivo para determinar si el instrumento devuelve datos en formato Big Endian.
'Formato Big Endian (el byte más significativo primero)
CWGPIB1.SwapBytes = Verdadero
Termination Char especifica el carácter que desea utilizar para finalizar las operaciones de lectura. Consulte la documentación de su instrumento para determinar si necesita usar un carácter de terminación y cuál debe ser ese carácter de terminación.
'Utilizar el carácter de retorno del carro como carácter de terminación
CWVisa1.RdWrt.TerminationCharacter = 13
'Habilitar el uso de caracteres de terminación
CWVisa1.RdWrt.TerminationCharacterEnable = True
Configuración de ajustes de interfaz
Si se está comunicando con instrumentos seriales o VXI, debe establecer algunas propiedades de interfaz adicionales.
Comunicación serie: utilice la página de propiedades serie para establecer la velocidad de transmisión de baudios, los bits de datos, los bits de detención y el método de control de flujo, como se muestra en la figura 4, o establezca las propiedades serie mediante programación, como en los siguientes ejemplos:
CWVisa1.Asrl.BaudRate = 9600
CWVisa1.Asrl.DataBits = cwasrlDataBits8
CWVisa1.Asrl.StopBits = cwasrlStopBits1
CWVisa1.Asrl.FlowControl = cwasrlFlowNinguno
Comunicación VXI: utilice la página de propiedades Memoria VXI para establecer las propiedades relacionadas con el acceso al registro VXI. Los instrumentos basados en registros tienen dispositivos procesadores llamados registros para almacenar temporalmente datos durante el procesamiento. Las propiedades de origen y destino se aplican a las operaciones de acceso a registros de alto nivel, mientras que las propiedades de ventana se aplican al acceso a registros de bajo nivel. Especifique el privilegio de acceso VME con la propiedad Access Priv. y utilice Address Incr. para incrementar la dirección de destino en 1 después de cada transferencia utilizando los métodos MoveIn o MoveOut.
La Figura 5 muestra una forma en que puede transferir datos con un instrumento VXI.
Puede establecer estas mismas propiedades de comunicación mediante programación. El siguiente ejemplo configura el control CWVisa1 para acceder a una FIFO (dirección no incremental):
Priv de acceso de origen a datos privilegiados
CWVisa1.VxiMemory.SrcAccessPriv = cwVxiMemoryDataPriv
«Byte Order to Big Endian
CWVisa1.VxiMemory.SrcByteOrder = cwVxiMemoryBigEndian
"Address Incr. to 0
CWVisa1.VxiMemory.SrcIncrement = 0
Comunicación del instrumento de ensayo
Measurement Studio hace que sea fácil probar la comunicación para que pueda verificar que su instrumento está funcionando.
1. Abra la página de propiedades Test. Desde esta página de propiedades, puede escribir y leer comandos basados en mensajes. Todos los instrumentos seriales y GPIB y muchos instrumentos VXI reconocen una variedad de cadenas de comandos basadas en mensajes.
2. Escriba un comando en el campo Enviar cadena, como la consulta de identificación *idn?. Consulte la documentación de su instrumento para determinar qué cadenas basadas en mensajes reconoce.
3. Pulse Ejecutar. Observe la respuesta que aparece en el indicador Cadena recibida. La Figura 6 muestra la respuesta recibida de un simulador de dispositivo serie y NI GPIB. También puede presionar Write para escribir datos en el instrumento y Read para leer la respuesta del instrumento.
Abrir una sesión de VISADO
Abra una sesión y comience a comunicarse con el instrumento desde su programa. Una sesión es una conexión o vínculo desde el control CWVISA al recurso, y puede abrir una con el método Abrir. El método Abrir inicializa los recursos y configura la sesión de comunicación VISA con los ajustes que especificó en las páginas de propiedades o mediante programación. Por ejemplo, es posible que desee abrir una sesión de VISA cuando los usuarios hagan clic en un botón Abrir sesión en el panel frontal, como en el siguiente procedimiento de evento:
'Sesión abierta
Private Sub OpenSession_Click()
End Sub
Transferir datos
CWVISA puede comunicarse con instrumentos y controladores VXI seriales, GPIB y basados en mensajes y registros. Los instrumentos basados en mensajes implementan los registros VXIbus y protocolos de comunicación definidos y reconocen el protocolo serie Word. Todos los instrumentos seriales y GPIB y muchos instrumentos VXI reconocen una variedad de cadenas de comandos basadas en mensajes. Usará un conjunto estándar de llamadas a métodos para escribir y leer desde todos los instrumentos basados en mensajes. El control CWVISA proporciona un conjunto de métodos de acceso a registros que puede utilizar con instrumentos VXI. Para el acceso a registros de alto nivel, utilice los métodos Entrada y Salida. Para acceder a registros de bajo nivel, utilice los métodos Peek y Poke.
E/S síncrona basada en mensajes: utilice los métodos de escritura y lectura para realizar E/S síncrona basada en mensajes. Por ejemplo, el siguiente código envía una consulta de identificación a un instrumento y, a continuación, muestra la respuesta de los instrumentos en un cuadro de texto en la interfaz de usuario:
CWVisa1.Open
CWVisa1.Write "*IDN?" & vbLf
Text1.Text = CWVisa1.Read
E/S asíncrona basada en mensajes: puede usar WriteAsync y ReadAsync para realizar E/S asíncrona para que las operaciones de escritura y lectura comiencen y regresen inmediatamente. Cuando se completa un método ReadAsync, el control CWVISA genera un evento y pasa los datos al procedimiento de eventos DataReady. Cuando finaliza un método WriteAsync, el control CWVISA genera un evento WriteComplete. Puede utilizar estos métodos y eventos asíncronos para continuar ejecutando otras tareas durante operaciones de lectura o escritura prolongadas. Por ejemplo, cuando llama a ReadAsync, su programa termina de leer datos y el control CWVISA genera el evento DataReady, que llama al siguiente procedimiento de evento:
SubCWVisa1_DataReady privada (ByVal taskNumber como número entero, datos como variante)
End Sub
Métodos de entrada y salida de registros de alto nivel: para leer datos de un registro VXI de alto nivel, utilice los métodos In8, In16 e In32 para leer valores de 8, 16 y 32 bits, como en el siguiente ejemplo:
'Leer un valor de 32 bits del desplazamiento 0 en el espacio A32 en el bus VXI
X = CWVisa1.In32 cwVxiA32Space, 0
Utilice los métodos Out correspondientes para escribir datos en el desplazamiento especificado, como en el ejemplo siguiente:
'Escribe el valor de 32 bits Y desde el desplazamiento 0 en el espacio local en el bus VXI
CWVisa1.Out32 cwVxiLocalSpace, 0, Y
Acceso de registro de bajo nivel con los métodos Peek y Poke - Antes de utilizar los métodos Peek y Poke, asigne una parte del espacio de memoria VXI a la memoria local con el método MapAddress. MapAddress acepta como parámetros el espacio de direcciones, la dirección VXI base, el tamaño de la memoria en bytes y una dirección local sugerida a la que se puede asignar la memoria. El método devuelve la dirección local real a la que se asignó la dirección VXI base especificada. A continuación, utilice los métodos Peek y Poke para leer y escribir datos desde el espacio asignado.
El siguiente código mapea un espacio en la memoria local, mira y pincha el espacio y desmapea el espacio:
'Mapear 16 bytes de memoria en el espacio A16
X = CWVisa1.MapAddress(cwVxiA16Space, &hC000, 64, False, 0)
'Leer el valor de 16 bits al principio del espacio de direcciones
Y = CWVisa1.Peek16(X)
'Escribe el valor de 16 bits 35 en el registro en el segundo byte del espacio de direcciones
CWVisa1.Poke16 X + 2, 35
Libere el espacio en la memoria local
CWVisa1.UnmapAddress
Nota: Utilice el método MapAddress para asignar una región de un espacio de direcciones VXI a la memoria local. Compruebe el tamaño de la ventana asignada y las propiedades de la base de ventanas para asegurarse de no acceder a un área fuera de esta ventana.
Uso de eventos para sincronizar la comunicación
Los eventos proporcionan comunicación entre los recursos de VISA y su programa. Si desea que su programa responda a cualquiera de las siguientes condiciones, defina los procedimientos de evento para el evento apropiado:
El control CWVISA pone en cola los eventos para que pueda acceder a ellos y gestionarlos más tarde. CWVISA llama automáticamente al método EnableEvent en todos los tipos de eventos, excepto en Trigger, cuando se llama a un método Open. Puede usar el método EnableEvent para agregar solo los eventos que desea colocar en la cola de eventos. Por ejemplo, el siguiente código de Visual Basic habilita la puesta en cola de eventos para el evento VxiVmeInterrupt de modo que cuando se produce este evento, se coloca en una cola en lugar de llamar a su procedimiento de evento:
CWVisa1.EnableEvent cwvisaEventVXIVMEInterrumpir
El siguiente código de Visual Basic comprueba la cola de eventos para determinar si un evento VXIVMEInterrupt está en la cola y, si lo está, obtiene el valor StatusId de la interrupción:
Dim ReturnEvent Como CWVisaEvent
Dim stat As Boolean
stat = CWVisa1.WaitOnEvent(cwvisaEventVXIVMEInterrupt, 0, ReturnEvent)
If stat Then
Fin Si
Si le preocupan los eventos que ocurren en ciertos puntos del programa, puede vaciar la cola o desactivar la cola de eventos. Para vaciar la cola de todos los eventos del mismo tipo, utilice el método Descartareventos:
CWVisa1.DescartarEventos cwvisaEventoVXIVMEInterrumpir
Para desactivar la colocación de eventos en la cola, utilice el método DisableEvent:
CWVisa1.DisableEvent cwvisaEventVXIVMEInterrumpir
Analizar datos
Los instrumentos son famosos por enviar cadenas binarias crípticas o cadenas que contienen una combinación de información de cabecera y datos. A menudo es frustrante analizar estas cadenas en un formato de datos utilizable. El control CWVISA proporciona un análisis de datos integrado para facilitar el trabajo con datos de instrumentos.
Utilice la página de propiedades Analizar para crear una tarea de análisis. Una tarea de análisis describe cómo desea analizar los datos. Luego ejecuta esta tarea desde su código para analizar automáticamente los datos devueltos desde un instrumento. Puede especificar tantas tareas de análisis como necesite, de modo que pueda analizar cada tipo de interacción con un instrumento de manera diferente.
El control CWVISA proporciona una tarea incorporada llamada Number Parser. El analizador numérico convierte una cadena delimitada en una matriz de números, eliminando encabezados y otra información no numérica. Por ejemplo, supongamos que tiene un instrumento que responde al comando DATA? devolviendo una lista de números separados por comas precedidos por alguna información de encabezado. La cadena puede parecerse a WFM3.246,3.295,4.653,3.334. Sin la tarea Analizador numérico, analizaría la cadena para recuperar cada número representado por ASCII y convertirlo a un tipo numérico real. Con la tarea Analizador numérico, analiza y lee datos con la misma llamada al método. El siguiente código de Visual Basic muestra cómo abrir una sesión de VISA, consultar un instrumento basado en mensajes con el comando Data? y leer los datos analizados:
'Variante mantendrá una matriz de dobles - los datos analizados
Datos tenues como variante
'Abrir una sesión de VISADO
CWVisa1.Open
'¿Escribir datos? en el instrumento
CWVisa1.Write "Data?"
'Leer la respuesta
datos = CWVisa1.Tasks.Item("Number Parser").Leer
Cierre de la sesión de visados
Utilice el método Cerrar para asignar recursos y finalizar la sesión de VISA. En el procedimiento de evento siguiente, la sesión de VISA finaliza cuando los usuarios hacen clic en el botón de comando Cerrar sesión:
'Cerrar la sesión
Private Sub CloseSession_Click()
End Sub
NI VISA es una solución para el control de diversos instrumentos. Measurement Studio ofrece páginas de propiedades a través de las cuales puede integrar interactivamente el control de instrumentos VISA en su programa. Por ejemplo, el control de CWVISA encuentra todos los recursos de VISA, por lo que solo tiene que seleccionar entre los enumerados. CWVISA ofrece una página de propiedades de prueba para interactuar con instrumentos y solucionar problemas de comunicación. Mediante la página de propiedades Analizar, puede especificar tareas de análisis para que los datos se devuelvan al programa en un formato utilizable. A través de la API VISA de Measurement Studio, puede realizar una comunicación síncrona y asíncrona con instrumentos seriales, GPIB y VXI y utilizar el manejo de eventos y la puesta en cola para acelerar la ejecución de su programa.