Estimados,
necesito su ayuda para un proyecto que tengo. La función del programa es la de abrir un archivo txt con 32767 lineas, cada linea tiene un número tipo "double". Ese número tipo "double" se convierte en un hexa de 12 bit. Ese número se divide en 2 números de 8 bits, o sea, se toman los 4 más significativos y se le agregan 4 ceros a la izquierda y se guardan en el array MSDatos, los 8 menos significativos se guardan en el array LSDatos(). El envío es en el siguiente orden, LSDatos(0), MSDatos(0), LSDatos(1), MSDatos(1), etc.
Se envían al PIC por el puerto USB utilizando un puerto COM virtual. Todo muy lindo hasta acá, el problema es que para mandar esa cantidad de datos la
transferencia demora 8 minutos 33 segundos .
En el código van a ver un Sleep(1), eso es un retardo de un milisegundo, si no lo pongo, al parecer hay un desbordamiento en el buffer del PIC y no llegan todos los datos. (Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long))
Está es la función que envía los datos:
Private Sub Enviar()
Dim j As Integer 'variable usada para repetir la señal
stbEstado.Panels(1).Text = "Enviando Datos..." 'la barra de estado muestra el inicio del envío
prbEnvio.Max = 32767 'cargo el máximo de la barra de progreso
For j = 0 To 32766 'se enviaran 32767 datos, el valor final es 32766 porque de lo contrario entra en bucle infinito debido a la resta que hay antes de salir del for
For n = 0 To (UBound(funcion)) 'N representa la cantidad de datos contenida en el array función()
If j = 32767 Then 'si j vale 32767, sale del bucle, significa que ya se enviaron 32767 datos
Exit For 'salida del bucle for secundario
Else
If n Mod 2 Then 'si n es impar se envía MSDatos de lo contrario LSDatos
puerto.Output = MSDatos(n) & vbCr 'envío la parte menos significativos de los datos
puerto.OutBufferCount = 0
Else
puerto.Output = LSDatos(n) & vbCr 'envío la parte más significativos de los datos
puerto.OutBufferCount = 0
End If
j = j + 1 'incremento j
End If
Sleep (1)
prbEnvio.Value = j 'carga el valor actual de la barra de progreso
stbEstado.Panels(1).Text = "Enviados " & j _
& " de 32767 datos" 'la barra de estado muestra la cantidad de datos envíados
Next
j = j - 1 'se resta 1 a j porque el for inicial incrementa en 1 a j, provocando que saltee un valor del for interno provocando que
'la señal de salida falten datos debido al "salteo" de los mismos. También hay un desbordamiento porque j llega hasta 32768
Next
ReDim LSDatos(1) 'dimensiono los arrays para liberar memoria del pc
ReDim MSDatos(1) 'dimensiono los arrays para liberar memoria del pc
End Sub
La pregunta es: ¿cómo puedo mejorar el tiempo de envío de los datos?
Otro problema es que cuando se están enviando los datos la ventana queda "dura", o sea, aparece el cartel "no responde" en la barra del titulo. ¿cómo puedo solucionar esto?
Bueno gente, desde ya les digo muchas gracias y quedo a la espera de sus respuestas.
Abrazo!