Professional Documents
Culture Documents
20
APLICACIONES CLIENTE SERVIDOR
COMUNICACIÓN PUERTO SERIE: EL CONTROL MSCOMM
Hasta ahora hemos visto aplicaciones que pueden utilizarse por sí solas. Pueden acceder a
bases de datos que estén en el mismo ordenador que la aplicación o en otro, unido mediante
una red de área local. La conexión a las bases de datos a las que accede se realiza, bien
indicándole la dirección y carpeta (\\MiServidor\BasesdeDatos\MiBase.Mdb) o bien “mapeando”
esa dirección (crear una unidad de disco que contienen esa dirección). De esta forma
podemos acceder a una base de datos instalada en un equipo remoto y la aplicación debe
funcionar perfectamente, aunque al abrir o leer la base de datos origine un tráfico elevado por
la red de área local.
Con esta configuración podemos tener problemas de lentitud, sobre todo si la red es lenta y si
hay muchos usuarios trabajando con esa aplicación en distintos ordenadores, accediendo
todos ellos a través de la red a un servidor que contienen la base de datos. Esta lentitud se
incrementaría en una gran escala si la red a utilizar fuese Internet mediante una conexión lenta.
Pero lo que más se notaría sería la ocupación de los recursos de la red durante las consultas a
esa base de datos. Dependiendo de cómo se crease el recordset, podría darse el caso de
transmitir por la red todos los datos de la base de datos para que nuestra aplicación utilice
únicamente los datos correspondientes a un registro. Pensando en una aplicación bancaria,
por ejemplo la petición de saldo de una cuenta desde un cajero automático, los únicos datos
relevantes de esa operación serán el número de cuenta corriente, un código para indicar que lo
que se desea es el saldo, y como datos de retorno, el número de esa cuenta, el saldo actual
disponible y quizás un número de comprobación (Checksum) para comprobar que no ha
existido error en la comunicación. De nada nos serviría en el cajero conocer el estado de
cantidades retenidas, operaciones pendientes, etc.
Si en ese ejemplo del cajero creásemos un objeto Database, un recordset, leyésemos todos los
datos del recordset y luego diésemos la orden de cerrarlo, estaríamos enviando información
innecesaria a través de la red, con el coste de tiempo y ocupación que ello representa.
Casi llegamos a demostrar con esta introducción que sería más conveniente hacer una
aplicación que tuviese dos partes: una, residente en el puesto de operación, (que llamaremos
aplicación cliente) que fuese capaz de enviar datos solicitando información a otra aplicación,
instalada en el servidor donde está la base de datos. Esta segunda aplicación, que llamaremos
aplicación servidor, abrirá la base, creará los recordsets necesarios, filtrará la información,
realizará con ella operaciones matemáticas, y una vez concluido todo el proceso, enviará a la
aplicación cliente los datos estrictamente necesarios. Obviamente se necesita que ambas
aplicaciones sean capaces de entenderse entre sí, es decir, que tengan un protocolo de
comunicación entre ellas previamente definido. Esto es lo que se denomina una aplicación
cliente – servidor.
La aplicación cliente – servidor más popular es el navegador de Internet. Esta aplicación está
formada por una aplicación cliente (Navegador IEXplore, NetScape, etc) y una aplicación
servidor (Internet Information Server IIS, Apache, etc). El protocolo para que se comuniquen
entre ellas es el protocolo Http o el Ftp. Estos protocolos al ser públicos, permiten a cualquier
empresa hacer su propia aplicación cliente o servidor.
Esa aplicación no puede ser otra que una guía telefónica, (versión novísima del Listatel) cuya
base de datos está en un servidor conectado a Internet, al que se podrá acceder desde un
número ilimitado de puestos cliente. En la base de datos del servidor, en un conjunto de tablas,
figurarán los nombres, números de teléfono, despacho, etc. de una serie de personas, y el
organigrama de esas personas dentro de la organización. Estas tablas serán estáticas, es
decir, tendrán datos que solamente se actualizarán cuando exista un cambio en esas personas,
pero no variarán durante la ejecución del programa. En otra tabla, esta dinámica, tendremos el
registro de los usuarios que están conectados en ese momento al servicio. Así podremos saber
si un usuario está presente y de esta forma conocer un dato importante para otro servicio que
va a tener este programa: su dirección IP actual. Sabiendo que está conectado y con su
dirección IP podremos enviarle mensajes directamente. Creo que ya vemos que se trata de una
agenda telefónica que lleva incorporado un servicio de mensajería. El servicio de mensajería
enviará mensajes con texto plano o RTF y puede llevar ficheros anexados. A esta agenda, y a
su protocolo de comunicación le vamos a denominar SML. No se preocupe de no conocer las
siglas. Al protocolo SMTP tampoco lo conocían en el momento de su creación.
Una aplicación cliente puede comportarse como aplicación servidor de otra aplicación, incluso
de sí misma. Este es el caso de la aplicación cliente del SML. Cuando vamos a pedir la
información de un abonado telefónico al servidor, el cliente se comporta como tal. Sin embargo
cuando otro usuario de SML nos envía un mensaje, es nuestra aplicación la que realiza las
funciones de servidor. Verá esto con mucha más claridad cuando comencemos el ejemplo.
Toda aplicación cliente - servidor debe tener un sistema de comunicación entre la aplicación
cliente y la aplicación servidor. Parece que la comunicación que ha de tener es a través de una
red IP (Red de Area Local, Red Privada Virtual, Internet) pero puede ser cualquier otro sistema
de comunicación entre ordenadores. Sin ir más lejos, a través del puerto de comunicación serie
COM-1 ó COM-2. A efectos de los programas de la aplicación cliente o servidor solamente
variará en la forma en la que reciban y transmitan los datos. En nuestro ejemplo vamos a
utilizar la comunicación a través de una red IP, usando el control Winsock ya estudiado. Tanto
la aplicación cliente como la aplicación servidor deberán tener un Winsock. Como en nuestro
caso, según explicamos más atrás, la aplicación cliente se convierte en aplicación servidor para
recibir mensajes, ésta deberá tener dos Winsocks, uno para la función cliente, y otro para la
función servidor.
Cuando se diseña una aplicación cliente – servidor hay que comenzar pensando en las
funciones que va a realizar y sobre esas funciones comenzar a escribir el protocolo de
comunicación. No es fácil tener terminado el protocolo de comunicación antes de escribir la
primera línea de código del programa. Según se van concretando cada una de las acciones
que debe realizar vemos que es necesario introducir nuevos códigos de operación en nuestro
protocolo. No se preocupe que eso no es improvisar. Pero sí es muy importante tener las
cosas claras desde el principio y saber que es lo que va a hacer nuestra aplicación para de
esta forma poder saber dar respuesta correcta a cada uno de los dos programas. Y para tener
las cosas claras, el autor recomienda que el protocolo de comunicación se establezca antes de
comenzar a escribir el código en tanto se pueda. Y que se escriba en un documento en el
propio ordenador o mejor aún, en una base de datos u hoja de cálculo, que nos permita
ordenar las órdenes y avisos de nuestra aplicación para evitar de esta forma cualquier
repetición involuntaria.
Es muy importante a la hora de pensar el protocolo de comunicación que este no pueda inducir
a error al programa. Si el programa tiene como función la transmisión de mensajes (Tal como
es nuestro caso) los mensajes no pueden estar limitados ni en su longitud ni en su contenido
por el formato del protocolo de comunicaciones. Se entiende mejor esto analizando el protocolo
del SML (fruto únicamente de la imaginación del autor y no sujeto a normas ni
recomendaciones internacionales de ningún tipo)
Es obvio pensar que esas tres combinaciones no pueden formar parte de ningún acrónimo.
Pero como los acrónimos los definimos nosotros, basta con hacer que ninguno contenga esas
secuencias de caracteres.
Preocúpese de estos detalles que son los realmente importantes. Verá cuando se ponga a
escribir código que siempre ha de faltar algo en el protocolo de comunicación. No se preocupe
por tener que ir rectificándolo. Eso sí, mantenga siempre actualizado el documento o base de
datos con el protocolo, explicando debidamente cada una de sus partes, los parámetros que
lleva y la función que realiza. Es documento indispensable a la hora de distribuir la aplicación.
Un buen programador nunca oculta el protocolo de comunicación. Esto permite que otros
mejoren su aplicación. Sólo los programadores mediocres temen que se les plagie. Y por
supuesto, nadie debería aceptar una aplicación cliente – servidor si el programador no
suministra ese protocolo.
El programa cliente debe conocer el número IP o dirección DNS del servidor. Pero el servidor
no tiene porque conocer la dirección ni DNS del cliente, ya que debe ser el cliente el que inicie
siempre la comunicación.
Al cliente nunca se le debe forzar el puerto en el que emite (Propiedad LocalPort del Winsock).
El servidor contestará siempre al cliente usando la conexión abierta por éste, es decir, usando
la instancia de su Winsock correspondiente a la conexión realizada para ese cliente)
La comunicación entre cliente y servidor debe ser siempre TCP. El uso de UDP simplifica
mucho las comunicaciones, pero no sirve para salir a Internet, donde las tramas UDP son
generalmente eliminadas por los servidores. Vale más trabajar un poco más el código y trabajar
con comunicaciones seguras aunque sea en una red de área local que garantice la llegada de
UDP.
Los paquetes broadcast deben evitarse también. Solamente deben usarse en configuraciones
donde no se conocen las direcciones de los servidores. Esto ocurre cuando la red tiene
asignación dinámica de direcciones. (Puede ocurrirle si usa una red VSAT) En cualquier caso,
los paquetes broadcast deben evitarse en lo posible. Los servidores de Internet los eliminan
automáticamente.
Pero puede llegar el caso en el que al servidor se le hayan introducido mejoras que puede
aportar al cliente si este es capaz de reconocer un nuevo protocolo. Estamos en el caso de un
servidor que debe atender a dos versiones distintas de cliente. Si el cliente tiene la versión
mejorada, usará con él un protocolo de comunicación que permita las nuevas prestaciones. Si
el cliente tiene la versión más antigua, deberá seguir usando con él el protocolo anterior.
El servidor también debería enviar su versión al cliente. No está previsto en la aplicación SML
pero confieso que no sobraría que al identificarse el cliente y devolverle el servidor la
conformidad del registro, le devolviese también la versión del servidor. ¿Se da cuenta que
según se avanza en la definición del protocolo aparecen nuevas necesidades?
Cuando utilice el puerto COM para la comunicación, bien sea directamente o a través de
módem, debe indicar claramente al usuario el estado de esa conexión, analizando la señal
DSR (esta señal está activa cuando el módem está conectado, y en caso de comunicación
directa, cuando se use, el Host debe poner a 1 esta señal para poder trabajar). Recuerde que
la comunicación por el puerto COM es asíncrona respecto a la ejecución del programa.
Todas las operaciones de búsqueda de datos las haremos mediante consultas a la base de
datos que está en el servidor. Las consultas se realizarán siguiendo el protocolo de
comunicaciones. El organigrama se guardará en el cliente, en una base de datos, para evitar
en lo posible el envío desde el servidor. La razón para esto es que el organigrama puede ser
muy extenso, y no va a variar muy a menudo. Como esta información habría que enviarla nada
más conectarse el cliente, y como puede ser bastante amplia, esto podría originar un tráfico
intenso por la red, que es justamente lo que queríamos evitar. Solamente se va a enviar cuando
haya cambiado. ¿Cómo sabe el cliente que ha cambiado?. ¿Cómo sabe el servidor que el
cliente tiene ya la información actualizada? La idea más sencilla para conocerlo es que el
cliente envíe cada vez que se registra (al comienzo de la conexión) el nombre de la revisión del
organigrama que tienen. El nombre puede ser cualquiera. Lo que hace el servidor por defecto
para poner el nombre a la revisión es combinar una cadena de texto con el nombre de la
organización seguido de la fecha (día/mes/año) en la que se realiza la revisión. De esta forma
es imposible que haya dos fichero con el mismo nombre. Al recibir ese nombre el servidor, si
es igual al de la última revisión, le devuelve un OK. Si no es igual, le devuelve una instrucción
para que el cliente solicite al servidor que le envíe la nueva revisión. El cliente la solicita y el
servidor se la envía. Y al recibirla, el cliente reemplaza el contenido de la base de datos por los
nuevos valores recibidos.
Al día de hoy (30 de Octubre de 2002) no está terminada la aplicación. Posiblemente no lo esté
nunca porque sea una aplicación en continua ampliación. Esto es lo bonito de los programas
ejemplo de los cursos de visual basic.
En cualquier caso, el contenido de las órdenes y comandos de este protocolo será siempre en
ASCII, con caracteres alfanuméricos que permitan ver perfectamente el tráfico entre ambos
interlocutores. El hecho de utilizar solamente caracteres legibles asegura igualmente la
comunicación a través de cualquier medio de telecomunicación, incluyendo dispositivos de
cifrado on-line colocados entre cliente y servidor.
La comunicación puede iniciarse tanto en el servidor como en cualquiera de los clientes. Una
comunicación puede estar compuesta de:
Ordenes
Respuestas
Confirmaciones
Avisos
Ordenes: Son aquellas partes de la comunicación que inician una operación en el equipo
colateral.
Avisos: Son aquellas comunicaciones que no ejecutan ninguna acción en el colateral, pero
informan de algo. Por ejemplo, servidor fuera de servicio temporalmente, servidor restablecido.
Pueden ser individuales, en cuyo caso generarán normalmente una confirmación, o broadcast,
en cuyo caso no generarán confirmación.
La trama de una comunicación estará compuesta de unos acrónimos que indicarán la orden,
respuesta, confirmación o aviso que envían, dirección IP, nombre de la máquina o nombre del
servidor que envía, dirección IP, nombre de la máquina o nombre del servidor destino, datos,
cheksum de la trama y acrónimo de fin de trama. Cada uno de estos componentes irá metido
entra los símbolos < > y su longitud puede ser variable. Cuando se envíe información, esta se
colocará detrás del acrónimo que la define, separada por la barra /.
Ejemplos:
El cheksum será el resultado de realizar la función XOR sobre todos los caracteres de los
componentes de la trama, exceptuando los correspondientes precisamente a este cheksum y al
fin de trama. El cheksum se indicará en decimal, con el acrónimo CHK. Por ejemplo,
<CHK/235>
El orden de los componentes de una trama no debe ser estricto, si bien debe ir en primer lugar
el acrónimo que inicie la sesión de comunicaciones, en penúltimo lugar el cheksum, y en último
lugar el <EOT>
Una trama puede contener varias ordenes siempre y cuando estas sean congruentes.
Una máquina puede identificarse bien por su dirección IP o por su nombre dentro de una red.
Puede también identificarse por ambos, en aquellas situaciones en las que la máquina
receptora del mensaje deba retransmitirlo a otra máquina. Este es el caso, por ejemplo, de una
red conectada a través de una conexión ADSL. El módem ADSL tiene asignado un número IP
verdadero, y en esa red existen varias máquinas que cada una de ellas tendrá un nombre
distinto, y un número IP distinto, (número IP que para estas máquinas será ya de la numeración
interna) Al poder identificar una máquina por su IP y nombre, basta con poner como IP de
destino el numero IP real del módem ADSL, y como nombre, el nombre de la máquina dentro
de la red privada.
Por ejemplo:
<CAT> <IPO/100.100.100.100><IPD/217.126.179.96><NMD/Administracion_1>
<OCE/123>
<RQY/[Antonio Fernandez_91 1234567][Antonio Fernangomez_91 7654321]>
Este mensaje devuelve el resultado de una consulta a la máquina Administracion_1 que está en
la red de área local cuyo acceso desde Internet se realiza por un módem ADSL cuyo número IP
es el 217.126.179.96. Lógicamente, la máquina real que recibe esta comunicación no es la
máquina Administracion_1, sino otra máquina colocada en la misma red de área local, sobre la
cual se ha hecho NAT desde Internet para el puerto que use este sistema, y esta máquina, una
vez recibido el mensaje, lo reenvía a la máquina Administracion_1 que será quien lo trate. Si la
comunicación no llevase más que el número IP, se entiende que el destino es la máquina que
tiene ese número IP.
ORDENES PREPROGRAMADAS
Este control permite la comunicación de una aplicación VB con el puerto serie. Parece en
principio que los puertos serie del PC se usan para muy pocas cosas. Prácticamente para
conectarnos a Internet a través de un módem telefónico. Existen muchísimas aplicaciones
industriales para las cuales son fundamentales los puertos COM. Las redes de área local
parece que han dejado obsoletos a los puertos COM1 y COM2. No es así. Deje volar su
imaginación. Vuelva a la página 4 del capítulo 2, y observe el panel de control de una radio
realizado en Visual Basic. La unión entre el PC y la radio, separados muchos kilómetros, se
realizó mediante el puerto COM, conectado a una línea telefónica mediante un módem. El
puerto COM es el gran olvido de los informáticos…
PRPIEDADES
CommPort
Indica el número del puerto serie usado. Admite los valores de 1 a 255. Cambiando esa
propiedad podemos cambiar el puerto de comunicación que vamos a usar (Un PC tiene
normalmente 2 puertos serie : El Com1 y el Com2. Puede tener sin grandes problemas
Hardware hasta 4 (Com3 y Com4) Si le damos a ese valor un número de puerto inexistente,
dará error.
Settings
Indica la velocidad, paridad, número de bits y bits de stop (parada) que se van a usar en la
comunicación.
50 100 110 300 600 1200 2400 4800 9600 14400 19200 y 28800
(No es posible programar 1,5 bits de parada. Sólo lo hace cuando se programan 5
bits de información y lo hace automáticamente).
Handshaking
El Control de Flujo puede hacerse de dos formas : Una mediante las señales auxiliares del
puerto (RTS, CTS, DSR, DTR), que son cables adicionales que tendrán una tensión positiva
respecto a los 0V del equipo si esa señal está activada, o una tensión negativa si no lo está.
Este tipo de control del flujo de información es el típico para comunicarse el ordenador con un
módem.
Existe otra forma de controlar el flujo de información : mediante señales especiales que se
envían por los dos cables que transportan la información. Mediante estas dos señales podemos
controlar que el ordenador envíe información o deje de enviarla. De igual forma, podemos
indicarle al módem que envíe o no envíe. Estas señales especiales se denominan X-ON y X-
OFF.
La propiedad Handshaking controla la forma de realizar este proceso. Puede tomar los
siguientes valores :
InBufferSize
Mediante esta propiedad establecemos el tamaño del Buffer (almacén de datos) de entrada.
Este Buffer sirve para poder recibir datos sin que tenga que intervenir la aplicación
continuamente para controlar el puerto de entrada.
OutBufferSize
Puede conocerse el número de caracteres presentes en el Buffer de salida (los que aún están
por transmitir), consultando el valor de la propiedad OutBufferCount.
RThreshold, SThreshold
Estas dos propiedades especifican el número de caracteres que deben estar presentes en los
Buffers de Recepción y Transmisión respectivamente, para que se produzca el evento
OnComm relativo a recepción y transmisión de caracteres. (Eventos EvReceive y EvSend) Si
el valor de una de estas propiedades está a 0, no se produce el evento OnComm
correspondiente.
El valor que se debe dar a estas dos propiedades depende de la aplicación y del tiempo que
queramos que la aplicación está atendiendo al puerto de comunicaciones. Concretamente para
la propiedad RThreshold debemos pensar muy bien el valor que se le pone. Si ponemos un
valor corto (1 es el mínimo), cada vez que reciba un carácter se producirá el evento OnComm.
(Vea la descripción de eventos mas adelante). Al producirse este evento, ejecutará el
procedimiento asociado a él, lo que hará perder tiempo a la aplicación, impidiéndole realizar
otras funciones. Si se pone un valor muy alto, el puerto no avisará que tiene caracteres
recibidos hasta que reciba un número igual al programado en esta propiedad, por lo que no
podremos procesar los datos recibidos hasta que el buffer tenga ese número de caracteres en
su interior. En número adecuado dependerá del tipo de aplicación que vayamos a realizar. En
cualquier caso, este número será inferior al número programado para la longitud del buffer,
(InBufferSize)
InputLen
Por defecto, cuando se lee el Buffer de recepción, se leen todos los caracteres, quedando el
Buffer vacío. Si se le asigna a esta propiedad un valor distinto de 0, cada vez que leamos el
Buffer de recepción leerá un número de caracteres igual a esa cantidad, permaneciendo los
caracteres restantes en el Buffer a la espera de una nueva lectura. Asignándole el valor 0 (Valor
por defecto), el buffer se lee completo.
ParityReplace
Si la comunicación se realiza con bit de paridad (Par o Impar), en recepción se comprueba byte
a byte la recepción de la paridad correcta. Si se recibe un Byte que no tiene paridad correcta, lo
mas probable es que ese Byte (carácter) se haya recibido defectuoso. Esta propiedad nos
permite sustituir un carácter que ha llegado con bit de paridad incorrecto por otro carácter. ( ?
predeterminado). Se puede sustituir por una cadena de caracteres (Error, por ejemplo).
Cuando se recibe el carácter nulo (00000000) puede ser que no sirva para nada a efectos de
nuestra aplicación, o que este carácter sea un dato mas. Esta propiedad acepta los valores
True / False. Si es True se desprecia el carácter Nulo. Si es False, se toma como un carácter
mas.
CTSTimeout
Es el tiempo (en milisegundos) que permanece esperando la señal CTS (Señal CTS -
Dispuesto para enviar), señal de entrada al ordenador que debe estar presente antes de que el
puerto comience a enviar información. El tiempo se mide desde que se pone activa la señal de
salida RTS (Petición de envío). Si se supera este tiempo entre el instante de activación de la
señal RTS y la recepción de la señal CTS, se produce el evento CTSTO. Poniendo 0 en esta
propiedad, se deshabilita, y en estas condiciones no se producirá nunca el evento CTSTO.
CDTimeout
Es el tiempo máximo de espera (en milisegundos) desde que se activa la señal DTR hasta que
se recibe la señal CD (Carrier Detect - Detección de portadora). Este tiempo solamente tendrá
importancia en ciertas aplicaciones donde se espere recibir CD continuamente. No tendrá
sentido cuando la aplicación se queda en espera a recibir una comunicación, pero sin saber
cuando la tiene que recibir. Si transcurre el tiempo programado en esta propiedad, ocurrirá el
evento CDTO. Poniendo el valor 0 se deshabilita esta propiedad y no se producirá nunca el
evento CDTO.
DSRTimeout
Similar a la anterior, pero en vez de esperar la señal CD se espera la señal DSR. Esta
propiedad sí tiene sentido, ya que si, por ejemplo, estamos conectados con un módem, y
nuestra aplicación se pone a la espera de recibir alguna llamada, activa la salida DTR, y espera
recibir inmediatamente la respuesta de que el módem está dispuesto, mediante la línea DSR.
Si transcurre el tiempo programado sin recibir la señal DSR se producirá el evento DSRTO .
Poniéndola a 0, se deshabilita esta propiedad y nunca ocurrirá el evento DSRTO.
RTSEnable
Activa (Pone a 1) la señal RTS (Request To Send - Petición de envío) Esta señal debe ponerse
a 1 para indicar al módem (o al equipo que va a recibir nuestra comunicación) que deseamos
enviar datos. Debe estar activada durante toda la transmisión de datos.
Cuando se pone la propiedad Handshaking a 2 (control con RTS / CTS) ó 3 (Control con RTS /
CTS y con X-ON / X-OFF) no debemos preocuparnos de poner a 1 la señal RTS, pues lo hace
automáticamente el puerto de comunicaciones. Esta propiedad está ahí para aplicaciones
donde no se emplee ese tipo de Handshaking y necesitemos activar algo antes de transmitir.
(Caso por ejemplo de transmisión de datos por radio, donde podemos usar esta señal de salida
para activar el PTT (Push To Talk - Pulse para hablar) y poner el transmisor en marcha)
DTREnable
Activa (Pone a 1) la salida DTR (Data Terminal Ready - Terminal de Datos Listo). Esta señal
se emplea para decirle al módem que el terminal (Ordenador) está preparado para recibir
datos.
Se hace la misma observación que para la propiedad anterior respecto a los valores de la
propiedad Handshaking
Indica el tiempo (en milisegundos) del intervalo entre una y otra comprobación del estado de
recepción del puerto. El valor mínimo es de 55 ms.
El análisis del puerto de comunicación no tiene nada que ver con la generación del evento
OnComm. Este evento se producirá cuando se cumplan las condiciones para ello,
independientemente del tiempo programado en esta propiedad. La comprobación del puerto
cada intervalo de tiempo marcado por esta propiedad solamente afecta a averiguar el estado
de las líneas auxiliares CD, DSR y CTS, y para saber el número de caracteres existentes en los
Buffers de transmisión y recepción.
PortOpen
Abre el puerto de comunicación. Puede tener los valores True (Para abrirlo) y False (Para
cerrarlo) Si tenemos un MSComm con Nombre (Name) MSComm1, para abrirlo ejecutaremos
la siguiente sentencia :
MSComm1.PortOpen = True
MSComm1.PortOpen = False
InBufferCount.
Nos permite averiguar cuantos caracteres tenemos en el Buffer de entrada. Con el mismo
MSComm anterior, comprobaremos el número de caracteres sin leer con la sentencia :
caracteressinleer = MSComm1.InBufferCount
OutBufferCount
Nos permite conocer cuantos caracteres quedan por transmitir en el Buffer de salida.
Emplearemos la sentencia :
caracteressinenviar = MSComm1.OutBufferCount
Output
Envía caracteres al Buffer de salida. Debe existir un signo igual ( = ) entre Output y lo que se
envía al Buffer. Para enviar la frase Curso de Visual Basic ejecutaremos la sentencia :
MSComm1.Output = variable
Lee el Buffer de recepción. El número de caracteres leídos dependerá del valor de la propiedad
InputLen. Cuando la propiedad InputLen tiene el valor 0, el Buffer se lee completo. Si
InputLen tiene un valor distinto de 0, se leerá un número de caracteres igual al valor de esta
propiedad.
CommEvent
Devuelve el evento mas reciente que ha ocurrido para generar el evento general OnComm
(Vea mas adelante). Esta propiedad no está disponible en tiempo de diseño y es de sólo
lectura en tiempo de ejecución.
Sintaxis NombredelMSComm.CommEvent
Break
Devuelve un valor (True / False) que indica que se ha recibido la señal Break.
variable = MSComm1.Break
CDHolding
CTSHolding
Devuelve el estado de la línea de control CTS (Dispuesto para enviar) Si es True, esa entrada
está activada, si es False, la entrada está desactivada.
variable = MSComm1.CTSHolding
DSRHolding
Devuelve el estado de la línea de control DSR (Data Set Ready ) Si es True, esa entrada está
activada, si es False, la entrada está desactivada.
variable = MSComm1.DSRHolding
Para averiguar qué evento se ha producido puede hacerse consultando el valor de la propiedad
CommEvent. (Se toma como nombre del MsComm el de MsComm1)
End If
Los eventos del Comm pueden identificarse por una constante o un número. La constante,
como todas las de Visual Basic, tiene una expresión bastante difícil. Se pone entre paréntesis
el número que identifica a ese evento. Este número debe declararse como Integer.
ComEvCD (5) Cambio en la línea CD. Para conocer el estado actual de esa línea
(Activado/Desactivado) deberemos invocar la propiedad CDHolding
ComEvCTS (3) Cambio en la línea CTS. Igual que la anterior, este evento solamente
nos indica que ha existido un cambio. Para averiguar el estado en que
se encuentra esta línea, debemos invocar la propiedad CTSHolding
ComEvDSR (4) Cambio en la línea DSR. Igual que las anteriores. Debemos invocar la
propiedad DSRHolding para averiguar su estado actual.
ComEvSend (1) Cuando quedan en el búfer de transmisión menos caracteres que los
indicados en la Propiedad SThreshold
TxD Transmisión de datos. Es una salida del ordenador. Por ella salen los datos en serie.
RxD Recepción de datos. Es una entrada del ordenador. Por ella entran los datos en serie.
RTS Request To Send. Petición de envío. Es una salida del ordenador. El ordenador pone a
1 esta señal cuando quiere enviar datos.
CTS Clear To Send. Dispuesto para enviar. Es una entrada del ordenador. Si está a 1
significa que el ordenador puede enviar datos pues el módem (o el dispositivo que
vaya a recibirlos) está preparado para hacerlo.
DSR Data Set Ready. Dispositivo de datos preparado. Es una entrada del ordenador. Le
indica que el módem está encendido y listo para funcionar.
DTR Data Terminal Ready. Terminal de datos listo. Es una salida del ordenador. Indica que
está listo para trabajar. Suele emplearse para indicar al módem que el ordenador está
dispuesto para recibir información.
Otra señal (disponible sólo en los ordenadores que tengan conector de 25 pines, y no en todos)
es la señal RING (timbre del teléfono) Es una entrada del ordenador. Le indica que está
sonando el timbre de la línea telefónica del módem.
3 TxD 2
2 RxD 3
7 RTS 4
8 CTS 5
6 DSR 6
5 GND 7
1 CD 8
4 DTR 20
RING 22
Tierra de protección 1
(La señal RING no está disponible en el conector de 9 pines. La detección del Ring del
teléfono se realiza directamente por la línea RxD. El módem envía la palabra RING cuando
suena el timbre del teléfono. La tierra de protección tampoco se usa en este conector.