Avatar billede simonth Nybegynder
10. august 2006 - 18:32 Der er 7 kommentarer og
1 løsning

Simpelt program - Vise om "CD" er aktiv

http://msdn2.microsoft.com/en-us/library/system.io.ports.serialport.pinchanged.aspx

Hvordan bruger man den funktion?
Jeg har et modem kabel og en rs232 minitester, når jeg fører en ledning fra pin 3 til pin 8 på kablet, og så lyser "CD"på minitesteren.
Kablet er forbundet computeren på COM1.
Jeg vil gerne vise om der er forbindelse mellem (ligesom om "CD" lyser) pin 3 og 8 på computeren, hvor den f.eks. bare skriver "True" når der er forbindelse.
Jeg vil tro man skal bruge den funktion der er på linket, men hvordan?

Nogen der kan komme med et eksempel?
Avatar billede simonth Nybegynder
11. august 2006 - 09:03 #1
Ingen der kan hjælpe? Jeg behøver det virkelig, har brugt mange timer på Google men kan ikke finde noget, det er bare "serial port monitor" uden source man kan finde og det kan jeg ikke bruge til noget..
Avatar billede bernhof Nybegynder
11. august 2006 - 14:32 #2
Bruger du Visual Studio 2005?

I så fald kigger du i din toolbox under Components, hvor du finder "SerialPort", som du placerer på en form. Ret dens PortName egenskab til "COM1".

Herefter håndterer du dens PinChanged event, hvor du har dine event arguments, som angiver hændelsens natur (e.EventType).

Eksempel:

  Private Sub SerialPort1_PinChanged(ByVal sender As System.Object, _
      ByVal e As System.IO.Ports.SerialPinChangedEventArgs) _
      Handles SerialPort1.PinChanged
    If e.EventType = IO.Ports.SerialPinChange.CDChanged Then
      'Gør et eller andet
    End If
  End Sub


Jeg skal lige nævne, at jeg absolut ingen erfaring har med SerialPort klassen, og aner intet om det du sidder og arbejder med, men ovenstående er den metode, hvorpå du arbejder med PinChanged.
Avatar billede simonth Nybegynder
11. august 2006 - 14:51 #3
Jeg bruger den gratis Express udgave.

Her er den kode jeg bruger lige nu:

Public Class Form1
    Dim WithEvents serialPort As New IO.Ports.SerialPort

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

        For i As Integer = 0 To _
          My.Computer.Ports.SerialPortNames.Count - 1
            cbbCOMPorts.Items.Add( _
              My.Computer.Ports.SerialPortNames(i))
        Next
        btnDisconnect.Enabled = False
    End Sub

    Private Sub DataReceived( _
      ByVal sender As Object, _
      ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
      Handles serialPort.DataReceived

        txtDataReceived.Invoke(New _
                      myDelegate(AddressOf updateTextBox), _
                      New Object() {})
    End Sub

    Private Sub btnSend_Click( _
      ByVal sender As System.Object, _
      ByVal e As System.EventArgs) _
      Handles btnSend.Click
        Try
            serialPort.Write(txtDataToSend.Text & vbCrLf)
            With txtDataReceived
                .SelectionColor = Color.Black
                .AppendText(txtDataToSend.Text & vbCrLf)
                .ScrollToCaret()
            End With
            txtDataToSend.Text = String.Empty
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Public Delegate Sub myDelegate()
    Public Sub updateTextBox()
        With txtDataReceived
            .Font = New Font("Garamond", 12.0!, FontStyle.Bold)
            .SelectionColor = Color.Red
            .AppendText(serialPort.ReadExisting)
            .ScrollToCaret()
        End With
    End Sub

    Private Sub btnConnect_Click( _
      ByVal sender As System.Object, _
      ByVal e As System.EventArgs) _
      Handles btnConnect.Click
        If serialPort.IsOpen Then
            serialPort.Close()
        End If
        Try
            With serialPort
                .PortName = cbbCOMPorts.Text
                .BaudRate = 2400
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
                ' .Encoding = System.Text.Encoding.Unicode
            End With
            serialPort.Open()

            lblMessage.Text = cbbCOMPorts.Text & " connected."
            btnConnect.Enabled = False
            btnDisconnect.Enabled = True
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub
    'Public Event PinChanged As IO.Ports.SerialPinChangedEventHandler
    Public Event PinChanged(ByVal sender As Object, ByVal e As System.IO.Ports.SerialPinChangedEventArgs)
    Sub pinchanged2()
        MsgBox("hej")
    End Sub

    Private Sub btnDisconnect_Click( _
      ByVal sender As System.Object, _
      ByVal e As System.EventArgs) _
      Handles btnDisconnect.Click
        Try
            serialPort.Close()
            lblMessage.Text = serialPort.PortName & " disconnected."
            btnConnect.Enabled = True
            btnDisconnect.Enabled = False
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

End Class

Jeg vil lige se om den kode du skriver virker, 2.sek.

Og så skal koden vel være følgende, ik?:


Public Class Form1
    Dim WithEvents serialPort As New IO.Ports.SerialPort

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

        For i As Integer = 0 To _
          My.Computer.Ports.SerialPortNames.Count - 1
            cbbCOMPorts.Items.Add( _
              My.Computer.Ports.SerialPortNames(i))
        Next
        btnDisconnect.Enabled = False
    End Sub

    Private Sub DataReceived( _
      ByVal sender As Object, _
      ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
      Handles serialPort.DataReceived

        txtDataReceived.Invoke(New _
                      myDelegate(AddressOf updateTextBox), _
                      New Object() {})
    End Sub

    Private Sub btnSend_Click( _
      ByVal sender As System.Object, _
      ByVal e As System.EventArgs) _
      Handles btnSend.Click
        Try
            serialPort.Write(txtDataToSend.Text & vbCrLf)
            With txtDataReceived
                .SelectionColor = Color.Black
                .AppendText(txtDataToSend.Text & vbCrLf)
                .ScrollToCaret()
            End With
            txtDataToSend.Text = String.Empty
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Public Delegate Sub myDelegate()
    Public Sub updateTextBox()
        With txtDataReceived
            .Font = New Font("Garamond", 12.0!, FontStyle.Bold)
            .SelectionColor = Color.Red
            .AppendText(serialPort.ReadExisting)
            .ScrollToCaret()
        End With
    End Sub

    Private Sub btnConnect_Click( _
      ByVal sender As System.Object, _
      ByVal e As System.EventArgs) _
      Handles btnConnect.Click
        If serialPort.IsOpen Then
            serialPort.Close()
        End If
        Try
            With serialPort
                .PortName = cbbCOMPorts.Text
                .BaudRate = 2400
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
                ' .Encoding = System.Text.Encoding.Unicode
            End With
            serialPort.Open()

            lblMessage.Text = cbbCOMPorts.Text & " connected."
            btnConnect.Enabled = False
            btnDisconnect.Enabled = True
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub SerialPort1_PinChanged(ByVal sender As System.Object, _
      ByVal e As System.IO.Ports.SerialPinChangedEventArgs) _
      Handles SerialPort1.PinChanged
    If e.EventType = IO.Ports.SerialPinChange.CDChanged Then
      'Gør et eller andet
msgbox("hej")
    End If
  End Sub


    Private Sub btnDisconnect_Click( _
      ByVal sender As System.Object, _
      ByVal e As System.EventArgs) _
      Handles btnDisconnect.Click
        Try
            serialPort.Close()
            lblMessage.Text = serialPort.PortName & " disconnected."
            btnConnect.Enabled = True
            btnDisconnect.Enabled = False
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

End Class
Avatar billede simonth Nybegynder
11. august 2006 - 14:57 #4
Den skriver
Error    1    Handles clause requires a WithEvents variable defined in the containing type or one of its base types.    C:\Documents and Settings\Simon T\Skrivebord\sb'\SerialCommChat\Form1.vb    82    15    SerialCommChat
som fejl.
Jeg er ny til VB.Net så hvordan laver jeg sådan en WithEvents variable?
Avatar billede simonth Nybegynder
11. august 2006 - 15:49 #5
Jeg har prøvet at ændre de to steder hvor der står "SerialPort1" til "SerialPort", hvor jeg også har Handles linjen inde, der melder om ingen fejl nu, men det virker stadig ikke..?
Avatar billede simonth Nybegynder
11. august 2006 - 21:28 #6
Jeg har fået det til at virke. Jeg plejer ellers at give point alligevel, men det kan jeg jo ikke fortsætte med evigt, så denne gang ingen point for det du skrev virkede ikke helt. Men jeg kan hverfald sige tak for hjælpen :)

Og hvis du føler du alligevel skulle have haft pointene så sig lige til..
Avatar billede bernhof Nybegynder
13. august 2006 - 21:22 #7
Det betyder nu ikke det store for mig, om jeg får point eller ej. Plejer dog selv at give point til folk, som har lagt tid i at hjælpe mig, på trods af, at jeg selv skal arbejde lidt med det for at få det til at virke. Synes dog 200 point er alt for meget. Næste gang, så bare nøjes med at tilbyde 60 point, hvis du synes dit spørgsmål er indviklet. Så løber du heller ikke så hurtigt tør for point :)

Men du fik det til at virke, og det er jo det vigtigste :)
Avatar billede simonth Nybegynder
16. januar 2007 - 17:43 #8
Lukker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester