Как организовать непрерывный опрос Com-порта? - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте. Приведенный ниже код работает так: кликнули по кнопке - отправили в порт набор байт, кликнули по другой - получили ответ. Нужно чтобы каждую секунду запрос в порт посылался, и ответ возвращался с отображением на форме. Пример взят из книги Архангельского (Delphi). На всякий случай прикрепляю проект.
Листинг программы
  1. Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
  2. 'запись сообщения в порт
  3. Dim n As Integer
  4. Dim s As String = Format(Now, "hh:mm:ss") 'Это передаваемый текст
  5. Dim SPnt As IntPtr = Marshal.StringToCoTaskMemAnsi(s)
  6. FlushFileBuffers(portHandle) 'очищаем буфер порта
  7. WriteFile(portHandle, SPnt, Len(s), n, lpOVERLAPPED)
  8. If GetLastError <> ERROR_IO_PENDING Then
  9. MsgBox("Ошибка")
  10. Else
  11. Timer1.Start()
  12. End If
  13. End Sub
  14. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  15. Dim n As Integer
  16. If GetOverlappedResult(portHandle, lpOVERLAPPED, n, False) Then
  17. Label3.Text = "Получены/переданы новые данные - " & n.ToString & " байт"
  18. Dim V As New System.Text.UTF8Encoding()
  19. Label4.Text = V.GetString(buf)
  20. Timer1.Stop()
  21. Else
  22. Label3.Text = "Новых данных нет"
  23. End If
  24. End Sub
  25. Private Sub btnReceived_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReceived.Click
  26. 'чтение сообщения из порта
  27. Dim n As Integer
  28. Dim mPnt As IntPtr = GCHandle.Alloc(buf, GCHandleType.Pinned).AddrOfPinnedObject()
  29. FlushFileBuffers(portHandle) 'очищаем буфер порта
  30. ReadFile(portHandle, mPnt, 128, n, lpOVERLAPPED)
  31. 'проверяем отсутствие ошибки
  32. If GetLastError <> ERROR_IO_PENDING Then
  33. MsgBox("Ошибка")
  34. Else
  35. Timer1.Start()
  36. End If
  37. End Sub

Решение задачи: «Как организовать непрерывный опрос Com-порта?»

textual
Листинг программы
  1. Dim comBuffer As Byte() = New Byte(n - 1) {}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы