Название: Считывание данных из com порта Отправлено: ryazancity от Декабрь 15, 2012, 15:01 Ребят,помогите нужно что бы прога считывала с com порта либо 1 либо 0 с трех датчиков, данные приходят в виде 1 0 1 т.е просто через пробел. И вся Фишка в том что бы при единичках в первых двух должно выводиться предупреждение,а при единичке в третьем числе,компьютер должен аварийно отключаться,либо с сохранением,либо без сохранения параметров(на усмотрение пользователя)
Название: Re: Считывание данных из com порта Отправлено: skandinavijos от Декабрь 15, 2012, 15:15 Вопрос в чем? как работать с портом или как вычленить значения?
Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 15, 2012, 15:35 И в том и в том)))
Название: Re: Считывание данных из com порта Отправлено: skandinavijos от Декабрь 15, 2012, 16:07 C ком портом можно работать через WinAPI, boost, QSerialPort и т.д. Я предпочитаю последнее. Он унаследован от QIODevice и работа с ним похожа на работу с QFile. Короче самое простое, что может быть. В комплекте примеры идут, там все просто. Далее вешаешь свой слот на его сигнал readyRead(), который срабатывает, когда в порту данные есть. В слоте обрабатываешь. Например: если в буфере меньше трех байт, то return, иначе cчитываешь три байта, например QByteArray = port.read(3) и далее все просто, сравниваешь байты этого QByteArray'я с нулями или чего тебе там надо
Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 15, 2012, 20:27 а если я полный ноль в qt??? Не поможете с кодом?
Название: Re: Считывание данных из com порта Отправлено: Bepec от Декабрь 15, 2012, 21:49 С С++ знаком? Если да, то поможем, да и ты сам справишься. Если нет, начинать надо с простого.
Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 16, 2012, 22:18 С с++ знаком на начальном уровне,а с этой штукой нужно в краткие сроки разобраться...((((
Название: Re: Считывание данных из com порта Отправлено: Bepec от Декабрь 16, 2012, 22:25 Если очень срочно, то выкидывай в объявления с ценой.
Если не очень, то смотри примеры QSerialport. Они внятные и простые. Хотя будет трудно с наскоку понять Qt. Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 16, 2012, 22:27 Пасиб,сейчас придумаем что-нть
Название: Re: Считывание данных из com порта Отправлено: ctin от Декабрь 17, 2012, 14:47 Два варианта: сделать вручную поэтапно или воспользоваться библиотекой и экземплом к ней.
Лично я начал со второго. Можешь писать мне в скайп ctinka1 Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 17, 2012, 19:23 вот такая фигня, как избавиться не пойму
:59 строка serial->setBaudRate(baudRate);ошибка при сборке invalid conversion from 'int' to 'const char*' и тут же initializing argument 1 of 'QString::QString(const char*)' Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 17, 2012, 19:25 а еще один вопрос. if(initSerial(tr("/dev/ttyUSB0"), 9600) == false) это для UBUNTU а для WINDOWS что написать? какой путь????
Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 17, 2012, 19:45 #include "mainwindow.h"
#include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { widget = new QWidget(); grid = new QGridLayout(); button_show = new QPushButton("Show"); button_hide = new QPushButton("Hide"); button_blink = new QPushButton("Blink"); button_blink_n = new QPushButton("Blink 0"); editLine = new QLineEdit("0"); /* connect signals to slots */ connect(editLine, SIGNAL(textChanged(QString)), this, SLOT(setButtonBlinkN(QString))); connect(button_show, SIGNAL(clicked()), this, SLOT(ShowLigth())); connect(button_hide, SIGNAL(clicked()), this, SLOT(HideLigth())); connect(button_blink, SIGNAL(clicked()), this, SLOT(Blink())); connect(button_blink_n, SIGNAL(clicked()), this, SLOT(BlinkN())); /* only 0..9 number */ editLine->setInputMask("9"); grid->addWidget(button_show, 0, 0); grid->addWidget(button_hide, 0, 1); grid->addWidget(button_blink, 0, 2); grid->addWidget(editLine, 0, 3); grid->addWidget(button_blink_n, 0, 4); widget->setLayout(grid); setCentralWidget(widget); /* init QByteArray */ ba.clear(); ba.resize(1); if(initSerial(tr("/dev/ttyUSB0"), 9600) == false) { qDebug() << "Error initSerial"; exit(-1); } } void MainWindow::setButtonBlinkN(QString n) { button_blink_n->setText("Blink " + n); } /* init serial port, set baud rate */ bool MainWindow::initSerial(QString dev, int baudRate) { serial = new AbstractSerial(); serial->setDeviceName(dev); /* open or return false */ if(serial->open(AbstractSerial::ReadWrite)) { serial->setBaudRate(baudRate); /* if ready read call ReadData() */ connect(serial, SIGNAL(readyRead()), this, SLOT(ReadData())); } else { return false; } return true; } /* Send data */ void MainWindow::send(QByteArray &ba) { serial->write(ba); } /* Not light :) */ void MainWindow::ShowLigth() { ba[0] = 'S'; send(ba); } void MainWindow::HideLigth() { ba[0] = 'H'; send(ba); } void MainWindow::Blink() { ba[0] = 'B'; send(ba); } void MainWindow::BlinkN() { ba[0] = 'N'; send(ba); ba[0] = (char)editLine->text().toLocal8Bit().at(0); send(ba); } /* Read data */ void MainWindow::ReadData() { qDebug() << serial->readAll(); } MainWindow::~MainWindow() { serial->close(); delete serial; delete widget; delete grid; delete button_show; delete button_hide; delete button_blink; delete button_blink_n; delete editLine; } Название: Re: Считывание данных из com порта Отправлено: kuzulis от Декабрь 17, 2012, 20:18 ryazancity, ты не ту либу смотришь, она уже давно устарела.
Вот что тебе нужно: QtSerialPort (http://qt-project.org/wiki/QtSerialPort_Russian) Название: Re: Считывание данных из com порта Отправлено: Bepec от Декабрь 17, 2012, 20:25 И научись пользовать тегом
Код: code Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 18, 2012, 08:13 Вас понял
Название: Re: Считывание данных из com порта Отправлено: ctin от Декабрь 18, 2012, 09:36 для WINDOWS нужно "\\\\.\\COM3"
дикое количество слешей - системное расположение порта. Без них будут работать только порты до 9го Название: Re: Считывание данных из com порта Отправлено: Bepec от Декабрь 18, 2012, 10:00 QtSerialPort надо задавать тупо COMN, где N номер порта.
Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 18, 2012, 14:17 А еще вопрос,как сделать что бы при срабатывании одного из датчиков компьютер аварийно отключался без сохранения параметров???
Название: Re: Считывание данных из com порта Отправлено: Bepec от Декабрь 18, 2012, 15:35 Эм. Робот с проводом в руке выдёргивает его из розетки?
Зависит от операционной системы и прав пользователя. Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 18, 2012, 16:19 Для винды с правами админа
Название: Re: Считывание данных из com порта Отправлено: Dancing_on_water от Декабрь 18, 2012, 16:32 Консольная команда на выключение shutdown -s. Смекаем? :)
Название: Re: Считывание данных из com порта Отправлено: ryazancity от Декабрь 18, 2012, 19:16 не катит она
Название: Re: Считывание данных из com порта Отправлено: Bepec от Декабрь 18, 2012, 20:57 аргументируйте чем не катит.
|