Hola, esto lo encontre por algun lado, y es interesante para los que quieran comunicar con el mscomm
-------------8<----------------------8<-----------------8<------------8<---
Coloco esta información en la lista ya que creo que es importante para todos:
La utilizacion del Control MScomm es muy sencilla aunque parezca algo enredado al principio, lo primero que debes saber es que este control tiene un solo evento que es en OnComm(). Este evento se dispara cuando cuando su propiedad (oculta), CommEvent acarrea un valor. Es importante saber que el control trabaja por si solo y genera el evento si ha ocurrido algo en el puerto. La información que puede detectar el control es la siguiente:
Estas, son declaraciones de constantes ( de eventos):
comEvSend = 1 "Evento Send.
comEvReceive = 2 "Evento Receive.
comEvCTS = 3 "Cambia a la línea CTS.
comEvDSR = 4 "Cambio a la línea DSR (conjunto de datos preparado).
comEvCD = 5 "Cambio a la línea CD.
comEvRing = 6 "Detección de llamada.
comEvEOF = 7 "Fin de archivo.
Estas, son declaraciones de constantes ( de errores):
comBreak = 1001 "Se ha recibido una señal de pausa.
comCTSTO = 1002 "Excedido el tiempo de espera de borrar para enviar (CTS).
comDSRTO = 1003 "Excedido el tiempo de espera de conjunto de datos listo (DSR).
comFrame = 1004 "Error de marco.
comOverrun = 1006 "Pérdida de información por sobrecarga del puerto.
comCDTO = 1007 "Excedido el tiempo de espera de detección de portador (CD).
comRxOver = 1008 "Se ha desbordado el búfer de entrada.
comRxParity = 1009 "Error de paridad.
comTxFull = 1010 "Búfer de transmisión lleno.
Estas, son declaraciones de constantes ( de manejo de control de linea ):
comNone = 0 "Sin protocolo.
comXonXoff = 1 "Protocolo XOn/XOff.
comRTS = 2 "Protocolo RTS/CTS (solicitar para enviar/borrar para enviar).
comRTSXOnXOff = 3 "Los protocolos RTS y XOn/XOff.
Muy bien, ahora explicando un poco para que sirven estos valores comienzo por lo siguiente:
En las comunicaciones seriales existen algunas señales intrinsicas al medio que hay que tener claras para desarrollar una aplicacion. Cuando hablo de señales son indicadores de un estado determinado en una linea del cable físico.( Para saber mas de eso refierase a información sobre Hardware de Puerto serial RS-232)
¿Ahora, como se comporta el Control MsComm ante estos cambios?
El valor comEvReceive en el evento OnComm, indicará a la aplicación que se recibieron datos en el puerto Serial. El disparo de este evento esta sujeto a la configuracion en la propiedad RThresHold la cual establece el numero de caracteres que debe esperar el control para avisar a la aplicacion que ha recibido algo.
El valor comEvSend en el evento OnComm, indicará a la aplicacion que se enviaron datos por el puerto serial. El disparo de este evento esta sujeto a la configuracion en la propiedad SThreshold la cual establece el numero de caracteres que debe esperar para avisar a la aplicacion que se enviaron datos.
Importante es aclarar que si se coloca SThreshold en 0(cero), se inhabilita la posibilidad de transmitir datos. o mismo ocurre con RThresHold que al colocarse en un valor de 0, se inhabilita la posibilidad de recibir datos.
Estas dos funciones trabajan conjuntamente con las propiedades InBufferSize (para recepcion de datos) y OutBufferSize (para transmision de datos), InBufferSize establece el tamaño del buffer intermedio para transmitir datos, este buffer se utiliza si el dispositivo del otro lado tiende a tener problemas con la recepcion de los datos que se le envía. OutBufferSize establece el tamaño del buffer de transmision de datos. Si el valor de InBufferSize es muy bajo (eso depende de las condiciones del enlace serial y la velocidad de transmision) se corre el riesgo que se pierdan datos de recepción ( valor de comRxOver ). Lo mismo pasa con OutBufferSize con comTxFull.
Para evitar los problemas de perdida de datos tanto en transmision como en recepcion se usa el control de flujo de informacion que se establece con comXonXoff (Control de flujo por software), comRTS(control de flujo por Hardware), comRTSXOnXOff(Control de flujo por Software y Hardware). Aqui es donde la cosa se pone compleja ya que si usted decide utilizar Control de fluo por Software debera hacer uso de otros estados de otras lineas en el cable.
Para la mayoría de las aplicaciones no utilizar el control de flujo funciona, sin embargo ya que hables de una balanza, me imagino que la distancia entre el computador y la balanza es considerable, esto implica tener un manejo del flujo de control de error, para ese caso específico sería bueno considerar la utilizacion de casi todas las lineas del puerto serial, para tener una idea de esto debo decir que un puerto serail RS-232 se compone de las siguientes líneas, este es el conector serial detras del PC:
25 Pines 9 Pines Abrev. Nombre de Linea
Pin 2 Pin 3 TXD Transmit Data
Pin 3 Pin 2 RXD Receive Data
Pin 4 Pin 7 RTS Request To Send
Pin 5 Pin 8 CTS Clear To Send
Pin 6 Pin 6 DSR Data Set Ready
Pin 7 Pin 5 SG Signal Ground
Pin 8 Pin 1 CD Carrier Detect
Pin 20 Pin 4 DTR Data Terminal Ready
Pin 22 Pin 9 RI Ring Indicator
Según la tabla anterior, puedo decir que para una comunicacion serial el el 90% de los casos se pueden conectar TXD, RXD y SG, para control de flujo se utiliza TXD,RXD,RTS,CTS,DSR,DTR,SG en ocasiones se incluye el CD, algunos dispositivos necesitan de los modems externos la señal RI que cambia de estado cuando hay un ring en la linea, aunque la mayoria de estos modems indica con datos RING cuando esta repicando.
La forma estandar de conectar dos dispositivos seriales es TXD con RXD( si invertidos) y SG con SG.
Ahora volviendo al control MsComm, y quiere practicar algo, conectando dos PC de la forma anterior descrita es decir TXD(en el PC #1) con RXD en el (PC #2) y viceversa mas los dos SG conectados, se puede desarrollar una aplicacion que transfiera datos de un PC a otro y viceversa ( claro esto ya lo trae Windows con lo de conexion directa por cable, pero puedo decir que hace 9 años construí una aplicacionen GWBasic, para poder transferir datos desde un Epson Abacus con un Kaypro 2000 de la misma manera... Que tiempos aquellos)
Ayudando a responder a alguien que pregunto en la lista acerca que abría el modem, podía marcar etc pero no sabe como detectar que del otro lado colgaron el telefono, esto se puede hacer simplemente con la señal CD en la mayoría de los casos.
Lo último que me falta comentar para el control es el establecimiento de los parametros de velocidad y paridad para la comunicacion entre los dispositivos, estos parametros deben ser iguales entre el PC y la Balanza, en el control MsComm se establece con la propiedad Settings que tiene un formato "Baudios,Paridad,Datos,Bit de parada" sin caer en mucho detalle sobre estos valores, te recomiendo que chequees en el manual de la balanza para setear a la balanza o al control con parametros exactamente iguales entre ambos FIJATE BIEN, ya que si algo es distinto, no tendras comunicacion correcta entre ellos .
Específicamente hablando del caso de la balanza que deseas conectar debes hacer lo siguiente:
1.- Establecer Settings en el control según los de la Balanza.
2.- Si la balanza envia los datos de forma de un bloque de datos fijo es decir: supongamos que la balanza transmite el siguiente bloque de información cada vez que registra un peso: "CCC999999,999CCC" y suponemos que CCC son caracteres de control de inicio y fin de la secuencia y 999999,999 es el peso registrado, si es asi entonces puedes setear el parametro InBufferSize a 16, ya que es la suma de todos los bytes que transmite la balanza cada vez que registra un peso.
3.- Si la balanza no transmite un bloque fijo de datos debes colocar a InbufferSize en 1.
4.- Para leer la Balanza debes usar la propiedad Input, la cual es la propiedad que te permite leer los datos en el buffer de recepcion de datos en el PC que llegaron de la Balanza, cada vez que ejecutas Input, se leen los datos y se borran del buffer (cuidado con eso).
Luego que hagas eso puedes hacer todas las pruebas necesarias, mas informacion puedes conseguir en la ayuda del control que trae el mismo Visual Basic.
Bien, espero haberte ayudado y a los amigos de la lista poder comprender mejor el funcionamiento del contro MsComm.