Java týden Body zdarma
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

Diskuze: Přepnutí rychlosti u čtení z COM portu

Aktivity (4)
Avatar
Daniel Semerák:6. května 13:01

Zdravím.
Znovu se obracím s prosbou o vyřešení problému s komunikací na SerialPortu.
Už se mi podařilo poslat příkaz do zařízení a vyčtení dat při základní rychlosti, ale já potřebuji po vyčtení hlavičky poslat příkaz o navýšení rychlosti na základě zadané rychlosti z ComboBoxu a pokračování ve vyčítání zbytku dat.
… a to se mi už nedaří. :-(

Zkusil jsem:

Public Class FrmSpravaElektroMeru
        Dim VarSerialPort As Array

Private Sub FrmSprava_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
                VarSerialPort = IO.Ports.SerialPort.GetPortNames()
                TmrCasovac.Interval = 100
                CmbCisloPortu.Items.AddRange(VarSerialPort)
                ComSerialPort.Parity = IO.Ports.Parity.None
                ComSerialPort.DataBits = 7
                ComSerialPort.StopBits = IO.Ports.StopBits.One
                ComSerialPort.Handshake = IO.Ports.Handshake.None
                ComSerialPort.RtsEnable = True
                RdbViditelneHeslo.Select()
                RdbObeCisla.Select()
                RdbCesky.Select()
                CmbRychlostStartovaci.Items.Add("    300")
                CmbRychlostStartovaci.Items.Add("    600")
                CmbRychlostStartovaci.Items.Add("  1200")
                CmbRychlostStartovaci.Items.Add("  2400")
                CmbRychlostStartovaci.Items.Add("  4800")
                CmbRychlostStartovaci.Items.Add("  9600")
                CmbRychlostStartovaci.Items.Add("19200")
                CmbRychlostStartovaci.Text = CStr(CmbRychlostStartovaci.Items.Item(0))
                CmbRychlostStartovaci.SelectedIndex = 0
                CmbRychlostKomunikace.Items.Add("    300")
                CmbRychlostKomunikace.Items.Add("    600")
                CmbRychlostKomunikace.Items.Add("  1200")
                CmbRychlostKomunikace.Items.Add("  2400")
                CmbRychlostKomunikace.Items.Add("  4800")
                CmbRychlostKomunikace.Items.Add("  9600")
                CmbRychlostKomunikace.Items.Add("19200")
                CmbRychlostKomunikace.Text = CStr(CmbRychlostKomunikace.Items.Item(0))
                CmbRychlostKomunikace.SelectedIndex = 4
                CmbCisloPortu.Text = CStr(CmbCisloPortu.Items.Item(0))
                CmbCisloPortu.SelectedIndex = 0
                CmbCisloPortu.Text = CStr(CmbHeslo.Items.Item(0))
        End Sub

Private Sub BtnOdecet_Click(sender As System.Object, e As System.EventArgs) Handles BtnOdecet.Click
                BtnOdecet.Enabled = False
                RtbOdecet.Clear()
                TbcVystupDat.SelectedTab = TbpOdecet

                'Zde bude kod, kde se vyčtou data a zobrazí se vpravo v okně "Odečet".
                ComSerialPort.PortName = CmbCisloPortu.Text
                ComSerialPort.BaudRate = Int(CmbRychlostStartovaci.Text)
                ComSerialPort.Parity = Parity.Even
                ComSerialPort.StopBits = StopBits.One
                ComSerialPort.DataBits = 7
                ComSerialPort.Handshake = Handshake.None
                ComSerialPort.RtsEnable = True
                ComSerialPort.ReadTimeout = 3000
                ComSerialPort.Open()
                VarString = "<<< " & "/?!" + Chr(13) + Chr(10)
                ComSerialPort.Write(VarString)
                RtbLog.AppendText("*****" & " ")
                RtbLog.AppendText(DateTime.Now.ToString("dddd, d. MMMM yyyy H:mm:ss"))
                RtbLog.AppendText(" " & "*****")
                RtbOdecet.AppendText(VarString)
        End Sub

        Private Sub ComSerialPort_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles ComSerialPort.DataReceived
                VarString = ComSerialPort.ReadLine
                Me.Invoke(New EventHandler(AddressOf DoUpdate))
        End Sub

        Public Sub DoUpdate()
                'RtbOdecet.Text = RtbOdecet.Text & VarString
                RtbOdecet.Text = RtbOdecet.Text & ">>> " & VarString

                'ComSerialPort.Close()
        End Sub
End Class

Chci docílit: Pošlu do zařízení příkaz Enter, zařízení mi odpoví, že mi pošle do RichTextBoxu hlavičku toho zařízení, pak mu řeknu, že chci, aby komunikoval se mnou na vyšší rychlosti a poté mi poslal zbytek dat.

***** pondělí, 6. května 2019 7:04:26 *****
<<< /?!
>>> /SEE5ZE115.v10_011 … po tenhle řádek to ještě přijmu
<<< 000 … od toho řádku už jen při základní rychlosti, která pak už funguje jen na některých zařízeních, proto je potřeba změnit rychlost na vyšší a tenhle řádek se mi při základní rychlosti ani nezobrazí, pak až ten další (000 = 300Bd, 010 = 600Bd, 020 = 1200Bd, 030 = 2400Bd, 040 = 4800Bd a 050 = 9600Bd)
>>> F.F(00000000)
… atd.

 
Odpovědět 6. května 13:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.