Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ [РЕШЕНО]QSerialPort сигнал errorOccurred

Автор: larry 17.6.2017, 10:08

Добрый день, Форумчане.
Возник вопрос по поводу сигнала errorOccurred. Никак не получается его перехватить - интересует ошибка ParityError.
Есть устройство которое шлет 9 бит (знаю, что эта тема уже подымалась и 9 бит это нехорошо, но поставлен перед фактом Смеющийся) и с помощью MarkParity и SpaceParity я отсылаю нужный мне 9ый бит на устройство и все хорошо, но чтобы принять 9ый бит нужно обрабатывать эту ошибку, но этот сигнал никак не испускается и неважно что я задаю в setParity - Mark или Space.
Подскажите пожалуйста...Спасибо.

m_serial_port->setPortName(ui->cboxComPortList->currentText());
m_serial_port->setBaudRate(ui->cboxBaudrate->currentText().toInt());

if(!m_serial_port->open(QSerialPort::ReadOnly | QSerialPort::WriteOnly))
{
       QMessageBox::critical(this, tr("Error"), tr("Can't open serial port"));

       return;
}

m_serial_port->setDataBits(QSerialPort::Data8);
m_serial_port->setStopBits(QSerialPort::OneStop);
m_serial_port->setFlowControl(QSerialPort::NoFlowControl);
m_serial_port->setParity(QSerialPort::MarkParity);

connect(m_serial_port, SIGNAL(errorOccurred(QSerialPort::SerialPortError)), this, SLOT(error(QSerialPort::SerialPortError)));


Слот error(QSerialPort::SerialPortError) просто выводит номер ошибки, но в него не попадает...

Автор: Алексей1153 17.6.2017, 12:33

larry, но как-то тоже требовалось извращение с 9-битным словом сделать. В конце концов разработчик железяки внял разуму и сделал 8 бит, но зато я нашёл следующие рекомендации, как это можно сделать (с чудовищной потерей в скорости обмена, насколько я понимаю)

http://digital.ni.com/public.nsf/allkb/3BDC7FF03541F772862564990057F919

я сам сигналами для порта не пользуюсь, попробуй порядок обработки ошибки примерно такой:

//чтение очередного слова
port.clearError();
char c=0;
int read=port.readData(&c,sizeof(c))
if(read==sizeof(c))
{
  auto err=port.error();
  //тут смотрим err
}

Автор: larry 17.6.2017, 15:16

Спасибо большое. Буду пробовать.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)