• Martes 21 de Mayo de 2024, 01:33

Autor Tema:  Comunicacion Con Puerto Serie  (Leído 4448 veces)

aura

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Comunicacion Con Puerto Serie
« en: Miércoles 17 de Marzo de 2004, 10:30 »
0
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
  1.  
  2. Option Explicit
  3. Dim Cadena As String
  4.  
  5.  
  6. Private Sub Conectar_Click()
  7. Dim Velocidad As String, Paridad As String, Bits As String, Parada As String
  8.  
  9.     'comprueva que el puerto este cerrado para poder abrirlo
  10.     If MSComm1.PortOpen = False Then
  11.         'determina el puerto que hemos seleccionado
  12.         If Combo1.ListIndex = 0 Then
  13.             MSComm1.CommPort = 1
  14.         Else
  15.             MSComm1.CommPort = 2
  16.         End If
  17.         'determina: 9600-Velocidad en Baudios, N-No utiliza ninguna paridad,
  18.         '8-Cantidad de bits de envio y recepcion por paquete,
  19.         '1-Determina los bits de parada
  20.         Velocidad = Trim(TxVelocidad.Text)
  21.         Paridad = Trim(TxParidad.Text)
  22.         Bits = Trim(TxBits.Text)
  23.         Parada = Trim(TxParada.Text)
  24.        
  25.         MSComm1.Settings = Velocidad & "," & Paridad & "," & Bits & "," & Parada
  26.         'lee todo el buffer de entrada para que quede vacio
  27.         MSComm1.InputLen = 0
  28.         'Abre el puerto seleccionado
  29.         MSComm1.PortOpen = True
  30.         Me.Caption = "Conectado por el puerto " & MSComm1.CommPort
  31.     End If
  32. End Sub
  33.  
  34. Private Sub Desconectar_Click()
  35.     If MSComm1.PortOpen Then
  36.         'cierra el puerto
  37.         MSComm1.PortOpen = False
  38.         Me.Caption = "Desconectado"
  39.     End If
  40. End Sub
  41.  
  42. Private Sub Enviar_Click()
  43.     'envia el texto escrito.
  44.     MSComm1.Output = TextoEnviar.Text & vbCr
  45.     'coloca el texto que enviamos en la pantalla
  46.     Texto.Text = Texto.Text & vbCrLf & "<Ordenador 1>" & TextoEnviar.Text
  47.     TextoEnviar.SetFocus
  48. End Sub
  49.  
  50. Private Sub Form_Load()
  51.     Combo1.AddItem "Com1"
  52.     Combo1.AddItem "Com2"
  53.     Combo1.ListIndex = 0
  54. End Sub
  55.  
  56. Private Sub Form_Unload(Cancel As Integer)
  57.     Desconectar_Click
  58. End Sub
  59.  
  60. 'El evento OnComm se genera siempre que cambia el valor de la propiedad
  61. 'CommEvent e indica que se ha producido un evento o un error en la comunicación.
  62. Private Sub MSComm1_OnComm()
  63.     Dim i As Integer
  64.     Dim Valor As String
  65.    
  66.     'recoge el valor de entrada
  67.     Valor = MSComm1.Input
  68.     'busca la posicion del caracter de salto de linea
  69.     i = InStr(Valor, Chr(13))
  70.    
  71.     'si no hay ningun salto de linea, quiere decir que la informacion que recibe
  72.     'es parte de una cadena recibida con anterioridad.
  73.     If i = 0 Then
  74.         Cadena = Cadena & Valor
  75.     Else
  76.         Cadena = Cadena & Left(Valor, i - 1)
  77.         Texto.Text = Texto.Text & vbCrLf & "<Ordenador 2>" & Cadena
  78.         Texto.SelStart = Len(Texto.Text)
  79.         Cadena = ""
  80.     End If
  81. End Sub
  82.  
  83.  
[/QUOTE]

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Comunicacion Con Puerto Serie
« Respuesta #1 en: Miércoles 17 de Marzo de 2004, 15:34 »
0
Ajap.. y que desconoces completamente?
 :blink:
QliX=D! - From the top of Tsunami

elmango80

  • Miembro MUY activo
  • ***
  • Mensajes: 149
  • Nacionalidad: ve
    • Ver Perfil
Re: Comunicacion Con Puerto Serie
« Respuesta #2 en: Miércoles 17 de Marzo de 2004, 19:54 »
0
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
  1.  
  2.      objeto.RThreshold = Valor
  3.  
  4.  


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
  1.  
  2.      objeto.SThreshold = Valor
  3.  
  4.  


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

Deberias cambiarlo por

Código: Text
  1.      
  2.      'Abre el puerto seleccionado
  3.      If Not MSComm1.PortOpen Then
  4.           MSComm1.PortOpen = True
  5.      End If
  6.  
  7.  

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
  1.  
  2.      If objeto.CommEvent = comEvReceive Then
  3.           Valor = objeto.Input
  4.           .
  5.           .
  6.           .
  7.      End If
  8.  
  9.  


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...
Citar
No soy bueno, tampoco soy malo sino todo lo contrario...

aura

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Comunicacion Con Puerto Serie
« Respuesta #3 en: Jueves 18 de Marzo de 2004, 11:46 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 188
    • Ver Perfil
Re: Comunicacion Con Puerto Serie
« Respuesta #4 en: Domingo 21 de Marzo de 2004, 18:16 »
0
Hola aura.
Pongo un adjunto un programilla que hice para balanzas de bizerba que usa los puertos COM.
Saludos.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

aura

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Comunicacion Con Puerto Serie
« Respuesta #5 en: Lunes 22 de Marzo de 2004, 10:04 »
0
Gracias ebolo, por el codigo que me has mandado, mas o menos tengo solucionado ya el problema, lo unico que me falta es que me den los codigos que tengo que mandar a las balanzas, vamos a ver si el proveedor me los da...

De todas formas os agradezco a todos el interes por este tema y espero poder ayudares alguna vez igual que lo habeis echo vosotros a mi...

aura

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re: Comunicacion Con Puerto Serie
« Respuesta #6 en: Martes 23 de Marzo de 2004, 18:03 »
0
Estimados amigos:
Gracias por vuestra colaboracion, he conseguido realizar lo que queria, el problema residia en el evento oncomm,  asi he añadido una linea antes de igual a la variable valor el contenido del mscomm1.input.

Lo que he introducido en la linea nueva es la funcion DoEvents, asi los tiempos de respuesta de la balanza se coordinan con los tiempos de respuesta del ordenador, puesto que este codigo me funcionaba en algunos equipos y en otros no ...

Espero que esta experiencia sea util para ustedes...

toten

  • Miembro MUY activo
  • ***
  • Mensajes: 140
    • Ver Perfil
Re: Comunicacion Con Puerto Serie
« Respuesta #7 en: Lunes 25 de Julio de 2005, 14:18 »
0
mango men yo soy de venezuela me gustaria conocerte no tienes un msn para comunicarnos???
[size=109]Andres Eloy Blanco Madriz [ToT3n][/b][/size]
[size=109]Voy Hablando Y Con El Maso Dando...[/size]
[size=109]Solo Soy La Sombra Del Lado Oscuro De Tu Alma...[/size]
[size=109]Y A La Hora De La Verdad Yo Solo Se Que No Se Nada...[/size]
[size=109]|**VENEZUELA**|[/size]