Как принять данные через COM? |
Ответить |
Автор | |
Новичок Присоединился: 02 Февраль 2011 Online Status: Offline Публикации: 25 |
Опубликовано: 03 Февраль 2011 15:56 |
Почему то не получается принимать данные по RS232 (COM-порт) взял для примера такой вариант: //---------------------- com_install(1); // COM1 в ADAM идет через 0-модем на COM2 PC для обмена пробовал связь через Hyper-Terminal (стандартная программа в ХР) на СОМ2 но что интересно - при посылке из ADAM, Hyper-терминал принимает данные, а если пытаться послать символы из Hyper-терминала, то ADAM ничего не видит. Hyper-Terminal на PC настроен на COM2 9600,8N1 :( библиотеки совсем новые списал с Адвантека... не знаю что и думать. |
|
Prosoft.ru Присоединился: 21 Июнь 2003 Online Status: Offline Публикации: 432 |
|
А так пробовали?
if( com_rx_empty() == FALSE) data=com_rx();
|
|
Новичок Присоединился: 02 Февраль 2011 Online Status: Offline Публикации: 25 |
|
Да, пробовал. Изначально. Но все равно не работало. Дальнейшие попытки показали странности, те появились сомнения в целостности кабеля (?) и еще такой момент, иногда прием всеже проходит. Не стабильно, такое ощущение, что посылаемые байты просто теряются. Написал маленькую DOS-программку, которая посылает байты в порт, запускаю ее в дос-окне, иногда до ADAM доходит, иногда нет, но почти всегда, когда натыкаю в дос-программке кнопок (которые ADAM не получает) и даю команду на "закончить работу программки" ADAM принимает пачку посланных ранее данных. Вроде как буферизация какая... Пока ничего не понимаю. Думаю, что может быть это изза того, что при когда приема нет вызывается printf() ? - попробую - расскажу. Если кто делал как обмен по RS232 - что, подтверждения каждый раз ожидать? и перепосылать? Народ, как кто делал или у меня только такие грабли? :) |
|
Участник Присоединился: 02 Декабрь 2010 Online Status: Offline Публикации: 68 |
|
Добрый день!
Думаю, что ваша проблема где-то таится на аппаратном уровне. Возможно, установлено в настройках аппаратное или программное управление потоком что может и препятствовать передачу информации в одну сторону, если вы используете трех проводной шнур (Rx TX GND) выкличете в настройках аппаратное и программное управление потоком на обоих устройствах связи. Если это не поможет попробуйте протестировать порты с обеих сторон с помощью заглушки, замкнуть между собой RX TX, информацию которую вы посылаете должна прийти обратно без потерь, если этого не происходит корректно возможно что аппаратная часть подпалена. |
|
Prosoft.ru Присоединился: 21 Июнь 2003 Online Status: Offline Публикации: 432 |
|
Установите ADAM.Net Utility на ПК. После установки покопайтесь в папке с примерами "C:\Program Files\Advantech\Adam.NET Utility\Source\Example\ADAM-5510M-5510E\Basic_Function". У меня пример называется EX3.C. Это как раз пример обмена по COM1.
|
|
Новичок Присоединился: 02 Февраль 2011 Online Status: Offline Публикации: 25 |
|
Победил. Рассказываю. 1. Все же виноват printf(".\b") - я его ставил как индикатор не-приема, но он забирает на себя ресурсы и "не работает", когда убрал - все заработало. Вплоть до скорости 115200. 2. по поводу примера EX3.C - я именно из него пробовал :) Вообщем вопрос пока снят. :)))) |
|
Prosoft.ru Присоединился: 21 Июнь 2003 Online Status: Offline Публикации: 432 |
|
Как полу-точка в вопросе. Адвантек специально сделал свою функцию
adv_printf() которую настоятельно рекомендует использовать вместо стандартной.
|
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |