![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
jon007 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
Здравствуйте. Есть микроконтроллер USB- serial, его управление происходит текстовыми командами, при отправки на него команды он возвращает её эхо, для контроля. Через терминал или компанент делфи ComPort работает нормально, а вот с помощью команд WriteFile/ ReadFile ни как не могу заставить работать. Команда WriteFile не приводит к исполнению микроконтроллер, а команда ReadFile возвращает только часть посланной команды. Пишу читаю в порт разными способами и примерами с интернета, ни один не хочет работать. Сейчас остановился на этом:
Рабочий же код с компанента ComPort такой:
Подскажите куда копать, плиз. |
||||
|
|||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
работает с ожиданием данных из компорта, вы же сразу читаете, и в момент вызова вашего чтения... может не все данные прийти! или делайте задержку или используйте корректную работу с ком портом... -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
jon007 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
По чтению данных понятно что может не всё прийти, при включенном режиме эха контроллер возвращает посланную команду целиком. Больше не понятно почему нормально не срабатывает запись в порт, конртоллер не выполняет посланную команду, думаю что часть данных теряются. С компонентом компорт контроллер нормально работает за исключением потери данных на ответе о выполненой команды, просто в произвольный момент времени от контроллера нет чёткого ответа или приходит только часть строки. вот думаю может другим способом получится управлять им, но пока ни чего не выходит. Да вот ещё часть кода инициализации и настройки порта:
|
||||
|
|||||
planetoxod |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 4.3.2015 Репутация: нет Всего: нет |
||||
|
||||
jon007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
Здравствуйте. Посылаю строку rel 1 ON, длина получается 8 байт, на приём пишет тоже что пришло 8 байт, но строка получается только rel . |
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Версия Дельфи какая? Если Д2009+, то ясен пень. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
jon007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
||||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Юникод. Каждый символ это два байта, а не один. А твоя железяка разумеется юникода не знает и знать не хочет. Так что заменяй Char на AnsiChar. -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
jon007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
northener, Спасибо. Заработало. Но какую бы длиной команду не послал возврат идёт всегда по 8 байт, не подскажешь в какую сторону смотреть?
|
|||
|
||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Не совсем понимвю вопрос. Посдеднюю версию кода я не вижу. Могу только сказать что драйвер порта, как правило, выдаёт получаемые двнные некиими порциями. Обычно кратными 4 или 8. Это сообщение отредактировал(а) northener - 31.10.2015, 02:02 -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
jon007 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
Здравствуйте. Вот так железяка работает, поменял только тип массива:
Эксперементировал с компонентом datapacket из набора comport, так вот там действительно ответ железки приходит порциями вперемешку с символом конца строки #13#10. Думаю попробовать читать из порта в асинхронном режиме в отдельном потоке, но пока не разобрался как. Это сообщение отредактировал(а) Poseidon - 5.11.2015, 09:27 |
||||
|
|||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
-------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
jon007 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.12.2007 Репутация: нет Всего: нет |
Спасибо. Буду разбираться. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |