Estudio RT de Luces de Cruce » History » Version 4

Txinto Vaz, 02/25/2015 12:47 PM

1 1 Txinto Vaz
h1. Estudio RT de Luces de Cruce
2 1 Txinto Vaz
3 1 Txinto Vaz
{{>toc}}
4 1 Txinto Vaz
5 1 Txinto Vaz
En el siguiente estudio vamos a diseñar un esquema en XCos para mostrar la cadena de acciones y su temporización de un caso típico en que un mensaje CAN está implicado entre que se detecta el evento y se produce la respuesta del sistema.  Para éste estudio supondremos que un usuario usa una palanca para encender las luces de un vehículo, que dicha palanca está conectada a la ECU1, que la ECU1 traslada la petición a la ECU2 mediante una señal CAN, y que la ECU2 es la que maneja las luces.
6 1 Txinto Vaz
7 1 Txinto Vaz
Como este estudio sirve también como documentación, iremos haciendo el esquema incrementalmente, con aproximaciones criticables y correcciones.
8 1 Txinto Vaz
9 1 Txinto Vaz
h2. Primera aproximación
10 1 Txinto Vaz
11 1 Txinto Vaz
Véase el siguiente diagrama que se encuentra en el fichero attachment:LucesDeCruce01.zcos .
12 1 Txinto Vaz
13 1 Txinto Vaz
{{thumbnail(LucesDeCruce01.png, size=700, title=Luces de cruce aproximación 01)}}
14 1 Txinto Vaz
15 1 Txinto Vaz
16 1 Txinto Vaz
El diagrama muestra el camino desde la palanca del usuario hasta que se activan las luces.  Se centra en el software, de forma que los tiempos consumidos por el hardware son cero.
17 1 Txinto Vaz
18 1 Txinto Vaz
* En la primera parte "Palanca" vemos un interruptor que modeliza la palanca.
19 1 Txinto Vaz
* En "PUERTO DI" (digital input) modelizamos el paso de señal eléctrica a variable disponible para la lógica software.
20 1 Txinto Vaz
** Hay un bloque S/H que captura la entrada y la "latcha" cada X tiempo.  Éste tiempo viene marcado por un reloj, éste reloj crea un evento por cada ciclo de lectura de las entradas de la ECU1 (lo llamamos ECU1_poll_eventos).  De esa forma si nuestro ciclo de programa es 10 ms tardaremos como mucho 10 ms en ver cambiar el puerto.
21 1 Txinto Vaz
** Hay un conversor que nos permite adaptar la señal XCos de valor real (double) a valor entero (byte, booleano), ya que el bloque de lógica no puede operar con valores reales.
22 1 Txinto Vaz
* En "LOGICA ECU1" hemos modelizado una lógica muy sencilla: una AND con un valor positivo (es decir, realmente la lógica deja pasar el valor que nos viene del puerto DI).  Evidentemente la lógica de la ECU1 no hace sólo eso, pero como bloque a "ocupar un espacio y redefinir más adelante" ya está bien así.  La lógica también tiene su tiempo de ejecución, ECU1_logica.
23 1 Txinto Vaz
* En "ENVIO CAN" también modelizamos un tiempo cíclico en el que el mensaje CAN se envía, de manera análoga a cómo lo hicimos con la lectura de "PUERTO DI".  En éste caso el tiempo es el de periodicidad del mensaje CAN: CAN_ECU12ECU2.
24 1 Txinto Vaz
* A la derecha de "ENVIO_CAN" hemos añadido unos monitores para ver la salida en ese instante.
25 1 Txinto Vaz
* "RECEPCION_CAN" modeliza la lectura de los mensajes CAN, con tiempo CAN_ECU2_INPUT, que es el tiempo que tarda la ECU2 en obtener los mensajes CAN que hayan llegado por el bus.
26 1 Txinto Vaz
* "LOGICA_ECU2" modeliza la labor de la ECU2.  En éste caso y para hacer un poco más fácil saber que todo está bien conectado hemos hecho una lógica que es una NOT de la entrada.  Se ejecuta cada ECU2_logica tiempo.
27 1 Txinto Vaz
* "PUERTO_DO" (digital output) modeliza la escritura del puerto de salida hacia las luces, que se ejecuta cada ECU2_poll_salidas tiempo.
28 1 Txinto Vaz
* Por último tenemos una visualización en ese punto.
29 1 Txinto Vaz
30 1 Txinto Vaz
Tal como está diseñado este proyecto XCos, la luz se apagará cuando la palanca pida que esté encendido, y viceversa.  Esta no es la funcionalidad demandada, pero sirve como ilustración.
31 1 Txinto Vaz
32 1 Txinto Vaz
h3. Críticas
33 1 Txinto Vaz
34 1 Txinto Vaz
* Poco encapsulado: Más adelante utilizaremos subsistemas para encapsular cada etapa.
35 1 Txinto Vaz
* No hay forma de comparara la entrada y la salida: añadiremos visualizadores gráficos que sobre un mismo lienzo pinte varias de las señales presentes en el sistema.
36 1 Txinto Vaz
* Las lógicas son muy pobres: más adelante ya se cambiarán.
37 1 Txinto Vaz
* No está presente el filtrado que hay que hacer a la entrada de la palanca en la ECU1 para no dar una orden de encendido de luces por una activación fortuita.
38 1 Txinto Vaz
39 1 Txinto Vaz
h2. Segunda aproximación.
40 1 Txinto Vaz
41 1 Txinto Vaz
En ésta aproximación hemos dejado el sistema sin encapsular, pues aún pensamos que didácticamente es necesario entender la cadena con los elementos básicos.  Tampoco hemos cambiado aún la lógica ni hemos aplicado filtrados.  Hemos aplicado cambios en respuesta al resto de críticas.
42 1 Txinto Vaz
43 1 Txinto Vaz
Fichero: attachment:LucesDeCruce02.zcos 
44 1 Txinto Vaz
45 1 Txinto Vaz
{{thumbnail(LucesDeCruce02.png, size=700, title=Luces de cruce aproximación 02)}}
46 1 Txinto Vaz
47 1 Txinto Vaz
Como puede observarse, hemos añadido unos bloques llamados Delay y Delay Binario.
48 1 Txinto Vaz
* Delay es un bloque que nos proporciona XCos que puede retrasar una señal durante un tiempo determinado.  
49 1 Txinto Vaz
* Delay binario es una adaptación que hemos hecho del bloque para que pueda trabajar con señales binarias, ya que Delay solo trabaja con números reales.
50 1 Txinto Vaz
Hemos añadido éstos bloques para que cada etapa consuma algo de tiempo.  De lo contrario serían instantáneas y sucede, que al coincidir en el tiempo el momento en que una etapa produce una señal y otra etapa la consume, no se obtiene el esperado retardo acumulado entre etapas.
51 1 Txinto Vaz
52 1 Txinto Vaz
También hemos añadido una gráfica que nos permite ver cuatro señales:
53 1 Txinto Vaz
* La petición justo antes de entrar en la lógica de la ECU1 (tras el puerto digital).
54 1 Txinto Vaz
* La petición cuando la ECU1 la envía por CAN.
55 1 Txinto Vaz
* La petición a la entradad de la lógica de la ECU2 (tras haber sido adquirida por el CAN).
56 1 Txinto Vaz
* La salida digital de encendido de luces.
57 1 Txinto Vaz
58 1 Txinto Vaz
La gráfica resultante puede verse en 
59 1 Txinto Vaz
60 1 Txinto Vaz
{{thumbnail(LucesDeCruce02Graficas.png, size=700, title=Luces de cruce aproximación 02)}}
61 1 Txinto Vaz
62 1 Txinto Vaz
63 1 Txinto Vaz
h3. Críticas
64 1 Txinto Vaz
65 1 Txinto Vaz
* Poco encapsulado: Más adelante utilizaremos subsistemas para encapsular cada etapa.
66 1 Txinto Vaz
* Las lógicas son muy pobres: más adelante ya se cambiarán.
67 1 Txinto Vaz
* No está presente el filtrado que hay que hacer a la entrada de la palanca en la ECU1 para no dar una orden de encendido de luces por una activación fortuita.
68 1 Txinto Vaz
69 1 Txinto Vaz
h2. Tercera aproximación
70 1 Txinto Vaz
71 1 Txinto Vaz
En esta iteración hemos resuelto el tema del encapsulado.
72 1 Txinto Vaz
73 1 Txinto Vaz
Fichero: attachment:LucesDeCruce03.zcos 
74 1 Txinto Vaz
75 1 Txinto Vaz
{{thumbnail(LucesDeCruce03.png, size=700, title=Luces de cruce aproximación 03)}}
76 1 Txinto Vaz
77 1 Txinto Vaz
Hemos procedido de la siguiente forma:
78 1 Txinto Vaz
79 1 Txinto Vaz
* Para hacer un subsistema hemos seleccionado todos los elementos que tenían que conformarlo y hemos ejecutado la opción "Región al superbloque".  En el interior hemos arreglado los bloques para que los caminos sean legibles siempre de izquierda a derecha.
80 1 Txinto Vaz
* Hemos segregado la visualización de la funcionalidad.  No hemos querido crear salidas específicas de visualización.  Cuando ha hecho falta convertir antes de visualizar se ha puesto el conversor junto a los visualizadores, dejando el bloque resultante limpio.
81 1 Txinto Vaz
82 1 Txinto Vaz
En concreto, he aquí el interior del subsistema "Lógica ECU1".
83 1 Txinto Vaz
84 1 Txinto Vaz
{{thumbnail(LucesDeCruce03LogicaECU1.png, size=700, title=Luces de cruce aproximación 03)}}
85 1 Txinto Vaz
86 1 Txinto Vaz
La gráfica resultante puede verse en la siguiente ilustración.
87 1 Txinto Vaz
88 1 Txinto Vaz
{{thumbnail(LucesDeCruce03Graficas.png, size=700, title=Luces de cruce aproximación 03)}}
89 1 Txinto Vaz
90 4 Txinto Vaz
Como vemos no se comporta exactamente igual ya que, aparte de los cambios de encapsulado, la tercera gráfica (que antes se muestreaba de la línea de justo después de la lectura CAN de la ECU2, antes de ejecución de la lógica) ahora se está muestreando de la línea de después de la lógica ECU2.  Por tanto no estamos mostrando el mismo valor.
91 1 Txinto Vaz
92 1 Txinto Vaz
h3. Críticas
93 1 Txinto Vaz
94 1 Txinto Vaz
* Las lógicas son muy pobres: más adelante ya se cambiarán.
95 1 Txinto Vaz
* No está presente el filtrado que hay que hacer a la entrada de la palanca en la ECU1 para no dar una orden de encendido de luces por una activación fortuita.
96 1 Txinto Vaz
97 1 Txinto Vaz
h2. Cuarta aproximación.
98 1 Txinto Vaz
99 1 Txinto Vaz
En ésta aproximación simplemente hemos encapsulado aún más.  Nótese el cambio de nomenclatura, mientras antes se hablaba de ECU1 y ECU2 ahora se habla de ECU1_luces_cortas y ECU2_luces_cortas.
100 1 Txinto Vaz
101 1 Txinto Vaz
Ésto se debe a que sólo estamos tratando la funcionalidad de luces cortas, y ya preveemos que muchas otras funcionalidades tendrán un tratamiento igual.  Así ECU1 sería la suma de todas las funcionalidades que la componen, entre ellas ECU1_luces_cortas.
102 1 Txinto Vaz
103 1 Txinto Vaz
Fichero: attachment:LucesDeCruce04.zcos 
104 1 Txinto Vaz
105 1 Txinto Vaz
{{thumbnail(LucesDeCruce04.png, size=700, title=Luces de cruce aproximación 04)}}
106 1 Txinto Vaz
107 1 Txinto Vaz
h3. Críticas
108 1 Txinto Vaz
109 1 Txinto Vaz
* Las lógicas son muy pobres: más adelante ya se cambiarán.
110 1 Txinto Vaz
* No está presente el filtrado que hay que hacer a la entrada de la palanca en la ECU1 para no dar una orden de encendido de luces por una activación fortuita.
111 1 Txinto Vaz
112 1 Txinto Vaz
113 3 Txinto Vaz
Seguimos en [[Estudio RT de Luces de Cruce II]].