Problema con MsComm32

04/02/2005 - 14:45 por Guillermo Martin | Informe spam
Estimados:

Estoy desarrollando un aplicación que leerá unos datos de un puerto serial.
Concretamente es una balanza, y esta me manda los pesos mediante el puerto
serie en un string como este:

"24/01/2005 16:53 #:000002 B: 145 Kg T: 0 Kg N: 145 Kg " && 68
caracteres

Ahora, en el formulario tengo el control Mscomm32, bien configurado en
cuanto a la velocidad, la paridad etc.

En el init del formulario hago lo siguiente:

ThisForm.OleControl1.CommPort = 2
ThisForm.OleControl1.Settings = "9600,n,8,1"
ThisForm.OleControl1.PortOpen = .T.

En el mscom32, en el onComm tengo:

if ThisForm.Olecontrol1.commevent = 2
ThisForm.Balanza
endif

Y en balabza tengo la lectura del comm:

cvalue = ALLTRIM(THISFORM.olecontrol1.INPUT)

Ahora bien, el problema es que cuando recibo datos no se dispara el onComm.
Si pongo un timer que lea cada 1 segundo el puerto, a veces veo el string,
la mayoría de las veces, pero a veces lo leo y el string me sale por la
mitad, entiendo que debe ser porque se está cargando, ya que desde el
hyperterminal veo el strin siempre completo.

Lo que quiero saber es:

1.-) El OnComm se dispara ni bien comienzan a llegar los datos por el puerto
no? hay alguna condicion o alguna propiedad que esté haciendo que no se
dispare?
2.-) La forma que estoy trabajando el control está bien?
3.-) Suponiendo que onComm no me dispare la llamada al procedimiento
balanza, y que tenga que usar el timer para preguntar si hay datos en el
puerto, como se que leí todo lo que venía? (pense en un conteo de los
caracteres en el buffer, pero no se si es correcto)

Alguien tiene algún ejemplito d un form funcionando para ver como lo maneja?

Muchachos (y muchachas) muchas gracias de antemano!!!
Saludos,
Guille
PD: Uso Fox 7 y windows 98

Preguntas similare

Leer las respuestas

#1 Hugo M. Ranea
22/02/2005 - 20:07 | Informe spam
Guillermo,

Probablemente tengas seteado RThreshold en 0, lo cual hace que no se dispare el evento OnComm

Guillermo Martin wrote:

Estimados:

Estoy desarrollando un aplicación que leerá unos datos de un puerto serial.
Concretamente es una balanza, y esta me manda los pesos mediante el puerto
serie en un string como este:

"24/01/2005 16:53 #:000002 B: 145 Kg T: 0 Kg N: 145 Kg " && 68
caracteres

Ahora, en el formulario tengo el control Mscomm32, bien configurado en
cuanto a la velocidad, la paridad etc.

En el init del formulario hago lo siguiente:

ThisForm.OleControl1.CommPort = 2
ThisForm.OleControl1.Settings = "9600,n,8,1"
ThisForm.OleControl1.PortOpen = .T.

En el mscom32, en el onComm tengo:

if ThisForm.Olecontrol1.commevent = 2
ThisForm.Balanza
endif

Y en balabza tengo la lectura del comm:

cvalue = ALLTRIM(THISFORM.olecontrol1.INPUT)

Ahora bien, el problema es que cuando recibo datos no se dispara el onComm.
Si pongo un timer que lea cada 1 segundo el puerto, a veces veo el string,
la mayoría de las veces, pero a veces lo leo y el string me sale por la
mitad, entiendo que debe ser porque se está cargando, ya que desde el
hyperterminal veo el strin siempre completo.

Lo que quiero saber es:

1.-) El OnComm se dispara ni bien comienzan a llegar los datos por el puerto
no? hay alguna condicion o alguna propiedad que esté haciendo que no se
dispare?
2.-) La forma que estoy trabajando el control está bien?
3.-) Suponiendo que onComm no me dispare la llamada al procedimiento
balanza, y que tenga que usar el timer para preguntar si hay datos en el
puerto, como se que leí todo lo que venía? (pense en un conteo de los
caracteres en el buffer, pero no se si es correcto)

Alguien tiene algún ejemplito d un form funcionando para ver como lo maneja?

Muchachos (y muchachas) muchas gracias de antemano!!!
Saludos,
Guille
PD: Uso Fox 7 y windows 98


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida