![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
alcogol |
|
||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 11.3.2008 Репутация: нет Всего: нет |
Добрый день друзья, помогите пожалуйста новичку. Пытаюсь сконнектиться со своей ардуиной. Она шлёт данные мне в виртуальный COM порт, причем порой очень быстро, несколько отправок безо всяких пауз. Ардуиновскмй монитор(из проги, который вызывается) нормально реагирует, все передачи приходят отдельными строчками, все цело, хорошо и красиво.
Я в делфях написал прогу и уже 2 дня не могу победить прием данных. Он идет, но не так как надо. Так как я новичек и ещё не работал с СОМ портами, я поискал в инете примеры, скажем так, ничего на сто процентов рабочего не нашел, перечитал кучу статей и то же самое. С инициализацией порта проблем нет, чтение идет в отдельном потоке, так вот, сначала в exexcete потока у меня был такой код:
Он работает, но как-то не так. Устройство посылает одну команду в порт, а в программе ReadFile не останавливаясь читает его. То есть не один раз, а как бы зацикливается, пока не прийдет следующая команда и с ней то же самое. То есть чтение не останавливается. Попробовал асинхронное чтение по событиям, все работает, события тоже, но при чтении строки(устройство каждые 5 секунд отправляет 1234ABCD). Процентов 90 принимается нормально, остальные 10 что-то вроде того 12ABCD или ABCD или 34ABCD. Не понимаю, почему так :( Ребят, не забывайте что я ещё не такой опытный, подскажите что не так. Может у кого-либо есть рабочий пример. вот код второй моей попытки:
Это сообщение отредактировал(а) alcogol - 20.10.2010, 21:10 |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
|
|||
|
||||
alcogol |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 11.3.2008 Репутация: нет Всего: нет |
xvr, спасибо за ответ.
С таймаутами порта попробую поиграть, а вот про буффер немного не понял
это вроде тоже понятно
3 секунды для моих задач это очень много :( Странно, а ардуиновский монитор работает превосходно и ничего не теряет |
||||||
|
|||||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
Очищать буфера нужно только при полной инициализации/переинициализации устройства, когда нужно именно выкинуть все данные, пришедшие до сих пор |
|||
|
||||
alcogol |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 11.3.2008 Репутация: нет Всего: нет |
UniBomb,
xvr, спасибо Увеличил таймауты до 100, буферы не трогал, все заработало, правда несколько передач сливаются в одну. На стороне устройства добавил добавку символов #13 и #10, считанный буфер передаю функции, которая "расцепляет" сообщения ориентируясь на эти "разделители". Вроде все работает, пока тестирую. Нужна на сто процентов стабильная передача, потеря одного из сообщений - весь проект под угрозой, несмотря на то, что аппаратная часть, над которой и бился большую часть времени работает идеально. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
xvr, вот тут я не соглашусь. Если не очищать буфферы, то есть возможность принять или передать какой-либо мусор.
Это сообщение отредактировал(а) UniBomb - 21.10.2010, 22:47 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
А если не очищать, то есть не только возможность, но и неизбежность потерять данные ![]() А вообще вопрос чистить или не чистить всецело зависит от протокола обмена. Если железка по своей инициативе в РС ничего не посылает, и если РС использует чистый протокол запрос-ответ (без возможности наложения запросов на предыдущие ответы), то лучше чистить. Если же что то из перечисленного используется - то чистить нельзя ни в коем случае |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Это да. Я сначала не заметил фразы ТС о том, что железяка сама шлёт данные. Но и всё равно перед отправкой данных почистить буффер не будет лишним ![]() Как бы то нибыло, а тема больше подходит для этого раздела (там уже даже кто-то зеркало сделал этой темы), т.к. вопроса по тематике этого раздела нет. Чистое делфи и винапи. Может стоит перенести? |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 8 Всего: 223 |
||||
|
||||
alcogol |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 11.3.2008 Репутация: нет Всего: нет |
я просто сам сомневался куда засунуть темку
![]() думал здесь правильнее |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |