2014-10-20 2 views
0

Я могу подключиться к своему серийному порту, но мне нужно постоянно считывать данные из него.
Он работает около 39 минут, но после этого останавливается на линии serial.flush().
Когда я останавливаю Qt и запускаю его снова, он также останавливается на serial.flush(). Мне нужно, чтобы перезагрузить модем, чтобы он снова работать ...Последовательный порт Qt: данные для записи и чтения

Я не уверен, что я правильно выполняю это ...

// Open Serial connexion 
QSerialPort serial; 
serial.setPortName("usbserial-26214A"); 
serial.open(QIODevice::ReadWrite); 
serial.setBaudRate(QSerialPort::Baud115200); 
serial.setDataBits(QSerialPort::Data8); 
serial.setParity(QSerialPort::NoParity); 
serial.setStopBits(QSerialPort::OneStop); 
serial.setFlowControl(QSerialPort::HardwareControl); 

if (serial.isOpen() && serial.isWritable()) 
{ 
qDebug() << "Serial is open"; 

QByteArray output; 
QByteArray input; 

    while(true) 
    { 
    output = "AT+CPMS=\"SM\"\r"; 
    serial.write(output); 
    serial.flush(); 
    serial.waitForBytesWritten(1000); 
    serial.waitForReadyRead(1000); 
    input = serial.readAll(); 
    } 
} 

// EDIT

если удаление flush это но код идет очень быстро. Он не ждет WaitFor...
После 2-го цикла у него нет времени для чтения данных.

serial.isOpen() && serial.isWritable() всегда отправляет true во время цикла.

Программа останавливается на flush через 30 минут!

+0

Если waitForBytesWritten() должно быть безопасно опустить флеш(). Я думаю, это не решит проблему. Можно ли просто запускать программный сброс всегда до AT + CPMS Sequence? Не уверен, что проблема подключения связана с вашим приложением. –

+0

Если удаление строки 'flush', цикл идет очень быстро и не кажется' waitFor ... '. Как сделать * soft-reset *? – gr3g

+0

Выполняется ли приложение просто с помощью powercycling модема? Или вам также нужно перезапустить приложение? В первом случае я бы предположил, что модем застрял. Может быть, вам нужно отладить состояние, в котором находится модем, и проверить, есть ли команды для его оживления. – Oncaphillis

ответ

0

Если serial.isOpen() && serial.isWritable() истинно во время цикла, но вы не можете получить к нему доступ, это может исходить из ваших предпочтений на вашем компьютере.

На OSX: Системные настройки -> Сеть -> выберите последовательный -> Дополнительно -> PPP:
возможность: Просят оставаться на связи через каждые 10 минут,
Выключено: отключение при закрытии сессии
Disable: отключить при смене пользователя

Смежные вопросы