1 / 1 / 0
Регистрация: 26.10.2010
Сообщений: 7

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

21.03.2011, 17:40. Показов 7554. Ответов 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 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru