Hallö'chen Leute,
ich habe in der Firma eine Übungsaufgabe gestellt bekommen. Und zwar habe ich einen Inkremental Drehgeber mit 2 Näherrungssensoren gebaut und lese diese nun über ein Programm ,welches in ich VB (2010) verfasst habe aus. Das klappt alles soweit ganz gut. DIe Näherungssensoren schaffen eine Frequenz bis 1khz. Aber sofern die Informationen die ich habe richtig sind ,kann ein USB durchschnittlich alle 25ms eine Info übertragen. Damit wäre ich soweit ja auch zufrieden ,doch das Programm arbeitet mir zu langsam.
Da ich noch ein relativer Neuling bin ,wollte ich mal eure Meinung dazu wissen ,was ich am Quellcode verbessern kann. Das Hauptaugenmerk meinerseits liegt auf "If-Else". Wäre super ,wenn ihr zu einer gewissen Stelle an der ihr etwas ersetzen würdet einfach ein Stichwort mit rein bringt. Den Rest lese ich mir dann zusammen
Naja hier der Code:
Spoiler anzeigen
Ich hoffe ihr könnt damit etwas anfangen und mir ein paar Tipps zur Performanceverbesserung geben.
MfG
Danny Der Dee
ich habe in der Firma eine Übungsaufgabe gestellt bekommen. Und zwar habe ich einen Inkremental Drehgeber mit 2 Näherrungssensoren gebaut und lese diese nun über ein Programm ,welches in ich VB (2010) verfasst habe aus. Das klappt alles soweit ganz gut. DIe Näherungssensoren schaffen eine Frequenz bis 1khz. Aber sofern die Informationen die ich habe richtig sind ,kann ein USB durchschnittlich alle 25ms eine Info übertragen. Damit wäre ich soweit ja auch zufrieden ,doch das Programm arbeitet mir zu langsam.
Da ich noch ein relativer Neuling bin ,wollte ich mal eure Meinung dazu wissen ,was ich am Quellcode verbessern kann. Das Hauptaugenmerk meinerseits liegt auf "If-Else". Wäre super ,wenn ihr zu einer gewissen Stelle an der ihr etwas ersetzen würdet einfach ein Stichwort mit rein bringt. Den Rest lese ich mir dann zusammen
Naja hier der Code:
VB.NET-Quellcode
- Option Strict On
- Imports System.IO
- Imports FirmaXP.BusPort
- Imports FirmaXP.BusFunctions
- Public Class Main
- Dim A As Integer 'Sensor A
- Dim B As Integer 'Sensor B
- Dim max As Integer = 120 'Maximum Lautstärke
- Dim mini As Integer = 0 'Minimum Lautstärke
- Private DT As DataTable 'Datentabelle zum Anzeigen der Feldmodule(Firmenintern)
- Private Sub init()
- DT = New DataTable
- With DT
- .Columns.Add("Name")
- .Columns.Add("KurzAdr")
- .Columns.Add("TypNR")
- .Columns.Add("LangAdr")
- End With
- With Me.DataGridView1
- .DataSource = DT
- .AllowUserToAddRows = False
- .ReadOnly = True
- .RowHeadersVisible = False
- End With
- End Sub
- Private Sub fillDT()
- DT.Rows.Clear()
- Dim devices As List(Of FirmaXP.Device) = FirmaXP.BusFunctions.devScan()
- If devices Is Nothing Then Exit Sub
- Dim dr As DataRow
- For Each d As FirmaXP.Device In devices
- dr = DT.NewRow
- dr("Name") = d.DevName
- dr("TypNR") = d.TypeNr
- dr("LangAdr") = d.LongAdr
- dr("KurzAdr") = d.ShortAdr
- DT.Rows.Add(dr)
- Next
- End
- End Sub 'Für das Programm irrelevant.
- Private Sub bt_search_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_search.Click
- init()
- fillDT()
- End Sub
- 'Aktivierung/Deaktivierung des Timers zum Auslesen des Registers (Gegenseitige Verriegelung)
- Private Sub cmd_lesen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_lesen.Click
- If timer_lesen.Enabled = False Then
- cmd_lesen.Text = "Bestimmung beenden."
- num_shadr.ReadOnly = True
- num_reg.ReadOnly = True
- timer_lesen.Enabled = True
- ElseIf timer_lesen.Enabled = True Then
- cmd_lesen.Text = "Drehrichtung bestimmen."
- num_shadr.ReadOnly = False
- num_reg.ReadOnly = False
- timer_lesen.Enabled = False
- End If
- End Sub
- 'Timer zum auslesen und Umsetzen des Codes in eine Anzeige der einzelnen Flanken
- Private Sub timer_lesen_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timer_lesen.Tick
- If readReg(CInt(num_shadr.Value), CInt(num_reg.Value)) = 1536 Then
- tb_flankea.Text = "0"
- tb_flankeb.Text = "0"
- End If
- If readReg(CInt(num_shadr.Value), CInt(num_reg.Value)) = 1537 Then
- tb_flankea.Text = "1"
- tb_flankeb.Text = "0"
- End If
- If readReg(CInt(num_shadr.Value), CInt(num_reg.Value)) = 1538 Then
- tb_flankea.Text = "0"
- tb_flankeb.Text = "1"
- End If
- If readReg(CInt(num_shadr.Value), CInt(num_reg.Value)) = 1539 Then
- tb_flankea.Text = "1"
- tb_flankeb.Text = "1"
- End If
- End Sub
- 'Richtungserkennung Flanke A / Lautstärkenanzeige-Update
- Private Sub tb_flankea_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb_flankea.TextChanged
- If tb_flankea.Text = "1" AndAlso tb_flankeb.Text = "0" AndAlso TextBox1.TextLength < max Then
- tb_drehrichtung.Text = "Drehrichtung : Mit dem Uhrzeigersinn!"
- TextBox1.Text = TextBox1.Text + "||| "
- ElseIf tb_flankea.Text = "1" AndAlso tb_flankeb.Text = "1" AndAlso TextBox1.TextLength > mini Then
- tb_drehrichtung.Text = "Drehrichtung : Gegen den Uhrzeigersinn!"
- TextBox1.Text = TextBox1.Text.Remove(TextBox1.Text.Length - 4, 4)
- End If
- End Sub
- 'Richtungserkennen Flanke B / Lautstärkenanzeige-Update
- Private Sub tb_flankeb_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb_flankeb.TextChanged
- If tb_flankeb.Text = "1" AndAlso tb_flankea.Text = "0" AndAlso TextBox1.TextLength > mini Then
- tb_drehrichtung.Text = "Drehrichtung : Gegen den Uhrzeigersinn!"
- TextBox1.Text = TextBox1.Text.Remove(TextBox1.Text.Length - 4, 4)
- ElseIf tb_flankeb.Text = "1" AndAlso tb_flankea.Text = "1" AndAlso TextBox1.TextLength < max Then
- tb_drehrichtung.Text = "Drehrichtung : Mit dem Uhrzeigersinn!"
- TextBox1.Text = TextBox1.Text + "||| "
- End If
- End Sub
- End Class
Ich hoffe ihr könnt damit etwas anfangen und mir ein paar Tipps zur Performanceverbesserung geben.
MfG
Danny Der Dee