Divné chování metody write u komponenty sériový port - VB.NET 2010   zodpovězená otázka

VB.NET

Dobrý den,

snažím se poslat data po sériové lince (posílám bytové pole), ale za určitých okolností se pošlou a za jiných se nepošlu. Třeba když kód umístím do timeru a posílám pole o velikosti jedna, tak se to pošle, ale když posílám data z funkce tak se to nepošle, ale nevyhodí to žádnou chybu. Ale když stejný kód spustím událostí klik u tlačítka tak se data pošlou.

Část které se to týká:

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

        SP1.PortName = ComboBox1.SelectedItem.ToString
        SP1.BaudRate = 4800
        SP1.DataBits = 8
        SP1.Parity = Ports.Parity.None
        SP1.StopBits = Ports.StopBits.One
        SP1.Handshake = Ports.Handshake.None
        Try
            SP1.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

        Button4.Enabled = False
        Label3.Visible = True
        ks = 239 Xor cisloPrikazu Xor 1
        ReDim zprava(3)
        zprava = {239, cisloPrikazu, 1, ks}
        navazaniSpojeni.Start()
    End Sub

    Private Sub SP1_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP1.DataReceived
        If Me.InvokeRequired() Then
            Dim dr As New DataRecievedDelegate(AddressOf DataRecieved)
            Me.Invoke(dr, e, SP1.ReadByte)
        Else
            DataRecieved(e, SP1.ReadByte)
        End If
    End Sub

    Delegate Sub DataRecievedDelegate(ByVal e As System.IO.Ports.SerialDataReceivedEventArgs, ByVal linka As Integer)

    Sub DataRecieved(ByVal e As System.IO.Ports.SerialDataReceivedEventArgs, ByVal linka As Integer)
        buffer.Add(linka)
        prijemDat()

    End Sub

    
   
    Private Sub navazaniSpojeni_Tick(sender As System.Object, e As System.EventArgs) Handles navazaniSpojeni.Tick
        Dim navazoniSpojeni() As Byte = {237}
        SP1.Write(navazoniSpojeni, 0, navazoniSpojeni.Length)

    End Sub
    Public Sub prijemDat()

        velikostBufferu = buffer.Count()
        If velikostBufferu = 0 Then Exit Sub
        Select Case buffer.First()

            Case 237 'navázání spojení
                navazaniSpojeni.Stop()
                buffer.RemoveAt(0)
                odesilaniDat(True)
            Case 239 'príjem potvrzení
                If velikostBufferu >= 4 Then
                    If buffer(0) Xor buffer(1) Xor buffer(2) Xor buffer(3) = 0 Then
                        navazaniSpojeni.Stop()
                        cisloPrijatyhoprikazu = buffer(1)
                        If (Not kalibrace) And cisloPrijatyhoprikazu = ciloKalibrace Then
                            kalibrace = True
                        End If
                        If buffer(2) = 10 Then

                        End If
                        If buffer(2) = 11 Then
                            buffer.RemoveRange(0, 4)
                            odesilaniDat(False)
                            Exit Sub
                        End If

                        buffer.RemoveRange(0, 4)
                    Else
                        buffer.RemoveAt(0)
                        prijemDat()
                    End If
                End If
            Case Else
                buffer.RemoveAt(0)
                prijemDat()
        End Select

    End Sub
    Public Sub odesilaniDat(ByRef chyba As Boolean)
        If chyba Then
            SP1.Write(zprava, 0, zprava.Length)
            navazaniSpojeni.Start()
            Exit Sub
        End If
        If Not kalibrace Then
            cisloPrikazu += 1
            ciloKalibrace = cisloPrikazu
            ks = 239 Xor cisloPrikazu Xor 1
            ReDim zprava(3)
            zprava = {239, cisloPrikazu, 1, ks}
            SP1.Write(zprava, 0, zprava.Length)
            navazaniSpojeni.Start()
            Exit Sub
        End If
    End Sub
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý už se to nějak zpravilo :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback