jueves, 12 de julio de 2012

Software de tracción


Los seguidores de este blog, se habrán ya percatado de que mi forma de avanzar en el proyecto es la de ir alternando avances en el hardware con avances en el software, de forma que se puedan realizar pruebas conjuntas de cada una de las funciones que voy incorporando.

Como ya comenté en el artículo anterior, la comprobación del control de tracción resulta muy penosa (y confusa) si se quiere realizar generando manualmente los comandos de control, así que lo mejor es tener ya disponible el software que produzca esos comandos. Así que aún sin dar por finalizadas las pruebas del hardware de control he decidido avanzar de forma importante en la programación del control, ahora que ya tengo muy claro como debe funcionar todo el sistema.

Realmente es la tercera vez que me enfrento a este tema, y curiosamente el principio del desarrollo informático fue éste (Véase Cambio de oficio) En aquél momento, la corriente PWM era generada por el circuito COLA01 . Luego, trabajé un poco más en esto cuando abandoné la placa de comunicaciones de Micropic y me pase a las placas Velleman,  (Véase COLA.2) en la cual ya comprobé que podía hacer funcionar las locomotoras generando la corriente de tracción con las salidas PWM de las placas Velleman. Esta tercera, y espero que última ocasión, ya cuenta no solamente con las placas Velleman para generar la corriente PWM sino con las placas CABCOM para conmutar la alimentación de cantones.

En la imagen de portada vemos desplegadas cuatro ventanas de control de locomotoras. Cada ventana controla una locomotora y como ya he comentado podemos llegar a tener seis locomotoras circulando simultáneamente y por lo tanto podemos llegar a tener seis ventanas abiertas. (realmente el programa soporta hasta ocho)

Y aquí empiezan las importantes diferencias respecto de mis primeros desarrollos. Allí hice un bonito ejercicio de programación para conseguir que los trenes se moviesen de una forma absolutamente real, esto es, imitando la inercia, la fuerza de frenado, la componente del peso del tren, el peso adherente de la locomotora, y hasta la resistencia aerodinámica. Esto implicaba que el usuario debía manejar dos mandos: un regulador y un freno, y por eso puse dos controles deslizantes en la ventana de control. Ya comenté (Véase Y Newton tenía razón) que el sistema funcionaba muy bien pero era tan real, que había que esperar varios minutos a que un tren acelerase, o empezar a frenar con una gran anticipación. Me he convencido de que hay que hacer algunas concesiones para que el manejo sea cómodo y práctico.

Por otra parte, he tomado otra decisión importante, y es que voy a construir una consola de mando. Es decir: como el manejar los trenes a base de mover controles con el ratón en la pantalla resulta incómodo (sobre todo en una pantalla pequeña), y se acaba por mirar más a la pantalla que a la maqueta, la solución a esto es hacer una consola con mandos mecánicos (botones giratorios y pulsadores) que será la forma habitual de manejar los trenes. Las ventanas de control de locomotora, van a hacer un papel entonces más bien de indicadores que de controles, aunque mantengo la posibilidad de manejar los trenes desde las ventanas en la pantalla del ordenador. Pienso construir una consola con mando sólo para dos locomotoras, pensando que una persona es muy difícil que pueda prestar atención a más de dos trenes simultáneamente.
Realmente todo esto no es nada original, puesto que la mayoría de los programas de control de trenes funcionan así. Como todos ellos mantienen la presencia de una central digital, se mantiene la utilización de los controles de la central digital para manejar los trenes de una forma cómoda. Aunque también se puedan manejar los trenes con el ratón y la pantalla del ordenador, la mayoría de los usuarios prefieren utilizar los mandos mecánicos de la central, y por lo que yo sé estas centrales, tienen sólo uno o dos mandos.

