Народ, прошу помощи! Задача: прием данных с GPS-приемника по RS-232. GPS-модуль выдает некоторое количество строк символов каждую секунду (строка заканчивается стандартно: "перевод строки+возврат каретки"). Собственно виндовая терминалка строки отображает корректно, без разрывов. А вот с COM-компонентом в HiAsm все намного хуже - компонент беспорядочно рвет строки, соотвественно рванную строку я уже обработать не могу. Покрутив-повертев его, я согласился что он "синхронный". На форуме нашел "асинхронный" - "ComAsync", и еще часа четыре убил за зря - так и не смог добиться нормального приема. Перепробовал практически все что можно было. Я в тупике... Ну немогу я знать сколько байт должно быть принято, т.к. каждый раз, в зависимости от текущего состояния, GPS-приемник выдает разное количество байт. Как мне быть? Прошу помочь!!!
За ранее благодарю.
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 6
Рейтинг: 0
|
|||
карма: 1 |
|
Ответов: 1328
Рейтинг: 69
|
|||
Вот nesco выкладывал схемку:code_10409.txt
------------ Дoбавленo: konsvik, как запускаешь GPS-приемник, у меня он сам не выдает ничего, нужно передать в порт к-то строку инициализации? |
|||
карма: 2 |
| ||
файлы: 1 | code_10409.txt [1KB] [468] |
Ответов: 5446
Рейтинг: 323
|
|||
Konst, я экспериментировал с GPS (правда, под C++), и ничего мне в порт передавать не приходилось. Но это зависит от типа приёмника, никоторые особо продвинутые надо переключать в "текстовый" (NMEA) режим.
|
|||
карма: 1 |
|
Ответов: 6
Рейтинг: 0
|
|||
Konst писал(а): У меня ZX-4125P не помню чей фирмы, так вот, ни какой инициализации делать не приходится, т.е. выдача инфы происходит сразу. А что у тебя за модель и есть на него доки? Если доки есть то разобраться не составит особых проблем. Извиняюсь за глупый вопрос, я в хиасме новичек, как использовать вышеприведенную схему? Как скормить её хиасму? |
|||
карма: 1 |
|
Ответов: 5446
Рейтинг: 323
|
|||
Выдели код и вставь (Ctrl+V) в хиасм.
|
|||
карма: 1 |
|
Ответов: 1328
Рейтинг: 69
|
|||
NMEA по умолчанию приемник на сюзфстар 3, у него несколько вариантов запуска, холодный и горячий старт, т.ч. я думаю должна быть инициализация к-то
|
|||
карма: 2 |
|
Ответов: 6
Рейтинг: 0
|
|||
Konst писал(а): NMEA по умолчанию приемник на сюзфстар 3, у него несколько вариантов запуска, холодный и горячий старт, т.ч. я думаю должна быть инициализация к-тоПро такой приемник ничего не слышал, NMEA по умолчанию - это нормально, варианты запуска к инициализации отношения не имеют. Напиши название приемника в оригинальном виде, попробую чего-нибудь нарыть. Вот nesco выкладывал схемку:code_10409.txt
Не прокатывает этот вариант, при скорости порта 9600 и времени тактирования 1мс не освобождается весь буфер приема, т.е. идет накопление данных в буфере COM-порта. Например: считываю строку с временем 20:20:00, хотя уже принята строка 20:20:10, далее считываю строку с временем 20:20:01, хотя уже принята строка 20:20:13, и т.д. Решения проблемы не вижу. Как еще можно извернуться? Вопрос остается открытым... HELP !!! |
|||
карма: 1 |
|
Ответов: 8930
Рейтинг: 823
|
|||
konsvik, обратите вниманте на примечание к точке doRead "Чтение данных из порта. Необходимое количество байт указывается в потоке" - т. е. можно читать не по одному байту, а скажем, по 256 (скорость порта, время обращения и количество байт для чтения - взаимосвязанные величины)
|
|||
карма: 19 |
|
Ответов: 3851
Рейтинг: 159
|
|||
если известен формат данных, то можно попробовать такую code_10416.txt схему (в мультик вставишь проверку на соответствие формату законченной строки).
|
|||
карма: 0 |
| ||
файлы: 1 | code_10416.txt [754B] [438] |
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
Леонид писал(а): Необходимое количество байт указывается в потоке" - т. е. можно читать не по одному байту, а скажем, по 256Для этого нужен немного другой накопитель
|
|||
карма: 22 |
|
Ответов: 6
Рейтинг: 0
|
|||
nesco писал(а): Для этого нужен немного другой накопительА что мы в первом 'Case' пытаемся сравнить? Символ со строкой? Немогу же я подставить для сравнения строку. В общем то же не выход. Я прихожу к выводу что операция по выделению строки из потока должна осуществляться по приему символов "перевод строки+возврат каретки" в компоненте 'COM-port', иначе получаем рванные строки, потому как нет более способа засинхронизироваться. А сложно модифицировать компонент 'COM-port'? Ведь здорово было бы, если бы он имел опцию "выдывать данные из буфера строками заканчивающимися CF+LF". Спасибо всем, однако впрос остается открытым... |
|||
карма: 1 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
konsvik писал(а): А что мы в первом 'Case' пытаемся сравнить? Символ со строкой?А что, разве символ, это не строка длиной в один символ |
|||
карма: 22 |
|
Ответов: 6
Рейтинг: 0
|
|||
nesco писал(а): А что, разве символ, это не строка длиной в один символ?Да конечно, но на входе 'Case' мы имеем строку длинной до 256 символов! Правильно? А если это так, то каков смысл 'Case'? |
|||
карма: 1 |
|
Разработчик
Ответов: 26163
Рейтинг: 2127
|
|||
konsvik писал(а): А если это так, то каков смысл 'Case'?При завершении передачи, после того, как пройдет задержка, на выходе появится пустая строка, вот ее-то Case и отлавливает, выдавая накопленные данные в поток одной строкой |
|||
карма: 22 |
|
Ответов: 1328
Рейтинг: 69
|
|||
konsvik писал(а): У меня ZX-4125P не помню чей фирмы, так вот, ни какой инициализации делать не приходится, т.е. выдача инфы происходит сразу. А что у тебя за модель и есть на него доки?GlobalSat 353, был конфликт драйверов мобильника и GPS приемника, действительно данные идут сразу. konsvik, а что хочешь сделать, если не секрет? ------------ Дoбавленo: nesco, Прикол в том, что у GPS приемник не передает пустых строк, по этому предыдущ. схемы не работали. Вот так работает, но по моему медленно, есть предлолжения,как ускорить
Второй вариант:
|
|||
карма: 2 |
|