Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/274: Рейтинг темы: голосов - 274, средняя оценка - 4.53
64 / 2 / 1
Регистрация: 29.09.2009
Сообщений: 35

Работа с com-портом. открытие и чтение данных

11.03.2010, 17:25. Показов 53121. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет!

только начинаю изучать С в Линухе.
Стоит задача открыть com-порт и считать из него данных.
вроде всё легко.
искала в инете, но от этого только каша в голове =(

Может кто-нибудь подкинет работающий примерчик?!

Заранее спасибо!!!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2010, 17:25
Ответы с готовыми решениями:

Работа с COM портом запись и чтение в один заход-как сделать?
Столкнулся с тем что оборудование которое прицеплено к компорту не отвечает если сразу же после отправки пакета затребовать у него...

Работа с excel: Открытие, чтение, запись, сохранение книги
Доброго времени суток. Приведите, если не сложно, пару примеров работы с excel. Создание, открытие книги/страницы, сохрание в информации...

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

9
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
11.03.2010, 20:46
Стоит задача открыть com-порт и считать из него данных.
Странная задача для начинающих изучать C.

Serial Programming Guide for POSIX Operating Systems
http://linuxland.itam.nsc.ru/m... index.html
1
64 / 2 / 1
Регистрация: 29.09.2009
Сообщений: 35
17.03.2010, 11:14  [ТС]
Цитата Сообщение от odip Посмотреть сообщение
Странная задача для начинающих изучать C.
Начинаю изучать С именно в Линуксе! =) А так с ним немного знакома... Но вообще всякое бывает...

Спасибо, посмотрела статью
Порт вроде открывается (по крайней мере ошибок не выдаёт)
А вот с чтением записью уже не очень понятно...
Для проверки написала следущую прогу:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>   /* Стандартные объявления ввода/вывода */
#include <string.h>  /* Объявления строковых функций */
#include <unistd.h>  /* Объявления стандартных функций UNIX */
#include <fcntl.h>   /* Объявления управления файлами */
#include <errno.h>   /* Объявления кодов ошибок */
#include <termios.h> /* Объявления управления POSIX-терминалом */
 
int open_port(void);      //Функция открытия порта
int kolvo_bait_from_port=6;   //Количество байт считываемых с порта функцией read.
 
int main(int argc,char **argv)
{
char buf[kolvo_bait_from_port];
char buf1[kolvo_bait_from_port];
int i;
for(i=0;i<6;i++)
{
buf[i]=i;
buf1[i]=0;
}
int k;
int fd=open_port();
int n;
n = write(fd, buf, 6);
if (n < 0)
{
  fputs("write() of 4 bytes failed!\n", stderr);
}
else
 
{
printf(" n= %d  \n",n)  ;
}
while(k!=-1)
{
//usleep(100000);
k=read(fd,buf1,kolvo_bait_from_port);
printf(" k= %d  \n",k)  ;
}
printf(" buf= %c  \n",buf1[2]);
printf(" k= %d  \n",k);
 
close(fd);
return(0);
}
 
  int  open_port(void)
    {
      int fd;
   fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY |O_NONBLOCK);
  if (fd == -1)
  {
   /*
    * Could not open the port.
    */
 
   perror("open_port: Unable to open /dev/ttyS0 - "); 
  }
   else
      fcntl(fd, F_SETFL, 0);
   return (fd);
    }
Таким образом открываю порт, пытаюсь туда что-то записать, а потом это что-то считать.

Запускаю, порт открывается, записываю (выводит, что записал 6 байт). Доходит до цикла while, начинает чтение, пишет, что считал 0 байт, опять проходит через while, доходит до строчки read и виснет.
Что не так?!
0
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
17.03.2010, 15:02
Может,в этом дело?
Одна из проблем в UNIX заключается в том, что файлы устройств обычно не доступны для обычных пользователей. Решением подобной проблемы может служить изменение прав доступа к файлу при запуске вашей программы с привелегиями администратора (root), или маркировании вашей программы как set-userid таким образом, что она будет запущена с правами владельца файла устройства.
0
64 / 2 / 1
Регистрация: 29.09.2009
Сообщений: 35
17.03.2010, 15:43  [ТС]
Цитата Сообщение от #pragma Посмотреть сообщение
Может,в этом дело?
Программу запускаю являюсь рутом. Про остальное не очень поняла...
Можно ещё раз? =)
0
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
17.03.2010, 17:37
Мне самому интересно узнать,почему всё так,а не иначе
У меня вот,например,твой код не работает уже на write() - возвращает -1
0
64 / 2 / 1
Регистрация: 29.09.2009
Сообщений: 35
17.03.2010, 17:42  [ТС]
Цитата Сообщение от #pragma Посмотреть сообщение
Мне самому интересно узнать,почему всё так,а не иначе
У меня вот,например,твой код не работает уже на write() - возвращает -1
забавно... то есть порт открывается нормально, а запись ошибку выдаёт?.. хм...
мы проверяли на двух компах... нам везде выдавало 6.. а потом на риде виснет...

больше никто не пробовал этот код у себя запустить?!?!
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
17.03.2010, 22:05
Я так понимаю чтобы писать в com-порт на нем должно висеть какое-то устройство ?
2
64 / 2 / 1
Регистрация: 29.09.2009
Сообщений: 35
18.03.2010, 13:44  [ТС]
Цитата Сообщение от odip Посмотреть сообщение
Я так понимаю чтобы писать в com-порт на нем должно висеть какое-то устройство ?
мы на com-порт поставили заглушку (то есть передача замкнута на приём)
под виндой с заглушкой всё нормально (проверяли естественно немного другой прогой, но она что записывает, то и читает).
вот...

Добавлено через 2 часа 47 минут
В общем, в чём конкретная проблема, не понятно.

Соединили два компа - заработала. На другом компе этот код и с заглушкой работает.

Всем спасибо за помощь!
0
0 / 0 / 0
Регистрация: 28.07.2017
Сообщений: 5
09.12.2010, 09:27
вот это читает данные с порта, тоолько у меня переходник USB-COM поэтому установлено /dev/ttyUSB2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>   /* Стандартные объявления ввода/вывода */
#include <string.h>  /* Объявления строковых функций */
#include <unistd.h>  /* Объявления стандартных функций UNIX */
#include <fcntl.h>   /* Объявления управления файлами */
#include <errno.h>   /* Объявления кодов ошибок */
#include <termios.h> /* Объявления управления POSIX-терминалом */
#include <sys/types.h>
#include <sys/stat.h>
 
 
int fd; /* Файловый дескриптор для порта */
char buf[512];/*размер зависит от размера строки принимаемых данных*/
int outa=0; 
int iIn;
 
int open_port(void);
int main(void)
 { 
  port_set:
    fd = open("/dev/ttyUSB2", O_RDWR | O_NOCTTY | O_NDELAY); /*'open_port()' - Открывает последовательный порт */
      if (fd == -1)
        {
          /*
           * Возвращает файловый дескриптор при успехе или -1 при ошибке.
           */
           printf("error port\n");
           perror("open_port: Unable to open /dev/ttyUSBn - ");
        }
     else
        {
         struct termios options; /*структура для установки порта*/
         tcgetattr(fd, &options); /*читает пораметры порта*/
        
         cfsetispeed(&options, B115200); /*установка скорости порта*/
         cfsetospeed(&options, B115200); /*установка скорости порта*/
         
         options.c_cflag &= ~PARENB; /*выкл проверка четности*/
         options.c_cflag &= ~CSTOPB; /*выкл 2-х стобит, вкл 1 стопбит*/
         options.c_cflag &= ~CSIZE; /*выкл битовой маски*/
         options.c_cflag |= CS8; /*вкл 8бит*/
         tcsetattr(fd, TCSANOW, &options); /*сохронения параметров порта*/
        
        }
 read_port:
  iIn=read(fd,buf,8); /*чтения приходящих данных из порта*/
   
  
       
  printf("%s",buf);
goto read_port;
 
     
     printf("stop1\n");
}
если там чтото лишнее, забыл убрать после эксперементов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.12.2010, 09:27
Помогаю со студенческими работами здесь

чтение потенциала фотодиода портом РС
есть простая задача: узнать, есть ли что-нибудь между парой светодиод/фотодиод - хотя бы из таких, которые в комп.мышах слушают вращение...

Чтение данных из файла и работа с ними
Может ли кто нибудь помочь? Нужно в Visual Studio 2010 написать программу, которая будет из файла читать определённые значения...

Работа с файлами (запись/чтение данных из бд)
Здравствуйте. Есть код(рабочий) #include &lt;conio.h&gt; #include &lt;iostream.h&gt; #include &lt;time.h&gt; #include &lt;string.h&gt; #include...

Работа со структурой данных, чтение/сохранение во внешний файл
помогите разобраться с задачкой!! {Написать программу, представляющую собой простейшую систему для управления данными. Исходные данные...

Работа с EEPROM (логика записи данных, чтение и защита)
Здравствуйте, подскажите алгоритм или код чтения и записи в EEPROM с равномерным истиранием ячеек, и с возможностью защиты данных на случай...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru