Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Com port + C++), как окртыть порт с правильными параметра 
:(
    Опции темы
N1VaL
  Дата 19.2.2014, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 17.3.2008

Репутация: нет
Всего: нет



Я новичок в Linux, да и пожалуй в c++ то же, проблема следующая.

Есть железяка, работает по Ком порту 

Скорость передачи        -9600 bps
Метод синхронизации  -Асинхронная передача
Бит данных                       -8
Бит четности                    -EVEN
Стоповый бит                   -1

Как настроить и открыть ком порт для посылки данных, всё что перепрробывал это 
Код

  fd = open("/dev/ttyS0", O_RDWR| O_NOCTTY | O_NONBLOCK)
   if (fd == -1)
   perror("Open_port: Unable to open /dev/ttyS0");
   else
   {
       cout<<"Port is Open!"<<endl;
   struct termios options;
   tcgetattr(fd, &options);
   cfsetispeed(&options, B9600);
   cfsetospeed(&options, B9600);
   
   options.c_cflag &= ~CSTOPB;
   options.c_cflag &= ~CSIZE;
   options.c_cflag |= CS8;
   options.c_cflag &= PARENB;

   options.c_cc[VMIN] = 0; 
   options.c_cc[VTIME] = 10; 
    fcntl(fd, F_SETFL, FASYNC);
  tcsetattr(fd, TCSANOW, &options);


отправляю данны вот так

Код

const uint8_t Ini[] = {0xFC, 0x05, 0x40, 0x2B, 0x15};
write(fd, Ini, sizeIni);


Но что то как то не плучаеться не чего, железяка не делает не чего, хотя должна. 
Зарание благодарю за ответы и советы
PM MAIL   Вверх
tzirechnoy
Дата 19.2.2014, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



1) Код возврата и количество записанных байт write() всегда надо проверять.
2) скажыте cfmakeraw() что-ли, там ещё много правильного.
3) И вообще, по-моему пробовать, что жэлезка отзывается проще из tcl какого-нибудь. Ну, или perl или python. А когда выяснится, что отзывается -- тогда ужэ переходить на C.
PM MAIL   Вверх
N1VaL
Дата 19.2.2014, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 17.3.2008

Репутация: нет
Всего: нет



Цитата(tzirechnoy @ 19.2.2014,  12:17)
3) И вообще, по-моему пробовать, что жэлезка отзывается проще из tcl какого-нибудь. Ну, или perl или python. А когда выяснится, что отзывается -- тогда ужэ переходить на C.

Я точно знаю что она рабочая) в винде под неё писал на С#, тут вся проблема в том что я не могу понять как настраивать правильно порт для отпраки чтения данных, и правльно ли я посылаю данные вообще))

Добавлено через 1 минуту и 12 секунд
Цитата(tzirechnoy @ 19.2.2014,  12:17)
1) Код возврата и количество записанных байт write() всегда надо проверять.

а как узнать кол-во именно записанных байт?
PM MAIL   Вверх
bsa
Дата 19.2.2014, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(N1VaL @  19.2.2014,  13:23 Найти цитируемый пост)
а как узнать кол-во именно записанных байт?

write возвращает число байт фактически отправленных в порт. При переполнении буфера write вернет меньше запрошенного - это нормально. Нужно через некоторое время послать еще раз.
Еще очень рекомендую обратить внимание на cfmakeraw. Если использовать ее не собираешься, то инициализируй termios полностью, а не только нужные тебе флаги.
PM   Вверх
N1VaL
Дата 19.2.2014, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 17.3.2008

Репутация: нет
Всего: нет



как настроить параметры ком порта по данные параметры?

Скорость передачи        -9600 bps
Метод синхронизации  -Асинхронная передача
Бит данных                       -8
Бит четности                    -EVEN
Стоповый бит                   -1


PM MAIL   Вверх
xvr
Дата 19.2.2014, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата

   tcgetattr(fd, &options);
Не надо этого делать. Вам же не нужно, что бы какие то настройки порта унаследовались от системы? Заполяйте все поля options сами.
Цитата

   options.c_cflag &= PARENB;
Это в корне неправильно. Надо было  options.c_cflag |= PARENB;

PM MAIL   Вверх
N1VaL
Дата 19.2.2014, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 17.3.2008

Репутация: нет
Всего: нет



Цитата(xvr @ 19.2.2014,  14:27)
Цитата

   tcgetattr(fd, &options);
Не надо этого делать. Вам же не нужно, что бы какие то настройки порта унаследовались от системы? Заполяйте все поля options сами.
Цитата

   options.c_cflag &= PARENB;
Это в корне неправильно. Надо было  options.c_cflag |= PARENB;

Спасибо Вам огромное 
PM MAIL   Вверх
bsa
Дата 19.2.2014, 15:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Код
fd = open("/dev/ttyS0", O_RDWR| O_NOCTTY | O_NONBLOCK)
   if (fd == -1)
       perror("Open_port: Unable to open /dev/ttyS0");
   else {
       cout<<"Port is Open!"<<endl;
       struct termios options;
       cfmakeraw(&options);
       cfsetispeed(&options, B9600);
       cfsetospeed(&options, B9600);
   
       options.c_cflag &= ~CSTOPB;
       options.c_cflag &= ~CSIZE;
       options.c_cflag |= CS8;
       options.c_cflag |= PARENB;
       options.c_cc[VMIN] = 0; 
       options.c_cc[VTIME] = 10; 
       fcntl(fd, F_SETFL, FASYNC);
       tcsetattr(fd, TCSANOW, &options);
   }

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.