Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/39: Рейтинг темы: голосов - 39, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 7

Работа с последовательным портом

21.03.2011, 17:40. Показов 7542. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Требуется написать программу на С/C++, которая предлагает ввести пользователю число от 0 до 255 и посылает введенное число в последовательный порт. Так вот, как послать число в последовательный порт?

Добавлено через 1 час 28 минут
не совсем то.. Нужно посылать в число в реальный последовательный порт а не в консольный или универсальный.. На выходе это число будет получать устройство.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2011, 17:40
Ответы с готовыми решениями:

Работа с com-портом. открытие и чтение данных
всем привет! только начинаю изучать С в Линухе. Стоит задача открыть com-порт и считать из него данных. вроде всё легко. искала...

Работа с последовательным портом
В VB6 работа с последовательным портом осуществлялась через MSComm В VB.NET это тоже можно применить. Но может придумали что нибудь...

Работа с последовательным портом
Как можно получить все опции для последовательного устройства?

12
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
22.03.2011, 17:26
Вы всех запугали жуткими терминами типа реальный/универсальный/консольный порт)
Расшифруйте пожалуйста, что скрывается под этими определениями.
0
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 7
22.03.2011, 19:34  [ТС]
Это че то я напутал малясь. Нужно просто посылать число в последовательный порт, где на выходе его будет получать плоттер. Этот алгоритм нужно написать на С и в LINUX.
P.S. Хотел попробовать писать в файл /dev/ttyS0, но при попытке записи прога уходит в бесконечный цикл. То же самое происходит, если писать в файл через терминал(echo 11111111111111111 > /dev/ttyS0). Что это может быть?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
22.03.2011, 20:11
Шелл: man stty почитайте и посмотрите/настройте порт как того хочет ваш плоттер.
Cи: man termios
0
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 7
22.03.2011, 20:22  [ТС]
А насчет кода на С? Нельзя ли небольшой листинг?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
22.03.2011, 20:38
в гугле их много)
0
Mobile Developer
 Аватар для lifestyle
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
23.03.2011, 20:33
C
1
fd=open("/dev/ttySx",O_WRD);//x-number of port fd-file descriptor(int)
0
1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 7
25.03.2011, 18:20  [ТС]
Спасибо за информацию. У меня ещё вот какой вопрос: если я посылаю через параллельный порт на модем 4 байта, то при чтении я должен получить эти же 4 байта или нет?
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
26.03.2011, 08:42
Нет, при чтении вы получите (или не получите) ответ модема.
0
18 / 17 / 0
Регистрация: 22.09.2009
Сообщений: 37
01.04.2011, 15:03
доброго всем времени суток. прошу помощи в решении следующей задачки. нужно из com порта прочитать строку, посылаемую GPS-навигатором. Строка соответствует протоколу NMEA и вобщем-то в ней особенного ничего нет, обычная строчка ASCII символов. я накидал код, но он корректно работает, только если сначала запустить мою программку, а затем уже подавать что-либо в com-порт. если же делать наоборот, то вместо красивой ASCII-строчки сплошные краказябры. может ли кото-нибудь подсказать, что я делаю не так?
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define BAUDRATE B9600
#define MODEMDEVICE "/dev/ttyS0"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
#define FALSE 0
#define TRUE 1
 
/*
 * 
 */
 
int tty_open()
{
    int fd;
    struct termios oldtio, newtio;
 
    fd = open(MODEMDEVICE, O_RDONLY | O_NOCTTY);
    if (fd < 0) {perror("."); exit(EXIT_FAILURE); }
 
    tcgetattr(fd,&oldtio); /* сохраняем текущие настройки порта */
    bzero(&newtio, sizeof(newtio)); /* очищаем структуру под новые настройки */
    /*
      CRTSCTS : аппаратное управление исходящим потоком
      CS8     : 8n1 (8 бит, без контроля четности, 1 стопбит)
      CLOCAL  : локальное соединение, без управления модемом
      CREAD   : разрешаем получать символы
    */
    cfsetispeed(&newtio, BAUDRATE);
    cfsetispeed(&newtio, BAUDRATE);
    newtio.c_cflag &= ~PARENB;
    newtio.c_cflag &= ~CSTOPB;
    newtio.c_cflag &= ~CSIZE;
    newtio.c_cflag |= (CRTSCTS | CS8 | CLOCAL | CREAD);
    newtio.c_iflag |= (IGNPAR | ICRNL);    //игнорируем байты с ошибками четности, отображаем CR на NL (иначе появление CR на другом компьютере не завершит ввод)
    newtio.c_oflag |= 0;       //Ненастроенный (raw, как есть) вывод
    newtio.c_lflag |= (ICANON);  //включаем режим канонического ввода
 
    newtio.c_cc[VINTR]    = 0;     /* Ctrl-c */
    newtio.c_cc[VQUIT]    = 0;     /* Ctrl-\ */
    newtio.c_cc[VERASE]   = 0;     /* del */
    newtio.c_cc[VKILL]    = 0;     /* @ */
    newtio.c_cc[VEOF]     = 4;     /* Ctrl-d */
    newtio.c_cc[VSWTC]    = 0;     /* '\0' */
    newtio.c_cc[VSTART]   = 0;     /* Ctrl-q */
    newtio.c_cc[VSTOP]    = 0;     /* Ctrl-s */
    newtio.c_cc[VSUSP]    = 0;     /* Ctrl-z */
    newtio.c_cc[VEOL]     = 0;     /* '\0' */
    newtio.c_cc[VREPRINT] = 0;     /* Ctrl-r */
    newtio.c_cc[VDISCARD] = 0;     /* Ctrl-u */
    newtio.c_cc[VWERASE]  = 0;     /* Ctrl-w */
    newtio.c_cc[VLNEXT]   = 0;     /* Ctrl-v */
    newtio.c_cc[VEOL2]    = 0;     /* '\0' */
 
    tcflush(fd, TCIFLUSH);        //сбрасываем модемную линию
    tcsetattr(fd, TCSAFLUSH, &newtio);    //активируем настройки порта
    return(fd);
}
 
void tty_close(int fd)
{
    close(fd);
}
 
int main(int argc, char** argv) {
 
    char nmea_str[80], tmp_str[1];
    int fd, res;
    fd = tty_open();
    bzero(nmea_str, sizeof(nmea_str));
    while(TRUE) //читаем строку NMEA
    {
        res = read(fd, tmp_str, 1);
        if (res < 0)
            {perror(".."); tty_close(fd); exit(EXIT_FAILURE); }
        if (tmp_str[0] == '\n') {break;}
        strcat(nmea_str, tmp_str);
    }
    printf("%s", nmea_str); printf("\n");
    tty_close(fd);
   
    return (EXIT_SUCCESS);
}
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
01.04.2011, 15:41
Кракозябры обычно прут при не согласованной скорости.
Возможно ваш gps умеет автоподстройку boud rate и по этому в случае запустить программу->включить устройство все работает, а в обратной последовательности нет. Попробуйте подобрать, помниться у NMEA дефолт 4800.
PS: у вас cfsetispeed(&newtio, BAUDRATE); два раза, наверное один из них должен быть cfsetospeed)
1
18 / 17 / 0
Регистрация: 22.09.2009
Сообщений: 37
01.04.2011, 16:35
Цитата Сообщение от g_u_e_s_t Посмотреть сообщение
Кракозябры обычно прут при не согласованной скорости.
Возможно ваш gps умеет автоподстройку boud rate и по этому в случае запустить программу->включить устройство все работает, а в обратной последовательности нет. Попробуйте подобрать, помниться у NMEA дефолт 4800.
PS: у вас cfsetispeed(&newtio, BAUDRATE); два раза, наверное один из них должен быть cfsetospeed)
спасибо за помощь, ошибку исправил я тоже думал на бодрейт сначала, но когда я отправляю со второго компа в com-порт тексовый файл происходит тоже самое. если сначала запустить чудо-код, а потом начинать передачу в com-порт, все нормально. если наоборот - кракозябры
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
01.04.2011, 16:40
Ну извиняйте, с другими причинами кроме разных скоростей я не сталкивался)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2011, 16:40
Помогаю со студенческими работами здесь

Работа с последовательным портом
Добрый день! В работе с железом я новичок, поэтому прошу объяснения и помощи. Заранее спасибо =) На просторах инэта нашёл статейку и...

Работа с последовательным портом
Кто разобрался с этим? На VB6 все это делалось через OCX. Насколько я понял, здесь это делается через потоки. Но как... не могу...

Работа с последовательным портом.
Коллеги...подскажите пожалуйста.Как из VS2005 в C#,работать споследовательным портом,если можно по-подробней. Может у кого нить есть...

Работа с последовательным портом с помощью SerialPort
Здравствуйте! помогите кто может! Надо написать программу, которая отслеживала бы одиночное нажатие кнопки подключенной к ком-порту, если...

Управление последовательным портом
Здравствуйте, кто-нибудь знает библиотеку, где есть функция, позволяющая подавать сигналы на COM-порт? Буду очень признателен


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru