# Visual basic y puerto serie



## estrike182 (Ene 25, 2011)

Hola estudio electronica pero ahorita estoy con visual basic... y pues necesito algo mas simple, el "protocolo" lo hice mas por electronica asi que en programacion... mi pregunta es si es posible por ejemplo colocar algun pin (puerto serie) en 1 (10 segundos) y otro pin que me mande un tren de pulsos... 



00011111111111110000
00010001000100010000

Si que alguien que sepa y tenga ingenio como colocar eso, y pues decirme si tbm es posible


00011111111111110000
00010001000100010000
00010101010101010000

Eso, la frecuencia me gustaria programarlo, no lo se, tal vez con un for, de encender 10 sec y apagarlo y nuevamente encender 20  algo asi.


----------



## Unikfriend (Ene 25, 2011)

Hola Strike...
yo utilizo las lineas Mscomm1.DTREnabled = true y Mscomm1.RTSEnabled = true,
y pues la frecuencia la contrar con Timer1.interval = x

Saludos


----------



## estrike182 (Ene 25, 2011)

Disculpa la ignorancia recien aprendo esto de interfaces, la cosa, si yo colocase;

Private Sub Command1_Click()
Mscomm1.DTREnabled = true
End Sub
Private Sub Command2_Click()
Mscomm1.DTREnabled = false
End Sub

Funcionaria ? O ahy que agregar algo mas


----------



## gzaloprgm (Ene 26, 2011)

Lo más facil de hacer es usar un timer, que se ejecute cada digamos 1segundo...

En el tick del timer, podés hacer lo que quieras, setear el valor de DTREnabled al que quieras dependiendo del tiempo que haya pasado... Podés hacer una tabla y así dibujar el tren de pulsos que quieras...

Un saludo,
Gonzalo


----------



## Unikfriend (Ene 26, 2011)

Hola Strike!...
Sería algo así,

'global
Dim nBits As Integer
Dim cBits As Integer
Dim Dato As Integer

Sub Command1_Click ()
Timer1.Interval = 1000
Timer1.Enabled = True
Mscomm1.OpenPort = True
Mscomm1.DTREnabled = True
cBits = 1
nBits = Len(text1.Text)
End Sub

Sub Timer1_Timer ()
Dato = Val(Mid$(text1, cBits, 1))
If Dato = 1 Then
    Mscomm1.RTSEnabled = True
Else
    Mscomm1.RTSEnabled = False
End If
cBits = cBits + 1
If cBits > nBits Then
    Timer1.Enabled = False
    Mscomm1.DTREnabled = False
    Mscomm1.OpenPort = False
End If
End Sub


----------



## estrike182 (Ene 26, 2011)

Hmmm gracias por las respuestas, estube leyendo otro manuales, y mi cuñado dijo que lo intentara no mas, es decir 

Private Sub Command1_Click()
Mscomm1.DTREnabled = true
End Sub
Private Sub Command2_Click()
Mscomm1.DTREnabled = false
End Sub

Que primero viera que sucedia con eso y luego me daba a los trenes de pulso y esos.
Pero siento que igual faltara algo... ?

Unikfriend, podrias explicar un poquito tu codigo o decirme si hago primero lo que me dijo mi cuñado


----------



## gzaloprgm (Ene 26, 2011)

