Red de conocimiento informático - Problemas con los teléfonos móviles - Ejemplo de programa de comunicación serie VB

Ejemplo de programa de comunicación serie VB

También exploro y desarrollo cada comunicación VBtoCOM por mi cuenta. Las ideas específicas son las siguientes:

Le recomiendo una herramienta: "Herramienta de prueba de puerto serie COM ComTone V1.0 chino. Versión Verde”

1. Abra el software de prueba de su medidor de ruido, ajuste el número de puerto serie, la frecuencia de comunicación, etc. Usaré un termómetro como ejemplo.

Después de iniciar la consulta, se devuelve un valor. Esta recepción: es el valor devuelto 000304012200004b05,

Abra el asistente de monitoreo del puerto serie y monitoree el evento del puerto COM del software:

Esta escritura interna es el comando de consulta emitido por el software de prueba, y la lectura es el comando de datos devuelto por el dispositivo. ¿Privado?Sub?Command1_Click()?'Enviar comando.

If?Not?MSComm1.PortOpen?Then MSComm1.CommPort?= ?7?'El puerto serie es 7 MSComm1.Settings?=?"9600,n,8,1" MSComm1.InBufferCount?=?0?'Borrar la recepción buffer MSComm1.OutBufferCount?=?0?'Borrar el buffer de envío MSComm1. InputMode?=?comInputModeBinary?'Recepción binaria MSComm1.InputLen?=?0?'Leer todos los caracteres en el buffer de recepción MSComm1.PortOpen?=?True?' Abra el puerto serie MSComm1.RTSEnable?=?False?'Establecer en estado de envío

End?If

Dim?pu()?As?Byte

Dim?strdata?As?String

Dim?crc_js ()?As?Byte

ReDim?pu(7)?'Esta matriz es un comando de consulta de 8 bits

pu(0)?=?"&H00"?'Dirección del termómetro

pu(1)?=?"&H03"?'Comando de consulta

pu(2) ?=?"&H00"?'2 y 3 son las direcciones del termómetro

pu(3)?=?"&H00"?'2 y 3 son las direcciones del termómetro

pu( 4)?=?"&H00"?'4 y 5 son la longitud del registro de lectura

p>

pu(5)?=?"&H02"?'4 y 5 son la longitud del registro de lectura

pu(6)?=?"&HC5"?'6 y 7 son el código de verificación de corrección CRC. Debido a que no conocemos las reglas de verificación CRC del dispositivo, utilizamos el código de verificación generado por el software de prueba.

pu(7)?=?"&HDA"?'6 y 7 son códigos de verificación CRC

MSComm1.Output?=?pu

'No hace nada , simplemente permite que otras aplicaciones manejen sus eventos.

DoEvents

MSComm1.InBufferCount?=?0?'Borrar el búfer de recepción

MSComm1.RTreshold?=?9?'La longitud de los datos a ser recibido, vimos a través del asistente de detección de COM que los datos devueltos son 9 bytes

MSComm1.RTSEnable?=?True?' cambia al estado de recepción

End?Sub p>

¿Privado?Sub?Command2_Click()

Temporizador1.Enabled?=?False

Fin?Sub

Privado?Sub?Form_Unload (Cancelar ?As?Integer)

Si?MSComm1.PortOpen?Entonces

MSComm1.PortOpen?=?False?'Cerrar el puerto serie

¿Fin? Si

Timer1.Enabled?=?False

Fin?Sub

Privado?Sub?MSComm1_OnComm()?'Evento COM

¿Dim?PA( )?As?Byte

Dim?PB?As?String

Seleccionar?Case?MSComm1.CommEvent Case?comEvReceive

MSComm1.InputLen ?=?0 ?'Leer todos los caracteres en el buffer de recepción

PB?=?MSComm1.Input

PA()?=?PB

¿Para? i?= ?0?A?UBound(PA())

'Imprimir?"PA("?&?i?&?")";?PA(i)

Si? Len(Hex(PA(i)))?=?1?Entonces

strdata?=?strdata?&?"0"?&?Hex(PA(i))

Else

strdata?=?strdata?&?Hex(PA(i))

¿Fin?Si

Siguiente

' La cadena de datos devuelta: 000304012600000AC4, dividimos estos 9 bytes de acuerdo con el protocolo de comunicación

'00 es el número de máquina devuelto dentro del protocolo, 03 es el comando de lectura y 04 son los datos devueltos length? 0126? Dado que los datos de temperatura que quiero se expresan en hexadecimal, realizaré el procesamiento de datos a continuación

wd?=?CLng("&H"?&?Left(Right(strdata,?12), ?4) )?/?10?&?"℃"' se convierte en temperatura según el protocolo de comunicación

Text1?=?Text1?&?vbCrLf?&?strdata?&?"?" ?&?wd

strdata?=?""

MSComm1.PortOpen?=?False?'Cerrar el puerto serieEnd?Select

End?Sub

Privado ?Sub?Timer1_Timer()

Llamar?Command1_Click

Fin?Sub

Este es el resultado de mi prueba.

El siguiente es el protocolo de comunicación

Este es el resultado de que mi software utilice el asistente de detección