Autor Tema: Uno más de RS232 - WinXP+VB6  (Leído 24127 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #15 en: 24 de Julio de 2007, 23:03:01 »
Ya regresé a mis pruebas...

Quise compilar la siguiente instrucción pero VB me regaña...

Public volt(1 To 40) As String  'lleva el voltaje de cada medidor

y me dice que...



ya le di varias revisadas y no entiendo porqué está mal.

Ah y lo de mid e instr todavía no lo pruebo. Apenas compile les aviso. :mrgreen:

Estas intentando declarar un array publico en un formulario. O creas un modulo(.bas) y lo declaras como publico ahi y accedes desde el formulario, o bien cambias el "Public" a "Private" en la declaracion dentro del form, pero solamente vas a poder acceder al array desde codigo dentro del form.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #16 en: 25 de Julio de 2007, 12:54:03 »
Bruno, gracias, funcionó con private  :mrgreen:

Ya probé la instrucción Mid e Instr y funciona bien, gracias!!!  :mrgreen:

El pic manda una cadena cuando vb la pide, la cadena es más o menos así...

B01 12.5V(enter)B02 12.5(enter) B03..... B40 12.5(enter)

Aquí mi código...

Código: [Seleccionar]
Public cadena As String 'cadena a recibir desde pic
Public poscad As Integer 'posición de texto en cadena
Public i As Integer 'lleva el conteo del arreglo
Private volt(1 To 40) As Double  'lleva el voltaje de cada medidor
Public buscadena As String 'cadena a buscar

Private Sub Close_Click()
    MSComm1.PortOpen = False 'Cierra puerto
    End 'termina programa
End Sub

Private Sub Command1_Click()
Text1.Text = ""
End Sub

Private Sub Command2_Click()
MSComm1.Output = Chr$(115) 'envía petición de envío, letra s
Command2.Enabled = False 'evita que puede reclickear botón

End Sub

Private Sub Form_Load()
       MSComm1.Settings = "19200,N,8,1"
       MSComm1.CommPort = 1 'usa el com1
       MSComm1.InputLen = 0 'tamaño de buffer de entrada
       MSComm1.PortOpen = True 'abre puerto
       MSComm1.RThreshold = 1 'habilita el evento ante recepción
                              'en buffer después de recibir 1 byte
                             
'inicializa el contenido de las labels que muestran
'el voltaje en tiempo real
Label01.Caption = "n/d"
Label02.Caption = "n/d"
.........
Label34.Caption = "n/d"
Label35.Caption = "n/d"
Label36.Caption = "n/d"
Label37.Caption = "n/d"
Label38.Caption = "n/d"
Label39.Caption = "n/d"
Label40.Caption = "n/d"
End Sub

Private Sub MSComm1_OnComm()
'aquí llega si el com1 tuvo cambios en rx o tx
If MSComm1.InBufferCount >= 419 Then 'el pic envía 419bytes
cadena = MSComm1.Input
For i = 1 To 40
    If (i < 10) Then
        buscadena = "B0" & i
    Else
        buscadena = "B" & i
    End If
    poscad = InStr(cadena, buscadena) 'busca B?? en cadena
    volt(i) = Mid(cadena, (poscad + 4), 4) 'deposita voltaje
Next

Label01.Caption = volt(1)
Label02.Caption = volt(2)
Label03.Caption = volt(3)
Label04.Caption = volt(4)
Label05.Caption = volt(5)
Label06.Caption = volt(6)
Label07.Caption = volt(7)
Label08.Caption = volt(8)
Label09.Caption = volt(9)
Label10.Caption = volt(10)
Label11.Caption = volt(11)
.......
Label35.Caption = volt(35)
Label36.Caption = volt(36)
Label37.Caption = volt(37)
Label38.Caption = volt(38)
Label39.Caption = volt(39)
Label40.Caption = volt(40)
vstring.Caption = 0 'borra contenido

For i = 1 To 40
    vstring.Caption = vstring.Caption + volt(i) 'suma los voltajes
Next

Command2.Enabled = True 'evita que pueda reclickear botón
End If
End Sub

Private Sub Timer1_Timer()
'cada 25ms entrega el tamaño del buffer de entrada
Text2.Text = MSComm1.InBufferCount
End Sub

Y la pantalla queda así...

http://img131.imageshack.us/img131/5717/dibujotp7.jpg

Seguiré trabajando, gracias de nuevo.


Aprovechando el tema, ¿cómo hago para que el estilo visual de las ventanas de vb sea como winxp? En vc++ lo hago de esta forma...

http://www.migsantiago.com/index.php?option=com_content&view=article&id=5&Itemid=6
« Última modificación: 21 de Marzo de 2009, 15:11:59 por migsantiago »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #17 en: 25 de Julio de 2007, 22:30:22 »
Pali me hizo favor de enviarme una guía de MSCOMM muy buena, sacada de los discos de MSDN. La pueden encontrar aquí...

http://todopicsan.4shared.com

Gracias

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #18 en: 10 de Agosto de 2007, 17:33:05 »
Hola de nuevo

Ya he estado trabajando más con el componente MSCOMM. Quisiera saber como generar un ejecutable que incluya ese componente, para instalarlo en una PC que no tenga Visual Basic instalado.

¿Necesito descargar algún generador de instalador o Visual Basic lo puede generar?

Gracias  ;-)

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #19 en: 11 de Agosto de 2007, 14:33:38 »
En el mismo visual hay una herramienta boton inicio->programas-> microsoft visual basic (si la tienes instalada) se llama asistente para empaquetador o algo así, solo sigue los pasos y listo.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #20 en: 12 de Agosto de 2007, 12:21:20 »
OK lo voy a buscar, también tengo otra pregunta... estoy usando una imágenes GIF que cambian dentro de la ventana según la ejecución del programa... ¿esas también las empaca esta herramienta?

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #21 en: 13 de Agosto de 2007, 15:09:59 »
umm  :roll: no recuerdo... creo que sip. todo lo que use el proyecto vbp quedará empacado (incluso si usas un control activeX)
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #22 en: 13 de Agosto de 2007, 17:40:29 »
OK Pali, les cuento mis resultados luego  :mrgreen:

