Hola,
Desde hace un tiempo que vengo haciendo placas de adquisición RS-485, con PICs, y Visual Basic para la interface con el operador con mucho gráficos y controles visuales, inclusive con animaciones Flash.
La verdad no entiendo eso de que a VB no le da la capacidad, a menos que tengas una velocidad de muestreo excesivamente alta.
Solo hay que fijarse bien de no perder bytes. Por ejemplo si quiero recibir un mensaje en ASCII formado por un byte de inicio del paquete ":", x bytes de datos, y un byte de fin del paquete (Chr$(13));
(ej. ":12345"+Chr$(13)), el código seria así:
"Variables globales
CadDatos as string "Almacena los bytes de datos recibidos.
BandHeader as boolean "Indica que ya se recibio el byte de inicio.
Private Sub Form_Load()
"Configurar el puerto serie.
" Usar el COM1.
MSComm1.CommPort = 1
"19200 baudios, sin paridad, 8 bits de datos y 1 bit de parada.
MSComm1.Settings = "19200,N,8,1"
" Indica al control que lea todo el búfer al usar Input.
MSComm1.InputLen = 0
"Indica que envie el evento al recibir un caracter.
MSComm1.RThreshold = 1
"Abrir el puerto
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim ByteRx As String "Almacena el caracter actualmente procesado.
Dim RxString As String "Almacena todo el buffer recibido del puerto.
Dim i as integer "Controla el siguiente caracter a procesar.
"Ver si es un evento de recepcion.
If MSComm1.CommEvent = comEvReceive Then
"Leer todo el buffer recibido, puede haber mas de un caracter.
RxString = MSComm1.Input
"Procesar cada caracter del buffer individualmente.
For i = 1 To Len(RxString)
ByteRx = Mid$(RxString, i, 1)
"Mostrar la recepcion de bytes en hexa.
Texto1.Text = Texto1.Text + " 0x" + Hex$(Asc(ByteRx)) + " "
If ByteRx = Chr$(13) Then
Texto1.Text = Texto1.Text + Chr$(10)
End If
"Si ya se recibió el inicio del paquete,
If BandHeader Then
"Almacenar el byte en la cadena de datos.
CadDatos = CadDatos + ByteRx
End If
"Ver si es el inicio del paquete.
If ByteRx = ":" Then
BandHeader = True "Ya se recibio el inicio del paquete.
CadDatos = "" "Inicializar la cadena de datos.
End If
"Ver si se recibio el fin del paquete.
If ByteRx = Chr$(13) Then
"Mostrar la cadena recibida sin el protocolo.
Texto1.Text = Texto1.Text + "Paquete Recibido:"+CadDatos
BandHeader = False
End If
Next i
End If
End Sub
Por supesto esto es a lineas generales, el código es para no perder bytes. En RS-485 ademas se puede agregar la dirección del dispositivo, o usar un tipo de control mas estricto, como la generación y verificación de CRC, con reenvío de mensajes, etc.
Para la interface con el operador yo utilizo unos controles ActiveX de instrumentación de IoComp
http://www.iocomp.com/Las placas RS-485, se conectan mediante un conversor RS-232/485 al puerto serie de una PC conectada en red. El problema que tuve fue que hace poco se quería poder leer las entradas de las placas, desde cualquier computadora conectada a la red.
En esta situación tenía dos opciones:
-Usar un servidor de páginas web.
-Utilizar OPC (OLE para control de procesos).
En el primer caso la idea era usar un servidor de páginas web, y desde mi aplicación en VB, capturar la pantalla, convertirla a JPG y actualizar el archivo que muestra el servidor web. La desventaja es la poca velocidad de actualización de la página, mas o menos 5 segundos, pero para mi aplicación estaba bien. Tambíen tuve que aprender un poco de JavaScript.
El segundo caso era usar OPC, una norma que ya soporta la mayoría de los fabricantes de PLCs. Aquí se usan dos niveles, un servidor OPC (que es el que realmente se comunica con la placa de adquisición) y un cliente OPC(que puede estar corriendo en cualquier computadora de la red). Para mayores detalles de OPC vean
http://www.automatas.org/redes/opc.htmEl problema es que es mas sencillo hacer un cliente OPC en VB que un servidor, a menos que compren un Control ActiveX
http://www.opcconnect.com/complib.php. La ventaja es que la visualización en el cliente es mucho más rápida, se puede embeber en una página web, y que se puede comprar software OPC de distintos fabricantes para distintas aplicaciones. Para programación de OPC ver
http://www.opcconnect.comLuego pude "conseguir" un servidor OPC para ModBus
http://www.automatedsolutions.com/products/opcservers.asp. Teniento este servidor OPC, lo que me quedaba era convertir el protocolo de mis placas a la norma ModBus. En este sentido me ayudó mucho la página de pacalaconcurso(
www.pacalaconcurso.com), donde obtuve las primeras herramientas (simuladores Modbus Maestro-Esclavo, especificación de la norma, etc).
Así la cuestión, creo que en tu caso sí podrías hacer todo en una sola aplicación VB, pero de última podrías separar la adquisición del resto usando OPC.
Espero que te sirva.
Téc. Claudio J. Pérez
interrupt_request@hotmail.comCiberar-Sistemas & Desarrollos
Jujuy-Argentina