Visual Basic - A todos los que domineis MSComm

Life is soft - evento anual de software empresarial
 
Vista:

A todos los que domineis MSComm

Publicado por XRM. (27 intervenciones) el 23/01/2002 08:50:08
Hola amigos , necesito ayuda, ya que me ha surgido un problema com Mscomm. La aplicación se conecta a una máquina la cual le envia a través del puerto serie un archivo el cual está compuesto por registros de 20 bytes.
Los archivos pueden llegar a ocupar más de 1Mb por lo tato me desbordan el búfer de entrada del control. Mi problema es que se recibir datos pero me gustaría saber como hacer para ir cogiendo grupos de 20 bytes de un mismo archivo, ir guardandolos en una variable para ir dejando libre el búfer y después con todos los datos recogidos guardarlos en un archivo.
Grácias de antemano.
Agradeceré todo tipo de ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:A todos los que domineis MSComm

Publicado por Javier Pérez (170 intervenciones) el 23/01/2002 10:46:11
Hace apenas un par de días que respondí esta misma pregunta a otra persona. Desde luego no se puede esperar que el control MSComm recoja en el búfer el archivo completo que se quiere transmitir; en tu caso se trata de 1 MB, pero ¿y si el archivo que quieres transmitir tiene 40 MB o mas? No, no es así como funciona la cosa. A medida que va recibiendo datos el control MSComm va produciendo eventos OnComm, con el valor de la propiedad CommEvent con el valor comEvReceive. Esto quiere decir que el control ha recibido una cierta cantidad de datos; este evento se producirá constantemente hasta que se retiren los datos recibidos haciendo uso de la propiedad Input. Si no se retiran los datos recibidos, llegará un momento en que se sobrepasará la capacidad del búfer y entonces tendremos problemas. Lo que hay que hacer es precisamente lo que tu quieres hacer: obtener los datos recibidos (simplemente leyendo la propiedad Input) en el evento OnComm (este evento se puede producir por varios motivos, asegúrate que el evento es de tipo comEvReceive) y almacenarlos en un búfer propio o, mejor todavía, escribirlos en un fichero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pero como?

Publicado por XRM. (27 intervenciones) el 23/01/2002 12:04:18
Pero como guardo lo leido en un archivo, quizá tengo que introducir el siguiente codigo en oncomm:
If MSComm1.CommEvent = comEvReceive Then
FileName2 ="Ruta"
Open FileName2 For Binary Access Write As #1
.... y que más?? porfavor
end if
me quedo atrancado en este tema agradecería que me ayudases. Solo quiero saber como controlar una vez sé que es un evento comEvReceive
el guardar los grupos de 20 bytes en el mismo archivo.?
Grácias de antemano.
(Quiero aprender)

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pero como?

Publicado por Javier Pérez (170 intervenciones) el 23/01/2002 12:38:10
Mas o menos como indicas, aunque yo, particularmente, crearía el archivo antes de iniciar las comunicaciones, de modo que en cada evento OnComm únicamente habría que escribir en el fichero los datos obtenidos:

Private Sub MSComm1_OnComm()

Dim datos As Variant

If MSComm1.CommEvent = comEvReceive Then
datos = MSComm1.Input
Write #1, datos
End If

End Sub

Una vez recibidos todos los datos, cierras el fichero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar