Estos son los mandatos e instrucciones mas frecuentes para utilizar el puerto serie:
' Principales mandatos para utilizar el puerto serie: Serie = My.Computer.Ports.OpenSerialPort("COM1") 'Constructor ' 'Definir las características de la comunicación Serie.BaudRate = 19200 'velocidad de comunicaciones Serie.DataBits = 8 'Longitud para Byte de datos Serie.Parity = Parity.Even 'paridad(enumeracion parity) Serie.StopBits = StopBits.Two 'Bits parada después datos
' 'Abrir/Control/Liberar Puerto Serie.Open() 'Abrir el puerto Serie Serie.Close() 'Cerrar el Puerto Serie Serie.Dispose() 'Liberar objecto Dim SiNo As Integer SiNo = Serie.IsOpen 'El Puerto esta abierto? Dim Puerto As String Puerto = Serie.PortName 'Nombre del puerto
' 'Manejo y Control de señales Dim Estado As Boolean 'True=Activa / False=Inactiva Estado = Serie.CDHolding 'Estado de la señal carrier detect Estado = Serie.CtsHolding 'Señal Clear to Send Estado = Serie.DsrHolding 'Señal Data Set Ready Serie.DtrEnable = True 'Activar de Data Terminal Ready Serie.RtsEnable = True 'Activar Request To Send
' 'Control Transmission/Recepcion Serie.ReadBufferSize = 1024 'Definir tamaño buffer recepcion Serie.WriteBufferSize = 1024 'Definir tamaño buffer envio Serie.ReadTimeout = 10 'Fuera de tiempo en receción Serie.WriteTimeout = 10 'Fuera de tiempo en transmisión Serie.Handshake = Handshake.XOnXOff 'Control recepcion/envio Serie.DiscardInBuffer() 'Borrar buffer de entrada Serie.DiscardOutBuffer() 'Borrar buffer de salida
' 'Enviar datos Contador = Serie.BytesToWrite 'Bytes en espera de ser escritos Serie.Write("Hola Mundo") 'Enviar una cadena de caracteres Serie.WriteLine("Hola Mundo") 'Enviar una linea
' 'Leer datos Dim Contador as Integer Contador = Serie.BytesToRead 'Bytes en espera de ser leidos Serie.ReadByte() 'Leer un byte Serie.ReadChar() 'Leer un char Serie.ReadLine() 'Leer una linea Serie.ReadExisting() 'Leer datos existentes en buffer
PepLluis :-)
Saludos,
Pep Lluis
hola que tal estoy tratando de hacer una aplicacion de un medidor de energia electrica, y tiene un puerto rs485 y tengo que presentarlo en pantalla y no sepor donde empezar me gustaria que me ayudaras…gracias
taz_ues@hotmail.com
Me podeis ayudar a leer la señal de un dispositivo lector de billetes a traves del puerto serial con VB .net
Hola Luis,
Al igual que nuestro anterior compañero, te invito a enviarme tu peticion a traves del correo, puedes usar la opcion ‘contact’ en el recuadro ‘This Blog’ arriba a la izquierda.
Espero tus noticias, asi como tambien espero poderte ayudar.
Estoy creando una aplicación en vb.net…La misma estará corriendo en 3 PC…una de estas Pc tendrá la base datos…Entonces, el problema es: Cómo hago que cada aplicación guarde la ruta de la base de datos….
Me explico mejor: en vez de fijar una ruta en el codigo, fijarla despues que la aplicación esté lista, es decir, buscar la ubicacion de la bd mediante un dialogbox por ejemplo…DE ANTEMANO gracias………
Hola rodi… este post es sobre el espacio de nombres de System.IO.ports si te parece contacta conmigo para discutir esta question o bien puedes postear en los blogs de MSDN, donde bien seguro podemos ayudarte.
Saludos,
Pep Lluis,
Tengo problemas con la recepcion de datos. Estoy utilizando el io.ports.serialport definido con withEvents, pero no puedo recibir ningun dato. Sin embargo, dentro de la subrutina de escrituta he incluido un pequeño bloque de lectura que utiliza puerto.readExisting y recibe informacion basica, pero la info importante no aparece. Todo funciona muy bien desde la hyperterminal. Ayudame con la recepcion de datos. Te lo agradecere toda la vida
Patricio, Mandame un ejemplo de codigo para poder indicarme sobre el mismo. Puedes hacerlo en la opcion [This Blog] [Contact] – (Parte superior a la Derecha). Saludos, Pep Lluis,
Hola Luis, estoi haciendo mi proyecto de titulo, y necesito enviar datos a traves del puerto serie con una pantalla en visual basic; dichos datos deben ser adquiridos por un basic stamp para controlar unos servomotores, necesito ayuda ya que me queda super poco tiempo para poder entregar mi tesis, esperando una pronta respuesta se despide Elias M.
Elias,
Mandame una descripcion mas detallada y el codigo que tengas, para poder indicarme sobre el mismo. Puedes hacerlo en la opcion [This Blog] [Contact] – (Parte superior a la Derecha). Saludos, Pep Lluis,
Te Contestare tan pronto como me sea posible.
Saludos,
Pep Lluis,
TEngo una impresora de ticket en puerto com1 pero al parecer no logra conectarse via com, por que el error me dice que el nombre no existe o no esta asiganado
Debes dirigirte a :
MiPc>Administrar>Administrador de dispositivos>Puertos(Com & LPT)
En el veras una enumeracion de los puertos disponibles, luego solo tienes que utilizar uno de ellos para conectar la impresora y efectuar sobre el mismo la instruccion de Open.
Saludos,
Pep Lluis,
PepLluis quiero saber todo lo que vos sabes como hago?
Gracias Juan Carlos por tus amables palabras… pero creo que en mi caso no es por listo, si no mas bien por viejo. No hay duda que el conocimiento y la experiencia se adquieren con los años por lo que mi formula es muy sencilla, el problema es que algunos necesitamos 30 años para saber lo poco que sabemos, la suerte es que lo mas jovenes teneis mas facilidad por lo que provablemente en menos tiempo tendreis el mismo conocimiento, solo es cuestion de mantener despierta la curiosidad por aprender.
Saludos,
Pep Lluis,
Hola!, muhcas gracias por tomarte el tiempo de dar aconcoer estos datos.
Mira yo estoy tratando de hacer una aplicación uqe lea el número telefónico de una llamada entrante por un modem con vb.net 2005 pero no logro entender como «cachar» cuando entre la llamada, entiendo que esto va en el evento datareceived, encontre este codigo, pero es en C y no se como traducirlo a vb y lo peor de todo no se en que parte de todo el código va:
this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.Recepcion);
Agradezco de antemano tu ayuda
Gracias por tu amabilidad.
Debo confesarte que los Modems que utilice en su momento no disponian de informacion documentada sobre comandos AT o registros que suministren esa informacion. Quizas algun modem de los incorporados en GPS, ISDN o tecnologias mas actuales lo permiten… pero lo desconozco. En todo caso si dispones de esa informacion deberias decirme el formato e intentamos ver como aplicamos un ejemplo para VB.NET.
Recuerdo que la unica informacion que suministran los Modems antiguos es un enviar por el TX del rs232 un simple «ring» cuando reciben señal por el pin nº9 asi el programa puede mandar un ATH0 .. creo? para descolgar y efectuar la conexion.
Saludos,
Pep Lluis,
hola sabes tengo un proyecto de hacer una interface por medio de vb.net de hacer funcionar una licuadora y cambiar las velocidades la interfaz ya la tengo el problema es el programa como lo hago
Hola Victor,
Que fuerte!!… una licuadora… deberias explicarme el interface con mas detalle, para entender el protocolo y pensar en una idea para mandar las velocidades.
Contacta explicando con mayor detalle a traves de [This Blog] [Contact]
Saludos,
Para controlar las velocidades yo habria puesto un decodificador Serie a paralelo de tal manera que al enviar cierto dato por el puerto se decodifique y active un «1» a la salida del deco, y de ahi con un TRIAC activo las velocidades de cada velocidad o bien con el mismo TRIAC mediante PWM proveemos las velocidades desde VB, me habria encantado poder ayudarles con ese proyecto. Saludos.
Hola buenas tardes muy buena la informacion del blog, Estoy haciendo un proyecto que se basa en controlar los servicios de una casa a traves de la pc ( es una maqueta de una casa montada sobre un circuito) los dos servicios que quiero manejar es el encendido y apagado de las luces, y el abrir y cerrar puertas, ya tengo el circuito montado y el pic programado, lo que falta es enviar la señal desde el programa diseñado en .net… quisiera que me orientaras para ver como lo puedo hacer…. agradezco de antemano tu ayuda..
Saludos,
Deisy
Hola Seisy,
El programa del PIC debe incluir una parte de electronica que debes enlazar a traves de USB o RS232, luego debes incluir en tu programa las funciones de Lectura/Escritura que atiendan las ordenes enviadas por el PC, usando System.IO.Ports por ejemplo.
Debido a lo extenso del tema, como a otro tipo de consultas similares te invito a contactar directamente para continuar la conversacion.
Puedes usar la opcion [This Blog][Contact]
Saludos y gracias por valorar positivamente la informacion de este Blog.
Pep Lluis,
Hola Pep Lluis!
Estoy nueva en esto pero ya hice el programa para leer el puerto serial… ahora tengo un prolema, el computador q los envia, lo hace por com1 (no se puede cambiar) y la pc q los recibe (donde tengo el programa en visual studio 2005) lo hace por com4.. resulta q cuando lo quiero ejecutar me dice COM1 NO EXISTE… no se si debo hacer una rutina donde le diga q lea por calquier puerto (de ser asi, si puedes ayudame) o hay otra forma de hacerlo!
Gracias..!
Hola Karina!
Bueno simplemente en el programa debes dejar libre la seleccion del puerto, para que dependiendo del computador puedas selecionar el ‘open’ en COM1 o COM4. aunque para entender mejor tu caso deberia conocer mas detalles de tu proyecto. Si lo crees oportuno contacta a traves del Blog y continuamos la conversacion en privado.
Puedes descargarte mi libro que introduce a las comunicaciones serie en :
http://www.dotnetmania.com/Libros/CTdnm01/Robot%20dispensador%20para%20MSDN%20Vídeo.pdf
Precisamente la pagina 32/33 te dice como resolver una situacion como la tuya.
Espero saber como te ha ido.
Sadudos,
Pep Lluis,
Despues de 2 dias por fin encontre alguien que explicara de la mejor manera el control del puerto serie.
Gracias, por su aporte
Hola,
Al ajecutar .IsOpen en una función me dice que el puerto está cerrado, y al intentar cerrarlo con .Close me dice que el puerto ya se encuentra cerrado y sale por error. Esto no me sucede en todas las máquinas. Tenés idea que puede ser?
Saludos
Hola Federico,
Bueno creo que la situacion es logica, si el puerto esta cerrado ‘IsOpen’ te devolvera ‘false’ y evidentemente una operacion de ‘Close’ generara una excepcion.
Aunque puedes resolverlo simplemente con :
If
MiSerialPort.IsOpen Then MiSerialPort.Close()
Si te parece puedes contactar directamente conmigo desde la opcion [Contact] al inicio del blog, o bien concreta la pregunta o el problema en los Foros de MSDN, estare atento para ofrecerte ayuda.
Saludos,
Pep Lluis,
Hola solo queria decirles si me podian ayudar con el SerialPuert1. es k lo que pasa k estoy en desarrollo de un proyecto de un brazo robotico iap diseñe el brazo y el circuito y pues el entorno grafico en visual Express con entorno flash para la posicion de angulos de mi brazo ahora solo quiero saber como activar el puerto y mandar valores en BINARIO..si me pueden ayudar les agradeseria mucho bueno aki les dejo mi correo Dare_devil664@hotmail.com ahi me pueden mandar el codigo gracias…
Sergio… creo que para empezar puedes servirte de alguno de los ejemplos del siguiente enlace:
msmvps.com/…/default.aspx
Saludos,
Hola,
he realizado un programa en VS 2005 que debe imprimir un ticket en una impresora de ticket, cuando quiero sacar el ticket mando el informe a la impresora de ticket directamente y así no sale lo de elegir impresora, esto en mi equipo sale perfecto con una impresora normal, pero llego al equipo del cliente y el ticket sale en pantalla.
puede alguien ayudarme con este tema. muchas gracias de antemano.
Hola Andres,
A falta de conocer detalles sobre el equipo del cliente, deberias verificar que impresora tienes seleccionada como predeterminada en el sistema. desde Inicio>panel de control>impresoras
Saludos,
Que Tal PepLluis, (primero que nada mucho gusto y ojala y me puedas echar una mano o darme un norte de que me esta faltando, gracias.).
Sucede que estoy desarrollando una aplicacion de ventas en PDA y mando a imprimir a una impresora Termica Zebra MZ220 la cual utiliza CPCL, (tengo el manual de Zebra y el codigo no me parece complejo), inclusive en Zebra solo me han dicho abre el puerto serial y manda a escribir en codigo CPCL, hasta ahi no hay problema. El problema comienza cuando envio la primer linea PS.write(«[TEXTO]») es cuando me egresa un error en VB (se ve que la impresora comienza a recibir pero no pasa nada mas), te adjunto mi codigo y el error y ojala y me puedas decir que estoy haciendo mal gracias.
CODIGO
Imports System
Imports System.IO.Ports
Imports System.IO
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ps As New System.IO.Ports.SerialPort(«COM3», 9600, Parity.None, 8, StopBits.One)
Try
ps.Open()
ps.Write(«! 0 200 200 210 1» + vbCrLf + «TEXT 4 0 30 40 Gracias Dios» + vbCrLf + «FORM» + vbCrLf + «PRINT»)
ps.Close()
Catch ex As Exception
MsgBox(«ojo » & ex.ToString)
ps.Close()
End Try
End Sub
End Class
ERROR
System.IO.IOException: IOException
en System.IO.Ports.SerialStream.WinIOError()
en System.IO.Ports.SerialStream.Write(Byte[] array, Int32 offset, Int32 count, Int32 timeout)
en System.IO.Ports.SerialPort.Write(String text)
en SmartDeviceProject3.Form1.Button1_Click(Object sender, EventArgs e)
en System.Windows.Forms.Control.OnClick(EventArgs e)
en System.Windows.Forms.Button.OnClick(EventArgs e)
en System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam)
en System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
en Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
en System.Windows.Forms.Application.Run(Form fm)
en SmartDeviceProject3.Form1.Main()
Gracias
Hola Ivan,
Por el codigo te aconsejaria que omitiras la instruccion de ps.close, pues es posible que al ejecutarlo estan interrumpiendo el envio completo de la trama y supongo que el error viene dado por esa ‘interrupcion forzada’ cuando esta procesando el buffer de transmision.
Espero que la intuicion sea buena… ya nos contaras.
Pep Lluis,
Muchas gracias por responder tan pronto Peplluis, he comentado la linea ps.close e incluso la comento en la parte del catch, sin embargo me regresa el mismo error; no se si olvide comentarte el medio de impresion es IRDA y le estoy poniendo los mismos datos de configuracion del puerto (9600,N,8,1), ¿Tienes alguna otra idea? Gracias
Ivan,
Pues ocurre como bien sabes que los IRDA son un mundo aparte. Lo ideal es Virtualizar un COM a traves de bluetooth. La unica cosa que se me ocurre es que ajustes la velocidad lo mas baja posible a 1200 o 2400 bauds por ejemplo. Deberias probar enviando un texto ASCII puro y sin caracteres de control tipo VbCrLF…. Si te parece continuamos esta conversacion en privado, contactame a traves de la opcion [Contact] en el inicio del Blog.
Saludos,
Pep Lluis,
hola Iam enrique, necesito ayuda ya ke necesito un codigo ke al igual ke la hiper terminal me muestre los datos y los almacene en una base de datos, casi no se mucho de esto ojala y mne puedas ayudar mi correo es diug23@hotmail.com grasias salu2….
Hola Enrique,
En el siguiente enlace tienes un ejemplo que podrias utilizar como punto de partida.
http://msmvps.com/blogs/peplluis/archive/2008/09/19/leer-los-ceros-y-unos-de-un-micro-controlador.aspx
Lo unico que tienes que cambiar es la incorporacion de los bytes recibidos por un contenedor de texto tal como rtf. Luego tienes que tener en cuenta escoger un juego de caracteres que te permita representar los caracteres de control.
Si quieres podemos continuar la conversacion contactandome a traves de la opcion al inicio del blog [contact]
hola….
soy estudiante de mecatronica y me gustaria que me ayudaras para un proyecto de creatividad lo que necesito es controlar un motor por el puerto paralelo en visual basic 2005 que con un botton se encienda y a cierto tiempo de vuelta atras… mi correo es misterios_gol@hotmail.com la vdd que te lo agradeceria
Hola Gaspar,
Tal y como te respondi en el post de los foros… a ver que te parece este ejemplo…
http://msmvps.com/blogs/peplluis/archive/2009/01/22/acceso-al-puerto-paralelo-lpt-algo-m-225-s-que-encender-un-led-o-imprimir-un-doc.aspx
Ya nos contaras
Saludos,
Pep Lluis,
Hola..Pep Lluis tu foro es muy bueno y tiene las cosas especificas que uno pueda buscar, creo que como todos estoy agradecido por el aporte de tus conocimientos hacia los demas…te escribo para pedirte porfavor si me puedes hechar una mano si no son las dos =) al problema que tengo.
Tengo que hacer un programa en VS 2005 para recibir datos de una balanza electronica en tiempo real y copie de aqui parte del codigo y otra parte que encontre en MSD con lo que consegui hacer este metodo
Function ReceiveSerialData() As String
‘ Receive strings from a serial port.
Dim returnStr As String = «»
Using serie As IO.Ports.SerialPort = _
My.Computer.Ports.OpenSerialPort(«COM1»)
serie.BaudRate = 9600
serie.DataBits = 7
serie.Parity = Parity.Even
serie.StopBits = StopBits.One
Do
Dim Incoming As String = serie.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
serie.Close()
End Using
Return returnStr
End Function
Al metodo lo llamo en el evento click d un boton y cuando lo hago solo consigo que la aplicacion se cuelge, no se que me podrias decir de aque se debe. Gracias de antemano
Hola Leo,
En primer lugar nunca deberiamos utilizar un Do-Loop dentro de una rutina de recepcion de datos. En segundo lugar si utilizas un ‘ReadLine’ deberias hacerlo desde un ‘Threat’.
Intenta revisar el ejemplo en :
http://msmvps.com/blogs/peplluis/archive/2008/09/16/problemas-en-la-recepci-243-n-de-datos.aspx
Tambien encontraras diversos modelos y propuestas para efectuar recepcion de datos en :
http://msmvps.com/blogs/peplluis/archive/tags/Puertos+Serie/default.aspx
A partir de ese punto, si te parece vamos comentado tus dudas.
Espero que esto te ayude.
Pep Lluis,
Gracias por esta informacion. ahora, me gustaria saber como leer y escribir en el puerto serie
Oscar,
aqui encontraras algunos ejemplos.
http://msmvps.com/blogs/peplluis/archive/tags/Puertos+Serie/default.aspx
Saludos,
Al ver esto, me pregutno como seria para enviar datos a una impresora de tickets que este conectada al puerto USB?????? Lo he probado asi y no conecta (logico). Alguien sabe como.
hola amigo lo que pasa que estoy haciendo un proyecto, sera que codigo que esta en la parte superior me sirve para recibir la entrada de datos
de un plc atraves del puerto.. y al plc va conectado un sensor me invia informacion del objeto…
espero que alguien me ayude lo mas pronto
colombia.. sena… barranquilla
mi correo es daimersanchez@hotmail.com
gracias culaquier cosa me escribe al correo
Hola Daimer,
Para empezar, te aconsejo utilizar alguno de los ejemplos que encontraras en :
http://msmvps.com/blogs/peplluis/archive/tags/Puertos+Serie/default.aspx
Saludos,
nesecito saber como leer los datos de una balanza electronica del modelo indicador – CI3000a por favorv quien me puede ayudar es urgente grcias
hola pepeluismira lo que pasa es que quiero mandar datos tipo char pero se me ha complicado el procedimiento ojala me puedas ayudar hacer un ejemplo de mandar datos tipo char por el puerto serial.
Hola Mariano,
Debes utilizar la expresion ‘.Write(Chr(n))’ donde n representa el numero de caracter ASCII que como ya sabes corresponde a la representacin del mismo (0 a 255)
Saludos,
Tengo un periferico con el que me comunico atravez del com1, este me manda
comandos mayores a 8 bytes, pero los recibo en bloques de 8 bytes… (me instale el
portmon), ahora me hice un ejemplillo en vb6 con el control mscomm y aqui si
recibo los mensajes en un solo bloque, esta en la configuracion en vb6 que
uso para abrir el puerto:
With MSComm1
If .PortOpen Then .PortOpen = False
‘set the active serial port
.CommPort = 1
‘set the badurate,parity,databits,stopbits for the connection
.Settings = «19200,N,8,1»
‘set the DRT and RTS flags
.DTREnable = True
.RTSEnable = True
‘enable the oncomm event for every reveived character
.RThreshold = 1
‘disable the oncomm event for send characters
.SThreshold = 0
‘open the serial port
.PortOpen = True
End With ‘MSComm1
para la clase SerialPort (vb.net 2005) utilizo la misma configuracion pero
tiene este comportamiento de que siempre recibico los comandos en bloques de
8 bytes a la vez cuando estoy recibiendo los datos.
Sabes que podria ser ?
si alguien puede ayudarme le agradezco necesito hacer el siguiente programa en visual 2005
1. imprimir el almacen con> numero de ventas * año
2. imprimir total ventas de almacen con < ventas 3.imprimir ventas * año.
Hola Jopeve,
Te aconsejaria postearas tu pregunta en los foros de reportes de MSDN, este post esta dedicado a repasar los principales mandatos del puerto serie.
Saludos,
Pep Lluis,
hola pepe luis mi pregunta es la siguiente
tengo un equipo con un sistema de bascula conectado por un puerto com el problema es que cada que se reinicia el equipo y inicio el programa de bascula me marca que el puerto esta ocupado a que se debera esto te lo agradezco por tus atenciones
gracias
Hola Marcos,
Para salir de dudas, prueba de adaptar este ejemplo :
http://msmvps.com/blogs/peplluis/archive/2009/12/01/como-comunicarme-con-una-bascula.aspx
Y vemos que esta fallando.
Espero tus noticias,
Pep Lluis,
hola pepe muy buen porte ^^, imaginate q necesito comunicar un PLC unitronics a mi pc y leer los datos entregados por el plc y visualizarlos en excel pero en tiempo real o lo mas cercano posible. espero me puedas colaborar mcuhas gracias ^^
Hola Miguel,
Lo ideal es tomar una plantilla de un Add-ins para excel y encapsular la funcionalidad de acceso a dicho PLC.
Para tal proposito deberas incrustar el protocolo de comunicaciones del ‘Unitronics’, el cual desconozco 🙁
Si crees interesante continuar la conversacion, puedes contactar conmigo utilizando la opcion [Contact]… estare encantado de colaborar dentro de mis posibilidades.
Saludos,
Pep Lluis,
Como puedo activar una electro Chapa desde mi puerto serie ojala me puedan ayudar muchas gracias
Necesito desarrollar una aplicacion que cuando un usuario pase un codigo de barras en un lector de Codigo de Barras este se verifique en una base de datos y si el usuario existe entonces se active una electrochapa que le permita el acceso.
Lo unico qu me falta es como activar la chapa desde puerto serial
Ojala me puedan ayudar
Que DIOS bendiga todos y cada de ustedes en cada uno de sus dias y que este 2010 sea maravilloso para ustedes y sus seres queridos DIOS LES BENDIGA
Pep Lluis:
Muy buena tu nota por cierto.
Estoy teniendo un problema con el uso de is.open. El mismo devuelve un boolean con valor False en el caso en que el puerto se encuentre cerrado y True en el caso en que esté abierto. Mi problema es el siguiente, yo quiero detectar de antemano en la aplicación si el puerto se encuentra abierto, para así indicarle al usuario que el mismo ya se encuentra abierto por otra aplicación, pero isopen, siempre que el puerto no lo haya abierto la aplicación en donde se ejecuta el comando, devuelve False.
¿Tenés idea de alguna solución?.
Muchas gracias, Juan Bacigalupo.
Hola Joan Bacigalupo,
Aqui tienes un ejemplo para enumerar los puertos serie disponibles :
http://msmvps.com/blogs/peplluis/archive/2009/01/08/serial-port-enumeraci-243-n-amp-disponibilidad.aspx
Tambien los tienes en C# y diferentes formas de abordarlo. Los encontraras bajo el tag ‘Puertos Serie’.
Saludos,
Pep Lluis,
Hola Miguel Lopez,
Es posible utilizando alguna de las señales de salida, pero en tal caso deben adaptarse los niveles logicos de voltage… +/-9V VCC a la tension de trabajo la electro-chpa. La otra posibilidad es utilizar un dispositivo comercial de E/S. Si te parece contactame a traves de la opcion [Contact] y continuamos la conversacion.
Pep Lluis,
hola a todos,
quisiera hacer una aplicacion muy simple pero no se como hacerla:
quiero hacer un programa en vb2005 que este abierto mientras no reciba nada por el puerto serie, y en el momento que reciba una señal de 5 voltios, ejecute otro programa y se cierre.
podrian facilitarme el codigo si no es mucha molestia??
un saludo y gracias
hola a todos,
quisiera hacer una aplicacion muy simple pero no se como hacerla:
quiero hacer un programa en vb2005 que este abierto mientras no reciba nada por el puerto serie, y en el momento que reciba una señal de 5 voltios, ejecute otro programa y se cierre.
podrian facilitarme el codigo si no es mucha molestia??
un saludo y gracias
Hola PepLLuis!
Muy bueno tu blog pero tengo un problema al abrir los eejmplos que pones. Mi problema es como el de muchos de los que he leido por aqui, y es que el pc que tengo no tiene COM, con lo que tengo un conversor, pero el conversor solo pone los COM del 4 al 8.
El codigo que utilizo es que te viene por defecto en visual basic C++ 2008 y tiene el inconveniente que no se donde o como declara que tiene que abrir el puerto COM1 con lo que no detecta nada y dice que esta cerrado.
Como puedo cambiar la declaracion de los puertos, es decir, como hago para que me habra el COM5 por ejemplo?
Gracias de antemano!
Un saludo!
Hola Carlos,
Es simple… si estas utilizando el System.IO.Ports.SerialPort, solo tienes que asignar la propiedad ‘Name’… ejemplo :
MiPuertoSerie.PortName = «COM4»
antes de la operacion ‘Open’.
o bien :
MiPuertoSerie = My.Computer.Ports.OpenSerialPort(«COM4»)
Tambien tienes la opcion de asignar al conversor el numero que desees, desde el administrador de dispositivos, puertos com/lpt, opciones avanzadas y seleccionar el COMx que quieras.
Espero que esto responda a tu pregunta, en caso contrario no dudes en contactar de nuevo.
Saludos,
Pep Lluis,
etoy haciendo un proyecto de un termometro con ne555 con las sig. especificaciones…
Adquisición de datos analógicos con el temporizador NE555
Para leer señales analógicas, es necesario hacer la respectiva conversión a señal digital. El temporizador NE555 genera pulsos variables (tiene como respuesta una frecuencia) a partir de dos resistencias y un capacitor. Este enfoque de adquisición de datos implica los siguientes pasos:
Descripción del temporizador NE555
Fig. Temporizador NE555
Fig. Circuito genérico
Modo de operación
El temporizador NE555 genera un pulso de acuerdo a los valores de dos resistencias y un capacitor.
La siguiente fórmula se utiliza para calcular el periodo de este pulso.
Donde:
Ra : Valor de la resistencia conectada a los pines 7 y 8
Rb : Valor de la resistencia conectada a los pines 2 y 7
Cap : Valor del capacitor polarizado conectado a tierra y a los pines 2 y 6
Como ejemplo, se evalúa la formula con los siguientes valores:
Ra : 540 ohmio
Rb : 620 ohmio
Cap : 1 microfaradio = Faradios
Resultando
T= 0.00123354 segundos
Lo que genera un pulso con una frecuencia de
La frecuencia calculada puede diferir de la frecuencia que se lee del temporizador NE555 por los efectos de la temperatura tanto en las resistencias como en el capacitor de este circuito.
En un caso de aplicación práctica, se deberá mantener fija la resistencia Ra y el Capacitor, de modo que la variable que se estudia sea la resistencia Rb. A medida que esta resistencia varíe, el temporizador generará diferentes frecuencias. La frecuencia generada está en función de las variaciones de la resistencia en estudio.
Programación
El siguiente algoritmo permite leer y calcular la frecuencia generada por el temporizador NE555.
/* Inicio */
ctd_pulso_alto =0
ctd_pulso_bajo =0
leer_tiempo_del_sistema
/* Bucle principal */
mientras el tiempo transcurrido no haya superado 1 segundo hacer
inicio
si bit_leido está en alto entonces
inicio
ctd_pulso_alto = ctd_pulso_alto+1
mientras bit_leido está en alto hacer
inicio
fin
fin
si bit_leido está en bajo entonces
inicio
ctd_pulso_bajo = ctd_pulso_bajo+1
mientras bit_leido está en bajo hacer
inicio
fin
fin
fin {del mientras}
/* Cálculos */
frecuencia:=( ctd_ pulso_alto+ ctd_pulso_bajo)/2
/* Fin */
fin
Ejemplo para un bulbo de temperatura (termómetro digital)
En este ejemplo se definen las variables del circuito genérico para realizar la lectura de temperatura con el uso de una termoresistencia.
La termoresistencia que se utiliza fue obtenida del bulbo de temperatura del sistema de control de refrigeración de un automóvil.
A continuación se describe el circuito con los parámetros específicos de esta práctica.
Circuito práctico
Fig. Circuito practico
La termoresistencia (bulbo) varia su resistencia de acuerdo a la temperatura. Al variar esta resistencia, el circuito genera una frecuencia también variable.
En este caso específico, resulta más sencillo realizar una serie de mediciones con la ayuda de un termómetro, de modo que se registre la frecuencia respectiva para cada medición.
Los siguientes datos se obtuvieron con un circuito como el descrito anteriormente, y con la ayuda de un termómetro de mercurio
Datos experimentales:
Temperatura
(grados centígrados) Frecuencia
(hertz)
120.0 1500
89.0 870
82.0 820
70.0 725
60.0 640
40.0 460
35.8 420
33.8 405
30.0 366
27.0 339
24.7 318
22.5 297
20.2 280
10.0 204
0.0 135
necesito leer el pulso en algun puerto me pueden alludar
Hola Pep Lluis, excelente tu blog.
Mira necesito hacer un programa en vb.net (tengo visual estudio 2008) donde el programa este siempre escuchando el puerto serial (COM1) y cuando llegue informacion por ese puerto la capture y la almacene.
Ojala me puedas ayudar
Gracias de antemano
Hola robin,
Encontraras multitud de ejemplos en este apartado :
http://msmvps.com/blogs/tags/Puertos+Serie/default.aspx
Aun y asi, si no encuentras en ello algo util, no dudes en contactar de nuevo.
Nota para Ernaes,
Sobre tu pregunta del NE555… es mejor que contactes directamente, opcion [Contact] y vemos como puedo ayudarte.
Saludos,
Pep Lluis,
Hola tengo problemas para actualizar el texbox, tengo un pic conectado al pto usb, lo leo como pto COM, y le mando al Pc, datos de un teclado, pero no consigo que el texbox se actualice y me muestre las teclas presionadas, solo se queda con la primera espero me puedas ayudar. Soy de chile, aqui te dejo el codigo.
Public Class Form1
Dim Recibidos As String
Public Sub New()
‘ Llamada necesaria para el Diseñador de Windows Forms.
‘ Agregue cualquier inicialización después de la llamada a InitializeComponent().
InitializeComponent()
If Not SerialPort1.IsOpen Then
Try
SerialPort1.Open() ‘ Para abrir el puerto.En este caso el com6 puerto virtual
‘ que genera el Proteus en mi aplicacion.
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End If
‘ Agregue cualquier inicialización después de la llamada a InitializeComponent().
AddHandler SerialPort1.DataReceived, AddressOf Recepcion ‘delegado para que se pueda escribir en el texbox1
End Sub
‘ Delegado
Private Sub Recepcion(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
Recibidos += SerialPort1.ReadExisting() ‘lee lo que tiene el bufer de entrada y lo guarda en la variable recibidos
‘Recibidos = SerialPort1.ReadLine()
Me.Invoke(New EventHandler(AddressOf Actualizar)) ‘Necesario para poder ocupar el Texbox1
End Sub
Private Sub Actualizar(ByVal s As Object, ByVal e As EventArgs)
TextBox1.Text += Recibidos
End Sub
End Class
Hola Jerson,
El codigo parece correcto para la funcion que detallas, debes tener en cuenta que para recibir datos debes adecuarte a los ajustes del dispositivo, por lo que deberias verificar la velocidad,paridad…etc.
Tambien existen ciertas problematicas con adaptadores USB/Rs232, tengo algun post que los describe.
Espero tus noticias,
Pep Lluis,
hola pepluis.
tengo un problema con impresora okipos 425d cutter he descargado el driver version xp
y se instala corrctamente pero al mandar a imprimir no sale nada mi puerto es serial
solo logro hacerla imprimir cuando mando una pagina de prueba y sale lo siguiente ????xx???’ y termina pero no imprime nada desde black de notas ni otro programa espero
me puedas ayudar.
alguna sugerencia
saludos gracias.
Hola
Necesito ayuda, No logro leer la pizarra telefonica conectada a mi RS232. Aqui esta el codigo
Saludos
Jose Acosta
Using com1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(«COM1»)
With com1
.BaudRate = 9600
.Parity = IO.Ports.Parity.None
.DataBits = 8
.StopBits = IO.Ports.StopBits.One
End With
Dim Datos As String = «»
MsgBox(com1.BytesToRead) ‘Aqui me da 0
Datos = com1.ReadExisting
MsgBox(Datos) ‘Aqui me da un mensage en Blanco
End Using
hola estoy programando en vb 2008, tengo un combox1 y quiero que se refleje en ese combo los puertos, com. que tiene la pc para poder seleccionerlos me podrias ayudar gracias
Hola Jose,
Puede utilizar alguno de los ejemplos que tienes en el apartao de puertos serie como por ejemplo :
http://msmvps.com/blogs/peplluis/archive/2009/01/08/serial-port-enumeraci-243-n-amp-disponibilidad.aspx
Saludos,
Pep Lluis,
Hola,
necesito leer los datos de una balanza, ya tengo los datos de pariedad y bits de datos etc, pero lo necesito plasmar en una aplicacion pero nose por donde comenzar, se que deben usar el control serialPort, porfavor me podrias ayudar con algun ejemplo.
Gracias
Hola Felipe,
Aqui tienes el enlace para seguir los ejemplos mas significativos de este blog en tanto al puerto serie :
http://msmvps.com/blogs/peplluis/archive/tags/Puertos+Serie/default.aspx
No dude en usar la opcion [Contact] si necesita alguna indicacion mas.
Saludos,
Pep Lluis,
Hola,
Estoy teniendo problemas al tratar de enviar datos por el puerto serial, me sale que no puedo accesar al COM8 porque no tengo los privilegios necesarios. Que podria hacer para solventar este inconveniente?
Muchisimas gracias,
Grace!
Intenta configurar tu puerto asignandole otro numero de port… ejm COM2, asegurate en caso de que hablemos de un adaptador USB/Serie que el driver funciona bien con otras aplicaciones, o si tienes algun software que al iniciarse el sistema, esta ocupando el puerto para conectarse con «un telefono» por ejemplo.
En caso negativo, toma un ejemplo de mi blog «el de la bascula» por decir uno, he intenta hacerlo rodar con el numero de puerto asignado anteriormente.
Ya nos contaras 😉
Pep Lluis,
excelente blog.
Muchas gracias por tus aportes
Nana
Hola men
sabes te he leido y seguido tus indicaciones arriba pero no pasa nada con la tarjeta la cual estoy enviando datos la idea es enviar un array tengo un codigo para visual 6 pero yo ocupo visual basic 2005 hice algo parecido para poder enviar y prender la tarjeta pero no pasa nada te envio el codigo de visual 6 que funciona y el de visual basic 2005 que no :/
visual 6
////////////////////////////////////////////
Private Sub Command1_Click()
Dim arr() As Byte
Dim a, b, c, d As Integer
ReDim arr(18)
arr(0) = 115 ‘s
arr(1) = 100 ‘Centro
arr(2) = 120 ‘m
arr(3) = 1 ‘camara
arr(4) = 111 ‘accion
arr(5) = 101 ‘solicita respuesta
With MSComm1
.Output = arr
Text1.Text = «»
End With
End Sub
Private Sub Form_Load()
With MSComm1
.CommPort = 4
.Settings = «9600,N,8,1»
.PortOpen = True
.InputLen = 0
.RThreshold = 1
End With
End Sub
Private Sub Form_Unload(Cancel As Integer)
With MSComm1
.PortOpen = False
End With
End
End Sub
Private Sub MSComm1_OnComm()
With MSComm1
sinput = .Input
Text1.Text = Text1.Text + sinput
Label1.Caption = Len(Text1.Text)
End With
End Sub
////////////////////////////////////////////
visual basic 2005 (que no me funciona)
/////////////////////////////////////////////
Imports System.IO.Ports
Imports System.IO.Ports.SerialPort
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Public a As Integer
Public b As Integer
Public c As Integer
Public d As Integer
Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
Dim arr() As Byte
Dim Contador As Integer
ReDim arr(18)
arr(0) = 115 ‘s
arr(1) = 100 ‘Centro
arr(2) = 120 ‘m
arr(3) = 1 ‘camara
arr(4) = 111 ‘accion 82
arr(5) = 101 ‘solicita respuesta
Dim Serie As SerialPort
If cmbpuerto.Text <> «» Then
Serie = My.Computer.Ports.OpenSerialPort(cmbpuerto.Text)
Serie.BaudRate = 9600
Serie.DataBits = 8
Serie.Parity = IO.Ports.Parity.None
Serie.StopBits = IO.Ports.StopBits.One
Dim Puerto As String
Puerto = Serie.PortName
Label5.Text = Puerto
Dim Estado As Boolean
Estado = Serie.CDHolding
txtest.Text = Estado
Dim SiNo As Integer
SiNo = Serie.IsOpen
Estado = Serie.CtsHolding
Label2.Text = Estado
Estado = Serie.DsrHolding
Label4.Text = Estado
Serie.RtsEnable = True
Serie.DtrEnable = True
Serie.ReadTimeout = 10
Serie.WriteTimeout = 10
Contador = Serie.BytesToWrite
Dim numer As Integer
For numer = 0 To 5
Serie.Write(arr(numer))
Next
textrecibido.Text = Serie.ReadExisting()
Else
MsgBox(«Ingrese Puerto»)
End If
End Sub
end Class
///////////////////////////////////////
NEcesito ayuda :S
Hola soy de Chile y te comento que es lo mejor que he encontrado para el manejo del puerto serial con VB 2005. He leido la gran parte de los POst y Solo darte las gracias por lo nuevo que he aprendido. Aunque sigo sin actualizar los datos recibidos..es el mismo caso de Jerson de Chile, he colocado bien la velocidad, paridad, etc. y utilizo una maquina (notebook) con puerto serial. Podrias apoyarme con mi interrogante
Hola soy de Chile y te comento que es lo mejor que he encontrado para el manejo del puerto serial con VB 2005. Te comento que tengo el mismo problema de Jerson (Thursday, March 18, 2010 11:52 AM by jerson
), sigo sin actualizar los datos recibidos por la com1.. he colocado bien la velocidad, paridad, etc.porque lo puedo ver con Hyperterminal y en mi caso utilizo una maquina (notebook) con puerto serial. Podrias apoyarme con mi interrogante
Hola Fede,
Disculpa la tardanza en responder pero ya se sabe… el trabajo prioriza las necesidades.
Para tratar de este tema estare encantado de ayudarte a traves de la opcion [Contact], asi podremos disponer de una comunicacion fluida.
Espero tu correo,
Gracias,
Pep Lluis,
Nota a Pablo y a todos los que necesitan contactar conmigo.
He recibido muchas peticiones de ayuda a traves de este post. Me gustaria comentaros que por las caracteristicas del Blog se hace imposible gestionar pregunta/respuesta. Para ello os animo que contacteis directamente conmigo a traves de la opcion [Contact] o bien posteeis vuestras preguntas en los foros de MSDN, siempre intento estar al corriente y participar en las conversaciones en las que puedo aportar alguna respuesta.
Gracias por vuestro interes y participación.
Pep Lluis,
uff, parece que por fin encuentro un sitio sobre este tema.
Veras, me estoy iniciando en los scadas, a ver si pudieras orientarme con un ejemplo de tramas cómo enviarle al plc que ponga a I un contacto y cómo leer si una señal esta a O ó I.
Muchas gracias.
Hola, me estoy iniciando en los scada, mi cuestion es muy simple, a ver si me podeis poner un ejemplo en el que un boton me active una marca en el plc y leer una marca para hacer algo en el pc (por ejemplo el color del boton)
Hola Juan… si te parece podemos continuar la conversacion en los foros de Msdn… por ejemplo :
http://social.msdn.microsoft.com/Forums/es-ES/devcommes/thread/d09a541a-54e9-47fc-a46d-0aaadc3dce52
Saludos,
PepLluis,
Hola, tengo una impresora serial Epson, la que manejaba bajo VB 6.0, mediante el mscomm, me detectaba los errores producidos en la impresora (falta de papel, por ejemplo), sin embargo por necesidad tengo que migrar a VB.net 2005, puedo imprimir sin problemas, pero no se como dejar a la escucha los errores que llegan de la puerta.
Agradeciendo tu gestion
Saludos
Hola,
Estoy realizando un trabajo y una pequeña parte (muy importante) es leer información que llega a través de un pueto serie, he leido algunos post, pero mi problema es que no se VB
Estoy intentando leer de un puerto serie información que envia un GPS (el puerto esta abierto y el GPS esta enviando la información), y mediante un macro de excel intento cargarlo a en una celda de excel.
Me podrías hechar una mano.
Gracias
Hola, estoy conectando una computado y una maquina bcplus3000, todo lo que es conexion figura bien pero hay algo en la parte de recepcion y post-respuesta que esta fallando.
Te dejo el link para ver si podes darme una mano.
https://social.msdn.microsoft.com/Forums/es-ES/afdeb6fd-7fbd-44f8-9275-820ceeba16d4/enviar-y-recibir-caracteres-de-control-vb-2010?forum=devcommes
saludos y gracias
Buen dia
No se si ya respondería esta consulta compre un validador de billetes, que se conecta por un cable de impresora USB, pero en los dispostitivos lo lee como un puerto .com, me dicen que funciona con los protocolos ID003 y ICT104U, he estado ejecutando los comando, que encontrado en los manuales pero no he logrado que funcione, con la aplicación que me entregaron funciona bien el billetero, queda en luz verde y azul y acepta el billete, pero con los codigos que le ejecuto recibe ordenes pero no queda en lectura.
Deberias concertarme que tipo de ayuda necesitas, contáctame directamente a traves de la opción ‘contact’.
Espero tus noticias
Hola que tal estoy igual, he tratado de comunicarme con el billetero pero no consigo hacerlo con el protocolo id003, con el software de ejemplo que he descargado de JCM se comunica bien, pero al intentar enviar comandos por el puerto yo mismo pues no hay ningún tipo de comunicación, de todas maneras si llego a lograr algo lo voy a comentar. Saludos desde Venezuela
Concrétame la situación, y vemos como ayudarte.
Dispones de los manuales/especificaciones del dispositivo?… tienes las características de las comunicaciones, Velocidad, Bits… uso de señales «handshaking»… etc?
Continuamos.
Saludos,
hola..
estoy tratando de hacer una software visual, para la apertura y cierre de una puerta a través de una chapa siendo esta controlada por medio de plc es para una chapa Southern Folger son chapas de seguridad.
alguien que me pueda ayudar….
saludos
La respuesta dependerá del PLC, debes conocer el protocolo de comunicación con el mismo y conocer su programación para poder adaptarlo al software que quieres desarrollar.
Intenta recopilar esa información.
Saludos,
Hola, buenas tardes.
Estoy comenzando a trabajar con un PLC 1769-L30 ERM Compact Logix 5330ERM controller, no tengo conocimiento alguno mas es un requerimiento urgente y tengo poco tiempo para documentarme al respecto. Requiero escribir valores en un TAG de tipo REAL[5] mediante una aplicación .net (vs 2008)!!! Podría compartirme un código de ejemplo?? … se lo agradeceré demasiado.
Buenos días PepLluis:
Nuevamente te molestamos para brindarnos tu opinión respecto al proyecto del cronómetro controlado a través del Serial Port. Estamos todavía sin poder resolver la adquisición del estado de los sensores desde las entradas del serial port, por ejemplo CtsHolding y de esta manera disparar el cronómetro.
Un abrazo y siempre agradecidos por tu valiosa información!
Hola estoy intentando leer bytes del puerto serial en Visual Basic, tengo una trama compuesta de 18 bytes pero al leer byte por byte solo trae los primeros 6 y el resto no los devuelte tengo q volver a mandar la trama para que responda, alguien sabe por que me sucede esto
Hola David,
Sin saber nada de código y versión de entorno, seguro que el evento DataReceived se dispara antes de finalizar la lectura de los 18 bytes del buffer de recepción. En tal caso, no como buena practica puedes provar insertando un delay antes de leer el buffer. Con 50Ms seguramente es suficiente «Threat.sleep(50)»
Hello Luis,
In the control XON/XOFF exist a problem in standart to readline and print line.
Thanks for you publicationts and colaborations.
The comunicationts and interruptionts in signal serial exist a problem to paralel comunicationts, the error permit flush informationts in memory and buffer comunicationts
The error not respet standart comunicationts signal