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.
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.