Contactar

Deja tus comentarios para contactar y responderte en privado.

20 pensamientos en “Contactar”

  1. Hola PepLluis:
    Estoy haciendo una aplicación para poder recibir una trama..

    Quisiera saber como hacer para recibir la trama completa desde el puerto serial Gracias por a tu atención.

  2. Buenas tardes:

    Agradezco primero el espacio de consulta. Estoy tratando de desarrollar un dispositivo con el circuito FT232 de manera de utilizar las líneas CTS, CD, RI, DSR como entradas para habilitar un cronómetro (hecho en Visual basic 2010). He verificado que la señal eléctrica es reconocida por medio de un software: Hercules utilidades SETUP. La idea es por medio de un If si se habilita CTS, por ejemplo, inicie el cronómetro. Por el momento el mismo se habilita con un Button_click. Una solución que pensé era que cuando CTS este en true active el Button_click, pero estoy trabado y no puedo avanzar. Un abrazo, Eduardo.

    1. Hola Eduardo,
      Gracias por tu amabilidad.
      Dime el punto donde no puedes avanzar y veo como ayudarte.
      Y si lo prefieres pasamos la conversación a privado.

      Un Saludo,
      PepLluis,

  3. -Buenas tardes Pep Lluis:

    Te envío parte del código, puntualmente necesitaríamos que frente a la variación de alguna señal
    del puerto serie (CD, RI, DSR, CTS) se active el evento Button_click:
    a modo de ejemplo:
    Si la señal CD (he leído que existe CDHolding) es true entonces se active Button1_Click: de esta manera el cronómetro se iniciaría.
    Luego si la señal CTS es true entonces vaya activando Button4_Click: para ir tomando la muestra del tiempo transcurrido.
    Espero que me haya explicado correctamente, un abrazo, Eduardo.

  4. Hola Eduardo,
    En tu caso deberías estar usando : ‘SerialPingChanged’

    Private Sub Button6_Click(..
    SerialPort1.PortName = ComboBox1.Text
    SerialPort1.BaudRate = ComboBox2.Text
    SerialPort1.Open()
    Button6.Enabled = False
    Button7.Enabled = True
    AddHandler SerialPort1.PinChanged, AddressOf SerialPort1_PinChanged
    End Sub

    Sub SerialPort1_PinChanged(sender As Object, e As SerialPinChangedEventArgs)
    Select Case e.EventType
    Case SerialPinChange.Break
    '
    Case SerialPinChange.CDChanged
    '
    Case SerialPinChange.CtsChanged
    '
    Case SerialPinChange.DsrChanged
    '
    Case SerialPinChange.Ring
    '
    Case Else
    '
    End Select
    End Sub

  5. Hola, buen día. Mi nombre es Marcelo y quería saber cómo puedo hacer para detectar en qué Puerto con esta conectado mi adaptador rs232 a USB (tipo prolific).

    Muchas gracias!

  6. Buenos días PepLluis:

    Siempre agradecidos a vuestras respuestas, te enviamos el código que hemos probado sin lograr disparar el timer por el cambio del pin CTS, opración que con el evento click se puede hacer.

    Imports System
    Imports System.Threading
    Imports System.Threading.Thread
    Imports System.IO.Ports
    Imports System.ComponentModel

    Public Class Form1

    ‘Dim WithEvents COMPort As New SerialPort

    Dim NumClics As Integer

    Private stopw As New Stopwatch ‘Creo mi nuevo stopwatch

    ‘Se usa para listar los puertos disponibles
    Dim myPort As Array

    ‘Se usa para lanzar el timer desde el evento del PinChanged
    Dim myThread As Thread

    Delegate Sub SetTextCallback(ByVal [text] As String) ‘Added to prevent threading errors during receiveing of data
    ‘————————————————

    ‘TODO: Correr el cronometro dentro de este método
    Private Sub ModemLamps(ByVal sender As Object, ByVal e As SerialPinChangedEventArgs) Handles SerialPort1.PinChanged

    If SerialPort1.CtsHolding Then

    MsgBox(«Bienvenidos Alumnos de 3º»)
    Console.WriteLine(«CtsHolding»)

    ‘Button1_Click(sender, e)

    ‘Este If no estaba, lo agregamos porque se lanza el evento muchas veces y puede ser un problema que se repita, igual no cambió nada
    If Timer1.Enabled = False Then
    Timer1.Enabled = True

    ‘Este código se probó y no funciona
    Timer1.Interval = 1
    Timer1.Enabled = True
    Timer1.Start() ‘inicio el timer
    stopw.Start() ‘Inicio el stopwatch, aqui es donde empieza a contar el tiempo

    ‘Probamos lanzar el timer desde un Thread y tampoco funciona
    ‘myThread = New Thread(New ThreadStart(AddressOf Me.ThreadProcUnsafe))
    ‘myThread.Start()
    ‘Sleep(0)

    End If
    Else
    Console.WriteLine(«Otro Pin»)
    MsgBox(«HASTA LUEGO»)
    End If
    End Sub

    ‘ This method is executed on the worker thread and makes
    Private Sub ThreadProcUnsafe()

    Console.WriteLine(«ThreadProcUnsafe»)

    Timer1.Interval = 100
    Timer1.Start()
    stopw.Start()

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    myPort = IO.Ports.SerialPort.GetPortNames()
    ComboBox1.Items.AddRange(myPort)

    ComboBox2.Text = «9600»

    ‘Inicialmente desabilitamos el Timer
    Timer1.Enabled = False

    End Sub

    ‘————————————————
    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click

    ‘Inicializar el puerto, esto està tomado del otro programa
    If SerialPort1.IsOpen Then
    ‘COMPort.RtsEnable = False
    ‘COMPort.DtrEnable = False

    SerialPort1.Close()

    ‘ NOTE. Because of the use of Invoke, the port should normally be closed from a different thread, see
    ‘ MaxiTesterClosing, but to ensure that the following delay works, this is not done in this case.
    ‘ Empty the message queue before the UI thread goes to sleep to update the modem lamps and the ComboBox.
    Application.DoEvents()

    Sleep(200) ‘ Wait 0.2 second for port to close as this does not happen immediately.
    End If

    SerialPort1.PortName = ComboBox1.Text
    SerialPort1.BaudRate = ComboBox2.Text

    Try
    SerialPort1.Open()
    Button6.Enabled = False
    Button7.Enabled = True
    Catch ex As Exception
    MsgBox(ex.Message)
    End Try

    End Sub
    ‘————————————————

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
    SerialPort1.Close()
    Button6.Enabled = True
    Button7.Enabled = False
    End Sub

    ‘Private Sub SerialPort1_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles
    ‘SerialPort1.DataReceived().
    ‘ReceivedText(SerialPort1.ReadExisting())
    ‘End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Console.WriteLine(«Button1 click»)

    Timer1.Interval = 1 ‘declaro intervalo en 1
    Timer1.Enabled = True
    Timer1.Start() ‘inicio el timer
    stopw.Start() ‘Inicio el stopwatch, aqui es donde empieza a contar el tiempo
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    ‘Aqui imprimo el valor de los minutos,segundos y milisegundos del stopwatch
    ‘mientras este sigue avanzando sin interrupciones
    Label1.Text = stopw.Elapsed.Minutes.ToString & » : » _
    & stopw.Elapsed.Seconds.ToString & » : » _
    & stopw.Elapsed.Milliseconds.ToString

    Console.WriteLine(«Timer tick»)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    ‘Con este boton detengo el timer y el stopwatch
    stopw.Stop()
    Timer1.Stop()
    Timer1.Enabled = False

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    stopw.Reset()
    Label1.Text = stopw.Elapsed.Minutes.ToString & » : » _
    & stopw.Elapsed.Seconds.ToString & » : » _
    & stopw.Elapsed.Milliseconds.ToString
    TextBox1.Text = » »
    TextBox2.Text = » »
    TextBox3.Text = » »
    TextBox4.Text = » »
    NumClics = 0
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

    NumClics = NumClics + 1
    Select Case NumClics
    Case 1
    TextBox1.Text = Label1.Text

    Case 2
    TextBox2.Text = Label1.Text

    Case 3
    TextBox3.Text = Label1.Text

    Case 4
    TextBox4.Text = Label1.Text

    End Select
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

    Dim oExcel As Object
    Dim oBook As Object
    Dim oSheet As Object
    ‘Iniciar un nuevo libro en Excel
    oExcel = CreateObject(«Excel.Application»)
    oBook = oExcel.Workbooks.Add
    ‘Agregar datos a las celdas de la primera hoja en el libro
    oSheet = oBook.Worksheets(1)
    ‘Se agrega título de la columna
    oSheet.Range(«B2»).Value = «TIEMPOS»
    ‘ Agregamos Los datos que queremos agregar
    oSheet.Range(«B3»).Value = TextBox1.Text
    oSheet.Range(«B4»).Value = TextBox2.Text
    oSheet.Range(«B5»).Value = TextBox3.Text
    oSheet.Range(«B6»).Value = TextBox4.Text
    ‘ hacemos visible el documento
    oExcel.Visible = True
    oExcel.UserControl = True
    ‘Guardaremos el documento en el escritorio con el nombre prueba
    oBook.SaveAs(Environ(«UserProfile») & «EscritorioPrueba.xls»)
    End Sub

    Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint

    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    MsgBox(«entro»)

    End Sub
    End Class

  7. PepLluis,

    Em pesquisa na internet achei o blog de onde pude aproveitar várias dicas em uma aplicação que estou desenvolvendo usando C# (visual studio express 2015). Trata-se de comunicação serial onde envio uma mensagem para um dispositivo e preciso verificar se houve resposta e daí comparar a resposta com o esperado validando a comunicação. Espero seu contato para que eu possa detalhar melhor o meu problema e talvez contar com sua ajuda. Espero que o idioma não seja um problema para nossa comunicação…

    Att,

    1. Ejodoa,
      Ya respondi su pregunta en un post posterior. No dude en continuar la conversación si puedo serle útil. Y por supuesto el idioma no es ningún problema.

      Un Saludo,
      PepLluis,

  8. Peplluis

    Estou desenvolvendo uma aplicação em c# no visual studio express 2015 onde comunico com um dispositivo pela porta serial. Envio uma mensagem, verifico se houve resposta é daí comparo com a resposta esperada validando a comunicação. Estou enviando a mensagem mas não estou conseguindo fazer as devidas verificações na resposta. Se pude me ajudar envio mais detalhes para você dar uma olhada. Desde já agradeço.

    1. Hola ejodoa,
      Obrigado. Por su pregunta.
      Para poder descartar problemas de tiempo de proceso, en primer lugar deberías hacer las pruebas de envio/recepción desde el mismo programa cortocircuitando los pines 2/3 del conector serie. Si en las pruebas envias/recibes correctamente, entonces es muy probable que el equipo sea muchísimo mas rápido en procesar la primera recepción respecto al dispositivo, por lo que en estas condiciones no descartaría insertar algún tipo de retardo en el evento de recepción de datos.

      Saludos,
      PepLluis,

  9. Buenos días PepLluis:

    Tengo un formulario el cual me permite leer el codigo de barras de la cedula

    necesito saber o aprender como puedo identificar en que puerto tengo mi lectora de codigo de barras

  10. Hola Pep Lluis,

    Soy Jorge Artieda y acabo de asistir a tu workshop «Reloaded : Connect things to Azure IoT HUB with Arduino and Visual Studio Code».
    Yo también soy del mundo .Net, como te comentaba.
    Muy interesante! He aprendido mucho!

  11. Buenas noches, primero que todo muchas gracias por tan excelentes temas y ayudas que nos entregas a miles de personas.
    Estoy tratando de conseguir un programa o tutorial para conectar una balanza y un computador por puerto serial. Logicamente para que el computador pueda recibir el peso de la balanza y este a su vez pueda copiar los datos recibidos de la balanza a un programa de facturacion. Seria como un programa que actuara de conector en donde a su vez al momento de pesar un producto, la balanza envie los datos al programa conector y este programa conector envie el peso al portapapeles o al programa de facturacion. Seria mejor que se recibiera al portapapeles, ya que existen cientos de programas de facturacion. Si me pudieras colaborar o guiar con este tema, te lo agradeceria inmensamente y ayudarias a muchas personas nuevamente, ya que he tratado de buscar en foros pero no hay un tema exactamente como te comento para poder conectar cualquier balanza. Muchas gracias, quedo atento

    1. Hola Juan Carlos,
      Lamentablemente no dispongo de demasiado tiempo para responder. Atendiendo que ha pasado casi un mes de tu petición. Como ves que pueda ayudarte? Necesitaria que me concretaras un poquito mas… hardware..etc.

      1. Muchas gracias por tu ayuda, si en general te comente, existen varios modelos y marcas de balanzas. Pero en este caso las balanzas mas utilizadas son de la marca Torrey y Datalogic. En general casi todas siempre van a manejar la misma transmisión de datos que son:

        Bits por segundo: 9600
        Bits de datos: 8
        Paridad: Ninguno
        Bits de parada: 1
        Control de Flujo: Ninguno.
        Entonces por Ejemplo para obtener el peso de una Balanza de Marca Datalogic, lo que hago es por ejemplo con el programa Hyperterminal mandarle el comando desde un archivo .txt que contenga S11, ese comando lo que hara es obtener el Peso, las Balanzas siempre tienen un comando especial para llamar el peso. Pero cual es el desafio, de poder tener un programa que este mandando ese codigo automaticamente cuando detecte peso sobre la balanza, y que uno manualmente pueda cambiarle ese codigo. Es decir cambiar el codigo del comando para obtener el peso, ya que son infinidad de Balanzas en el mercado que existen. Ese programa como te digo debera pasar la informacion al portapapeles.

        Muchas gracias por tu atencion , Saludos desde Colombia

  12. Hola PepLluis espero que estes muy bien. He seguido tus tutoriales sobre conexión de balanzas a puerto serial para capturar datos y me han funcionado perfecto. Gracias por estos aportes.

    Mi pregunta es la siguiente, estoy tomando datos en tiempo real de una balanza Mettler y los visualizo en un textbox de la misma forma que los muestra la balanza, lo que deseo es que cuando el valor de peso sea diferente de 0.0 g y sea estable el programa capture ese peso y lo ponga en un textbox. Por ejemplo: si coloco un peso sobre la bascula que sea 124.6 g quiero que ese valor se almacene en un textbox diferente al que me muestra el valor en tiempo real. Agradezco mucho tus comentarios y ayuda.
    Cordial saludo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Otro sitio realizado con WordPress