Artículo Q151899
RESUMEN
=======
Este artículo cubre algunas de las preguntas más frecuentes (FAQs) sobre el uso del control MSComm para recibir y transmitir datos binarios.
MAS INFORMACION
===============
¿Se puede emplear el control MSComm (MSComm16.ocx y MSComm32.ocx) para transmitir y recibir datos binarios?
Sí. El control MSComm se puede usar para transmitir y recibir datos binarios. Estos datos deben ser convertidos de byte en byte a carácter y luego transmitidos. Cuando se reciben deben ser convertidos de nuevo en datos binarios de byte en byte.
El siguiente código ilustra este proceso :
'Código para transmitir
Dim FileName As String: FileName = "C:\BinFiles\Test.Exe"
Dim Offset As Long
Dim FileData As Byte
Open FileName For Binary Access Read As #1
For Offset = 1 To FileLen(FileName)
Get #1, Offset, FileData
MSComm1.Output = Chr$(FileData)
Next Offset
Close #1
'Código para recibir
'Se asume que File #1 ya ha sido abierto en alguna parte del código y
'que ByteCount ha sido declarado como Long e inicializado a 0.
Private Sub MSComm1_OnComm()
Dim TmpStr As String
Dim StrLen As Long, I As Long
Dim FileData As Byte
If MSComm1.CommEvent = comEvReceive Then
While MSComm1.InBufferCount > 0
TmpStr = MSComm1.Input
StrLen = Len(TmpStr)
For I = 1 To StrLen
FileData = CByte(Asc(Mid(TmpStr, I, 1)))
ByteCount = ByteCount + 1
Put #1, ByteCount, FileData
Next I
TmpStr = ""
Wend
End If
End Sub
'Se asume que File #1 se cerrará adecuadamente cuando todos los
'datos se hayan recibido.
¿Por qué no pueden las máquinas que emplean un conjunto de caracteres de dos bytes (DBCS) emplear el control MSComm para transmitir y recibir datos binarios?
En las máquinas DBCS (ordenadores que emplean un sistema operativo que usa uno de los conjuntos de caracteres de dos bytes), los datos binarios se corronperán si uno de los valores binarios coincide con un carácter de control del DBCS. El control MSComm interpretará este byte y el siguiente como un único carácter de doble byte y devolverá sólo un byte con el carácter ASCII "equivalente". Por ejemplo, caracteres de control, como &H81 sin ningún byte detrás, son traducidos al ANSI 0. Aunque esta limitación del MSComm no permite transmitir y recibir datos binarios en systemas DBCS, sí permite transmitir "texto normal".
¿Incorpora el control MSComm alguno de los protocolos de transferencia binaria populares?
No. El control no incorpora protocolos de transferencia binaria como el XModem/YModem, ZModem o Compuserve B, por ejemplo. Puedes codificar estos protocolos por tí mismo o adquirir controles de comunicación de terceras partes que implementen los protocolos deseados.
¿Puede acceptar el control MSComm matrices de bytes?
El control MSComm no accepta matrices de bytes. Esta posibilidad está siendo revisada y se considerará para su inclusión en futuras versiones. Las propiedades Input y Output sólo trabajan con strings.
¿Puede desactivarse la conversión Unicode/ANSI en el control MSComm?>
La conversión Unicode/ANSI del control MSComm no puede desactivarse. Esta posibilidad está siendo revisada y se considerará para su inclusión en futuras versiones. De todas formas, esta posibilidad podría ser innecesaria si el control permitiera el uso de matrices de bytes para transmitir y recibir datos binarios (ver pregunta anterior).
¿Puede el control MSComm enviar datos a más de 9.600 baudios?
Sí, el control es capaz de emplear velocidades de hasta 28.800 baudios.