Gracias

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #23 en: 13 de Agosto de 2007, 19:55:03 »
Dentro de las opciones de empaquetado se pueden agregar los archivos que uno quiera, incluso en donde se instalarán.



Gracias Pedro

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #24 en: 14 de Agosto de 2007, 14:57:48 »
exacto migsantiago. sino mal recuerdo el empacador mira que es lo que tienes enlazado al .vbp y lo encapsula.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #25 en: 14 de Agosto de 2007, 16:19:23 »
Otra duda...

Hablando en lenguaje C cuando quiero imprimir un flotante con 1 decimal y 2 cifras enteras le pongo

flota=12;
printf("%2.1f",flota); //y entrega 12.0

Ahora que estoy en VB... no sé ni como hacerlo.

Me interesa que esta línea muestre los decimales...

Private volt(1 To 40) As Double  'lleva el voltaje de cada medidor
lblVpantalla(i).Caption = volt(i + 1)

¿Qué me sugieren?  :mrgreen:

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #26 en: 14 de Agosto de 2007, 16:31:33 »
No se si entendi bien:

A ver...

If Len(volt(i + 1)) < 3 Then
    lblvpantalla(i).Caption = volt(i + 1) & ".0)"
Else
    lblvpantalla(i).Caption = Left(volt(i + 1), 4)
End If
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #27 en: 14 de Agosto de 2007, 16:49:09 »
con double puedes mostrar decimales sin necesidad de arrays, si lo que quieres es mostrar n digitos después de la coma, entonces habría que convertirlo a string y seleccionar cuantos caracteres quieres mostrar.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #28 en: 14 de Agosto de 2007, 16:53:02 »
No me expliqué bien  :oops:

Si mi variable double (flotante en c) tiene el valor 12 quiero que cuando la imprima en una label entregue 12.0.

----------------------
public volt as double
volt=12

lblLabel.caption =volt 'esto normalmente entrega 12 en vez de 12.0
------------------------

Bruno, por ahí va la cosa, pero ¿no hay forma de hacerlo automáticamente como en c?

Además... no sé qué hace Len y Left  :oops:

Pedro, ¿cómo hago esa conversión que mencionas?

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Uno más de RS232 - WinXP+VB6
« Respuesta #29 en: 14 de Agosto de 2007, 17:06:33 »
Bruno, por ahí va la cosa, pero ¿no hay forma de hacerlo automáticamente como en c?

Hasta donde yo se de VB6, no.

Me equivoque. la instruccion LEN devuelve la longitud de la variable en bytes.
La Left  es solo para cadenas de texto, y lo que hace es tomar cierta porcion del lado izquierdo de un string:
Su estructura es:

Left(cadena,cantidadcaracteres)

Entonces si por ejemplo:

MiCadena = "Hola Mundo"

y pongo
Msgbox left(MiCadena,6)

deberia salir "Hola M"

El algoritmo anterior sería:

If Len(cstr(volt(i + 1))) < 3 Then
    lblvpantalla(i).Caption = volt(i + 1) & ".0)"
Else
    lblvpantalla(i).Caption = Left(volt(i + 1), 4)
End If

Me había olvidado de hacer una conversión explícita :D para pasar de double a string

Saludos.


"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.