Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/47: Рейтинг темы: голосов - 47, средняя оценка - 4.70
1 / 1 / 0
Регистрация: 01.04.2015
Сообщений: 16
1

Отправить байт на COM-порт

02.04.2015, 11:30. Показов 9662. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
может кто консольное приложение написать для отправки байта на COM-порт?
на COM4 подключен контроллер на который нужно отправить байт информации.
Название: CsidYvqolVQ.jpg
Просмотров: 304

Размер: 5.6 Кб
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2015, 11:30
Ответы с готовыми решениями:

Отправить байт в СОМ порт
Подскажите, что не так. // Послать символ b (begin) buf = 0x62; // 0x62 == b...

Как в COM-порт отправить байт данных?
Нашел готовый пример, попытался его запустить но почему то выходит ошибка, почему не знаете?.MODEL...

Подскажите как отправить пакет 10 байт на устройство через com порт
Из меня программист некудышный.. что то получается отправить на ком порт из содранного примера, а...

Передача нулевых байт в COM порт.
Народ, срочно помогите решить проблему. Не получается передать нулевые байты в COM порт, они...

15
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
02.04.2015, 11:32 2
В boost::asio есть средства для работы с портом COM.
0
1 / 1 / 0
Регистрация: 01.04.2015
Сообщений: 16
02.04.2015, 11:33  [ТС] 3
мог бы пояснить про boost::asio?
мне б желательно пример, что бы можно было разобраться.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
02.04.2015, 11:46 4
написать-то под заказ не проблема, но это в более другом разделе.
А так ничего сложного нет. Например, под Виндой последовательность действий такая:
1. открываешь порт функцией CreateFile,
2. заполняешь структуру DCB и устанавливаешь скорость, число бит, четности и прочее. Подробнее тут: https://msdn.microsoft.com/en-... 85%29.aspx и https://msdn.microsoft.com/en-... 85%29.aspx,
3. посылаешь в порт и читаешь из порта фукнциями WriteFile и ReadFile,
4. ну и в конце концов закрываешь порт функцией CloseHandle.
Все. Разумеется, не забываешь контролировать возможные ошибки возврата из функций.

Единственное дополнительное замечание - работу с портом выгоднее вынести в отдельный поток (ага, CreateThread).
0
1 / 1 / 0
Регистрация: 01.04.2015
Сообщений: 16
02.04.2015, 11:49  [ТС] 5
спасибо за ссылки
а я вот что нашёл, это то или не то?
http://www.boost.org/doc/libs/... using.html
там если библиотеки качать она на 110мб О_о
Download boost_1_57_0.zip (110.5 MB)
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,249
02.04.2015, 11:53 6
Лучший ответ Сообщение было отмечено Extreme83 как решение

Решение

Старая как мир тема: http://www.piclist.ru/S-COM-TH... D-RUS.html
0
1 / 1 / 0
Регистрация: 01.04.2015
Сообщений: 16
02.04.2015, 20:54  [ТС] 7
о! отлично, пошёл разбираться

Добавлено через 9 часов 0 минут
я бы вот ещё что добавил
http://litfile.net/web/186658/168000-169000
0
1 / 1 / 0
Регистрация: 01.04.2015
Сообщений: 16
17.04.2015, 15:46  [ТС] 8
что то сложно для меня, мош кто поделиться примером как получить список ком порток?
я вот тут нашёл пример как получить список устройств (клавиатура, мышка...)
вот что бы так же ком порта выдавало.
Вложения
Тип файла: zip ConsoleApplication1.zip (1.5 Кб, 22 просмотров)
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,492
Записей в блоге: 1
17.04.2015, 16:45 9
Extreme83, зачем тебе вообще списки устройств? Зачем тебе вообще буст? ты не расползайся по темам.
Сделай для начала просто писалку в ком-порт.
Обмен данными через СОМ-порт
0
1 / 1 / 0
Регистрация: 01.04.2015
Сообщений: 16
18.04.2015, 19:03  [ТС] 10
Extreme83, зачем тебе вообще списки устройств? Зачем тебе вообще буст? ты не расползайся по темам.
Сделай для начала просто писалку в ком-порт.
Обмен данными через СОМ-порт
что значит зачем? нужен. надо узнать программно какие порты есть и выбрать нужный.
в инете много разных примеров, типа этого
http://cppbuilder.ru/articles/0097.php
но что то в вин8.1 не могу разобраться как получить этот список, из данного примера консольное приложение не собирается.
даже точнее, узнать на каком порте висит контроллер и выбрать этот порт.
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,249
18.04.2015, 21:56 11
Цитата Сообщение от Extreme83 Посмотреть сообщение
что значит зачем? нужен. надо узнать программно какие порты есть и выбрать нужный.
Т.е. ты хочешь в программе (автоматически) перебрать все порты и найти, где твоё устройство? Ну так перебери (программно, естетсвенно) их все от 1 до 99 и выбери. Компьютер от этого не устанет.
0
1 / 1 / 0
Регистрация: 01.04.2015
Сообщений: 16
18.04.2015, 22:20  [ТС] 12
Цитата Сообщение от John Prick Посмотреть сообщение
Т.е. ты хочешь в программе (автоматически) перебрать все порты и найти, где твоё устройство? Ну так перебери (программно, естетсвенно) их все от 1 до 99 и выбери. Компьютер от этого не устанет.
гениальный ответ! ты не заметил что эта ветка для новичков? какой смысл задаваться этим вопросом если бы я мог написать код? я искал примеры и рабочего на Win 8.1 не нашёл
0
2276 / 1767 / 741
Регистрация: 27.07.2012
Сообщений: 5,249
18.04.2015, 23:38 13

Не по теме:

Цитата Сообщение от Extreme83 Посмотреть сообщение
гениальный ответ!
Спасибо за комплимент.



А теперь по существу и без наездов. Кроме того, что искать примеры под Win 8.1, что ты уже делал и что из этого получилось или не получилось? Код из ранее приведённых ссылок пытался применить?
0
1 / 1 / 0
Регистрация: 01.04.2015
Сообщений: 16
19.04.2015, 14:44  [ТС] 14
Цитата Сообщение от John Prick Посмотреть сообщение
А теперь по существу и без наездов. Кроме того, что искать примеры под Win 8.1, что ты уже делал и что из этого получилось или не получилось? Код из ранее приведённых ссылок пытался применить?
начну с того что у меня Win 8.1 x64 и Visual Studio 2013, мош это как то влияет на код, потому что находил примеры для винды 98 - ХР, эти примеры выдавали кучу ошибок, в которых я не разбираюсь.
Те ссылки что выше конечно пробовал, вот здесь тоже смотрел
http://www.sources.ru/cpp/cpp_system.shtml#7
чужой код адаптировать под свои нужды пока это сложная для меня задача.

Добавлено через 2 часа 46 минут
вот как бы то что нужно, но как с этим работать...
https://msdn.microsoft.com/ru-... .110).aspx

Добавлено через 1 час 32 минуты
C++ (Qt)
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
Serial::Serial(char *portName)
{
    //We're not yet connected
    this->connected = false;
 
    //Try to connect to the given port throuh CreateFile
    this->hSerial = CreateFile(portName,
            GENERIC_READ | GENERIC_WRITE,
            0,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);
 
    //Check if the connection was successfull
    if(this->hSerial==INVALID_HANDLE_VALUE)
    {
        //If not success full display an Error
        if(GetLastError()==ERROR_FILE_NOT_FOUND){
 
            //Print Error if neccessary
            printf("ERROR: Handle was not attached. Reason: %s not available.\n", portName);
 
        }
        else
        {
            printf("ERROR!!!");
        }
    }
    else
    {
        //If connected we try to set the comm parameters
        DCB dcbSerialParams = {0};
 
        //Try to get the current
        if (!GetCommState(this->hSerial, &dcbSerialParams))
        {
            //If impossible, show an error
            printf("failed to get current serial parameters!");
        }
        else
        {
            //Define serial connection parameters for the arduino board
            dcbSerialParams.BaudRate=CBR_9600;
            dcbSerialParams.ByteSize=8;
            dcbSerialParams.StopBits=ONESTOPBIT;
            dcbSerialParams.Parity=NOPARITY;
            //Setting the DTR to Control_Enable ensures that the Arduino is properly
            //reset upon establishing a connection
            dcbSerialParams.fDtrControl = DTR_CONTROL_ENABLE;
 
             //Set the parameters and check for their proper application
             if(!SetCommState(hSerial, &dcbSerialParams))
             {
                printf("ALERT: Could not set Serial Port parameters");
             }
             else
             {
                 //If everything went fine we're connected
                 this->connected = true;
                 //Flush any remaining characters in the buffers 
                 PurgeComm(this->hSerial, PURGE_RXCLEAR | PURGE_TXCLEAR);
                 //We wait 2s as the arduino board will be reseting
                 Sleep(ARDUINO_WAIT_TIME);
             }
        }
    }
 
}
почему у меня в строке "this->hSerial = CreateFile(portName,"
ругается на "portName"
сообщает "аргумент типа "char *" не совместим с параметром типа "LPCWSTR""?

Добавлено через 9 минут
http://playground.arduino.cc/I... CPPWindows
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,492
Записей в блоге: 1
20.04.2015, 13:13 15
Extreme83, ну тогда может и стоит разбираться с конкретными ошибками по мере их поступления?
Например, не винить во всём "не ту винду".
Не винить во всём ком-порты, а погуглить конкретно, что не так с "аргумент типа "char *" не совместим с параметром типа "LPCWSTR""?
Погугли и выяснится, что с виндой и портами это ну никак не связано!
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
20.04.2015, 14:53 16
Вот еще ссылка загадошная на почитать, с хорошим описанием DCB-структуры: COM-порт в Windows

Extreme83, и слушайте что вам говорит Kuzia domovenok. Он прав.
0
20.04.2015, 14:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2015, 14:53
Помогаю со студенческими работами здесь

Com порт. Перекодировать принятый байт
Всем привет, Прошу помочь разобраться. Работаю с COM-портом, при помощи компоненты ComPort...

Передать массив байт в COM порт
Здравствуйте. Использую класс php_serial для работы с COM портом. Мне надо передать в функцию...

Отправка байт в последовательный порт
Доброго времени суток! Столкнулся со следующей проблемой. Есть необходимость отправить в...

Не могу отправить байт
Не могу разобраться с USORT в Attiny2313, отправляю байт 00001111, а приходить 00800080 ldi...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru