Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Программное обеспечение
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Как принять данные через COM?

 Ответить Ответить
Автор
Сообщение
Марат Смотреть выпадающим
Новичок
Новичок


Присоединился: 02 Февраль 2011
Online Status: Offline
Публикации: 25
Свойства публикации Свойства публикации   Ответить, цитируя автора - Марат Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Как принять данные через COM?
    Опубликовано: 03 Февраль 2011 15:56

Почему то не получается принимать данные по RS232 (COM-порт)

взял для примера такой вариант:

//----------------------

com_install(1); // COM1 в ADAM идет через 0-модем на COM2 PC
com_set_format(8,0,1);  // 8N1
com_set_speed((unsigned long)9600); 

while(1) // begin process
{
      if (kbhit()) // test for send
      {
                int c=getch();
                if ((c=='Q') || (c=='q')) break;
                while (!com_tx_empty()) ; // wait for free
                com_tx(c);
       }
        int c=com_rx();
        if (!c)
             printf(".\b");
        else
             printf("Received (%c)\n",c);
  
}
com_tx_string("FINISH");
com_deinstall();
return;
//---------------

для обмена пробовал связь через Hyper-Terminal (стандартная программа в ХР) на СОМ2

но что интересно - при посылке из ADAM, Hyper-терминал принимает данные, а если пытаться послать символы из Hyper-терминала, то ADAM ничего не видит.

Hyper-Terminal на PC настроен  на COM2 9600,8N1 

:(  библиотеки совсем новые списал с Адвантека... не знаю что и думать.



Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Февраль 2011 16:41
А так пробовали?

if( com_rx_empty() == FALSE) data=com_rx();
Наверх
Марат Смотреть выпадающим
Новичок
Новичок


Присоединился: 02 Февраль 2011
Online Status: Offline
Публикации: 25
Свойства публикации Свойства публикации   Ответить, цитируя автора - Марат Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Февраль 2011 19:02

Да, пробовал. Изначально. Но все равно не работало.

Дальнейшие попытки показали странности, те появились сомнения в целостности кабеля (?) и еще такой момент, иногда прием всеже проходит. Не стабильно, такое ощущение, что посылаемые байты просто теряются. 

Написал маленькую DOS-программку, которая посылает байты в порт, запускаю ее в дос-окне, иногда до ADAM доходит, иногда нет, но почти всегда, когда натыкаю в дос-программке кнопок (которые ADAM не получает) и даю команду на "закончить работу программки" ADAM принимает пачку посланных ранее данных. Вроде как буферизация какая... 

Пока ничего не понимаю. Думаю, что может быть это изза того, что при когда приема нет вызывается printf() ?  - попробую - расскажу.

Если кто делал как обмен по RS232 - что, подтверждения каждый раз ожидать? и перепосылать? Народ, как кто делал или у меня только такие грабли?

:)

Наверх
poison Смотреть выпадающим
Участник
Участник
Аватар

Присоединился: 02 Декабрь 2010
Online Status: Offline
Публикации: 68
Свойства публикации Свойства публикации   Ответить, цитируя автора - poison Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Февраль 2011 09:01
Добрый день!
Думаю, что ваша проблема где-то таится на аппаратном уровне. Возможно, установлено в настройках аппаратное или программное управление потоком что может и препятствовать передачу информации в одну сторону, если вы используете трех проводной шнур (Rx TX GND) выкличете в настройках аппаратное и программное управление потоком на обоих устройствах связи. Если это не поможет попробуйте протестировать порты с обеих сторон с помощью заглушки, замкнуть между собой RX TX, информацию которую вы посылаете должна прийти обратно без потерь, если этого не происходит корректно возможно что аппаратная часть подпалена.
Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Февраль 2011 09:41
Установите 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
Свойства публикации Свойства публикации   Ответить, цитируя автора - Марат Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Февраль 2011 10:23

Победил. Рассказываю.

1. Все же виноват printf(".\b") - я его ставил как индикатор не-приема, но он забирает на себя ресурсы и "не работает", когда убрал - все заработало. Вплоть до скорости 115200.

2. по поводу примера EX3.C - я именно из него пробовал :)

Вообщем вопрос пока снят. :))))

Наверх
KozlovKS Смотреть выпадающим
Prosoft.ru
Prosoft.ru


Присоединился: 21 Июнь 2003
Online Status: Offline
Публикации: 432
Свойства публикации Свойства публикации   Ответить, цитируя автора - KozlovKS Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Февраль 2011 11:35
Как полу-точка в вопросе. Адвантек специально сделал свою функцию
adv_printf()
которую настоятельно рекомендует использовать вместо стандартной.
Наверх
 Ответить Ответить

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz