domingo, 14 de noviembre de 2010

Tenía que hacer esta prueba


Ya he comentado que la placa de comunicaciones K8055 de la empresa Velleman ha sido para mi, todo un hallazgo, que al final tendré que agradecerle a Micropik.

Una de las ventajas es que a cada placa se le puede asignar una dirección entre 0 y 3 de modo que el ordenador puede manejar cuatro placas...¿simultáneamente?. Esos interrogantes definen cuál era mi duda. No sabía si el programa podía trabajar al mismo tiempo con cuatro placas o cómo se manejaba esta situación. Así que, para resolverlo, me decidí a pedir una segunda placa. Realmente como ya tengo prácticamente decidido utilizar las salidas PWM de estas placas para controlar la corriente de tracción, necesitaba al menos dos placas para tener cuatro salidas y poder manejar cuatro trenes simultáneamente, así que tarde o temprano iba a necesitar al menos una segunda placa.

Una vez la segunda placa montada, y probada, ha llegado el momento de hacer la prueba conjunta. Examinando el programa fuente que proporciona Velleman, ya me había dado cuenta que las instrucciones de llamada a las funciones de comunicación, no llevan el parámetro que indicaría la placa, como sería lo perfecto.

Así que la conexión no es simultánea sino alternativa. Es decir si doy la instrucción desde el programa de abrir la comunicación con una placa, ésta placa será la activa, y todas las funciones de comunicación se dirigen a esa placa. Si en un momento dado doy la orden de abrir la segunda placa, todas las instrucciones a partir de ese momento se dirigen a la segunda placa, quedando la primera inactiva,  y así sucesivamente.

De entrada esto es un inconveniente: Si necesito dirigirme a cualquiera de las dos placas en función de las circunstancias del programa o bien llevo una cuidadosa cuenta de cuál es la placa activa en cada momento para que si no es la que necesito activarla, o bien, de una forma más segura pero menos elegante, cada vez que necesite dirigirme a una placa doy la orden de activarla, sin preocuparme de si ya estaba o no estaba activada. No cabe duda de que es una complicación, pero, realmente, programando esta actuación en un procedimiento de comunicaciones, no supone mayor problema.

Sin embargo me he dado cuenta de otro problema: El que la placa esté activa o no, no solo afecta a las salidas sino también a las entradas. Estas entradas, como ya he comentado recibirán la señal producida por los detectores de trenes, ya sean estos ampollas reed, o sensores hall. El problema está en que si se recibe una señal de entrada cuando la placa está inactiva, esta señal se perderá.

Afortunadamente se me ha ocurrido una solución, y es la que podemos ver en la imagen. En la pantalla se ve que el programa de comunicaciones, en este caso el programa que proporciona Velleman está abierto dos veces. Podemos ver en la imagen de la pantalla, las dos ventanas correspondientes con las dos instancias del programa. Cada una de estas dos instancias, abre inicialmente una de las dos placas, y ya permanece siempre en comunicación con esa placa. Ahora si que tengo las dos placas activas simultáneamente, y no sólo puedo enviar en cualquier momento señales de salida a cualquiera de las dos placas, sino que, y esto es lo importante, ambas placas están permanentemente activas y por lo tanto no se pierde ninguna señal de entrada.

Naturalmente era importantísimo probar si esto podía funcionar así, antes de tomar cualquier otra determinación, incluyendo la de mayor importancia de pasarme definitivamente al sistema de Velleman. La prueba ha sido completamente satisfactoria.

Quizá alguno de mis lectores, sepa lo suficiente de programación como para echar de menos el final de la explicación. La cuestión es que si yo tengo UN programa como ControlZ funcionando, solo puedo comunicarme con una placa, y si abro otra instancia de ControlZ para comunicarme con la otra placa, voy a tener dos ventanas distintas con el esquema de vías, etc.

La idea es que voy a tener un solo programa Control Z funcionando, pero le voy a quitar la actual rutina de comunicaciones, Además arrancaré automáticamente dos programas de comunicaciones adicionales ( o tres o cuatro) cada uno de los cuales pilotará una de las placas. Entonces no hay más que organizar una zona de intercomunicación a la que tengan acceso todos los programas y se intercambien los datos. Es algo parecido a aquellas "áreas COMMON" que utilizábamos hace años cuando programábamos en FORTRAN.

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