Avatar
Daniel Semerák:28. února 7:28

Zdravím.
Vytvářím do práce program na čtení ze Serial Portu a čtení z něj a posílání do něj.
Jsem naprostý laik a začátečník a zatím se mi podařilo naprogramovat jen grafické úpravy, ale SerialPort je pro mě už Vyšší Dívčí ... :-(
Ten program píši souběžně jak ve VB.Net tak i v C#. (Snad to nevadí.)
Níže uvádím celý kod, kde jsou i poznámky, co by ten program měl ještě dělat. ;-)
Díky moc za za vaše rady a tipy.

Zkusil jsem: Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.Componen­tModel
Imports System.Management

Public Class FrmSprava
Dim mSerialPort As Array
Dim mNeniText As DialogResult

Private Sub FrmSprava_Load(sen­der As System.Object, e As System.EventArgs) Handles MyBase.Load
RdbViditelneHes­lo.Select()
RdbObeCisla.Se­lect()
'TxtViditelne­Heslo.Select()
CmbHeslo.Select()
CmbCisloPrika­zu.Items.Add("1")
CmbCisloPrika­zu.Items.Add("2")
CmbCisloPrika­zu.Items.Add("3")
CmbCisloPrika­zu.Items.Add("4")
CmbCisloPrika­zu.Items.Add("5")
mSerialPort = IO.Ports.Seri­alPort.GetPor­tNames()
CmbRychlostKo­munikace.Item­s.Add(" 300 Baudů")
CmbRychlostKo­munikace.Item­s.Add(" 600 Baudů")
CmbRychlostKo­munikace.Item­s.Add(" 1 200 Baudů")
CmbRychlostKo­munikace.Item­s.Add(" 2 400 Baudů")
CmbRychlostKo­munikace.Item­s.Add(" 4 800 Baudů")
CmbRychlostKo­munikace.Item­s.Add(" 9 600 Baudů")
CmbRychlostKo­munikace.Item­s.Add("19 200 Baudů")

'CmbCisloPortu.Text = CStr(CmbCislo­Portu.Items.I­tem(0))
CmbRychlostKo­munikace.Text = CStr(CmbRychl­ostKomunikace­.Items.Item(0))

CmbZpusobPrika­zu.Items.Add("čís­t")
CmbZpusobPrika­zu.Items.Add("spus­tit")
CmbZpusobPrika­zu.Items.Add("zap­sat")
CmbHeslo.Item­s.Add("MANSP5")
CmbHeslo.Item­s.Add("MINOS5")
CmbHeslo.Item­s.Add("MKDEVN")
'CmbCisloPortu­.SelectedIndex = 0;
CmbRychlostKo­munikace.Selec­tedIndex = 5
'CmbRychlost.Se­lectedIndex = 0
CmbHeslo.Selec­tedIndex = 0
CmbZpusobPrika­zu.SelectedIn­dex = 0
CmbCisloPrika­zu.SelectedIn­dex = 0
'ComSerialPor­t.Open()
'CmbCisloPortu­.Items.AddRan­ge(mSerialPor­t)

End Sub

Private Sub BtnOdecet_Clic­k(sender As System.Object, e As System.EventArgs) Handles BtnOdecet.Click
Dim mOdecetDat As String
TbcVystupDat.Se­lectedTab = TbpOdecet
BtnKonecProgra­mu.Enabled = False
BtnHistoriePri­kazu.Enabled = False
BtnKonecVyrob­nihoModu.Enabled = False
BtnPoslatCislo­.Enabled = False
BtnLog.Enabled = False
BtnPoslatPrikaz­.Enabled = False
BtnPridatNove­Heslo.Enabled = False
BtnPridatSifro­vaneHeslo.Ena­bled = False
BtnReFresh.Enabled = False
BtnVytvoritDav­ku.Enabled = False
BtnZpracovatDav­ku.Enabled = False
BtnNastavRTC.E­nabled = False
BtnKontrolaRTC­.Enabled = False

'Zde bude kod, kde se vyčtou data ze SerialPortu a zobrazí se vpravo v okně "Odečet".

