Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/40: Рейтинг темы: голосов - 40, средняя оценка - 4.60
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382

Подключение устройства по COM порту RS232

03.11.2020, 08:52. Показов 8805. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста подключить устройство по сом порту и считать данные.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.11.2020, 08:52
Ответы с готовыми решениями:

Обращение к COM порту по протоколу RS232
Люди у меня на кафедре SAW RFID и нужно написать прогу которая бы управляла бы им в Visual C++. Всё практически готово кроме самой...

Программа управления проектором Nec моделей VT60, VT70, VT80, VT90, VT700, LT170 по порту Rs232
Помогите написать программку на С++ или ассемблере, которая посылала бы простейшие команды на проектор, уже неделю пытаюсь разобраться,...

Поиск устройства подключенного к COM порту
Здравствуйте. Возник у меня вопрос. Заказали мне сделать одну железяку которая по звонку с сотового телефона открывает шлагбаум если номер...

32
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
22.12.2020, 14:12  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от САлександр Посмотреть сообщение
Все возможно, включая таймауты а также DTR и RTS. Можно предположить, что первым обращением к устройству должна идти правильная команда его "инициализации". Гадать можно долго. Проще было бы ответить на Реальный, именно тот который Вы написали, а он не работает.
Вот что написано
Кликните здесь для просмотра всего текста
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
void __fastcall TForm1::out_port_GEN (int a)
{
DCB          *dcb;
COMMTIMEOUTS  ct;
LPVOID lpMsgBuf;
char  buf_out;
String A;
if(!a)
{
 
 dcb=(DCB*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DCB));
 dcb->DCBlength=sizeof(DCB);
 BuildCommDCB(L"baud=9600 parity=N data=8 stop=1",dcb);
 dcb->fDtrControl=DTR_CONTROL_ENABLE;
 dcb->fRtsControl=RTS_CONTROL_DISABLE;
ct.ReadIntervalTimeout=1000;
 ct.ReadTotalTimeoutMultiplier=ct.ReadTotalTimeoutConstant=20;
 ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant=10;
 port=CreateFile(L"\\\\.\\COM25",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
                NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
                (LPTSTR) &lpMsgBuf,0,NULL
               );
 A=(LPTSTR)lpMsgBuf; LocalFree(lpMsgBuf);
 if(port==INVALID_HANDLE_VALUE)
  {
   ShowMessage(" Невозможно открыть последовательный порт. "+A);
   CloseHandle(port);  port=0;
  } else{ SetCommState(port,dcb); SetCommTimeouts(port,&ct);
          PurgeComm(port,PURGE_TXCLEAR|PURGE_RXCLEAR);}
 HeapFree(GetProcessHeap(),0,dcb);
}
else {
       PurgeComm(port,PURGE_TXCLEAR|PURGE_RXCLEAR);
       CloseHandle(port);  port=0;
     }
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String s,Result;
if(!port) out_port_GEN(0);
if(port){
            Label1->Caption="открыт COM порт";//здесь я посылаю на физ ус-во команды
            bufwr[0]= 'M';
            WriteFile(port, bufwr, strlen(bufwr), &temp, NULL);
            Sleep(500);
            bufwr[0]='P';
            WriteFile(port, bufwr, strlen(bufwr), &temp, NULL);
            Sleep(500);
            bufwr[0]='?';
            WriteFile(port, bufwr, strlen(bufwr), &temp, NULL);
            Sleep(2000);
            Result=' ';
            //ShowMessage("Ошибка чтения!");
            if (!ReadFile(port,bufrd,strlen(bufrd),&temp,NULL))
                {
                ShowMessage("Ошибка чтения!");
                 exit;
                } else
                {
                    ReadFile(port,bufrd,strlen(bufrd),&temp,NULL);//сюда у меня приходит программа
//но в итоге temp равен 1, и результата никакого. 
                   ShowMessage(temp);
                    for (int i = 6; temp-1; i++)
                    {
                        s=s +bufrd[i];
                        Result=s[i];
                        Memo1->Lines->Add(Result);
                    }
 
                }
 
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(port) out_port_GEN(1);
if(!port) Label1->Caption="COM порт закрыт";
}
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.12.2020, 15:07
Проще всего взять сторонний компонент TBComPort
Или пересесть на С++Qt и использовать класс QSerialPort или boost/asio или вообще на Python

С WinAPi мутная тема, в интернете нормальных примеров/объяснений нет, только какое-то рупопство, пока разберешься куча времени уйдет.
0
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
23.12.2020, 10:12  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Проще всего взять сторонний компонент TBComPort
Или пересесть на С++Qt и использовать класс QSerialPort или boost/asio или вообще на Python

С WinAPi мутная тема, в интернете нормальных примеров/объяснений нет, только какое-то рупопство, пока разберешься куча времени уйдет.
А как установить TBComPort ? Можно поподробнее?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.12.2020, 13:00
Поищите по форуму где-то уже обсуждалось в этом разделе.
0
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,190
23.12.2020, 16:08
PierL, что Вы хотите прочитать? У Вас какое-то устройство подключено или просто перемычка RX-TX?
Судя по попытке просто чтения после записи - у Вас перемычка. По программе что-то сказать трудно, вроде бы все должно работать.
Попробуйте после записи посмотреть содержимое bufwr, соответствует посланному в порт?
Попробуйте сделать точку остановки в стр.63 и посмотрите содержимое bufw, bufrd,temp. Кстати что это?
Для чего buf_out (стр.6)?
Вот у Вас: bufwr[0]= 'M'; strlen(bufwr) выдаст 1, а сколько это в байтах? (Вдруг 2?)
// сомнения из-за юникода, ведь уже были проблемы.
0
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
24.12.2020, 11:10  [ТС]
что Вы хотите прочитать?
У меня физическое устройство! Записывает температуры, чтобы их скинуть на комп надо подключить по СОМ порту.
На DELPHI 7 (код в теме выше есть) все работает, подключается отлично.
Попробуйте после записи посмотреть содержимое bufwr, соответствует посланному в порт?
Попробуйте сделать точку остановки в стр.63 и посмотрите содержимое bufw, bufrd,temp. Кстати что это?
Для чего buf_out (стр.6)?
Вот у Вас: bufwr[0]= 'M'; strlen(bufwr) выдаст 1, а сколько это в байтах? (Вдруг 2?)
// сомнения из-за юникода, ведь уже были проблемы.
Попробую, хотя по этому поводу я не компетентен.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
24.12.2020, 13:00
Цитата Сообщение от PierL Посмотреть сообщение
На DELPHI 7 (код в теме выше есть) все работает, подключается отлично.
Ну так и подключайте к проекту паскалевский юнит, - меньше будет проблем.
0
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
24.12.2020, 13:13  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
Ну так и подключайте к проекту паскалевский юнит, - меньше будет проблем.
Да ладно, а как это сделать?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.12.2020, 13:28
Добавлялку в проект отростить?
0
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,190
24.12.2020, 13:50
Цитата Сообщение от PierL Посмотреть сообщение
Попробую
Но ведь посмотреть содержимое bufw, bufrd,temp - это же дело нескольких секунд! Может сразу ясности добавится.
0
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
31.12.2020, 11:00  [ТС]
Цитата Сообщение от САлександр Посмотреть сообщение
Но ведь посмотреть содержимое bufw, bufrd,temp - это же дело нескольких секунд! Может сразу ясности добавится.
Ничего не приходит! по нулям
0
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,190
01.01.2021, 13:33
Что, и сразу же после
C++
1
44 bufwr[0]= 'M';
в bufwr только нули?
0
 Аватар для PierL
4 / 4 / 0
Регистрация: 18.07.2013
Сообщений: 382
11.01.2021, 09:39  [ТС]
Цитата Сообщение от САлександр Посмотреть сообщение
Что, и сразу же после
C++
1
44 bufwr[0]= 'M';
в bufwr только нули?
bufwr[0]='M' при просмотре показывает 77(код буквы М)
temp при записи показывает 1
temp при чтении ReadFile показывает 0
bufrd[0] ноль
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2021, 09:39

Цикличестий опрос устройства на COM порту
Доброго времени суток! Пишу программу для опроса контроллера к которому подключены датчики. Опрос датчиков нужно производить циклично но...

Определить имя устройства на com порту
Доброго времени суток! есть считывающее устройство, поставил на него драйвера для создания виртуального com порта в диспетчере устройств...

Интервал ожидания ответа от устройства по последовательному порту
Скажите пожалуйста, Как мне самому задать время ожидания ответа от СОМ-порта? Можно ли добавить это в ShowSetupDialog? Работаю с...

Как получить имя подключенного к порту устройства?
Ребят, как получить имя подключенного к порту устройства? К примеру "Cino FuzzyScan USB Virtual COM Port", все перерыл и нифига не...

Как подсчитать количество считанных пакетов от устройства по Com порту?
Необходимо подсчитать количество поступающих данных от Com порта.. сейчас устройство предаёт данные друг за другом (02, d3, 8d85, ...) .....


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru