3 / 3 / 0
Регистрация: 08.10.2010
Сообщений: 114
|
|||||||||||
1 | |||||||||||
997 при работе с СОМ портом22.05.2012, 10:29. Показов 5125. Ответов 9
Метки нет (Все метки)
Всем доброго. Давно не был здесь, но вот представился повод.
Сразу отмечу, что поиск курил. Но, то ли нет моей проблемы, то ли не так искал. Начну по-порядку. Взял я себе плату небольшую и решил побаловаться с ней. Все настроил. Закодил ее. Потом перешел к Delphi. Почитал про работу с COM портами. Сразу отказался от использования компонентов в пользу WinAPI, чтобы четко понимать происходящее и все Тру делать. Для начала все отбыдлокодил, подключение / запись посадил на кнопки без процедур / функций и вроде все заработало. Начал с отправки одного символа. И ОНО сработало. Вот тут пошло первичное оформление кода. Автоматический поиск платы, принудительное подключение к определенному порту и прочие хотелки. По факту написания всех функций и процедур начал тестирование / отладку и тут "на тебе" - 997. Протекает наложенное событие ввода / вывода. Что за хрень? Ладно. Переписываю все заново. Добавляю настройки таймаутов, перехожу в асинхронный режим работы. Тестирую. Та же ерунда. Подумал на плату. Вдруг что пишет в порт, а я не знаю. Сношу код платы, перезаливаю пустой. Очистил ее полностью. Тестирую - 997 [facepalm]. В оформлении кода и оптимизации прошло еще 2 вечера. Потом еще 2 на чтение WinAPI по работе с COM портами и типичными ошибками. Короче, я бессилен. Чувствую, что без опыта коллег мои нервы будут съедены напрочь. Теперь к коду... Подключение к плате:
Добавлено через 10 часов 23 минуты Еще одни момент: сброс порта (Purge) не помогает ни разу...
0
|
22.05.2012, 10:29 | |
Ответы с готовыми решениями:
9
Ошибка при работе с COM-портом Работа с сом-портом Работа с СОМ портом Работа с сом-портом |
22.05.2012, 10:59 | 2 |
...это значит, что операции ввода-вывода у вас в коде перекрываются http://msdn.microsoft.com/en-u... s.85).aspx. Вы привели весь код?
0
|
3 / 3 / 0
Регистрация: 08.10.2010
Сообщений: 114
|
|
23.05.2012, 15:22 [ТС] | 3 |
2raxp - спасибо, я понимаю, что это значит.
Я не понимаю, откуда это появляется и как с этим бороться. По коду привел все, что участвует. Если нужно, могу скинуть весь код (правда вечером). Но после компиляции я использую лишь кнопку подключения и кнопку записи. Вроде больше ничего не выполняется. 4 дня уже, все перепроверил. Может просто глаз замылен... Добавлено через 1 минуту UPD: CancelIoEx - только сейчас увидел в API, теоретически должно помочь? Добавлено через 21 час 58 минут CancelIO - не помогло, а CancelIoEx не идентифицируется... Кто-нибудь? Чем-нибудь? Добавлено через 5 часов 22 минуты Пойду ка я к Вашим младшим братьям. Лучше маленький форум, но хоть сколько-то эффективный, а не за 2 дня 1 полуживой ответ/вопрос от капитана. Конверсии никакой...
0
|
23.05.2012, 16:08 | 4 |
Не по теме: ...форум - не чат, как будет время - ответят, никто не обязан мониторить именно вашу тему. Кода полного не дождались, хотя к вечеру обещали, интерес угас. А гадать на кофейной гуще - это к бабкам. Поскольку вы работаете в асинхронном режиме, то ERROR_IO_PENDING (997), который возвращает вам GetLastError() (а эту проверку в вашем коде не наблюдаю), говорит о том, что операция выполняется в фоне и нужно подождать, всего лишь.
0
|
3 / 3 / 0
Регистрация: 08.10.2010
Сообщений: 114
|
|
23.05.2012, 16:24 [ТС] | 5 |
Не по теме: Не по теме: я в курсе, что форум не чат. А полного кода никто и не просил. Я же специально отметил, что если нужно - приведу. Оказалось, что никому не нужно. И я знаю, что нужно это в первую очередь мне, но не имею привычки без повода засирать темы, ибо сам модератор. Проверка GetLastError сидит в процедуре SendError, там комплексный лог генерится, застандартил его, чтобы каждый раз не писать. Если я правильно Вас понял, то смотреть мне нужно либо в сторону снятия if not проверки (что некорректно, но без нее работало - получается в ней проблема), либо, что более вероятно, в сторону WaitForSingleObject. Интересно только: какое оптимальное время для ожидания? И... спасибо
0
|
23.05.2012, 17:01 | 6 |
0
|
3 / 3 / 0
Регистрация: 08.10.2010
Сообщений: 114
|
|||||||||||
24.05.2012, 20:19 [ТС] | 7 | ||||||||||
Есть такая беда, но и засирателей хватает, выложу код, как доберусь до дома, но уверяю Вас, там ни намека на вмешательство в процесс. Процедура получает String и после него впечатывает код последней ошибки. Все.
Arduino, не нашел в документации темы таймаутов, да и при работе с COM портом (по статьям в сети), таймауты на запись не ставятся. Остается искусственная задержка WaitForSingleObject для гарантии передачи данных или получении адекватного кода ошибки Добавлено через 1 час 51 минуту
дописал WaitForSingleObject, теперь программа даже за 10 секунд не отправляет 1 символ... Уже крыша едет...
Добавлено через 20 часов 0 минут Блииннн... Добавлено через 4 часа 23 минуты Ладно, продолжаю ждать...
0
|
3 / 3 / 0
Регистрация: 08.10.2010
Сообщений: 114
|
||||||
25.05.2012, 22:51 [ТС] | 9 | |||||
Да ничо особенного
Не да?
0
|
3 / 3 / 0
Регистрация: 08.10.2010
Сообщений: 114
|
|
28.05.2012, 11:03 [ТС] | 10 |
Может быть все таки кто-нибудь знает в чем дело?
0
|
28.05.2012, 11:03 | |
28.05.2012, 11:03 | |
Помогаю со студенческими работами здесь
10
Работа с СОМ-портом Непонятки при работе с ком-портом Наводки при работе с портом Atmega8515 Управление кодировкой при работе с COM-портом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |