|
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456
|
|||||||||||||||||||||
Обмен данными через ком порт в потоке06.04.2012, 09:50. Показов 5461. Ответов 29
Метки нет (Все метки)
Программа выполняется в потоке идёт обмен данными через ком порт с мк! При выполнении программа просто останавливается, не могу понять в чём дело. Может не правильно работую с потоком?
При нажатии кнопки на форме запускается конструктор.
0
|
|||||||||||||||||||||
| 06.04.2012, 09:50 | |
|
Ответы с готовыми решениями:
29
Обмен данными через COM порт Обмен данными через COM порт Обмен данными через COM-порт |
|
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456
|
||
| 10.04.2012, 08:16 [ТС] | ||
. Вот только если например надо считать 20 байт, а в буфере только 5?
0
|
||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,473
|
|
| 10.04.2012, 20:52 | |
|
ожидайте хвост. рано или поздно он придет. а если не придет в течении таймаута функция вернет код ошибки.
0
|
|
|
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456
|
||||||
| 11.04.2012, 22:28 [ТС] | ||||||
|
vxg если вам не сложно, покажите как вы дальше обрабатываете пришедшие байты.
я делаю это последовательно, не дождавшись прихода команды целиком, наверное это неправильно...
0
|
||||||
|
12 / 10 / 1
Регистрация: 04.04.2012
Сообщений: 29
|
||||||
| 12.04.2012, 09:24 | ||||||
|
Не мучайся, сделай обмен по 1-му байту символами из таблицы ASCII:
тогда не перепутаешь 30 с символом '0' В моей рабочей проге 90% - обработка ошибок , только 10% - реально рабочий код! Добавлено через 19 минут Вместо контроолера я пользуюсь rstest.exe для отладки, где брал не помню, могу на мыло выслать.
0
|
||||||
|
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456
|
|
| 12.04.2012, 11:47 [ТС] | |
|
Не знаю, по одному байту наверное по трафику не пройду, попробую все варианты...
0
|
|
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,473
|
||
| 16.04.2012, 13:19 | ||
|
0
|
||
|
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456
|
|||||||||||||||||
| 17.04.2012, 07:52 [ТС] | |||||||||||||||||
|
я сделал так
0
|
|||||||||||||||||
|
Модератор
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,473
|
||
| 17.04.2012, 10:02 | ||
|
1 если длина пакета известна (например, исходя из запроса нам может быть известно сколько данных придет), то я ожидал приема всего пакета функцией ReadFile. если пакет ожидаемого размера не мог быть получен в течении таймаута функция завершалась с ошибкой и программа считала это сбоем передачи. 2 если длина заголовка пакета известна и размер данных передается в этом заголовке (например, заголовок длиной в один байт в котором записана собственно длина пакета), то я ожидал приема заголовка известной длины функцией ReadFile после чего еще раз вызывал функцию ReadFile с указанием в качестве ожидаемого количества принимаемых байт извлеченную из заголовка длину. в случае если во время первого или второго вызова ReadFile запрошенное количество байт не было получено в течение таймаута функция завершалась с ошибкой и программа считала это сбоем передачи как и в первом варианте. 3 если пакет не имеет заголовка и его длина неизвестна (например, пакет ограничивается оговоренными в протоколе начальным и конечным спецсимволами или имеет известную структуру, например, число с десятичной точкой в виде текста начинающееся со знака (+/-) и заканчивающегося пробелом или вообще ничем не заканчивающееся если окончанием считается конец пакета определяемый по паузе между передаваемыми данными), то... вы попали на "наркоманский" протокол при котором придется вычитывать данные необычными способами. решение в лоб - читать по одному байту анализируя получающийся массив на полноту и при фиксации конца пакета запускать обработку данных. альтернативой побайтному чтению может быть (сам не пробывал) вычитывание из буфера порта ровно того количества байт которое пришло за последний сеанс связи так как это вроде бы (сам не разу не работал с comstat.cbInQue) делаете вы с последующей сборкой кусков по аналогии с побайтным чтением. --- касательно вашего кода хотелось бы отметить что в функции read_data вызов функции read_from_port происходит один раз и не совсем понятно как это будет работать если информация придет разорваная на несколько кусочков. саму сборку кусочков в вашем коде объять мозгом не могу. функция read выглядит очень странной - возвращает всего один байт и выполняет внутри себя какието непостижимые манипуляции с указателем на какието буферы.
1
|
||
|
12 / 10 / 1
Регистрация: 04.04.2012
Сообщений: 29
|
||
| 17.04.2012, 21:09 | ||
|
перемещает текущий указатель вперед (ptr++). А основная программа читает до текущего значения . Где-то в книжках про AVR было,найду - напишу.
1
|
||
|
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456
|
||||||||||||||||||||||
| 18.04.2012, 14:11 [ТС] | ||||||||||||||||||||||
|
у меня в мк так и сделано
0
|
||||||||||||||||||||||
| 18.04.2012, 14:11 | |
|
Обмен данными через COM- порт Обмен данными через СОМ-порт Обмен данными через параллельный порт
Как подключится к устройству через ком порт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|