03-02-2009 02:49 AM
Hola amigos: Os adjunto el programa que he hecho, con su .uir. El problema que tengo es que cuando escribo el numero de pasos a mover y la velocidad, las instrucciones que se leen luego en el TEXTBOX de LEER del RS232 solo me lee el ultimo movimiento. Los pasos a seguir son: primero escribir el numero de pasos, la velocidad, y dar a mover, Envía las dos instrucciones al device conectado por el RS, pero solo me lee el movimiento del ultimo motor si muevo mas de uno. ¿Como hago para que lo lea todo?
Si lo hago de uno en uno sí lo lee bien, pero no si hago más de uno.
Con el botón OK se va al panel del RS donde se ve si se lee o no.
Si no me he explicado contestadme tambien, Gracias
03-02-2009 05:12 AM
Hola motores, no entiendo cómo haces a enviar las instrucciones para más que un motor a la vez, a no ser que haya equivocado u pregunta.
Sin embargo puedo darte algunas sugerencias para mejorar tu programa, a ver si esto también te sirva para solucionar tu problema.
Primero, en todas las routinas MOVERn tienes incorporadas dos directivas if (event == EVENT_COMMIT) que no sirven ya que están dentro del caso EVENT_COMMIT de un switch.
Segundo: cada vez que pulsas un botón "Move" vas abriendo el puerto, pero nunca lo vas cerrando: después de la primera vez la OpenComConfig terminará en error porque el puerto ya está abierto (tú has escondido el error con el DisableBreakOnLibraryErrors pero indudablemente lo hay): esto va a significar también que aunque quieras modificar los parámetros del puerto, esto no se realizarà nunca.
Ten en cuenta, además, que cada vez cargas el panel de configuración del puerto con un LoadPanel y lees los parámetros de él: de esta manera vas cargando los parámetros establecidos por defecto en el panel (pon un breakpoint después del GetConfigParms ( ) para ver el contenido de la variable comport). Deberías modificar esta parte para que se abra el puerto solamente una vez y no en las routinas de MOVER. Si en un momento quieres modificar los parámetros del puerto debes anteriormente cerrarlo y despuén abrirlo nuevamente con los nuevos parámetros.
Por lo del ver todos los parámetros que vas enviando al motor, cada vez que llamas al ResetTextBox el texto precedentemente cargado en el control se borra y se substituye por lo que pasas a esta instrucción: esto puede ser el motivo porque no ves el texto. Sin embargo, puesto que tu vas leyendo la texbox para enviarla al motor no veo una manera fácil de solucionar a este asunto.
03-02-2009 05:27 AM
Gracias Roberto, te seguiremos informando de nuestro progreso.
PD: siento escribir el mismo dos veces pero a veces me da error al enviar el post y no lo envía, me lo envía luego dos veces.Me podrías explicar otra vez lo de cerrar el puerto despues de enviar los datos?no me ha quedado muy claro, Gracias
03-02-2009 05:49 AM
Roberto, hemos cambiado una cosa a ver si la hemos hecho bien. Hemos quitado todos lso config_handle=LoadPanel(0,"serial.uir",CONFIG); de los callback MOVERn, y hemos puesto ese LoadPanel en GetConfigParms; Lo que no te hemos entendido es lo de como cerrar el puerto al darle a MOVE, ¿Hay que poner CloseCom?¿Donde?Te adjunto el .c modificado. Muchas gracias majo
03-02-2009 06:28 AM
na cosa más ROberto. Es del segundo apartado de mi duda inicial. Lo de leer los datos despues de pulsar dos "Move" diferentes. Hemos hecho esto.
sprintf=(mensaje,"\nX ma %0.f",x);
sprintf=(mensaje2,"\nVI %0.f",y);
Y hemos quitado los ResetTextBox
Quedaria asi.
Te adjunto el .c y el .uir otra vez vale?
LE echas un vistazo?Gracias
03-02-2009 08:36 AM
He estado revisando tu projecto y he añadido algunas modificaciones y comentarios: míralo y si tienes dudas y comentarios postealos aquí.
Suerte
03-03-2009 04:24 AM
Hola Roberto, muchas gracias por tu ayuda, ha sido muy útil pero aún nos queda una cosilla. En el TEXTBOX_READ nos triplica lo enviado cuando le damos al botón STOP. Es decir, al pulsar MOVE envío un dato, luego le doy al botón de emergencia STOP, y al leer me lee 3 veces lo enviado. Por ejemplo:
Enviamos al dar a MOVE los siguientes instrucciones X ma 1 SL 2. Luego le damos a STOP (envía PS), le volvemos a dar para reanudar el programa (envia RS).
Al darle a LEER deberia leer: X ma 1 SL 2 PS RS pero en lugar de eso nos lee X ma 1 SL 2 X ma 1 SL 2 PS X ma 1 SL 2 PS RS.
TE adjunto el .c modificado a ver si nos puedes echar otro cable.
Gracias otra vez
03-03-2009 07:49 AM
No entiendo lo que pasa. Integré tu nueva fuente en el proyecto, conecté un loopback (un conector serie con los pines 2 y 3 entrecortados) y hice lo siguiente:
1. Configurar al puerto
2. Mover al motor x (pasos 10; velocidad 20)
3. Pulsé Stop y luego Start
4. Indiqué que no hubiera terminación al leer la serial (simplemente para leer todo en una vez sola: con terminador pasa lo mismo pero debo leer tre veces)
5. Le dí a Leer y obtuve: X ma 10 SL 20 PS RS y nada más
¿Puede que haya algo en el dispositivo conectado que refleja los mensajes más que una vez?
03-03-2009 04:58 PM
Hola Roberto:
La verdad es que no entiendo muy bien tu pregunta. Lo que has hecho, en principio es la idea que tiene que realizar. Nosotros queremos mandar esas instrucciones (X ma SL PS RS...) a un motor. ME explico. Nosotros ponemos esas instrucciones en los recuadros de pasos movidos y velocidad, le damos a MOVE, y el motor se tendría que mover. ¿Lo que se lee es lo que llega al motor?es decir,¿Se moverá el motor al enviar esas instrucciones?
03-03-2009 05:30 PM
Es posible que sea yo el que no ha entendido, creía que ya estabas seguro de que los comandos son correctos...
¿Qué tienes conectado a tu PC? Y ¿estás maniobrando a los motores o no? ¿Como es que se te reflejan los comando en el canal de ingresa del puerto serial?