Como en mi caso no hay ninguna central, si quiero tener unos mandos mecánicos tengo que hacer un elemento auxiliar para situar esos mandos, y le llamo a esto "consola". Pienso en ello como algo muy parecido al mando doble PWM que hice en su día, aunque "las tripas" son completamente distintas. ya que aquí lo que habrá dentro serán detectores similares a los detectores de trenes, que se activarán al apretar pulsadores o al mover los mandos giratorios (Así que estos mandos giratorios deben ser encoders, no potenciómetros).Ya trataré este tema más extensamente.
La figura anterior muestra una vista más cercana de una de las ventanas de control de una locomotora. Yo llamo "Cabinas" a estas ventanas, y ya aparecían aquí con este nombre antes de descubrir que el sistema que pretendo realizar se llama CabControl (Control de Cabinas). Encima del velocímetro vemos la imagen de la locomotora que está manejada por esta cabina. A la derecha vemos también el código de la locomotora. Mientras no se cambie manualmente, esta cabina estará enlazada a esa locomotora mientras ésta se mueve por toda la maqueta. Haciendo click en la imagen se despliega la pantalla de selección de locomotoras, (que vemos en la imagen de cabecera a la derecha) para escoger otra locomotora.

Encima está el selector de rutas. Como vemos hay un botón de despliegue para buscar la ruta deseada. Este dato solo se cambia manualmente.

Encima está la indicación del cantón en el que está la locomotora. Este dato varía automáticamente cuando la locomotora pasa de uno a otro cantón. También se puede ajustar manualmente para situar una locomotora manualmente en un cantón.

A la derecha de este dato aparece el código del sector sobre el que está la locomotora. Este dato se actualiza automáticamente según circula la locomotora. Análogamente el dato situado debajo indica la última baliza sobre la que ha pasado la locomotora, simultáneamente a la aparición de la etiqueta con el código de la locomotora sobre el esquema de vías. Como se ve la situación de cada locomotora está perfectamente controlada por el sistema.

El velocímetro mostrado en el centro indica siempre la velocidad actual de la locomotora. La escala se ajusta automáticamente a la velocidad máxima de la locomotora. La BR 24 que muestra el ejemplo tiene una velocidad máxima de 90 Km/hora.

Sobre la periferia del velocímetro vemos un punto verde señalado como Velocidad Objetivo. Este punto se puede mover manualmente sin mas que hacer click sobre cualquier punto de la periferia del velocímetro.  Es la forma de variar la velocidad de una locomotora manualmente. Este punto se mueve también por el sistema según la posición de las señales y según las ordenes de la "ruta".

Cuando el punto se mueve, la velocidad actual de la locomotora empieza a variar hasta alcanzar la nueva posición del punto. Por supuesto si el punto se ha movido hasta marcar la Velocidad Objetivo igual a cero, la locomotora llega a pararse.

He hecho que cuando la locomotora acelera o decelera, lo haga siempre con aceleración constante, o sea repondiendo a las ecuaciones del movimiento uniformemente acelerado. Con ello la velocidad aumenta o disminuye desde el valor inicial al valor final (que puede ser cero) de forma uniforme. Esta aceleración tiene un valor que el programa calcula en cada momento, que hace que el paso de una a otra velocidad se haga en un espacio prefijado (no en un tiempo prefijado). O sea que en el caso de la frenada, sea cual sea la velocidad que lleva el tren cuando empieza a frenar, llegará a pararse siempre en el mismo punto. Naturalmente esto es muy conveniente tanto para paradas en las estaciones como para paradas ante los semáforos.

O sea, en términos de física de bachillerato, el problema a resolver es este
  •  Dado un móvil que se mueve con una velocidad uniforme V0, al llegar a un punto A, pasa a moverse con un movimiento uniformemente acelerado hasta alcanzar el punto B con velocidad Vf . Si queremos que el espacio recorrido A-B sea una constante dada D, ¿Cuál será la aceleración con que debe moverse el móvil en el tramo A-B
