URGENTE: Problema con puerto serie

Agradecería un poco de ayuda pues no encuentro la razón por la
cual cuando ejecuto un programa que he hecho para leer el puerto
serie funciona cuando lo ejecuto paso a paso y deja de funcionar
cuando lo ejecuto directamente.
El caso es que realizo un sondeo del puerto serie cuando recibo
el evento comEvReceive hasta que encuentro un carácter final.
Me explico, resulta que en el mejor de los casos cuando leo el buffer
el código de barras lo tengo que leer en varias veces, aunque
le haya dicho que el buffer es de 1024 bytes y el código de barras es
de solo 14 dígitos. Lo peor de todo es que a veces se me pierden
caracteres.
Sabes, no entiendo por que cuando ejecuto paso a paso, leo todo el
código de un tirón, mientras que si lo hago directamente pierdo caracteres.

1 respuesta

Respuesta
1
Te voy a decir la configuración de un sistema que hice para la obtención de las pesadas en una bascula con el evento comEvReceive
configurada para que enviara información solamente cuando la tuviera que enviar, por que algunos equipos también tienen la capacidad de enviar la información siempre y en esos casos lo mejor es usar un timer aunque también te va a llevar tiempo para programar bien la captura de la información, tenemos de esos dos tipos de basculas y dos programas con las dos maneras diferentes. Cada una tiene sus pros y contras.
El Control Comm1 tenia los sig Valores:
Algunos no son tan relevantes pero los quise poner.
Commport = 1
DTREnable=False
EOFEnable=False
HandShaking=0
InBufferSize=1024
InputLen=0
InputMode=0
NullDiscard=False
OutBuffersize=0
ParityReplace=<
RThreshold=1
RTSEnable=Enable
Settings = 9600,n,8,1
SThreshold=0
La parte del codigo que tengo en el Evento
Private Sub Comm1_OnComm()
es
Continuar = False
Select Case Comm1.CommEvent
' Controlar cada evento o error escribiendo
' código en cada instrucción Case
' Errores
Case comBreak ' Se ha recibido una interrupción.
Case comEventFrame ' Error de trama
Case comEventOverrun ' Datos perdidos.
Case comEventRxOver ' Desbordamiento del búfer
' de recepción.
Case comEventRxParity ' Error de paridad.
Case comEventTxFull ' Búfer de transmisión lleno.
Case comEventDCB ' Error inesperado al recuperar DCB.
' Eventos
Case comEvCD ' Cambio en la línea CD.
Case comEvCTS ' Cambio en la línea CTS.
Case comEvDSR ' Cambio en la línea DSR.
Case comEvRing ' Cambio en el indicador de
' llamadas.
Case comEvReceive ' Recibido nº SThreshold de
' caracteres.
Do
a$ = a$ & Comm1.Input
Loop Until InStr(a$, vbCrLf)
Continuar = True
Case comEvSend ' Hay un SThreshold
' caracteres en el búfer
' de transmisión.
Case comEvEOF ' Se ha encontrado un carácter
' EOF en la entrada.
End Select
If Continuar = False Then Exit Sub
If Len(a$) = 0 Or Mid(a$, 1, 1) = Chr(0) Then Exit Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas