3 года назад

проблема с чтением с ком порта linux

Мучаюсь уже который день, приведу свой пример, видимо я работаю не в режиме запрос, ответ сообственно настройки порта и чтение :it fd;        stuct temios oldtio,ewtio;        fd = ope(MODEMDEVICE, O_RDWR | O_NOCTTY | O_NDELAY );        if (fd <0) {peo(MODEMDEVICE); etu 0; }            tcgetatt(fd,&oldtio);        bzeo(&ewtio, sizeof(ewtio));        ewtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;        ewtio.c_iflag = IGNPAR;        ewtio.c_oflag =0;        ewtio.c_lflag = 0;        ewtio.c_cc[VTIME] = 0;        tcflush(fd, TCIFLUSH);        tcsetatt(fd,TCSANOW,&ewtio);        etu fd;теперь как читаю или пишу в него = select(fd+1, &iput, NULL, NULL, &timeout);    if( > 0)    {        es = ead(fd,buf,1);        if(es<=0)            etu -1;    }    else        etu -1;     = wite(fd,"\x06",1);    if(<=0)        etu -1;     = select(fd+1, &iput, NULL, NULL, &timeout);    if( > 0)    {        es = ead(fd,buf,255);        if(es<=0)            etu -1;        if(buf[2]!='\x00')        {            EoKKM(buf);            etu -1;        }    }    else        etu -1;     = wite(fd,"\x06",1);    if(!=1)        etu -1;     = select(fd+1, &iput, NULL, NULL, &timeout);    if( > 0)    {        es = ead(fd,buf,1);        if(es<=0)            etu -1;    }    else        etu -1;   etu 0;логика такаяпрочитать от устройства запрос , после отправить ему что все ок , после прочитать у него данные , данные , после отправить ему подтверждение что все ок и после он присылает байт о том что передача закончена stace показывает мне совсем другое ответ о том что нет ошибок должен быть вида \2\U\0\0\3\CRC но я получаю \2 и после сразу же отправляю ему о том что все ок , хотя селектом вроде ставлю таймаутвообщем подскажите кто что можетэтот пример частный случай, подтверждение о какой-либо команде выполнения, т.е. выполнилась с ошибками или нет, что говорит как раз 3 байт что 0 ошибок нет либо там будет не 0
пробовал без опции O_NDELAY без селектов и читать определенное колличество байт, все равно недочитывает их и начинает писать в порт
проблема решена, читал байты быстрее чем железо их писало

tupoy_nubas (Гость) COM
3

COM: проблема с чтением с ком порта linux

9 месяцев назад Перенаправление портов (с USB в COM). Возможно?

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

throussen (Гость) 2 ответа
3
8 месяцев назад COM порты и телефон

у меня такая проблема: для разлоки телефона(megafo logi) в программе нужно выбрать номер COM порта к которому подключен телефон. Но у меня в диспетчере устройств нет их(в смысле нет выпадающего меню). а устройство определяется как "Переносные устройства". (wi 7 x 32, ноутбук) как быть?
телефон подключается по usb
dk, драверы установлены, но телефон не определяется как может, только как съемный флеш накопитель

Mike_S (Гость) 2 ответа
3
10 месяцев назад COM порт. Не верный тип данных.

Написал программу которая читает данные с COM порта в  Delphi.Хочу построить график,но не могу перевести эти числа в интежер или реал.Может с запятой проблема?
все в порядке данные типа реал, но делфи не понимает что это реал((
Разобрался,c COM данные разделены точкой,а Делфи понимает только запятую

kichik (Гость) 1 ответ
3
Ответы (1)
kentok007 (Гость) 3 года назад
6

Так дяденька, вы ж ему сам O_NDELAY при открытии передали.
Убирайте этот флаг и сидите в read(), пока р̶а̶к̶ н̶а̶ г̶о̶р̶е̶ н̶е̶ с̶в̶и̶с̶т̶н̶е̶т̶ запрошенное количество байт не придёт, либо перерабатывайте логику проверки байт в канале и их считывания. setvbuf() не забудьте.

Пожаловаться
проблема с чтением с ком порта linux (COM) - вопросы и ответы на все случаи жизни - справочник COM moi-vopros.ru