none
COMO DECLARAR PUERTO SERIAL (COMPORT) DE FORMA GLOBAL PARA TODOS LOS FORMULARIOS EN VB2008 FRAMEWORK 2.0 RRS feed

  • Pregunta

  • Saludos,

    Tengo la siguiente duda, como se podrìa declarar el puerto serial o llamado COMPORT en VB2008 Framework 2.0 de forma global, de forma que no tenga que declarar en cada formulario el mismo puerto serial, y solo sea necesario declararlo de forma global y la manipulacion (port.read() y port.write()) se pueda hacer en cualquier formulario en proceso.

     

    Gracias

    • Cambiado PepLluisModerator domingo, 6 de noviembre de 2011 23:53 foro equivocado (De:Lenguaje VB.NET)
    jueves, 27 de octubre de 2011 5:30

Respuestas

  • Buenas caudiz.

    Lo que necesitas es crearte un módulo:

    Clases y módulos

    Crea la instancia de manera global con su correspondiente constructor, y añade las funciones digamos AbrirPuerto(), EnviarDatos(), CerrarPuerto(), ..

    Así consigues que esté instanciada desde el principio y desde cualquier formulario puedas abrir, enviar datos, cerrar, etc..

    Un saludo.


    Antonio López Atienza
    Microsoft Community Contributor
    .NET Developer
    Code examples
    http://www.lopezatienza.es
    jueves, 27 de octubre de 2011 6:46
  • Hola y perdonarme la intromision :-)

    Creo que podrias usar algo simular a esto :

    Primero definir el modulo que contenga el acceso compartido :

    Imports System.IO.Ports
    
    Module SerialComm
    
        Private SerialPort1 As New SerialPort
        Private LastFrameRead As String
    
        Public Event DataAvailable()
    
        Sub New()
            SerialPort1.PortName = "COMx"
            SerialPort1.Open()
            AddHandler SerialPort1.DataReceived, AddressOf ReceiveData
        End Sub
    
        Private Sub ReceiveData()
            LastFrameRead += SerialPort1.ReadExisting.ToString()
            RaiseEvent DataAvailable()
        End Sub
    
        Public Function ReadData() As String
            Return LastFrameRead
        End Function
    
        Public Sub WriteData(Frame)
            SerialPort1.Write(Frame)
        End Sub
    
        Public Sub ClearData()
            LastFrameRead = ""
        End Sub
    
    End Module
    
    

    Luego el codigo correspondiente en cada formulario (tantos como quieras) :

    Public Class Form1
    
        Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            AddHandler SerialComm.DataAvailable, AddressOf ReadData
            Form2.Show()
        End Sub
    
        Sub ReadData()
            Me.Label1.Text = SerialComm.ReadData
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            SerialComm.WriteData("Hola :-) from 1")
        End Sub
    End Class
    
    

    Saludos,
    PepLluis,


    MVP - Visual Developer
    • Marcado como respuesta caudiz miércoles, 9 de noviembre de 2011 17:08
    domingo, 6 de noviembre de 2011 23:51
    Moderador

Todas las respuestas

  • Buenas caudiz.

    Lo que necesitas es crearte un módulo:

    Clases y módulos

    Crea la instancia de manera global con su correspondiente constructor, y añade las funciones digamos AbrirPuerto(), EnviarDatos(), CerrarPuerto(), ..

    Así consigues que esté instanciada desde el principio y desde cualquier formulario puedas abrir, enviar datos, cerrar, etc..

    Un saludo.


    Antonio López Atienza
    Microsoft Community Contributor
    .NET Developer
    Code examples
    http://www.lopezatienza.es
    jueves, 27 de octubre de 2011 6:46
  • Muchas gracias Lopezatienza,

    La respuesta efectivamente es la que necesitaba, sin embargo sería molestia si me puediese indicar como hacer la clase para ejecutar el puerto SERIAL cuando lo necesite en diferentes Formularios?. He intentado hacer la estructura en una clase, sin embargo me han aparecido algunos errores en los estoy trabajando pero no caería mal una ayuda.

     

    Gracias,

    lunes, 31 de octubre de 2011 20:08
  • Hola y perdonarme la intromision :-)

    Creo que podrias usar algo simular a esto :

    Primero definir el modulo que contenga el acceso compartido :

    Imports System.IO.Ports
    
    Module SerialComm
    
        Private SerialPort1 As New SerialPort
        Private LastFrameRead As String
    
        Public Event DataAvailable()
    
        Sub New()
            SerialPort1.PortName = "COMx"
            SerialPort1.Open()
            AddHandler SerialPort1.DataReceived, AddressOf ReceiveData
        End Sub
    
        Private Sub ReceiveData()
            LastFrameRead += SerialPort1.ReadExisting.ToString()
            RaiseEvent DataAvailable()
        End Sub
    
        Public Function ReadData() As String
            Return LastFrameRead
        End Function
    
        Public Sub WriteData(Frame)
            SerialPort1.Write(Frame)
        End Sub
    
        Public Sub ClearData()
            LastFrameRead = ""
        End Sub
    
    End Module
    
    

    Luego el codigo correspondiente en cada formulario (tantos como quieras) :

    Public Class Form1
    
        Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            AddHandler SerialComm.DataAvailable, AddressOf ReadData
            Form2.Show()
        End Sub
    
        Sub ReadData()
            Me.Label1.Text = SerialComm.ReadData
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            SerialComm.WriteData("Hola :-) from 1")
        End Sub
    End Class
    
    

    Saludos,
    PepLluis,


    MVP - Visual Developer
    • Marcado como respuesta caudiz miércoles, 9 de noviembre de 2011 17:08
    domingo, 6 de noviembre de 2011 23:51
    Moderador