Faltaría unicamente que elijas el puerto COM por el que quieres sacar los datos (era alguna propiedad del MSComm, no lo recuerdo ahora...

Un saludo,
Gonzalo


----------



## Unikfriend (Ene 26, 2011)

Hi, Strike...
el puerto serial lo seleccionas en las propiedades del MSComm1.CommPort

la idea es que la casilla de texto tu coloque el tren de pulsos que deseas transmitir,
segun te entendi un pulso por segundo durante 10 segundos. 


Esta prueba ya la he realizado anteriormente y funciona bien, solo necesitas estar seguro
de tener la libreria correcta de la version de VB que este utilizando. puede ser
MSCOMM.VBX para VB3 o MSCOMM.OCX para VB4,VB5,VB6

Que version de VB utilizas?


----------



## estrike182 (Ene 26, 2011)

Guau, ya has logrado mandarlo ???
Ehy tio gracias. Uso VB6 como coloco esa libreria ? 
La pongo en la carpeta donde esta mi archivo ? 
Muchas gracias igual


----------



## Unikfriend (Ene 26, 2011)

Hi Strike...
Primero que nada soy tia... no tio..

Ok en la barra de herramientas del VB, debe aparecer un icono de un telefono,
ese el control del MSCOMM. si no aparece tienes que agregar el componente haciendo
click con el boton derecho del mouse y buscar el achivo MSCOMM.OCX en el directorio de
winodws.
Si ya he realizado esta prueba pero fue con VB3,
actualmente uso el Visual C Express para este tipo de interfaces .
Y el problema con los proyectos de VB es que no son 100% transportables entre versiones.
se batalla mucho cuando cambias de version, practicamente tienes que hacer todo otra vez.
por que muchos controles no llaman igual.
Saludos.


----------



## estrike182 (Ene 26, 2011)

Hola denuevo

Seguramente todo esto me ayudara, lo siguiente sera para personas que necesiten ayuda en esta parte:

Para colocar el archivo MSCOMM.OCX debemos ir al programa, en la pestaña proyecto -> componentes - Buscar el archivo o el titulo: "Microsoft Comm Control 6.0" si no lo esta debemos colocarnos nosotros, bueno; nos vamos al siguiente enlace:
http://www.nodevice.es/dll/MSCOMM32_OCX/item12152.html
Ahy mas abajo pide colocar el codigo y descargarlo. Una vez abierto el rar, copiar el archivo -> entrar a MI PC -> Al disco duro -> windows - system32 y pegarlo ahy.
Si el VB no lo actualiza, hacemos manualmente, colocamos ahy (En la ventana componente, de la pestaña proyecto) colocamos "Examinar" o "brow.." Y vamos a buscarlo donde lo dejamos, le damos en aplicar y nos saldra la imagen que deja ahy.


----------



## Unikfriend (Ene 26, 2011)

Hi Strike,  Ya lo hiciste?


----------



## estrike182 (Ene 26, 2011)

Hola, bueno segui viendo y el tio arriba decia que debia ademas elegir el puerto 
----
MSComm1.CommPort = 1 'Paso 1: elijo el puerto
MSComm1.Settings = "9600,N,8,1" 'Paso 2:
MSComm1.PortOpen = True
----
MSComm1.CommPort = 1 'Paso 1: elijo el puerto
Eso supongo que sera elegir el puerto... ? 
.----
Sera necesario establecer eso? Si no necesito establecer comunicacion solo mandar señales binarias?
MSComm1.Settings = "9600,N,8,1" 'Paso 2:
----------
Private Sub Command1_Click()
Mscomm1.DTREnabled = true
End Sub
Private Sub Command2_Click()
Mscomm1.DTREnabled = false
End Sub

Me ayudan ahora como quedaria dejarlo en un on off?

Si unikfreind pro no que hago dentro de ese codigo ?


----------



## Unikfriend (Ene 26, 2011)

Hi Strike,

Si tienes que elegir el puerto las PC normalmente tiene dos com1 o com2,

el baud rate no importa por que tu no lo vas a conectar,
solo necesitas el pinout del puerto serial, para saber que lineas vas a monitorear...

Hi, Strike...
Si ya tienes en el formato el MSComm y los dos botones Command1 y Command2
con esto codigo deberia ser suficiente para que enciendas y apagues esas
dos lineas..
'----------------------
Sub Form_Load ()
MSComm1.OpenPort = True
End Sub
Sub Form_UnLoad ()
MSComm1.OpenPort = False
End Sub
Sub Command1_Click ()
MSComm1.DTREnabled = True
MSComm1.RTSEnabled = True
End Sub
Sub Command2_Click ()
MSComm1.DTREnabled = False
MSComm1.RTSEnabled = False
End Sub
'----------------------
Saludos.


----------



## estrike182 (Ene 26, 2011)

Ho mucha gracias, aveces me sucede que a toda gente que pido ayuda poca ayuda es mia, el tema es que nose si hago malas preguntas o no pero ahora gracias , lo probare.


----------



## estrike182 (Ene 28, 2011)

Hola, me consegui un pc con puerto serie y hice el codigo, en la salida cuando voltaje saldria ? -12 creo k lei


----------



## Unikfriend (Ene 28, 2011)

Así es debes de ver que la señal cambie de 0 a -12V, cada vez que actives y desactives el DTR y RTS.

Saludos..


----------



## estrike182 (Ene 29, 2011)

Hola, encontre esos datos... son asi no ?


----------



## gzaloprgm (Ene 29, 2011)

Exactamente: Los "1" lógicos son de -12 volts aproximados, mientras que los "0" lógicos son de +12v

Lo mismo con las señales de control.

Un saludo,
Gonzalo


----------



## Meta (Ene 30, 2011)

Hay un manual que te puede ayudar del VB y puerto serie.

Ver manual.

Saludo.


----------



## Unikfriend (Ene 31, 2011)

Asi es Strike, 

ya conseguiste compilar el programa en VB6 ?


----------



## estrike182 (Ene 31, 2011)

Tengo que coseguirme un tester. Y me gustaria estar con mi cuñao jejej cuando lo pruebe


----------



## estrike182 (Abr 6, 2011)

Si lo probe, hise las conecaciones y todo pero rts y dtr, al activarlos o desactivarlo no me marca ninguna señal con un tester, tal vez la señal no alcanza a medir. Pero ocupe la funcion output que maneja la salida txd y manda palabras hex y similares y son vistas por el tester. Pero no es lo que necesito, es colocar o dejar un 1 ò 0 el tiempo que necesite. 
Sobre si el tester no me alcanza a marcar, no lo creo por que DTR y RTS se activan y desactivan...


----------



## Unikfriend (Abr 6, 2011)

'Hi, habilitaste el handshake del puerto com?
'Esta rutina esta hecha en Visual Basic 2008 Express
'

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.SerialPort1.Open()
Me.SerialPort1.Handshake = IO.Ports.Handshake.RequestToSend
End Sub

Private Sub Form1_Close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.SerialPort1.Close()
End Sub

Private Sub Button1_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.SerialPort1.DtrEnable = True
Me.SerialPort1.RtsEnable = True 
End Sub

Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
Me.SerialPort1.DtrEnable = False
Me.SerialPort1.RtsEnable = False
End Sub

End Class


----------



## estrike182 (Abr 7, 2011)

unikfriend, mande palabras en acsii, mi proposito era llegar al protocolo CAN, un tecnico electronico dijo que sacaba por rs 232 convertia a usb y luego otro conversor y llegaba a CAN. 
Uso VB6


----------



## Unikfriend (Abr 7, 2011)

Hi Strike, son muchas conversiones.
Es un proyecto propio o de la escuela o trabajo?
la seal rs232 va un convertidor usb,
y el pin DTR a donde se conecta?


----------



## estrike182 (Abr 7, 2011)

trabajo.

El microntrolador de es Sauer, y su modo de comunicacion es por el protocolo CAN. Y se programar por puerto serie... necesito comunicacion ... vi un conversor de serie a can, pero al parecer es muy caro. 
Me gustaria ver otra salida o si existe alguna otra opcion, el problema del conversor que vi, que es de afuera del pais.

Unikfriend, mira mande señales por el pin 2 TX. Pero necesito usar las salidas DTR y RTS pero al activarlas no me marcaba voltaje, o.XXv ... Solo TX funcionaba bien pensando que funciona cuando RTS sta activado...


----------



## Unikfriend (Abr 7, 2011)

Hi Strike,
lamentablemente no tengo instalado el VB 
pero lo probe con VC Express y me funciono 
sin problemas 
revisa la propiedad del Hanshake


----------



## Nano24 (May 19, 2011)

Hola a todos, tengo una duda con un programa que encontre en internet de VB6, el programa lo que hace es captar el color rojo que llegue a captar la camara, yo le agregue un sonido wav para que se reproduzca al captar el color pero la cosa es que la reproduccion se queda pegada hasta que el programa no deje de ver el color captado, como podria hacer para que el programa haga pausas y reproduzca el archivo wav mientras capta el color? alguna idea por favor.


----------



## Unikfriend (May 20, 2011)

Hi nano,
hay varias formas de controlar el tiempo de la alarma,
pero seria mas facil ayudarte si colocas el programa.


----------



## Nano24 (May 20, 2011)

Es bastante extenso el programa pero la verdad muy interensante de seguro alguien quizas pueda ayudarme, en los modulos "bas" hay un modulo con nombre de MatrizImagen, bueno en esa parte se encontrara lo siguiente, una parte del codigo donde dice:

'
++++++++++++++++++++detecta el color rojo+++++++++++++++++++++++++++++++++++
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
If (Rojo - Tolerancia > Azul) And (Rojo - Tolerancia > Verde) Then

n = n + 1
Rojo = 0
Verde = 200
Azul = 0
posX = posX + (ContadorX / 3 - 2) '+ posX
posY = posY + (234 - ContadorY) '+ posY


*PlaySound App.Path & "\SOUNDS.wav"*   'Aqui el comando para reproducir el archivo wav



End If


Lo que necesito es que mientras el programa detecte color, el archivo se reproduzca completamente y si aun sigue captando color que se vuelva a repetir, no doy con eso todavía. Porque lo que sucede es que el audio se queda colgado siempre iniciando como un disco rayado   y solo se reproduce normalmente justo cuando deja de ver el color rojo, alguien ayudeme!!!!! por favor!!!


----------