Bueno, al menos en mis tiempos esto era un problema de  Física a nivel de bachillerato. No sé  ahora, pero ése problema es el que resuelve el programa. Si las balizas se colocan a la distancia "D" por delante de los semáforos, las locomotoras se pararán exactamente delante de los semáforos con una parada suave y progresiva.

Por cierto la solución al problema es:  a = (Vf ^ 2 - V0 ^ 2) / (2 * D)

En el caso del aumento de velocidad, el programa puede aplicar la misma fórmula, o introducir un factor que simula una mayor carga del tren En la ventana de la cabina, a la izquierda, vemos un deslizante que puede ajustarse para hacer que la aceleración sea menor, simulando el efecto de un tren muy cargado.

El que un tren tarde más en acelerar que en frenar es normal, sobre todo si es un mercancías con una gran carga. Hay que tener en cuenta que para ganar velocidad sólo se cuenta con la locomotora, pero para frenar cada vagón tiene sus propios frenos

Como vemos, respecto del movimiento del tren, la única actuación posible por parte del usuario es mover el punto de "velocidad objetivo" Lo que pretendo por lo tanto es que el mando giratorio de la consola tenga el efecto de mover ese punto, de manera que el usuario lo lleve a una determinada posición, y el tren empieza a acelerar progresivamente hasta alcanzar la velocidad así seleccionada. Y lo mismo para disminuir la velocidad. Sin embargo, si el tren se aproxima a una señal en rojo, y la frenada ordenada por el usuario es menor de lo necesario, actuará el "freno automático" que detendrá el tren incluso aunque el usuario no haga ningún intento de frenar. Cuando ocurra ésto se encenderá el piloto marcado como "freno auto" y la intensidad de la frenada se muestra en la columna marcada como "frenado" Nótese que esto se parece mucho a los sistemas reales de conducción de trenes, concretamente al que en España se denomina ASFA (Anuncio de Señales y Frenado Automático). También a la izquierda hay unos pilotos que se encienden avisando de la posición de la próxima señal, lo mismo que en el ASFA

Debajo del velocímetro hay tres botones marcados como Adelante Atrás y Paro, que claramente manejan el sentido de movimiento de la locomotora. El botón de paro, cuando la locomotora se está moviendo actúa parando la locomotora inmediatamente, o sea como un botón de emergencia. Si la locomotora está parada sobre un sector, lo que hace es abrir el relé de alimentación de ese sector, es decir lo equivalente a dejar la locomotora estacionada en ese sector.

Estos tres botones estarán duplicados en la consola por medio de pulsadores.

El sentido Adelante y Atrás se refiere claro está a la propia locomotora, esto es, en una locomotora de vapor, "Adelante" es moverse con la caldera por delante, y en una diesel o eléctrica moverse con la cabina I por delante. Pero como el sentido de movimiento lo da la polarización de la vía, es posible que la locomotora esté situada al revés de la polarización. Si esto ocurre, el botón de inversión hará que el movimiento pase a ser el deseado. Adviértase que cuando una locomotora pasa el corte de un bucle de retorno, el botón de inversión se cambiará automáticamente.

A la derecha hay un botón de Maniobra. El objetivo es que al activarlo, la locomotora se mueva manualmente a velocidad reducida y sin inercia, esto es, respondiendo linealmente al mando de la consola. Este botón sólo funciona cuando esta cabina está conectada a una consola.

Y claro, los dos botones centrales "Consola A" y "Consola B" lo que hacen es conectar la cabina a uno de los dos mandos de la consola manual.

Por último, mencionar que existe un cuentakilómetros que va acumulando el espacio recorrido por cada locomotora.

Ahora hay que probar si todos esos controles responden como debieran con el programa conectado a las placas Velleman y CABCON

No hay comentarios:

Publicar un comentario en la entrada

Gracias por expresar tus opiniones.

Los comentarios aparecerán en el blog normalmente en unos pocos segundos