Member 11475482 Ответов: 1

Сравнение текущих и предыдущих последовательных данных visual basic


Вот код

Imports System Imports System.IO.Ports

Public Class Form1
Dim comPORT As String
Dim receivedData As String = ""



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Timer1.Enabled = False
    comPORT = ""
    For Each sp As String In My.Computer.Ports.SerialPortNames
        comPort_ComboBox.Items.Add(sp)
    Next
End Sub


Private Sub comPort_ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comPort_ComboBox.SelectedIndexChanged
    If (comPort_ComboBox.SelectedItem <> "") Then
        comPORT = comPort_ComboBox.SelectedItem
    End If
End Sub


Private Sub connect_BTN_Click(sender As Object, e As EventArgs) Handles connect_BTN.Click
    If (connect_BTN.Text = "Connect") Then
        If (comPORT <> "") Then
            SerialPort1.Close()
            SerialPort1.PortName = comPORT
            SerialPort1.BaudRate = 9600
            SerialPort1.DataBits = 8
            SerialPort1.Parity = Parity.None
            SerialPort1.StopBits = StopBits.One
            SerialPort1.Handshake = Handshake.None
            SerialPort1.Encoding = System.Text.Encoding.Default 'very important!
            SerialPort1.ReadTimeout = 10000

            SerialPort1.Open()
            connect_BTN.Text = "Dis-connect"
            Timer1.Enabled = True
            Timer_LBL.Text = "Timer: ON"
        Else
            MsgBox("Select a COM port first")
        End If
    Else
        SerialPort1.Close()
        connect_BTN.Text = "Connect"
        Timer1.Enabled = False
        Timer_LBL.Text = "Timer: OFF"
    End If


End Sub


Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    receivedData = ReceiveSerialData()
    RichTextBox1.Text &= receivedData
End Sub


Function ReceiveSerialData() As String
    Dim Incoming As String
    Try
        Incoming = SerialPort1.ReadExisting()
        If Incoming Is Nothing Then
            Return "nothing" & vbCrLf
        Else
            Return Incoming
        End If
    Catch ex As TimeoutException
        Return "Error: Serial Port read timed out."
    End Try

End Function



Private Sub clear_BTN_Click(sender As Object, e As EventArgs) Handles clear_BTN.Click
    RichTextBox1.Text = ""
End Sub



Мое последовательное устройство передачи данных - это датчик скорости.Так что, как вы можете видеть, я получаю непрерывную меру скорости. Каждая новая линия - это новый приход в скорости. То, что я пытаюсь сделать, - это сравнить каждую новую строку с предыдущей, чтобы увидеть, есть ли какие-либо изменения.

Например :

если ritchtextbox.перевод строки &ЛТ;&ГТ; управления richtextbox.previousline тогда
сделать нечто....
конец, если

что-то вроде того..

Что я уже пробовал:

я пытался сделать то же самое с массивом или gridview данных, но не получил никакого результата. Я не знаю, как это сделать. Любой syggestion будет очень полезен. Спасибо, что уделили мне время.

1 Ответов

Рейтинг:
9

Dave Kreskowiak

Проблема в том, что ваше приложение не хранит информацию в модели данных. Вы используете элемент управления отображением/редактированием в качестве контейнера данных, и это не очень хорошая практика. Это также то, что делает это сравнение очень трудным для вас.

Создайте модель данных в своем коде для хранения этих данных. Используйте элемент управления RichTextBox для отображения данных или любой другой элемент управления, который вы хотите. Никогда не используйте элемент управления в качестве модели данных.


Member 11475482

Огромное спасибо!. Ваш совет был очень полезен