Programación General > Visual Basic 6.0 e inferiores
Comunicacion Con Puerto Serie
aura:
Estimados amigos:
Estoy trabajando en un programa de comunicaciones (de dispositivos de peso), con puertos serie, y necesito algunas ideas, envio codigo para que veais lo que hasta ahora he hecho, me gustaria profundizar mas en este tema, pero desconozco su funcionamiento al completo
--- Código: Text --- Option ExplicitDim Cadena As String Private Sub Conectar_Click()Dim Velocidad As String, Paridad As String, Bits As String, Parada As String 'comprueva que el puerto este cerrado para poder abrirlo If MSComm1.PortOpen = False Then 'determina el puerto que hemos seleccionado If Combo1.ListIndex = 0 Then MSComm1.CommPort = 1 Else MSComm1.CommPort = 2 End If 'determina: 9600-Velocidad en Baudios, N-No utiliza ninguna paridad, '8-Cantidad de bits de envio y recepcion por paquete, '1-Determina los bits de parada Velocidad = Trim(TxVelocidad.Text) Paridad = Trim(TxParidad.Text) Bits = Trim(TxBits.Text) Parada = Trim(TxParada.Text) MSComm1.Settings = Velocidad & "," & Paridad & "," & Bits & "," & Parada 'lee todo el buffer de entrada para que quede vacio MSComm1.InputLen = 0 'Abre el puerto seleccionado MSComm1.PortOpen = True Me.Caption = "Conectado por el puerto " & MSComm1.CommPort End IfEnd Sub Private Sub Desconectar_Click() If MSComm1.PortOpen Then 'cierra el puerto MSComm1.PortOpen = False Me.Caption = "Desconectado" End IfEnd Sub Private Sub Enviar_Click() 'envia el texto escrito. MSComm1.Output = TextoEnviar.Text & vbCr 'coloca el texto que enviamos en la pantalla Texto.Text = Texto.Text & vbCrLf & "<Ordenador 1>" & TextoEnviar.Text TextoEnviar.SetFocusEnd Sub Private Sub Form_Load() Combo1.AddItem "Com1" Combo1.AddItem "Com2" Combo1.ListIndex = 0End Sub Private Sub Form_Unload(Cancel As Integer) Desconectar_ClickEnd Sub 'El evento OnComm se genera siempre que cambia el valor de la propiedad'CommEvent e indica que se ha producido un evento o un error en la comunicación.Private Sub MSComm1_OnComm() Dim i As Integer Dim Valor As String 'recoge el valor de entrada Valor = MSComm1.Input 'busca la posicion del caracter de salto de linea i = InStr(Valor, Chr(13)) 'si no hay ningun salto de linea, quiere decir que la informacion que recibe 'es parte de una cadena recibida con anterioridad. If i = 0 Then Cadena = Cadena & Valor Else Cadena = Cadena & Left(Valor, i - 1) Texto.Text = Texto.Text & vbCrLf & "<Ordenador 2>" & Cadena Texto.SelStart = Len(Texto.Text) Cadena = "" End IfEnd Sub [/QUOTE]
QliX=D!:
Ajap.. y que desconoces completamente?
:blink:
elmango80:
Hola Aura!!!
Todo esta muy bien lo unico que te faltaria serian unas tonterias para trabajar lo basico del MSComm, en primer lugar te faltaria configurar dos propiedades mas del MSComm en el antes de abrir el puerto:
--- Código: Text --- objeto.RThreshold = Valor
Establece y devuelve el número de caracteres que se van a recibir en el buffer antes de que el control MSComm genere el evento OnComm.
Al asignar a la propiedad RThreshold el valor 0 (el valor predeterminado) se desactiva la generación del evento OnComm cuando se reciben caracteres. Al asignar a la propiedad RThreshold el valor 1, por ejemplo, hace que el control MSComm genere el evento OnComm cada vez que entra un carácter en el búfer de recepción.
--- Código: Text --- objeto.SThreshold = Valor
Establece y devuelve el número mínimo de caracteres que puede admitir el búfer de transmisión antes de que el control MSComm genere el evento OnComm.
Al asignar a la propiedad SThreshold el valor 0 (predeterminado) se desactiva la generación del evento OnComm para los eventos de transmisión de datos. Al asignar a la propiedad SThreshold el valor 1 el control MSComm genera el evento OnComm cuando el búfer de transmisión está completamente vacío.
Ademas de configurar esas dos propiedades deberias cambiar una parte de tu codigo, antes de abrir el puerto deberias verificar que no este abierto porque si lo esta y lo intentas abrir te va a generar un error.
--- Citar ---
'Abre el puerto seleccionado
MSComm1.PortOpen = True
--- Fin de la cita ---
Deberias cambiarlo por
--- Código: Text --- 'Abre el puerto seleccionado If Not MSComm1.PortOpen Then MSComm1.PortOpen = True End If
Otra cosa que tambien te aconsejaria que hicieras es en el evento OnComm] es verificar quien fue el que genero este evento, ya que el mismo se puede generar por varias razones, las principales son por haber recibido un dato en el puerto, por haber enviado un dato por el puerto o por causa de algun error, esto lo haces verificando el valor de la propiedad CommEvent. Entonces todas las instrucciones que tienes dentro del evento OnComm debes colocarlas dentro de un condicional, ya sea un If...Then...Else o en un Select Case de la siguiente forma
--- Código: Text --- If objeto.CommEvent = comEvReceive Then Valor = objeto.Input . . . End If
De esta forma solo vas a leer en el puerto unica y exclusivamente cuando haya un dato en el mismo.
Espero que esto te ayude a utilizar mejor el MSComm y que sigas investigando mas para que le saques el mayor provecho...
aura:
Muchas gracias el mango80, de todas formas he subido al ftp, un ejemplo del codigo que he enviado, para quien este interesado en empezar a trabajar con la comunicaciones con puertos....
ebolo:
Hola aura.
Pongo un adjunto un programilla que hice para balanzas de bizerba que usa los puertos COM.
Saludos.
Navegación
[#] Página Siguiente
Ir a la versión completa