Я программирую приложение в VB.Net, и я хочу читать полученные данные с последовательного порта в максимальной скорости передачи. Я использовал SerialPort компонент в моей форме и его свойства являются следующими:Прочитайте SerialPort в максимальном BaudRate в VB.Net
(BuadRate = 115200, бит данных = 8, Parity = нет, Стоп-биты = один)
При использовании connPort.ReadLine
в DataReceived
случае , перегрузка данных, вызванная в буфере, и я не могу прочитать все полученные данные в реальном времени, потому что пожары событий медленнее, чем полученные данные.
С другой стороны, когда я использую connPort.ReadExisting
, я могу прочитать все полученные данные в режиме реального времени без перегрузки данных в буфере, но полученные данные выглядят следующим образом:
Первый получил:
-12917
-12958
-13004Второй получил:
-13055
-13118
-13181
-1324Третьи получили:
-13320
-13391
-13463
Поэтому мне нужно парсер принимаемых данных построчно и по с другой стороны мне нужно обнаружить некоторые полученные ошибки данных:
...
-1324Третий получил:
...Правильным данные: -13246
Мой код:
Private Sub connPort_DataReceived _
(ByVal sender As System.Object, _
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
Handles connPort.DataReceived
Dim rcData as String
rcData = connPort.ReadLine
dt_Write(rcData)
'rcData = connPort.ReadExisting
'dt_Write(rcData)
End Sub
' Save received data in a created DataTable
Public dt As New DataTable
Private Sub dt_Write(ByVal rcData As String)
dt.Rows.Add(New Object() {Nothing, rcData})
End Sub
Я попробовал компонент Timer и Tick
событие С одним миллисекундным свойством Interval (одна миллисекунда не является реальным разрешением) для получения данных, но огонь также медленнее, и есть также упомянутые проблемы.
Я ищу правильный путь, и я стараюсь избегать избыточных операций. Спасибо
Можем ли мы увидеть код? 'ReadLine()' должен работать. Вы установили 'connPort.Newline'? –
Спасибо за ваш комментарий Джим. Я добавляю свой код в вопрос. Когда я использую 'connPort.ReadLine()', у меня есть некоторые проблемы. Сначала я не определял свойство NewLine, но остальное я определил как «connPort.NewLine = Chr (13) .ToString' в инициализации, но он не решает мои проблемы, и на самом деле я не мог найти разницы. – farzad89
Что произойдет, если вы используете 'connPort.Read()' вместо 'connPort.ReadLine()'? – djv