Название: Прием данных из COM порта в коде МТК Отправлено: VAP от Сентябрь 26, 2008, 22:54 Доброго времени суток всем!
Использую qextserialport -1.0 Устанавливаю настройки порта: Baud110; DataBitsType = DATA_5; ParityType=No; StopBitsType=1,5; FlowType=No Код чтения данных в потоке: Код: void ThreadPort::run() А вот дальше вопрос, как декодировать прочтенные данные: Кроме чтения данных из порта нужно еще и передавать их в порт, также в коде МТК. Если кто-то сталкивался с этим, прошу совета. Название: Re: Прием данных из COM порта в коде МТК Отправлено: pastor от Сентябрь 28, 2008, 14:51 Что такое МТК? Международный телеграфный код?
Название: Re: Прием данных из COM порта в коде МТК Отправлено: VAP от Сентябрь 28, 2008, 15:46 Совершенно верно телеграграфный код старт-стоповый с 5 битами данных. Идет посимвольная передача данных и каждый символ состоит из 5 бит (например 11000 - ''А") , но русский и латинский шрифты меняются через символ смены регистра РУС на ЛАТ, третий ЦИФ.
Название: Re: Прием данных из COM порта в коде МТК Отправлено: pastor от Сентябрь 28, 2008, 16:20 Цитировать А вот дальше вопрос, как декодировать прочтенные данные. Дикодировать можно при помощи таблицы: http://www.cultinfo.ru/fulltext/1/001/009/001/226353127.jpg http://ru.wikipedia.org/wiki/МТК-2 Читам из порта (буффера) код и анализируем что мы получаем (согласно таблице кодов). Для кодирования также пользуемся таблицей: берем симбол, поучаем код и пишем в порт. имхо алгоритм простой. Или у вас возникают проблемы в чем-то другом? Название: Re: Прием данных из COM порта в коде МТК Отправлено: VAP от Сентябрь 28, 2008, 16:44 Ничего другое не придумал, кроме как читать как-то вот так:
(для quint8 ch из кода выше) if (ch == 0x18) str += "А"; и т.д. Но так не получится, потому приводя к виду QString нужно иметь 32 бита? Название: Re: Прием данных из COM порта в коде МТК Отправлено: Racheengel от Сентябрь 28, 2008, 16:48 А можно более конкретно описать проблему?
Как я понял, получили массив байт, а дальше с помощью сдвигов и лог.операций читаем по 5 бит и декодируем... В чем сложность? Или Вам нужен алгоритм чтения по 5 бит? Название: Re: Прием данных из COM порта в коде МТК Отправлено: VAP от Сентябрь 28, 2008, 16:58 Именно это и нужно, чтение 5 бит, и приводить согласно таблицы кодировок к классу QString для вывода в QTextEdit.
Название: Re: Прием данных из COM порта в коде МТК Отправлено: pastor от Сентябрь 28, 2008, 17:06 Ничего другое не придумал, кроме как читать как-то вот так: (для quint8 ch из кода выше) if (ch == 0x18) str += "А"; и т.д. Учитывая что таблица кодов - это константа, в программе можно объявить в виде QMap для декодирования: QMap<quint8, QString> decodeTable; т.е. получится т.н. таблица соответствий. Использование: Цитировать //init decodeTable ... QString str; ..... str += decodeTable.value(ch); ... Название: Re: Прием данных из COM порта в коде МТК Отправлено: pastor от Сентябрь 28, 2008, 17:13 Именно это и нужно, чтение 5 бит А как передаються данные с другого конца линии? Есть какой либо протокол передачи? Какой размер пакета? Название: Re: Прием данных из COM порта в коде МТК Отправлено: VAP от Сентябрь 28, 2008, 17:26 Спасибо Pastor за хороший совет, обязательно испробую, в домашних условиях невозможно проверить.
скорость телеграфирования 100 бод, синхронизация знаков стартстопная, длина пакетов постоянная: есть подводный камень со стартовым битом. Когда буду видеть, что принимаю, тогда будет больше ясности. Название: Re: Прием данных из COM порта в коде МТК Отправлено: Вячеслав от Октябрь 31, 2008, 22:18 а нескромный вопрос - к _чему_ присобачен этот ком ? Я как-то имел дело с телекс-модемами - но ..
1) там была сначала бааальшая банудра (Урал ??? ) которая преобразовывала прямой хвост с телеграфа к чему-то что жрал модем ... 2) сам модем (если не ошибаюсь альфа-телекс) - работал с рс на стандарных скоростях 19200 и 9600 8N1 и мог работать с пакетной и прямой передачей ..... (и он уже перекидывал мтк в ascii) 3) Насколько мне помниться в тех таблицах что я видел в доке к мудему( и брал на телеграфе) , когда этим интересовался были еще команды смены регистра ... таки IMHO прямая перекодировка не пойдет ... 4) а точно 100 бод а не 55 ? |