Visión General La plantilla de Máquina de Estados Simple le facilita definir la secuencia de ejecución de las secciones de su código. Esta implementación particular se llama comúnmente máquina de Moore, la cual determina el siguiente estado basado en las d ecisiones tomadas en el actual. El diseño de esta plantilla hace muy fácil insertar nuevas secciones de código, removerlas o cambiar el orden en cómo las secciones se ejecutan – todo sin hacer modificaciones mayores a la estructura de la aplicación.
Contenido 1.
Ejemplo
2.
Guía para el Desarrollador
3.
Requerimientos del Sistema
4.
Casos de Uso
5.
Generalidades
6.
Ejecutar estas Plantillas
7.
Modificar esta Plantilla
8.
Características de LabVIEW utilizadas
9.
Información Importante
1. Ejemplo Refiérase al proyecto de ejemplo Single Shot Measurement, disponible desde la ventana de Create Project, para tener un ejemplo de cómo adaptar la plantilla a una aplicación de medición. Regresar al Inicio
2. Guía para el Desarrollador Vaya a ni.com para una guía de desarrollador de esta plantilla Regresar al Inicio
3. Requerimientos del Sistema LabVIEW Base, Full o Professional Development System. Regresar al Inicio
4. Casos de Uso Esta plantilla es útil para aplicaciones que pueden ser descritas como una combinación de:
Estados
Lógica para toma de de cisiones que determinan cuándo moverse a un estado particular.
Por ejemplo, la siguiente aplicación puede beneficiarse del patrón de máquinas de estado:
Ventanas de diálogo de página simple o con pestañas. Cada pestaña de la ventana corresponde a un estado. Un usuario inicia la transición entre estados al dar clic en una pestaña particular. Para cada pestaña, cualquier acción que el usuario pueda realizar está incluida en ese estado. Un cajero automático. Los estados de esta aplicación pueden incluir la espera por la información del usuario, revisar el monto solicitado contra el disponible en la cuenta, entregar el dinero, imprimir el recibo, etc. Una aplicación que toma una medición, la registra a disco y luego espera por otra acción del usuario. Los estados en esta aplicación pueden incluir esperar la información del usuario, realizar la medición, registrar los datos, mostrarlos, etc.
Regresar al Inicio
5. Generalidades
Notas:
Cada estado en el diagrama de arriba corresponde a un subdiagrama de la estructura Case en Main.vi. Cada estado: 1.
Realiza una acción
2.
Le dice a la máquina de estados cuál es siguiente estado al pasar una instrucción al registro de corrimiento del ciclo While.
Después de la inicialización, la máquina de estados cambia al estado Wait for Event. Este contiene una estructura de eventos que espera cambios en el panel frontal. Cuando un usuario presiona un botón, LabVIEW reconoce el evento y cambia al subdiagrama apropiado de la estructura de eventos. Este subdiagrama inicia la transición al estado apropiado Cada estado puede ver la información del clúster. Los tipos de datos contenidos en el clúster se definen en Data.ctl. Los estados válidos se listan en State.ctl, que es un typedef. Utilizar un typedef para las transiciones entre estados restringe las transiciones que se pueden utilizad, redu ciendo la posibilidad de que la máquina de estados llegue a un estado no reconocido Sólo el estado Stop puede detener la aplicación. Este diseño previene paros accidentales o parciales al garantizar que:
o
El código de paro sólo se ejecuta cuando el usuario lo desea.
o
El código de paro siempre se ejecuta hasta terminar.
Sólo un estado se ejecuta en cada momento, y el ciclo While único significa que todas las tareas corren a la misma tasa de velocidad. I necesita diferentes tasas o tareas en paralelo, considere las plantillas Queued Message Handler o Actor Framework, disponibles también en la ventana de Create Project. El estado de Wait for Event es el único que reconoce una entrada del usuario. La máquina de estados debe estar en este estado para que pueda aceptar cualquier información del usuario.
Regresar al Inicio
6. Ejecutar estas Plantillas 1.
En la ventana de Project Explorer abra y ejecute el Main.vi
2.
Dé clic en los controles del panel frontal para mostrar las diferentes ventanas de diálogo
Regresar al Inicio
7. Modificar esta Plantilla Determinando sus Necesidades Antes de personalizar esta plantilla, hágase las siguientes preguntas:
¿De qué estados consiste mi aplicación? La respuesta determina los estados por agregar Para cada estado, ¿cuál debe ser el siguiente? La respuesta determina el valor del enum Next State al que cada estado envía a través del registro de corrimiento del ciclo While
Un mismo estado puede transferir a múltiples estados dependiendo de una condición. Un ejemplo es el W ait for Event en la plantilla, que envía al estado correspondiente, basándose en la información que brinda el usuario.
¿Qué tipo de datos requiere tener cada estado? La respuesta determina qué tipo de datos agregar a Data.ctl ¿Qué errores pueden ocurrir y cómo debe responder la aplicación? La respuesta determina la cantidad de manejo de errores que necesita
Agregar Código de Inicialización Siga estos pasos para agregar el código de inicialización de su aplicación: 1.
Ubique el subdiagrama Initialize de la estructura Case
2.
Agregue código que inicialice su aplicación. Por ejemplo, puede querer abrir un archive para registrar datos, inicializar los datos en Data.ctl en valores específicos, etc
3.
Decida a qué estado la aplicación debe moverse. De manera predeterminada, el estado Initialize lleva al estado Wait for Event:
Dependiendo de las necesidades de su aplicación, puede modificar esta transición a otro estado.
Agregar un Control que Inicia la Transición entre Estados 1.
Agregue un control al panel frontal
2.
Ubique el subdiagrama Wait for Event de la estructura Case
3.
Agregue un evento a la estructura de eventos
4.
Configure el disparo del evento cuando el valor del control cambie. Por ejemplo:
5.
Dé clic en OK. LabVIEW crea un subdiagrama en la estructura de eventos.
6.
Arrastre la terminal del diagrama de bloques para el nuevo control dentro del subdiagrama.
7.
Decida a qué estado quiere ir como resultado de que el usuario interactúe con el control y conecte un enum con este estado a la salida Next State:
Si el estado al que quiere ir no existe, agréguelo.
Agregar un Estado Siga los siguientes pasos para agregar un estado: Actualice States.ctl, el typedef que contiene los estados válidos:
1.
Ubique el enum States.ctl y abra el typedef:
LabVIEW muestra la ventana Control Editor .
2.
1.
Agregue el espacio para el siguiente estado en enum States
2.
Escriba el nombre del nuevo estado. Por ejemplo:
3.
De clic fuera del control para agregar el nombre a la lista de estados.
4.
Seleccione File»Apply Changes.
Agregue el estado a la máquina de estados: 1.
Agregue un subdiagrama a la estructura de caso en el Main.vi.
2.
Agregue el código que el estado debe ejecutar. Mientras lo hace, sigua las siguientes recomendaciones:
Utilice las funciones Unbundle by Name y Bundle by Name para entrar y modificar los datos del estado:
Conecte las terminales de error de sus funciones al registro de corrimiento de error Conecte una constante de FALSE a la salida booleana del túnel. Sólo el estado Stop debe detener el ciclo Cada estado debe especificar una transición a otro. Conecte el valor del siguiente estado a la salida Next State. Puede hacerlo directamente o implementando cierta lógica condicional. La siguiente imagen muestra un ejemplo de esta lógica.:
En el código mostrado arriba, si Data es mayor a 0, User State 1 será el siguiente estado. De
otra manera, User State 2 será el siguiente. Para una lógica más avanzada o compleja, puede utilizar una estructura de caso.
Asegúrese que la aplicación contiene una transición al siguiente estado
Modificar los Tipos de Datos que un Estado puede Utilizar Complete los siguientes pasos para modificar los tipos de datos que un estado puede utilizar: 1.
Complete el enum de Data.ctl y abra el typedef:
LabVIEW muestra la ventana de Control Editor . 2.
Personalice el control a sus necesidades.
3.
Seleccione File»Apply Changes.
Agregar Código de Paro Agregue código de paro al subdiagrama Stop de la estructura de caso. Dado que este subdiagrama es el único que puede detener la aplicación, tiene la garantía que cualquier código que le agregue se ejecutará antes de que se detenga la aplicación. Este diseño previene paros accidentales y parciales. El código de paro comúnmente logra las siguientes tareas:
Libera memoria al cerrar cualquier referencia abierta.
Vacia cualquier buffer que esté en uso.
Escribe valores seguros a los canales de entrada de hardware.
Agregar Manejo de Errores De manera predeterminada, esta plantilla se detiene si cualquier función genera un error en su terminal error out. Usted puede elegir ignorar errores específicos o implementar un manejo de errores más inteligente. Complete los siguientes pasos para agregar manejo de errores: 1. Agregue un estado Error 2.
En el estado Error, cree un código que maneje los errores de la manera que desee
3.
En todos los otros estados, cree una transición al estado Error cuando un error ocurra. Por ejemplo:
Quitando la Interfaz de Usuario Si su aplicación no necesita de una interfaz de usuario, siga los siguientes pasos para quitarla: 1.
Borre todos los controles e indicadores del panel frontal
2.
Borre el subdiagrama Wait for Event de la estructura de caso en Main.vi.
3.
El paso previo elimina el subdiagrama Default, que es el que se ejecuta cuando el selector de caso recibe la instrucción de ir a un subdiagrama desconocido. Para propósitos de manejo de errores, haga que otro subdiagrama sea el predeterminado
4.
Corrija cualquier cable roto
También puede eliminar el Wait for Event de State.ctl. Este paso asegura que su máquina de estados nunca intente ir a un estado que se haya eliminado. Antes de hacer esto, tome nota de los enums en la aplicación que llaman este estado. Después de guardar el State.ctl actualizado, estos enums cambiarán. Asegúrese que el nuevo estado es el que necesita.
Regresar al Inicio
8. Características de LabVIEW utilizadas
Estructuras de caso
Enums
Clúster de error
Estructura de eventos
Registros de corrimiento
Typedefs
Ciclo While
Eventos de cambio de valor
Regresar al Inicio
9. Información Importante Copyright © 2012 National Instruments. All rights reserved.
Bajo las leyes de derechos del autor, esta publicación no debe ser reproducida o transmitida en ninguna forma, electrónica o mecánica, incluyendo fotocopiar, grabar, almacenar en un sistema de recuperación de información o traducir, total o parcialmente, sin el consentimiento previo de National Instruments Corporation. National Instruments respeta la propiedad intelectual de otros y pedimos a nuestros usuarios que hagan lo mismo. El software de NI está protegido por los derechos de autor y otras leyes de propiedad intelectual. Dónde el software de NI debe ser usado para reproducir software u otros materiales que pertenecen a otros, usted debe usar el software de NI únicamente para reproducir materiales que puede reproducir de acuerdo con los términos de cualquier licencia aplicable u otra restricción legal. Contratos de Licencia del Usuario Final y Avisos Legales de Terceros Usted puede encontrar contratos de licencias de usuario final (EULAs) y avisos legales de terceros en las siguientes ubicaciones:
Los avisos están ubicados en los directorios \_Legal Information and . Los EULAs están ubicados en el directorio #60;National Instruments>\Shared\MDF\Legal\license. Revise \_Legal Information.txt para obtener información sobre incluir información legal en instaladores desarrollados con productos de NI.
Trademarks LabVIEW, National Instruments, NI, ni.com, el logo corporativo de National Instruments y el logo Eagle son marcas registradas de National Instruments Corporation. Consulte la Información de Marcas Registradas en ni.com/trademarks para otras marcas registradas de National Instruments. Otros nombres de productos y compañías mencionadas son marcas registradas o nombres comerciales de sus respectivas compañías. Patentes Para las patentes que amparan los productos/tecnología de National Instruments, consulte la sección adecuada: Help»Patents en su software, el archivo patents.txt o el Aviso de Patente de National Instruments en ni.com/patents.