The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"настройка com порта"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"настройка com порта"  
Сообщение от developer1 (ok) on 01-Июн-07, 15:17 
Помогите с настройками com порта! Работаю с сетью контроллеров: в цикле поочередно посылаю каждому запрос,затем принимаю ответ (11  байт), и т.д. Как сделать чтобы программа не ждала принятия данных и не зависала, если с каким нибудь контроллером проблемы и он не отвечает?
#define BAUDRATE B9600

int fd;
int res;
struct termios newtio;
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
cfmakeraw(&newtio);
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_ofalg = 0;
newtio.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
newtio.c_cc[VTIME] = 5;
newtio.c_cc[VMIN] = 11;
res = tcsetattr(fd,TCANOW,&newtio);

for(;;)
{
    for(int k=1;k<=10;k++) //кол-во контроллеров
     {
      for(int i=0;i<5;i++)
        res = write(fd,&buf_out[i],1);

       res = read(fd,&buf_in,11);
      // ......  
      }
}

   for(

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "настройка com порта"  
Сообщение от Iceman email(??) on 01-Июн-07, 18:31 
>Помогите с настройками com порта! Работаю с сетью контроллеров: в цикле поочередно
>посылаю каждому запрос,затем принимаю ответ (11  байт), и т.д. Как
>сделать чтобы программа не ждала принятия данных и не зависала, если
>с каким нибудь контроллером проблемы и он не отвечает?

При открытии порта попробуй использовать опцию O_NDELAY - в этом случае при чтении из порта read не будет ждать появления данных и возвращаться сразу. Но тут есть подвох - если в ответ на write() один контроллер просто не успеет ответить, или ответит, но не всю порцию данных за раз, то эту ситуацию надо или отлавливать, или как-то по другому организовывать процесс "запрос-ответ", потому что read() вернется, и ты уже будешь опрашивать следующий контроллер.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру