Visual Basic Foro

Electrónica => Interfaces PC y Electronica => Mensaje iniciado por: YAcosta en Mayo 12, 2012, 02:03:32 am

Título: Uso de MSComm
Publicado por: YAcosta en Mayo 12, 2012, 02:03:32 am
Hola, queria preguntarles como debo manejar la información que llega a este control.

Nunca use este control y ayer por primera vez y ayudando a un amigo lo voy conociendo. El estaba usando un timer para leer la información de este control y luego de revisar y revisar entendí que no era necesario usar ningún timer ya que el mismo control reacciona cuando recibe información, hasta allí bien.

El asunto es que recibe una cadena de números y necesitamos tomar de 3 en 3 pero se hace un despelote cuando el numero que debemos recibir es 25 y al tomar tres (eje 425) cogemos un numero que no debemos tomar, si ponemos a dos cifras se friega para el numero 100, y lo mismo para los números del 1 al 9.

El habia probado meter en la señal (usando un simulador) un caracter (ejemplo la letra A) para separar los numeros y de alli le conclui que debiamos usar un algoritmo para leer esto: A433A42A333A1A12  y separarlo como: 433, 42, 333, 1 y 12 y asi sucesivamente.

Por eso quería por favor si me aclaraban un poco conceptualmente como debería usar este control, si es que debo ir por alli o estamos errados, mi amigo es electrónico pero casi no sabe nada de VB6 y quizá esta explicándome mal y alli tenemos un problema de comunicación, y yo no conozco nada de electrónica y de este control VB6 recién ayer por primera vez lo voy viendo.

Quiero darle una mano a el y por eso queria pedirles un poco de orientacion acerca de como debo entender o manipular los datos que obtengo de este control, ¿como es que usualmente se trabaja con esta señal? o es que quiza el problema viene desde la parte electrónica, no lo se.

Este codigo pusimos en el Load

Código: (VB) [Seleccionar]
Dim CommPort As String, Handshaking As String, Settings As String

MSComm1.CommPort = 3     'puerto com1
MSComm1.Settings = "9600,n,8,1"     'configuracion del puerto serie
If MSComm1.PortOpen = False Then
    MSComm1.PortOpen = True
End If

Y este código en el control
Código: (VB) [Seleccionar]
Dim NumPuerto As Integer
If memNumFuente = 3 Then memNumFuente = 0
memNumFuente = memNumFuente + 1   
                                                   

NumPuerto = MSComm1.Input  '<---   Aqui recibo el numero que me envia el control

lblFuente(memNumFuente).Caption = NumPuerto 

En las propiedades del control pusimos el ImputLen en 3 pero los resultados no son los esperados, por lo que explique arriba.

Saludos
Título: Re:Uso de MSComm
Publicado por: cristian_19a en Mayo 12, 2012, 04:11:55 pm
si tu algoritmo trama es A433A42A333A1A12
mejor seria que coloques un carácter especial como |
por ejemplo seria así |433|42|333|1|12
la pregunta es siempre es una trama de 5 números agrupados? si es asi se hace  un for para obtener los numeros si es variable se captura el numero de caracteres que existe en la cadena de ingreso osea capturar los |
por ejemplo seria asi

Código: (VB) [Seleccionar]
'------------------------------------------------------------------
' esto es cuando la cadena tiene q tener si o si los 5 numeros
Dim xCad as string
xCad = MSComm1.Input  'trama=|433|42|333|1|12

If xCad <> "" Then
   MostrarPuerto  Split(xCad, "|")(1) '433
   MostrarPuerto Split(xCad, "|")(2) ' 42
   MostrarPuerto Split(xCad, "|")(3) ' 333
   MostrarPuerto Split(xCad, "|")(4) ' 1
   MostrarPuerto Split(xCad, "|")(5) '12
end if
'------------------------------------------------------------------
'ahora si es varible seria asi
Dim xCad as string,xCadObt() As String
Dim xCon As Integer
xCad = MSComm1.Input  'trama=|433|42|333
If xCad <> "" Then
  xCadObt = Split(xCad, "|")
  For xCon  = 1 To UBound(xCadObt)
   MostrarPuerto  xCadObt (xCon)
  Next xCon
end if

private sub MostrarPuerto (byval xNum as string)
  'lblFuente().Caption = xNum
  MsgBox xNum
end sub

si tienes alguna duda publica tu código para ayudarte a solucionarlo
Título: Re:Uso de MSComm
Publicado por: YAcosta en Mayo 12, 2012, 07:29:02 pm
Gracias Cristian, si es variable según entiendo. Mañana me reuno con mi amigo y veremos esto. El ejemplo del split creo que es el que mas se ajusta.

Saludos
Título: Re:Uso de MSComm
Publicado por: cristian_19a en Mayo 12, 2012, 07:43:15 pm
muy bien cualquier duda no dudes en comentar
otra pregunta con que componentes lo estas conectando o indicador
o se está creando tu amigo uno

yo estube trabajando un tiempo con indicador de peso con rice lake, jadever, bilanciai y mettler toledo

Gracias
Título: Re:Uso de MSComm
Publicado por: YAcosta en Mayo 12, 2012, 09:22:25 pm
Si el se esta creando uno, se dedica a esto.
Lo de la derecha es el programa que se esta haciendo, lo de la izquierda es un simulador. Mañana debo estar viendo este tema a ver como se va resolviendo o que problemas tenemos. Muchas gracias.

(http://dl.dropbox.com/u/4052038/Otros/Amigo.jpg)
Título: Re:Uso de MSComm
Publicado por: cristian_19a en Mayo 13, 2012, 02:19:23 am
aya muy bien ese es el proteus soy avanzado en eso lo uso para hacer diferentes simulacion de proyectos con pic's

Ok esperamos (y)