Παλαβρατζής Βασίλης Ответов: 1

Прием и управление данными последовательных устройств в visual basic


Привет всем!! У меня есть последовательное устройство, которое посылает мне данные со скоростью 38400, и я получаю их вот так "?@D00014C000 000".Я вижу, что данные поступают в ritchtextbox, но то, что я пытаюсь сделать, - это использовать некоторые символы из строки в списке.
Например мне нужны персонажи "14С"появляется в listbox3. Я попытался подстрока и ср. функция, но listbox lidnt работает должным образом и теряет символы или путает их . Вот мой код. Есть какие-нибудь предложения, пожалуйста??



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

<pre>
Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports

Public Class frmMain
    Dim myPort As Array
    Delegate Sub SetTextCallback(ByVal [text] As String)
  

    'Serial Port Receiving Code Starts Here ....
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        ReceivedText(SerialPort1.ReadExisting())

    End Sub
    'Serial Port Receiving Code Ends Here ....

    'Serial Port Receiving Code(Invoke) Starts Here ....
    Private Sub ReceivedText(ByVal [text] As String)
        If Me.rtbReceived.InvokeRequired Then
            Dim x As New SetTextCallback(AddressOf ReceivedText)
            Me.Invoke(x, New Object() {(text)})

           

        Else
            Me.rtbReceived.Text &= [text]
              Dim fine As String = Mid([text], 7, 3)
            Dim list As Integer = ListBox3.Items.Add(fine)
        End If

    End Sub


End Class

Richard MacCutchan

"режим работы lidnt должным образом, и потери персонажей или ввести их в заблуждение"
Что это значит?

Παλαβρατζής Βασίλης

Это означает, что мое устройство отправляет данные со скоростью передачи 38400 БОД, и эти данные до моего кода хранятся правильно, строка за строкой в Richtextbox. То, что я пытаюсь сделать, - это "выудить" из каждой строки несколько символов и поместить их в список. Допустим, из всей строки "?@D00014C000 000" мне нужно 3 символа "14C". Вплоть до моего кода снова, то, что я получаю обратно из строк списка, выглядит примерно так : 14C 14C 14C 00 D00 14C 000..... как путаница данных, которые я просил

1 Ответов

Рейтинг:
8

CPallini

Цитата:
Я.rtbReceived.Text &= [текст]
Dim fine As String = Mid([текст], 7, 3)
Dim list As Integer = ListBox3.Предметы.Добавить(отлично)

Проблема заключается в том, что вы добавляете в список, в то время как строка текстового поля может быть все еще неполной (вы строите ее постепенно).

Вы должны сначала проверить, является ли полученная строка полной, а затем извлечь подстроку.


Παλαβρατζής Βασίλης

Не могли бы вы помочь мне с этим чеком ?

Παλαβρατζής Βασίλης

я попробовал это сделать, но ничего не вышло

Private Sub SerialPort1_DataReceived(отправитель как система.Объект, e как System.IO.Ports.SerialDataReceivedEventArgs) Обрабатывает SerialPort1.DataReceived
ReceivedText(SerialPort1.ReadExisting())
Конец Подводной Лодки

Private Sub ReceivedText(ByVal [text] As String) 'input from ReadExisting
Если Бы Я.RichTextBox2.InvokeRequired Тогда
Dim x As New SetTextCallback(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Еще
Me.RichTextBox2.Text &= [text] 'добавить текст
DataGridView1.Rows.Вставить(0, [текст])
Dim fine As String = Mid([текст], 7, 3)
Если DataGridView1.CurrentRow.IsNewRow = True Тогда

DataGridView2.Rows.Вставить(0, отлично)

Конец, Если
Конец, Если
Конец Подводной Лодки