The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
настройка com порта, !*! developer1, 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(

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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