![]() |
|
![]() ![]() ![]() |
|
vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
Добрый день, форумчане. Потребовалась помощь по следующему вопросу. Есть устройство. которое подключено к компьютеру и передает данные по uart. Устройство управляется посредством АТ-команд. На устройство можно заливать скрипты на python и считывать эти скрипты на компьютер. Проблема в считывании скриптов с разрешением .pyo. Когда я считываю скрипты конфигурационных файлов, т.е. текстовых, то проблем нет, а вот скомпилированные никак не могу скачать, присылает часть и все, подтверждение ОК нет. В чем проблема не могу понять. Вот код:
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
m_port - это что? Указатель на QSerialPort?
|
|||
|
||||
vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
Да, совершенно верно. Извините, забыл указать.
|
|||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
А на передающей стороне ошибки быть не может?
case SCRIPT_TERMINAL - это, я так понимаю, для обработки скомпилированных файлов? Попробуйте считанный Вами буфер записывать в файл. Сравните с исходным файлом .pyo. |
|||
|
||||
vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
нет, ошибок нет на передающей стороне. Шлет он когда как, то за раз весь файл, то частями, но в программе это предусмотренно.
MAIN_TERMINAL - вывод информации в главное окно (QTextEdit) MODULE_TERMINAL - вывод списка файлов (QListWidget) SCRIPT_TERMINAL - парсинг и запись в файл Сохранял в файл и сравнивал, но не совпадает...чаще всего он ничего не пишет, т.к. для записи я жду ОК...там два варианта ОК или ERROR. Если просто записывать в файл, то он запишет часть данных, т.к. данные приходят либо за один раз, либо кусками... Это сообщение отредактировал(а) vlarry - 18.10.2013, 16:02 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
А не нужно ли, случаем, это устройство переводить в бинарный режим какой-нибудь АТ-командой ?
При работе с модемами, например, нужно. Почитай доку. Добавлено через 4 минуты и 23 секунды Это раз. Второе: QByteArray может содержать байт, равный нулю, а в QString такого быть не должно. Запиши в файл содержимой QByteArray'я и сравни с тем, что должно быть -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
o2n3e |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.8.2011 Репутация: -1 Всего: -5 |
Модератор: Сообщение скрыто. |
|||
|
||||
vlarry |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
переделал case SCRIPT_TERMINAL на следующее:
Записало в файл конец файла в размере 500 байт из 2Kб. Вообще эти конвертации с QString и QByteArray делаются только для того, чтобы можно было парсить принятые данные регулярками:
в ручную не хочется убирать эти заголовки. И еще вопрос: как избавиться от 4 лишних байт при считывании в QByteArray? |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
vlarry, во-первых, как ранее было указано, readAll() не прочтет тебе все данные. Он лишь прочтет то, что успело придти к этому моменту времени.
во-вторых, я бы не делал конвертацию к qstring здесь вообще. Как минимум, из-за того, что может придти следующий блок, в котором текста нет вообще. Я бы делал парсинг для того момента, когда ты УВЕРЕН что идут строки. Например, до последнего "OK". в-третьих, конвертацию из QByteArray лучше делать явно через fromLatin1(). Потому что конструктор делает предположение, что у тебя данные в utf8. |
|||
|
||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
Лучше тогда так fromUtf8() |
|||
|
||||
vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
так при считывании скрипта к нему добавляется в начало заголовок, н-р при считывании файла script.pyo добавляется следующее:
AT#RSCRIPT=script.pyo <<< вот поэтому я этот заголовок и удаляю...И все же как убрать 4 байта, который добавляет QByteArray? |
|||
|
||||
o2n3e |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.8.2011 Репутация: -1 Всего: -5 |
Модератор: Сообщение скрыто. |
|||
|
||||
vlarry |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 16.8.2009 Репутация: нет Всего: нет |
это не я создавал устройство, а его производитель...это модуль telit GE863-GPS. Так что я только в данном случае просто работаю с этим устройством. Когда я разрабатываю свое устройство, то я и пишу под себя протокол...а здесь приходится пользоваться тем, что есть.
|
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Эти четыре байта добавляет не QByteArray, а QDataStream. Реализуй запись без него. У QFile есть метод write, принимающий QByteArray. Кстати, и писанины будет меньше )) -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
o2n3e |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 19.8.2011 Репутация: -1 Всего: -5 |
Модератор: Сообщение скрыто. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |