Запись AT команд в виртуальный COM-порт |
Здравствуйте, гость ( Вход | Регистрация )
Запись AT команд в виртуальный COM-порт |
Lya_Inventor |
24.5.2015, 10:00
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 24.5.2015 Пользователь №: 4388 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброе утро!
Подскажите, пожалуйста, как правильно записать AT команду в порт? Использую библиотеку QSerialPort, но к сожалению команда в порт не уходит. Ошибок нет, т.к. возвращает 0 (No error occurred). Прикладываю пример с записью команды serial.write("AT+CMGF=1"); serial.write("QChar(13)"); serial.waitForBytesWritten(200); Заранее благодарю за ответ. |
|
|
lanz |
24.5.2015, 14:46
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
А почему QChar(13) и почему в кавычках?
|
|
|
Lya_Inventor |
24.5.2015, 15:35
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 24.5.2015 Пользователь №: 4388 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Lya_Inventor |
24.5.2015, 18:11
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 24.5.2015 Пользователь №: 4388 Спасибо сказали: 0 раз(а) Репутация: 0 |
С вопросом записи команды в порт разобралась. Скажите, пожалуйста, по какой причине serial1->waitForBytesWritten(200) возвращает false?
|
|
|
lanz |
24.5.2015, 19:05
Сообщение
#5
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Возможны два варианта,
1. Все байты записаны ДО вызова wait 2. Запись длится дольше 200 мс Попробуйте убрать таймаут, и посмотрите что получится. Если все равно возвращает false, значит первый вариант. |
|
|
Lya_Inventor |
26.5.2015, 8:02
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 24.5.2015 Пользователь №: 4388 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Lya_Inventor |
7.6.2015, 12:25
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 24.5.2015 Пользователь №: 4388 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте!
Подскажите, пожалуйста, как корректно записать в порт номер телефона через переменную? (phone - переменная QString) Пробовала записать следующим образом, но получаю ошибку no matching function for call to 'QSerialPort::write(const QString)'. serial1->write("AT+CMGS=\"'%" +phone+ "%'\"\r"); Если вводить номер телефона, то всё проходит успешно. serial1->write("AT+CMGS=\"+7**********\"\r") Заранее благодарю. |
|
|
lanz |
8.6.2015, 9:26
Сообщение
#8
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Используйте метод .toLatin1()
У вас не получается, потому что нельзя передать в порт объект QString, потому что порт принимает байты, а строка содержит символы. Чтобы преобразовать строку в байты, нужно ее закодировать, используя некую кодировку. Тут я немножко спекулирую и предполагаю, что ваше устройство понимает только Latin-1( http://en.wikipedia.org/wiki/ISO/IEC_8859-1 ), поэтому мы преобразовываем строку в массив байт, кодирующий эту строку - http://doc.qt.io/qt-4.8/qstring.html#toLatin1 |
|
|
Текстовая версия | Сейчас: 4.5.2024, 15:51 |