ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: странная отправка в COM3  (Прочитано 2784 раз)

0 Пользователей и 1 Гость просматривают эту тему.

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
странная отправка в COM3
« : 15 Мая, 2011, 14:40:49 »

Здравствуйте!

ОС linux, тион-про2.

Пишу программу для общения с датчиком по RS485. Заметил интересную особенность при записи в порт ttyAM2. Я отправляю 2 байта в порт, а осциллографом вижу, что эти 2 байта отправляются повторно каждые 10мс (см аттач) до тех пор, пока порт не закроется. А функция read возвращает ошибку (Resource temporarily unavailable).  Осциллографом смотрел и на выходе RS-485  и на выходе TXD2. Но если я запускаю ту же самую программу для ttyAM1, то эти 2 байта отправляются один раз.

Код функции, которая отправляет данные:
    int fd;
    struct termios options;
    unsigned char buf[50];
    int res;
    ssize_t sz;

    fd = open(config->rs485_port, O_WRONLY | O_NOCTTY | O_NDELAY);
    if (fd < 0)
    {
        return 1;
    }
    tcgetattr(fd, &options);
    options.c_cflag |= (B19200 | CS8 | CLOCAL | CREAD);
    tcflush(fd, TCIFLUSH);
    tcsetattr(fd, TCSANOW, &options);

    fsync(fd);
    tcflush(fd, TCIFLUSH);

    sz = write(fd, "DO", 2);
    if(sz!=2)
    {
        Message("write sz=%d\n",sz);
        close(fd);
        return 3;
    }
    sleep(3); //wait for sensor data
    sz = read(fd, buf, 50);
    if (sz <= 0 || sz > 100)
    {
        Error(errno, "read. sz=%d",sz);
        close(fd);
        return 2;
    }
    close(fd);

Почему такое может происходить?
Записан

MOHOMAX

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 43
Re: странная отправка в COM3
« Ответ #1 : 15 Мая, 2011, 17:52:57 »

проблема решилась.

Я сбросил флаги управления линией

    options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);

И проблема исчезла.
Записан