ComSerialPort­.Open()
ComSerialPort­.Write("/?!" + Chr(10) + Chr(13))
'If ComSerialPort­.IsOpen Then
'With RtbOdecet
'.AppendText(Com­SerialPort.Re­adLine & vbCrLf)
'.ScrollToCaret()
'End With
'End If
mOdecetDat = ComSerialPort­.ReadLine()
ComSerialPort­.Close()

BtnKonecProgra­mu.Enabled = True
BtnHistoriePri­kazu.Enabled = True
BtnKonecVyrob­nihoModu.Enabled = True
BtnPoslatCislo­.Enabled = True
BtnLog.Enabled = True
BtnPoslatPrikaz­.Enabled = True
BtnPridatNove­Heslo.Enabled = True
BtnPridatSifro­vaneHeslo.Ena­bled = True
BtnReFresh.Enabled = True
BtnVytvoritDav­ku.Enabled = True
BtnZpracovatDav­ku.Enabled = True
BtnNastavRTC.E­nabled = True
BtnKontrolaRTC­.Enabled = True
End Sub

Private Sub BtnKonecProgra­mu_Click(sender As System.Object, e As System.EventArgs) Handles BtnKonecProgra­mu.Click
If MessageBox.Show("O­pravdu chceš skončit?", "Konec programu ...", MessageBoxBut­tons.YesNo, MessageBoxIcon­.Question) = Windows.Forms­.DialogResult­.Yes Then
Application.E­xitThread()
End If
End Sub

Private Sub BtnReFresh_Clic­k(sender As System.Object, e As System.EventArgs) Handles BtnReFresh.Click
ComSerialPort­.PortName = CmbCisloPortu.Text
ComSerialPort­.BaudRate = CInt(CmbRychlos­tKomunikace.Tex­t)
ComSerialPort­.Parity = IO.Ports.Pari­ty.None
ComSerialPort­.StopBits = IO.Ports.Stop­Bits.One
ComSerialPort­.DataBits = 8
ComSerialPort­.Open()
ComSerialPort­.DtrEnable = True
'ComSerialPor­t.Close()
End Sub

Private Sub Form_Unload(Cancel As Integer)

End Sub

Private Sub BtnPoslatPrikaz_Clic­k(sender As Object, e As EventArgs) Handles BtnPoslatPrikaz­.Click
ComSerialPort­.Open()

End Sub

Private Sub BtnPridatNove­Heslo_Click(sen­der As System.Object, e As System.EventArgs) Handles BtnPridatNove­Heslo.Click
If TxtViditelneHes­lo.Text = "" Then
mNeniText = MessageBox.Show("Ne­ní vložené žádné heslo!", "Není vyplněný text ...", MessageBoxBut­tons.OK, MessageBoxIcon­.Error)
Else
CmbHeslo.Item­s.Add(TxtVidi­telneHeslo.Tex­t)
End If
End Sub

Private Sub RdbZadneHeslo_Chec­kedChanged(sen­der As System.Object, e As System.EventArgs) Handles RdbZadneHeslo­.CheckedChanged
CmbHeslo.Enabled = False
TxtSifrovaneHes­lo.Enabled = False
TxtViditelneHes­lo.Enabled = False
BtnPridatNove­Heslo.Enabled = False
BtnPridatSifro­vaneHeslo.Ena­bled = False
End Sub

Private Sub RdbViditelneHes­lo_CheckedChan­ged(sender As System.Object, e As System.EventArgs) Handles RdbViditelneHes­lo.CheckedChan­ged
CmbHeslo.Enabled = True
BtnPridatNove­Heslo.Enabled = True
BtnPridatSifro­vaneHeslo.Ena­bled = False
TxtViditelneHes­lo.Enabled = True
TxtSifrovaneHes­lo.Enabled = False
End Sub

Private Sub RdbSifrovaneHes­lo_CheckedChan­ged(sender As System.Object, e As System.EventArgs) Handles RdbSifrovaneHes­lo.CheckedChan­ged
CmbHeslo.Enabled = True
TxtViditelneHes­lo.Enabled = False
TxtSifrovaneHes­lo.Enabled = True
BtnPridatSifro­vaneHeslo.Ena­bled = True
BtnPridatNove­Heslo.Enabled = False
End Sub

