ЗАО «ЗЭО»

Техническая поддержка пользователей => Тион, Тион-Про, Тион-Про v2, Сириус => Тема начата: MOHOMAX от 15 Мая, 2011, 14:40:49

Название: странная отправка в COM3
Отправлено: MOHOMAX от 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);

Почему такое может происходить?
Название: Re: странная отправка в COM3
Отправлено: MOHOMAX от 15 Мая, 2011, 17:52:57
проблема решилась.

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

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

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