![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
procedimiento "largo", con envio y recepcion serial
hola, bueno les comento... tengo que desarrollar una aplicación que realiza un chequeo de un dispositivo por el puerto serial rs232, enviando y recibiando datos...
el tema es que el chequeo lleva varios pasos y la verdad que nunca se me había planteado hacer algo así... he trabajado con el paralelo, pero en ese caso los datos los leo cuando quiero... en el caso del serial los datos vienen cuando ellos quieren ! je... y los recibo a través del evenco on RXChar del componente del puerto... como hago el programa? supongamos que pongo un botón, luego envio un comando luego tendría que esperar a que llegue la respuesta y enviar otro comando y esperar la respuesta, y quizas esperar un par de segundos y volver a enviar otro comando y así sucesivamente... como hago las demoras? con sleep? eso no me tranca la recepción? y como hago para que luego que pulsé el botón el progrma no quede solamente en ese evento y no se lo pueda detener? (no se si me explico, pero sería un procedimiento de varios segundos y si quiero detenerlo de esa manera no podría)... la verdad que no tengo claro como puedo hacer... alguna sugerencia? muchisimas gracias desde ya como siempre, salu2 ! mArCe
__________________
Marcelo C. |
#2
|
||||
|
||||
Existe un componente, Mi preferido por cierto, para trabajar con el puerto serie. Y que te proporciona Eventos Para la lectura de datos y escritura.
TComPort. Es una excelente opción, lo he utilizado para leer o escribir desde un lector de tarjetas hasta una interfaz para básculas industriales. Suerte
__________________
Conoce mi blog http://www.edgartec.com |
#3
|
||||
|
||||
Para el tema de interrumpir:
Yo pongo una variable global booleana. Un botón que al ser presionado poner la variable a True. Todo el procedimiento de envío/recepcion deberá estar dentro de un while que chequee esta variable.
|
#4
|
|||
|
|||
Hola!
Por el nombre del evento supongo que usas el Componente TComPort de la biblioteca CPortLib de Djan Cernilla. El evento RxChar te permite capturar todo lo que entre por el puerto serie caracter a caracter por lo que tu tendrias que evaluar cuantos caracteres crees que vas a recibir o si esperas un caracter en especial interceptarlo y ejecutar un procedimiento o funcion.
Sin embargo si conoces las caracteristicas de lo que vas a capturar, por ejemplo su longitud o un caracter terminador en especial es mejor usar el componente ComDataPacket el cual te permite capturar datos que entran como paquetes de longitud fija o limitados por un caracter de inicio y final. por ejemplo: Cita:
En el ComDataPacket si usas una longitud de cadena fija y usas un caracter limitador final lo que ocurra primero determinara la ejecucion del mismo. Por ejemplo: Cita:
Espero te sirvan estos comentarios para tus desarrollos. |
#5
|
|||
|
|||
hola ! muchas gracias por las respuestas...
![]()
el tema es que si hago eso dentro de un procedimiento ("miprocedure"), comienzo enviando el comando, si verifico si hay respuesta (el estado de "cadena" como tu primer ejemplo FGarcia) inmediatamente seguramente todavía no haya llegado nada... o sea, tendría que poner demoras tipo sleep en el medio? y ahí como hago si quiero detener el procedimiento?, no se... y el evento de recepcion de caracteres del TComPort se dispara en forma simultanea a "miprocedure" o se detiene "miprocedure" captura la info del puerto y despues sigue? muchas gracias a todos !!! salu2
__________________
Marcelo C. |
#6
|
||||
|
||||
Si haces todo en un mismo procedimiento podrías hacerlo de esta manera:
|
#7
|
|||
|
|||
ah si ! esa es una buena idea
![]() para eso puedo agregar dentro del while aplication.processmessage y así segurmanente pueda refrescar, etc, el tema es que si pongo el aplication.processmessage dentro de una funcion (en otra unit por ejemplo) me dice el error como que no sabe que es aplication... como lo soluciono? salu2 y gracias ![]()
__________________
Marcelo C. |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Comentario "aplastante" contra los que atacan la "piratería" | Casimiro Notevi | La Taberna | 12 | 07-03-2010 14:03:02 |
Necesito llamar a métodos de clases "hija" desde su clase "padre" | Flecha | OOP | 17 | 20-04-2007 00:03:53 |
"atrapar" la ejecución de un procedimiento | jorgesl | Varios | 2 | 17-04-2006 19:39:10 |
porque no me reconoce los caracteres "*" ni "%" cuando filtro | mrmago | Conexión con bases de datos | 10 | 27-01-2006 04:21:16 |
"no current record for fetch operation" con procedimiento almacenado usado en Select | Al González | Firebird e Interbase | 1 | 17-03-2004 21:13:17 |
![]() |
|