|
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456
|
|||||||||||||||||||||
Обмен данными через ком порт в потоке06.04.2012, 09:50. Показов 5299. Ответов 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
|
||
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 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
|
|
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
||
| 16.04.2012, 13:19 | ||
|
0
|
||
|
11 / 11 / 2
Регистрация: 15.08.2011
Сообщений: 456
|
|||||||||||||||||
| 17.04.2012, 07:52 [ТС] | |||||||||||||||||
|
я сделал так
0
|
|||||||||||||||||
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
||
| 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 | |
|
Помогаю со студенческими работами здесь
30
Обмен данными через COM- порт Обмен данными через СОМ-порт Обмен данными через параллельный порт
Как подключится к устройству через ком порт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|