¿Qué es la comunicación en serie?

Generalmente existen dos métodos para desarrollar software de comunicación serial con Delphi: uno es usar las funciones API de comunicación de Windows y el otro es usar el control MSComm de Microsoft. Usar API para escribir programas de comunicación en serie es más complicado y requiere mucho conocimiento de comunicación. La ventaja es que puede lograr funciones más potentes y tiene una gama más amplia de aplicaciones, lo que lo hace más adecuado para escribir programas de comunicación de bajo nivel más complejos. Es relativamente sencillo utilizar el control MSComm. Este control tiene una gran cantidad de propiedades y eventos estrechamente relacionados con la comunicación del puerto serie y proporciona varias operaciones en el puerto serie.

1. Principales propiedades y eventos del control MSComm

(1) CommPort: Establece o devuelve el número de puerto serie, el valor predeterminado es 1.

(2) Configuración: establece o devuelve los parámetros de comunicación en serie, el formato es "velocidad en baudios, bit de paridad, bit de datos, bit de parada". Por ejemplo: MSComm1.Setting:='9600,n,8,1'

(3) PortOpen: abre o cierra el puerto serie, el formato es: MSComm1.PortOpen:=

(4) InBufferSize: establece o devuelve el tamaño del búfer de recepción. El valor predeterminado es 1024 bytes.

(5) InBufferCount: Devuelve el número de bytes que esperan ser leídos en el búfer de recepción. Puede borrar el búfer de recepción estableciendo esta propiedad en 0.

(6) RThreshold: Este atributo es un umbral, que determina que cuando el número de bytes en el buffer de recepción alcance o exceda este valor, se generará el evento OnComm con el código ComEvReceive.

(7) SHreshold: Este atributo es un umbral, que determina que cuando el número de bytes en el buffer de envío sea menor que este valor, se generará el evento OnComm con el código ComEvSend.

(8) InputLen: establece o devuelve el número de bytes leídos por la entrada en el búfer de recepción. Establecer esta propiedad en 0 significa que la entrada lee el contenido de todo el búfer.

(9) Entrada: Lee una cadena de caracteres del búfer de recepción.

(10) OutBufferSize: establece o devuelve el tamaño del búfer de envío. El valor predeterminado es 512 bytes.

(11) OutBufferCount: Devuelve el número de bytes que esperan ser enviados en el búfer de envío. El búfer se puede borrar estableciendo esta propiedad en 0.

(12) Salida: envía una cadena de caracteres al búfer de envío.

Si se produce un error o evento durante el proceso de comunicación, se activará el evento OnComm y el código de atributo CommEvent reflejará el tipo de error. En el diseño del programa de comunicación, se pueden realizar diferentes operaciones en función. en el valor del atributo. Los valores del atributo CommEvent y sus significados son los siguientes:

(1) ComEvSend: el valor es 1 y el contenido del búfer de envío es menor que el valor especificado por SThreshold.

(2) ComEvReceive: el valor es 2 y el número de caracteres en el búfer de recepción alcanza el valor especificado por RTreshold.

(3) ComEvFrame: el valor es 1004 y el hardware detecta un error de trama.

(4) ComEvRxOver: El valor es 1008, el buffer de recepción se desborda.

(5) ComEvTxFull: El valor es 1010 y el búfer de envío se desborda.

(6) ComEvRxParity: El valor es 1009, error de paridad.

(7) ComEvEOF: El valor es 7 y el carácter de fin de archivo (código ASCII es 26) aparece en los datos recibidos.

2. Ejemplo de programa

El control MSComm no se puede utilizar en Delphi3.0. El autor está utilizando Delphi5.0. El control MSComm es un control OCX en VB Primero, debe agregarlo a Delphi, seleccionar el menú "Componente" → "Importar control ActiveX", seleccionar "Control de comunicaciones de Microsoft" en la página "Importar ActiveX" y hacer clic en ". Instalar" para instalar. Después de la instalación, el icono de MSComm aparece en el panel del componente "ActiveX" y se puede utilizar. Una cosa a tener en cuenta es que las propiedades de entrada y salida del control MSComm son invisibles en el inspector de objetos, pero aún existen. El tipo de estas dos propiedades es OleVariant (variable universal Ole).

A continuación se muestra una muestra (parte principal) de un programa de recepción, que puede mejorar según las necesidades reales.

Coloque un control Memo en el formulario para mostrar los datos recibidos. Combobox1 selecciona los parámetros de comunicación (Configuración del valor del atributo), Combobox2 selecciona el puerto serie (CommPort valor del atributo), presione el Botón1 para comenzar a recibir datos. Presione el botón 2 para dejar de recibir.

procedimiento TForm1.FormCreate(Sender: TObject);

comenzar

Mscomm1.InBufferCount:=0 // Borrar el búfer de recepción

Mscomm1.InputLen:=0; // La entrada lee todo el contenido del búfer

Mscomm1.RTreshold:=1; // El evento OnComm se genera cada vez que se recibe un carácter

finalizar;

procedimiento TForm1.Button1Click(Remitente: TObject

comenzar

Mscomm1.Settings:=ComboBox1.Text; if ComboBox2.Text ='com1' entonces // Supongamos que solo se consideran com1 y com2

Mscomm1.CommPort:=1

else

Mscomm1. :=2;

Mscomm1.PortOpen:=true; // Abre el puerto serie

Mscomm1.DTREnable:=true // El terminal de datos está listo

Mscomm1.RTSEnable:=true; //Solicitud de envío

finalizar

procedimiento TForm1.Button2Click(Remitente: TObject

comenzar

p>

Mscomm1.PortOpen:=false; // Cerrar el puerto serie

Mscomm1.DTREnable:=false

Mscomm1.RTSEnable:=false;

fin;

procedimiento TForm1.MSComm1Comm(Remitente: TObject);

var

recstr: Olevariante

comenzar

si Mscomm1.CommEvent = 2 entonces

comenzar

recstr := Mscomm1.Input

Memo1.text := Memo1.Text; + recstr;

p>

fin

fin