Tutorial 2

Previous  home  Next   

Este ejercicio muestra cómo se crea un programa de control con ramales alternativos. El programa completo se halla en el archivo: examples/sfc/tutorial2.rvw2.

 

El programa de control completo tiene el aspecto que muestra la figura 1.

examples_sfc_tutorial2_sfc_full

Fig. 1: el programa de control completo

 

En el Step1, el valor de a cambia. Así, en cada ciclo del programa se ejecutará uno de los pasos Step2, Step3 y Step4. Step5 compara el resultado producido por los pasos anteriores. Tras la 6ª ejecución de Step5, el programa se detiene. De lo contrario continua con Step1.

 

Crear un nuevo proyecto

Crear un nuevo proyecto seleccionando

Archivo Nuevo
presionando Ctrl + N
seleccionando el símbolo para crear un nuevo proyecto en la barra de herramientas newproject.

 

El programa principal contiene los pasos Init y Step1.

examples_sfc_tutorial2_sfc_init

 

Crear las variables globales

Primero crear las siguientes Variables globales:

timer
a
b
step2count
step3count
step4count
step5count

 

Asignar el valor inicial -1 a "a". Mantener el valor inicial de 0 para todas las demás variables.

 

Programa Step1

En este subprograma, la variable global "a" es incrementada en 1. Para asegurar que el valor de "a" se halla siempre entre 0 y 2, "a" será calculada con Módulo 3 y reescrita en "a". El valor de "b" se dejará en 0.

examples_sfc_tutorial2_sfc_step1

 

Crear los pasos Step2, Step3 y Step4

Ahora los pasos se crearán uno junto a otro en ramales alternativos. Para ello, seleccione la condición de transición debajo de Step1 con un doble clic.

 

Puede ver que la condición de transición seleccionada muestra una línea de trazos a su alrededor.

Ahora haga clic en el símbolo para añadir un ramal alternativo a la derecha. alternativebranch_right.

examples_sfc_tutorial2_sfc_step2_a

Siga ampliando el ramal que acaba de crear, seleccionando la condición de transición de la derecha y seleccionando del símbolo alternativebranch_right "Ramal alternativo derecho" de nuevo.

examples_sfc_tutorial2_sfc_step2_b

Ahora cree tres Pasos (Steps) en estos tres ramales alternativos y nómbrelos como Step2, Step3 y Step4. Para ello, seleccione la condición de introducción de un ramal y haga clic en el símbolo "Insertar paso después" step_transition_after . Luego asigne un subprograma del mismo nombre a cada paso. Para ello, haga doble clic en el paso e introduzca el nombre del subprograma en la siguiente caja de diálogo. Alternativamente, puede crear un nuevo subprograma con el botón de la barra de herramientas "Crear nuevo subprograma". sdfdocument y asignarlo al Paso (Step).

examples_sfc_tutorial2_sfc_step2_c

Las condiciones de entrada y salida de los tres ramales alternativos son falsas (false) por el momento. Cambie las condiciones de entrada a: a == 0, a == 1 y a == 2. Utilice timer == 10 como condición de salida para todos los ramales. Finalmente, cambie el destino del salto final de Init a Step1.

examples_sfc_tutorial2_sfc_step2_d

Si ahora inicia el programa principal, el programa se detendrá en Step2, puesto que "a" es 0 durante el primer ciclo y la variable global "timer" no se ha alterado.

 

Programas Step2, Step3 y Step4

Los subprogramas asignados a los pasos Step2 a Step4 están vacíos por el momento. El subprograma Step2 se muestra a continuación.

examples_sfc_tutorial2_sfc_step2_program

Cada 200 ms, el Generador de forma de onda arbitraria crea un pulso de 100 ms de ancho y una altura de 1. Los ajustes para el Generador de forma de onda arbitraria se muestran debajo.

examples_sfc_tutorial2_sfc_step2_program_puls

Es decir, cada 200 ms hay un flanco ascendente de 0 a 1. Con cada flanco ascendente, el contador incrementa su valor en 1. Tras 2 s, el valor será 10. Cuando el valor del contador sea 10, el resultado de la comparación de la constante y el valor del contador se añadirá al valor actual de step2Count. Mientras el resultado de la comparación sea falso, se añade 0. Cuando el resultado de la comparación sea true, se añade 1. Al final de cada paso de cálculo del subprograma, se evalúa la condición de transición bajo el paso del programa principal. Cuando la variable global "timer" tiene el valor 10, se abandona el subprograma.

 

Los subprogramas Step3 y Step4 se construyen de forma equivalente. Seleccione todo en Step2 (Ctrl+A), Copie y Pegue en Step3 y Step4. La única diferencia consiste en el hecho que se leen y escriben respectivamente step3count y step4count.

 

Una vez iniciado el programa principal, Step2, Step3 y Step4 se ejecutarán cíclicamente durante 2 s cada uno.

 

Crear el programa Step5

Para añadir un nuevo paso tras el ramal alternativo, seleccione el salto final y haga clic en el símbolo para añadir un paso antes. step_transition_before. Ahora cree un subprograma denominado Step5 y asígnelo al Step5 acabado de crear. Cambie la condición de transición debajo de Step5 a: b>0 && timer == 10.

examples_sfc_tutorial2_sfc_step5

El subprograma Step5 es similar a Step2 ... Step4. Copie Step2 a Step5 y cambie step2count por step5count. Tras establecer las variables globales "timer" y "step5count" también se realiza una verificación de si se cumple la condición step2count >= step3count >= step4count. Si es éste el caso, la variable global "b" se pone en 1. De lo contrario "b" es 0. La condición siempre debe ser verdadera (true) durante la correcta ejecución del programa, puesto que Step2, Step3 y Step4 se ejecutan uno tras otro ya que Step1 incrementa "a" en 1 a cada ciclo.

examples_sfc_tutorial2_sfc_step5_prg

Si ahora se inicia el programa principal, Step5 permanece activo durante 2 s si "b" es mayor de 0.

 

Crear la terminación del programa y saltar al Step1.

Ahora el programa debería finalizar cuando el valor de "step5count" haya alcanzado 6. Para ello, inserte un ramal alternativo debajo de Step5. Seleccione la condición de transición debajo de Step5 y haga clic en el símbolo para insertar un ramal alternativo a la izquierda. alternativebranch_left. Seleccione la nueva condición de transición del ramal (por el momento es false) y haga clic en el símbolo para crear un nuevo salto. jump_after. Cambie la condición de transición a step5count == 6 y seleccione TERMINATE como nuevo destino de salto.

El programa principal tiene ahora el aspecto que se mostró al principio.

Por cierto, el ramal alternativo que contiene el salto a TERMINATE debe hallarse a la izquierda del ramal con la condición b>0 && timer == 10, puesto que las condiciones iniciales de los ramales alternativos se evalúan de izquierda a derecha. En los primeros 6 ciclos, no se cumple la condición step5count == 6. Por ello se evalúa la condición del segundo ramal.

Ahora la ejecución del programa principal dura 24 s.