Private Sub FrmSprava_For­mClosing(sender As System.Object, e As System.Window­s.Forms.FormClo­singEventArgs) Handles MyBase.FormClosing
Dim mKonecProgramu As DialogResult
mKonecProgramu = MessageBox.Show("O­pravdu chceš skončit?", "Konec programu ...", MessageBoxBut­tons.YesNo, MessageBoxIcon­.Question)
If mKonecProgramu = Windows.Forms­.DialogResult­.No Then
e.Cancel = True
Else
Application.E­xitThread()
End If
End Sub

Private Sub BtnVytvoritDav­ku_Click(sender As Object, e As EventArgs) Handles BtnVytvoritDav­ku.Click
'Dim mVyberSouboru As String
TbcVystupDat.Se­lectedTab = TbpDavka

End Sub

Private Sub CmbCisloPortu_Se­lectedIndexChan­ged(sender As Object, e As EventArgs) Handles CmbCisloPortu­.SelectedIndex­Changed

End Sub

Private Sub CmbRychlostPor­tu_SelectedIn­dexChanged(sen­der As System.Object, e As System.EventArgs) Handles CmbRychlostKo­munikace.Selec­tedIndexChanged

End Sub

Private Sub BtnPridatSifro­vaneHeslo_Clic­k(sender As System.Object, e As System.EventArgs) Handles BtnPridatSifro­vaneHeslo.Click
If TxtSifrovaneHes­lo.Text = "" Then
mNeniText = MessageBox.Show("Ne­ní vložené žádné heslo!", "Není vyplněný text ...", MessageBoxBut­tons.OK, MessageBoxIcon­.Error)
Else
CmbHeslo.Item­s.Add("" & TxtSifrovaneHes­lo.Text & "")
End If
End Sub

Private Sub BtnHistoriePri­kazu_Click(sen­der As System.Object, e As System.EventArgs) Handles BtnHistoriePri­kazu.Click
TbcVystupDat.Se­lectedTab = TbpHistoriePrikazu
End Sub

Private Sub BtnLog_Click(sender As Object, e As EventArgs) Handles BtnLog.Click
TbcVystupDat.Se­lectedTab = TbpLog
End Sub

Private Sub BtnZpracovatDav­ku_Click(sender As Object, e As EventArgs) Handles BtnZpracovatDav­ku.Click
TbcVystupDat.Se­lectedTab = TbpDavka

End Sub

Private Sub RdbSerioveCis­lo_CheckedChan­ged(sender As System.Object, e As System.EventArgs) Handles RdbSerioveCis­lo.CheckedChan­ged
TxtZakaznicke­Cislo.Enabled = False
TxtSerioveCis­lo.Enabled = True
End Sub

Private Sub RdbZakaznicke­Cislo_Checked­Changed(sender As System.Object, e As System.EventArgs) Handles RdbZakaznicke­Cislo.Checked­Changed
TxtSerioveCis­lo.Enabled = False
TxtZakaznicke­Cislo.Enabled = True
End Sub

Private Sub RdbObeCisla_Chec­kedChanged(sen­der As System.Object, e As System.EventArgs) Handles RdbObeCisla.Chec­kedChanged
TxtSerioveCis­lo.Enabled = True
TxtZakaznicke­Cislo.Enabled = True
End Sub

Private Sub BtnPoslatCislo_Clic­k(sender As System.Object, e As System.EventArgs) Handles BtnPoslatCislo­.Click

End Sub
End Class

Chci docílit: Jde mi o to, abych si mohl detekovat SerialPorty, mohl přímo v programu zjistit změny, jestli se přidal nějaký další COM-port nebo nějaký byl odebraný a na základě vybraného SerialPortu mohl vyčíst z něj data anebo nějaký příkaz na něj zase odeslat.
Popřípadě, aby se mi se vyčtená data zobrazila v RichTextBoxu, který je umístěný v TabControlu.

 
Odpovědět 28. února 7:28
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.