Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
95 / 15 / 3
Регистрация: 09.07.2009
Сообщений: 886

Работа с COM портом АЦП USB-DA10 (QT)

23.05.2025, 09:48. Показов 2578. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Пытаюсь получить данные с АЦП (https://www.chipdip.ru/product/usb-da10, https://www.titan.tw/product/usb-da10/). К порту 6 подключил батарейку 1,5В. Результаты измерения программой для этого АЦП на первом скриншоте, на втором скриншоте команды для 5-7 контактов АЦП. В методе:
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
void MainWindow::Start()
{
  char cmdAInp[10] = {'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', '.', '/'};
  QSerialPort serial;
  QString portName = cmbComPort->currentText();
  serial.setPortName(portName);
  // Открытие порта
  if (!serial.open(QIODevice::ReadWrite))
  {
    // Обработка ошибки
    QMessageBox::critical(nullptr, "Ошибка", "Не удалось отрыть COM-порт! Проверьте подключение АЦП!");
    return;
  }
  // Установка параметров
  serial.setBaudRate(QSerialPort::Baud38400);
  serial.setDataBits(QSerialPort::Data8);
  serial.setParity(QSerialPort::NoParity);
  serial.setStopBits(QSerialPort::OneStop);
  serial.setFlowControl(QSerialPort::NoFlowControl);
  uint valIn = spbChannelInput->value();
  QString dataRead;
  char wr = cmdAInp[valIn - 1];
  uint nwr = serial.write(&wr, 1);
  dataRead.append(serial.readAll());
  lblInfo->setText(dataRead);
  serial.close();
}
получить данные, аналогичные данным из программы для АЦП, мне не удалось. Пытался посмотреть portmon из Sysinternals Suite, что передается из программы для АЦП в АЦП - получил при административном запуске Error 2. Аналогичную программу, которая позволяла бы просматривать данные от ПК в АЦП, я не нашел. Программы для работы с Com-портом, которые я пробовал использовать, давали ошибку открытия порта при работающей программе для АЦП. Ранее с помощью PowerShell:
PowerShell
1
2
3
4
5
$port = New-Object System.IO.Ports.SerialPort "COM3", 38400, None, 8, One
$port.Open()
$port.WriteLine("N")
Write-Output $port.ReadLine()
$port.Close()
я получал результаты, близкие к результатам программы для АЦП. Раньше с COM портом с помощью QT не работал. Проект прикрепил. Помогите, пожалуйста.
Миниатюры
Работа с COM портом АЦП USB-DA10 (QT)   Работа с COM портом АЦП USB-DA10 (QT)  
Вложения
Тип файла: zip qtDA.zip (3.8 Кб, 3 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2025, 09:48
Ответы с готовыми решениями:

QT Работа с usb COM портом. Подключение Perl
Добрый день! Возникла такая проблемма. Занимаюсь одним проектом,и там стоит задача зделать...

Организация обмена данными usb-usb
Здравствуйте! Имеется кит с NXP i.MX 6 ARM Cortex-A9 и линуксом на борту. К этому киту я хочу...

Связь usb -> usb через QSerialPort
Вопрос в заголовке. Возможно ли? Хочу подключить через usb к своему компу ещё один комп и отправить...

24
95 / 15 / 3
Регистрация: 09.07.2009
Сообщений: 886
15.06.2025, 16:15  [ТС]
Студворк — интернет-сервис помощи студентам
Снова появился вопрос. Мне нужно записать в порт один символ. Делал, как советовали:
C++ (Qt)
1
2
3
QByteArray temp, res;
  temp.resize(1);
  temp.append('N')
Потом решил проверить, как работает QByteArray в простой программе:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
int main() {
  QByteArray res;
  for(int i = 0; i < 10; i++)
  {
    res.clear();
    res.resize(1);
    res.append('R');
    qDebug() << res;
  }
    return 0;
}
Получаю следующий результат:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
"PR"
"PR"
"PR"
"PR"
"PR"
"PR"
"PR"
"PR"
"PR"
"\x00R"
Т.е. получается, что записываются в порт 2 значения. Кроме того, непонятно, откуда появляется "P" после resize(1) и последний вывод. Помогите, пожалуйста, разобраться
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.06.2025, 16:27
Лучший ответ Сообщение было отмечено tumanovalex как решение

Решение

Цитата Сообщение от tumanovalex Посмотреть сообщение
res.resize(1);
До ресайза массив пустой, вы увеличили размер на 1, теперь рамзер массива один, и символ неинициализирован.
Дальше вы добавили ещё один символ.
Теперь символов 2.

Л - логика.

Ну и доку читать всегда полезно.
1
95 / 15 / 3
Регистрация: 09.07.2009
Сообщений: 886
15.06.2025, 16:38  [ТС]
Спасибо большое! Прочитал документацию. Правильно ли я понял, что чтобы добавить только один символ, мне нужно было установить resize(0)?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.06.2025, 16:43
Лучший ответ Сообщение было отмечено tumanovalex как решение

Решение

Цитата Сообщение от tumanovalex Посмотреть сообщение
Правильно ли я понял, что чтобы добавить только один символ, мне нужно было установить resize(0)?
clear() достаточно.

Добавлено через 1 минуту
А что мешает изменять один символ?
res[0] = ch
1
95 / 15 / 3
Регистрация: 09.07.2009
Сообщений: 886
15.06.2025, 16:45  [ТС]
Спасибо большое! Попробую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2025, 16:45
Помогаю со студенческими работами здесь

Qt и usb. Работа с флешками
Всем доброго времени суток! В программе на qt нужно реализовать работу с флешками... ничего...

QSerialPort работа с usb
Привет, знатоки! Прошу помочь. Задача отследить отключение устройства от usb порта и выдать об том...

Работа с USB
Добрый День Возможно ли работать с USB интерфейсом без подключения сторонних библиотек? В...

Работа с usb
Всем привет. Подскажите библиотеку для работы с устройствами через usb.Нужно считывать и...

проверить работспособность портов
Ув. Тов. форумчане Опыта в С++ никакого а тут ещё и на qt нужно сделать Задача следующая:...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru