Нужно получать данные с СОМ порта по событию - VB
Формулировка задачи:
Здравствуйте. Я с VB недавно работаю так вот,
мне нужно получать данные с СОМ порта по событию, а не периодически проверяя порт. Событие нашел, но onComm работает не совсем понятно мне, т.е. в тестовом примере происходит следующее - событие выполняет и отрабатывает, но данные не считываются до тех пор пока я не выведу сообщение о событии MsgBox MSComm2.CommEvent, после его вывода все работает. Но ведь вывод сообщения ни на что не влияет, почему так???
И вообще как сделать так чтобы работало все без этого? вот код:
Листинг программы
- Private Sub cmdSend_Click()
- MSComm1.CommPort = 1
- MSComm2.CommPort = 2
- MSComm1.Settings = '9600,N,8,1'
- MSComm2.Settings = '9600,N,8,1'
- 'Используем весь буфер
- MSComm1.InputLen = 0
- MSComm2.InputLen = 0
- 'MSComm2.InBufferSize = 15
- MSComm2.InBufferCount = 0
- 'Открываем порт
- MSComm2.PortOpen = True
- MSComm1.PortOpen = True
- 'Посылаем сообщение
- MSComm1.Output = txtSend.Text
- 'Закрываем порт
- MSComm1.PortOpen = False
- MSComm1.OutBufferCount = 0
- End Sub
- Private Sub MSComm2_OnComm()
- txtGet.Text = ''
- MsgBox MSComm2.CommEvent ' если этого не будет - то ничего
- 'не считается
- If MSComm2.CommEvent = 4 Then
- inString$ = MSComm2.Input
- txtGet.Text = inString$ 'MSComm2.Input
- MSComm2.PortOpen = False
- Else
- MsgBox MSComm2.CommEvent, vbCritical
- End If
- End Sub
Решение задачи: «Нужно получать данные с СОМ порта по событию»
textual
Листинг программы
- Private Sub Form_Load()
- MSComm1.PortOpen = True
- End Sub
- Private Sub Timer1_Timer()
- Dim data As String
- data = MSComm1.Input
- Dim a, b, c, d, e, f As String
- a = Mid(data, 1, 4)
- b = Mid(data, 6, 4)
- c = Mid(data, 11, 4)
- d = Mid(data, 16, 4)
- e = Mid(data, 21, 4)
- f = Mid(data, 26, 4)
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д