Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23

Программа для связи с устройством через СОМ порт.Фиаско(

11.10.2017, 11:11. Показов 5319. Ответов 33

Студворк — интернет-сервис помощи студентам
Друзья, всем добрый день. Решил написать программу для передачи и приема данных через СОМ порт. Писал всё с нуля не зная ни языка ни среды разработки. В итоге сделал небольшую программу, которая подключается к СОМ порту передает и принимает определенные пакеты данных по UART. Все было хорошо, программа работала и с терминальной программой через виртуальные СОМ порты и в симуляторе PROTEUS, передавало и принимало все правильно и то что нужно...пока не решил опробовать обмен данных с железом. Итак, подключил к компу Arduino, который использовал чисто как переходник USB-UART, настроил нужную скорость и количество байт данных. Для уверенности закольцевал RX и TX Arduino, послал данные через терминал, все отправляется и передается как надо. Подключаю свое устройство к UART, посылаю в него пакет из обычного терминала, все в порядке, прием и отправка работают как надо, все совпадает. Теперь запускаю свою написанную программу, нажимаю кнопку соединения ииии.... ничего не происходит((((
Чего я только не пробовал, и менял кодировку в свойстве SerialPort.Encoding, и задавал различные величины для SerialPort.WriteTimeout/ReadTimeout, и делал задержку в процедуре отправки и приема байт. Самое интересное, что с устройства данные приходят, это я понял, когда в PROTEUS подключил симулятор терминала в режиме прослушки. И я так понял, что пакет до устройства доходит, и с него же приходит, но в моей программе по каким-то причинам не срабатывает событие SerialPot_DataReceived. Может кто-нибудь подскажет, в какую сторону копать??? Прилагаю файлы проекта целиком в архиве. Ну и код для кучи сюда выложу.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel
 
Public Class Form1
 
    Dim myPort As Array
    Dim A As UInteger
    Dim DataGridViewTextBoxCell1 = New DataGridViewTextBoxCell()
    Delegate Sub SetTextCallBack(ByVal Text As String)
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
        SerialPort1 = New SerialPort()
        myPort = SerialPort.GetPortNames()
        PortBox.Items.AddRange(myPort)
        DisconnBtn.Enabled = False
        Read_writeBtn.Enabled = False
        DataGridView1.RowCount = 100
 
    End Sub
 
    Private Sub Connect_Click(sender As Object, e As EventArgs) Handles ConnectBtn.Click
 
        ' Dim SerialCond As Boolean
 
        If PortBox.Text = Nothing Then
            MsgBox("Выберите COM порт", vbExclamation)
            GoTo Back
        End If
 
        SerialPort1.Encoding = System.Text.Encoding.GetEncoding("Windows-1251")
        SerialPort1.PortName = PortBox.Text
        SerialPort1.BaudRate = 38400
        SerialPort1.DataBits = 8
        SerialPort1.Parity = Parity.None
        SerialPort1.StopBits = StopBits.One
        SerialPort1.ReadBufferSize = 24
        SerialPort1.WriteBufferSize = 24
        SerialPort1.DiscardNull = False
 
        Try
            SerialPort1.Open()
 
        Catch ex As Exception
 
            MsgBox("COM порт занят", vbCritical)
            GoTo Back
 
        End Try
 
        ConnectBtn.Enabled = False
        DisconnBtn.Enabled = True
        Rescan.Enabled = False
        PortBox.Enabled = False
        Read_writeBtn.Enabled = True
 
        Dim TestArr() As Byte = {&H1, &HFF, &H0, &H80, &H0, &HFF, &HFF, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &H0, &HFF}
 
        RichTextBox1.Text = 0
        SerialPort1.DiscardOutBuffer()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write(TestArr, 0, 24)
        Timer1.Start()
 
Back: End Sub
 
    Private Sub DisconnBtn_Click(sender As Object, e As EventArgs) Handles DisconnBtn.Click
 
        SerialPort1.Close()
 
        ConnectBtn.Enabled = True
        DisconnBtn.Enabled = False
        Rescan.Enabled = True
        PortBox.Enabled = True
        Read_writeBtn.Enabled = False
 
    End Sub
 
    Private Sub Rescan_Click(sender As Object, e As EventArgs) Handles Rescan.Click
 
        PortBox.Items.Clear()
        myPort = SerialPort.GetPortNames()
        PortBox.Items.AddRange(myPort)
 
    End Sub
 
    Private Sub SerialPort1_DataReceived_1(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
 
        Dim Buf(23) As Char
        Dim Bufcount As Byte = SerialPort1.BytesToRead
        Static j As Byte
        Dim Rcvarray(23, 100)
        Timer1.Stop()
 
        If Bufcount = 16 Then
 
            SerialPort1.Read(Buf, 0, Bufcount)
 
            If (Buf(15) <> Chr(&HFF)) Or
            (Buf(0) <> Chr(1)) Or
            (Buf(1) <> Chr(&HFF)) Then
 
                MsgBox("Ошибка приема данных", vbCritical)
                j = 0
                A = 0
                GoTo Back1
 
            ElseIf (Buf(2) = Chr(&HEE)) Then
 
                MsgBox("Ошибка отправки данных", vbCritical)
                j = 0
                A = 0
                GoTo Back1
 
            End If
 
            Servarray(Buf)
 
        ElseIf Bufcount = 24 Then
 
            SerialPort1.Read(Buf, 0, Bufcount)
 
            If (Buf(23) <> Chr(&HFF)) Or
            (Buf(0) <> Chr(1)) Or
            (Buf(1) <> Chr(&HFF)) Then
 
                MsgBox("Ошибка приема данных", vbCritical)
                GoTo Back1
 
            ElseIf (Buf(2) = Chr(&HEE)) Then
 
                MsgBox("Ошибка отправки данных")
                GoTo Back1
 
            End If
 
            For i = 0 To 23
                Rcvarray(i, j) = Buf(i)
            Next i
 
            j = j + 1
            If j >= 100 Then
                j = 0
            End If
 
            Read_write_Click(sender, e)
 
        End If
 
 
Back1: End Sub
 
    Private Sub Read_write_Click(sender As Object, e As EventArgs) Handles Read_writeBtn.Click
 
        Dim Opcode As Byte
 
        Dim Sendarray(18, A) As Byte
        Dim Sendstring(23) As Byte
        Opcode = &H0
        Sendarray(0, 0) = 1
        Sendarray(0, A) = 1
 
        If Sendarray(0, 0) = 0 Then
 
            MsgBox("Выберите хотя бы одну строку!", vbInformation)
            GoTo Back2
 
        ElseIf Sendarray(0, A) = 0 Then
 
            A = 0
            MsgBox("Передача завершена!", vbExclamation)
            GoTo Back2
 
        End If
 
        If WriteCheckBox.Checked = True Then
            Opcode = &H55
        End If
 
 
        Dim i = 7
        Dim j = 2
        Do Until i = 22
 
            Sendstring(i) = Sendarray(j, A)
            i = i + 1
            j = j + 1
        Loop
 
 
 
 
        Sendstring(0) = &H1
        Sendstring(1) = &HFF
        Sendstring(2) = Opcode
        Sendstring(3) = Sendarray(1, A)
        Sendstring(4) = Sendarray(2, A)
        Sendstring(5) = &HFF
        Sendstring(6) = &HFF
        Sendstring(23) = &HFF
        A = A + 1
 
        SerialPort1.DiscardOutBuffer()
        SerialPort1.DiscardInBuffer()
        SerialPort1.Write(Sendstring, 0, 24)
 
        Timer1.Start()
 
Back2: End Sub
 
    Private Sub Servarray(ByVal Text As String)
 
        Dim str As String = Text
        Dim InputbyteArray() As Byte
        Dim Bytecount As Integer = str.Length
        Dim hexNumbers As Text.StringBuilder = New Text.StringBuilder
 
        InputbyteArray = System.Text.Encoding.Default.GetBytes(str)
        For i As Integer = 0 To 15
            hexNumbers.Append(InputbyteArray(i).ToString("x2") & " ")
        Next
 
        If RichTextBox1.InvokeRequired Then
            Dim x As New SetTextCallBack(AddressOf Servarray)
            Invoke(x, New Object() {(Text)})
        Else
 
            RichTextBox1.Text = (hexNumbers.ToString)
            MsgBox("Соединение установлено", vbInformation)
        End If
 
    End Sub
    
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
 
        Timer1.Stop()
        MsgBox("Проверьте соединение и повторите попытку!", vbExclamation)
        DisconnBtn_Click(sender, e)
 
    End Sub
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Openfile.Click
 
        OpenFileDialog1.InitialDirectory = "C:\"
        OpenFileDialog1.ShowDialog()
    End Sub
 
    Public Sub Database_DataGridView1()
 
 
 
    End Sub
 
 
 
End Class
Вложения
Тип файла: rar Comport (1).rar (758.3 Кб, 16 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.10.2017, 11:11
Ответы с готовыми решениями:

Как запустить купюроприемник для теста через сом порт ?
подскажите если кто знает,некогда не сталкивался с ком портом. Не знаю его процесс активации.

Можно ли через VB организовать связь (через паралельный порт) с отдельным устройством?
Вот хотелось бы узнать можно ли через VB организовать связь (через паралельный порт) с отделным устройством кто знает подскажите пожалуйста...

управление через СОМ порт
Как сдельть сигнал на RTS,DTR по нажатию BUTTON1и2 соответственно. Причём при их отпускании сигналы должны обнульться! Кто шарит в этом?!

33
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
12.10.2017, 00:38  [ТС]
Нашёл я причину, моя программа заработала через эмуляцию порта (использовал Virtual Serial Port Emulator), а вот напрямую если к порту подключать, то не работает, как сделать чтобы программа работала напрямую с портом?

Добавлено через 8 минут
Так же возможная причина кроется в том что устройство соединено посредством USB COM порта. Через СОМ порт на материнской плате ещё не пробовал.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
17.10.2017, 20:33
Цитата Сообщение от RockMANN Посмотреть сообщение
Может кто-нибудь подскажет, в какую сторону копать???
Я с COM-портом начинал извращения с установки точки останова на событии приема данных, и уже детально смотрел - что конкретно пришло и какой длинны. Насколько я успел понять - ваша программа принимает сообщения только вполне конкретной длины - 16 или 24, а вот варианта для, например 20 - у вас не предусмотрено. А сообщения в буфер чтения прибывают словно Почтой России - не разуми когда и в какой форме. Поэтому вы легко можете получить, например, сначала первые 10 байт в буфер, а вторым вызовом - оставшиеся 6. Ваш код под такую ситуацию не заточен!

Добавлено через 46 секунд
Цитата Сообщение от RockMANN Посмотреть сообщение
Так же возможная причина кроется в том что устройство соединено посредством USB COM порта.
Это врядли.
0
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
17.10.2017, 21:52  [ТС]
Да, всё верно, пакеты принимаются либо 16 либо 24 байта, что интересно, я использую метод чтения определенного количества байт
Цитата Сообщение от RockMANN Посмотреть сообщение
SerialPort1.Read(Buf, 0, Bufcount)
как при этом может прийти разное количество байт по времени?
Да и входной и выходной буферы настроены на 24 байта.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
17.10.2017, 22:52
Цитата Сообщение от RockMANN Посмотреть сообщение
использую метод чтения определенного количества байт
Цитата Сообщение от RockMANN Посмотреть сообщение
как при этом может прийти разное количество байт по времени?
Легко. Я в свой практике сталкивался с такой же проблемой.

Цитата Сообщение от RockMANN Посмотреть сообщение
Да, всё верно, пакеты принимаются либо 16 либо 24 байта
Как принимаются пакеты - вы, я думаю, сказать не можете, так как не совсем понятно, в какой момент возникает событие приема данных. Возможно, оно связано с дискретизацией времени. Ну это я, есессно, предполагаю. В моей практике, при работе с реальным железом, событие приема данных возникало скажем так хаотично, и в буфере могла содержаться информации от двух сообщений. Например: железо отправляет мессагу в 16 байт. А обработчик события сначала перехватывает 10, а потом 6. Вот вам и пук в лужу.

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

Вот как то так.
0
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
17.10.2017, 23:02  [ТС]
А может в этом помочь свойство SerialPort.ReceivedBytesThreshold?
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
17.10.2017, 23:21
Вероятно. Попробуйте. Нужно проверить этот подход при передачи большого количества пакетов. Главное - чтобы ничего не пропало)))

Добавлено через 4 минуты
В моем случае такой подход был не шибко хорош, так как длина принимаемого сообщения зависела от переданной информации. В общем, намаялся я знатно тогда. Обидно, что код где-то посеял...только принципы в башке остались.
1
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
27.10.2017, 15:59  [ТС]
Поправил немного прошивку в устройстве для отладки. Теперь устройство отправляет ровно то, что оно приняло. В итоге количество отправленных и принятых байт совпадает, но значения различаются. В общем пробовал разные методы, но что-то мне подсказывает, что дело либо в кодировке, либо в драйвере Arduino. Моя программа отлично работает, если создать виртуальный СОМ порт и работать через него. Количество и значения полностью совпадают. Но вот напрямую с USB-COM драйвером работать не хочет. Подскажите, в какую сторону двигаться?
0
 Аватар для XIST
1960 / 1061 / 148
Регистрация: 01.10.2009
Сообщений: 3,589
Записей в блоге: 1
27.10.2017, 19:14
RockMANN, скорость портов одинаковая с программой?
0
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
27.10.2017, 21:40  [ТС]
Всё одинаковое, скорость, количество бит, четность, стоп бит

Добавлено через 2 часа 7 минут
Отправляю в порт 24 байта со значением "0" а получаю вот это:
FE FF FF FE 00 00 00 06 06 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A 09 06 06 00
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1661
Регистрация: 25.05.2015
Сообщений: 23,090
Записей в блоге: 14
27.10.2017, 21:47
Цитата Сообщение от RockMANN Посмотреть сообщение
Всё одинаковое
А сторонняя программа для чтения последовательного порта принимает данные правильно?
0
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
27.10.2017, 22:59  [ТС]
Rius, смотрите первый пост.

Добавлено через 6 минут
Отправляю данные через Terminal by Bray, данные передает корректно, даже без эмуляции СОМ порта.

Добавлено через 9 минут
Жду пока придет конвертер USB COM, протестирую на нем, отпишусь.
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1661
Регистрация: 25.05.2015
Сообщений: 23,090
Записей в блоге: 14
27.10.2017, 23:04
Попробуйте записывать методом Write.
И сразу считывать ответ методом Read. С указанием размера буфера, заведомо превышающего пакет. И с таймаутом чтения, с запасом.

Не по теме:

Могу показать код, но на другом языке.

0
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
28.10.2017, 01:03  [ТС]
Всем откликнувшимся спасибо за помощь, немного покопавшись в коде для микроконтроллера нашел ошибку)))Теперь всё отправляет и принимает без ошибок.
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
29.10.2017, 15:36
RockMANN, и в чём была ошибка? Расскажите, чтобы оградить новичков от этого.
0
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
30.10.2017, 00:43  [ТС]
Замабувараев, Ошибка была в том что устройство посылало неправильные данные в порт. Поэтому всегда проверяйте прошивку на возможные штатные и нештатные режимы работы. К примеру в моём устройстве, если отправить в пакете неверный адрес, то программа считает неправильную строку из RAM и отправит её в порт, поэтому я видел не то, что нужно.
1
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
03.11.2017, 23:57  [ТС]
Всем добрый вечер! Снова возникают вопросы в решении проблем)) Итак, на этот раз хотел бы узнать имеет ли право на жизнь такая реализация кода: в теле одной процедуры вызывается другая процедура? У меня в теле процедуры SerialPort1_DataReceived_1 вызывается процедура Read_write_Click при определенном условии? Оно вроде работает, но как-то с прерываниями, на процедуру Read_write_Click переходит не с первого раза. А еще иногда ругается System.IO.IOException в этом месте: SerialPort1.Read(Buf, 0, 24) "Операция ввода/вывода была прервана из-за завершения потока команд или по запросу приложения." & vbCrLf при попытке записать в порт

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
Private Sub SerialPort1_DataReceived_1(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
 
        
        Dim Buf(23) As Byte
        Dim Bytes As UInteger = SerialPort1.BytesToRead
 
'В этом месте иногда возникает ошибка сразу после записи массива байт в порт SerialPort1.Write(Sendstring, 0, 24)
        SerialPort1.Read(Buf, 0, 24)
 
 
 
        If Bytes = 16 Then
 
           
            Dim Str As String = System.Text.Encoding.GetEncoding("Windows-1251").GetString(Buf, 0, Bytes)
 
            Servarray(Str)
 
 
        ElseIf Bytes = 24 Then
 
' В основном задействована эта часть условия
 
            If (Buf(23) <> &HFF) Or
            (Buf(0) <> 1) Or
            (Buf(1) <> &HFF) Then
 
                MsgBox("Ошибка приема данных", vbCritical)
                Read_writeBtn.Enabled = True
                CheckBox1.Enabled = True
                WriteCheckBox.Enabled = True
                A = 0
                j1 = 0
                GoTo Back1
 
            ElseIf (Buf(2) = &HEE) Then
 
                MsgBox("Ошибка отправки данных")
                Read_writeBtn.Enabled = True
                CheckBox1.Enabled = True
                WriteCheckBox.Enabled = True
                A = 0
                j1 = 0
                GoTo Back1
 
            End If
 
            For i = 0 To 23
                Rcvarray(i, j1) = Buf(i)
            Next i
 
            j1 = j1 + 1
 
            If j1 >= 100 Then
                j1 = 0
            End If
 
'Переход к процедуре отправки
 
            Read_write_Click(sender, e)
 
        End If
 
 
Back1: End Sub
 
    Private Sub Read_write_Click(sender As Object, e As EventArgs) Handles Read_writeBtn.Click
 
        Dim Opcode As Byte
        Dim Sendstring(23) As Byte
 
 
        If Sendarray(0, 0) = 0 Then
            Timer1.Stop()
 
            MsgBox("Выберите хотя бы одну строку!", vbInformation)
            GoTo Back2
 
        ElseIf A = 100 Then
 
            MsgBox("Передача завершена!", vbExclamation)
            ProgressBar1_Change(A)
 
            Dim i2 = 4
            Dim k2 = 7
            For A = 0 To 99
                Do Until i2 = 20
                    Sendarray(i2, A) = Rcvarray(k2, A)
                    i2 = i2 + 1
                    k2 = k2 + 1
                Loop
                i2 = 4
                k2 = 7
            Next A
            A = 0
            j1 = 0
 
            WriteCheckBox.Checked = vbFalse
 
            GoTo Back2
 
        End If
 
        Opcode = &H0
 
        If WriteCheckBox.Checked = True Then
            Opcode = &H55
        End If
 
        ' Read_writeBtn.Enabled = False
        CheckBox1.Enabled = False
        WriteCheckBox.Enabled = False
 
        Dim i = 7
        Dim j = 4
        Do Until i = 23
 
            Sendstring(i) = Sendarray(j, A)
            i = i + 1
            j = j + 1
        Loop
 
        Sendstring(0) = &H1
        Sendstring(1) = &HFF
        Sendstring(2) = Opcode
        Sendstring(3) = Sendarray(2, A)
        Sendstring(4) = Sendarray(3, A)
        Sendstring(5) = &HFF
        Sendstring(6) = &HFF
        Sendstring(23) = &HFF
        ProgressBar1_Change(A)
 
        If A = 99 Then
 
        End If
 
 
 
        SerialPort1.DiscardOutBuffer()
        SerialPort1.DiscardInBuffer()
        SerialPort1.ReceivedBytesThreshold = 16
        'Thread.Sleep(80)
        Timer1.Start()
        SerialPort1.Write(Sendstring, 0, 24)
        A = A + 1
        'Thread.Sleep(100)
 
 
Back2: End Sub
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1661
Регистрация: 25.05.2015
Сообщений: 23,090
Записей в блоге: 14
04.11.2017, 01:31
Цитата Сообщение от RockMANN Посмотреть сообщение
Итак, на этот раз хотел бы узнать имеет ли право на жизнь такая реализация кода: в теле одной процедуры вызывается другая процедура?
В данном случае - нет.
0
1 / 1 / 0
Регистрация: 03.07.2017
Сообщений: 23
04.11.2017, 10:50  [ТС]
Rius, Как тогда реализовать вызов подпрограммы сразу по завершении предыдущей? Где можно почитать информацию о методах вызова?
0
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1661
Регистрация: 25.05.2015
Сообщений: 23,090
Записей в блоге: 14
04.11.2017, 11:42
Вам это никак не поможет. Стоит пересмотреть работу с SerialPort.
У вас обмен идёт в формате запрос-ответ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.11.2017, 11:42
Помогаю со студенческими работами здесь

Как управлять устройством через com-порт?
Добрый день. Есть устройство, которое управляется через com порт. Перечень команд для этого устройства есть, а вот как их ему передать...

Взаимодействие с устройством через usb порт
Добрый день! Есть принтер Kyocera fs4100 DN Есть программа от производителя status monitor, Которая показывает состояние принтера и...

Обмен данными с устройством через com-порт
Здравствуйте. Я работаю с Акип'ом и мне нужно считывать с него измерения. Проблема в том, что я не могу получить от него банальное имя,...

Общение с внешним устройством через COM-порт
Добрый день! Есть задача общаться с контроллером подключенным к PC через виртуальный com-порт. Для начала надо хотя бы отправить ему...

Программа для роботы с устройством через RS-232
Доброго всем времени суток. Есть устройство, а точнее сканирующий приёмник, которое может обменивается данными через порт RS-232. Все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru