crossplatform.ru

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


  Ответ в Запись AT команд в виртуальный COM-порт
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
lanz Дата 8.6.2015, 9:26
  Используйте метод .toLatin1()
У вас не получается, потому что нельзя передать в порт объект QString, потому что порт принимает байты, а строка содержит символы. Чтобы преобразовать строку в байты, нужно ее закодировать, используя некую кодировку.
Тут я немножко спекулирую и предполагаю, что ваше устройство понимает только Latin-1( http://en.wikipedia.org/wiki/ISO/IEC_8859-1 ), поэтому мы преобразовываем строку в массив байт, кодирующий эту строку - http://doc.qt.io/qt-4.8/qstring.html#toLatin1
Lya_Inventor Дата 7.6.2015, 12:25
  Здравствуйте!
Подскажите, пожалуйста, как корректно записать в порт номер телефона через переменную? (phone - переменная QString)
Пробовала записать следующим образом, но получаю ошибку no matching function for call to 'QSerialPort::write(const QString)'.
serial1->write("AT+CMGS=\"'%" +phone+ "%'\"\r");
Если вводить номер телефона, то всё проходит успешно.
serial1->write("AT+CMGS=\"+7**********\"\r")

Заранее благодарю.
Lya_Inventor Дата 26.5.2015, 8:02
 
Цитата(lanz @ 24.5.2015, 19:05) *
Возможны два варианта,
1. Все байты записаны ДО вызова wait
2. Запись длится дольше 200 мс

Попробуйте убрать таймаут, и посмотрите что получится. Если все равно возвращает false, значит первый вариант.

Спасибо за помощь, удалось отправить сообщение.
lanz Дата 24.5.2015, 19:05
  Возможны два варианта,
1. Все байты записаны ДО вызова wait
2. Запись длится дольше 200 мс

Попробуйте убрать таймаут, и посмотрите что получится. Если все равно возвращает false, значит первый вариант.
Lya_Inventor Дата 24.5.2015, 18:11
  С вопросом записи команды в порт разобралась. Скажите, пожалуйста, по какой причине serial1->waitForBytesWritten(200) возвращает false?
#include "comport1.h"
#include "ui_comport1.h"
#include <QtSerialPort/QtSerialPort>
#include <QDebug>
#include <QMainWindow>
QSerialPort *serial1;

comport1::comport1(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::comport1)
{
    ui->setupUi(this);
    serial1 = new QSerialPort(this);
    serial1->setPortName("COM66");
    serial1->open(QIODevice::ReadWrite);
    serial1->setBaudRate(QSerialPort::Baud9600);
    serial1->setDataBits(QSerialPort::Data8);
    serial1->setParity(QSerialPort::NoParity);
    serial1->setStopBits(QSerialPort::OneStop);
    serial1->setFlowControl(QSerialPort::NoFlowControl);

    if(serial1->isOpen()){

        serial1->write("AT+CMGF=1\r\n");
        serial1->waitForBytesWritten(200);
        serial1->write("AT+CMGS=\"+7**********\"\r\n");
        serial1->waitForBytesWritten(200);
        serial1->write("Hello""\x1A");
        
     }
}
Lya_Inventor Дата 24.5.2015, 15:35
 
Цитата(lanz @ 24.5.2015, 14:46) *
А почему QChar(13) и почему в кавычках?

QChar(13) код клавиши ENTER, необходимо вводить после установки режима работы и номера телефона. В кавычках записала, т.к. пробовала различные варианты ввода.
lanz Дата 24.5.2015, 14:46
  А почему QChar(13) и почему в кавычках?
Lya_Inventor Дата 24.5.2015, 10:00
  Доброе утро!
Подскажите, пожалуйста, как правильно записать AT команду в порт? Использую библиотеку QSerialPort, но к сожалению команда в порт не уходит. Ошибок нет, т.к. возвращает 0 (No error occurred).

Прикладываю пример с записью команды
serial.write("AT+CMGF=1");
serial.write("QChar(13)");
serial.waitForBytesWritten(200);

Заранее благодарю за ответ.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 18:19