crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> [РЕШЕНО]QSerialPort сигнал errorOccurred
larry
  опции профиля:
сообщение 17.6.2017, 10:08
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 55
Регистрация: 16.12.2010
Пользователь №: 2274

Спасибо сказали: 8 раз(а)




Репутация:   0  


Добрый день, Форумчане.
Возник вопрос по поводу сигнала 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) просто выводит номер ошибки, но в него не попадает...

Сообщение отредактировал larry - 21.6.2017, 7:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 17.6.2017, 12:33
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


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

http://digital.ni.com/public.nsf/allkb/3BD...62564990057F919

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

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


Сообщение отредактировал Алексей1153 - 17.6.2017, 12:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
larry
  опции профиля:
сообщение 17.6.2017, 15:16
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 55
Регистрация: 16.12.2010
Пользователь №: 2274

Спасибо сказали: 8 раз(а)




Репутация:   0  


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

Сообщение отредактировал larry - 17.6.2017, 15:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.11.2024, 5:36