|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.03.2014, 13:05 | #1 |
Регистрация: 24.03.2014
Сообщений: 4
|
Дикий тупняк - чтение данных с com порта.
Господа, стыдно признаваться, но я туплю. Лет десять ничего не кодил, а тут пришлось. Сижу, туплю. Итак, ситуация: имеем ком порт, с которого с интервалом 30 мс приходит следующая инфа: два стартовых байта 'SS' следом 12 байт чисел (на самом деле шесть чисел типа int16_t) и заканчивается двумя байтами 'PP'.
В терминале это выгляди примерно так: ------------------------- SS Иoэ2Шс8PPSSъю,ьс*8°PPSS wю» rрс@8јPPSSэE Њ {°сМ9TP PSSэЎ Ј†Мрё7фPPSS† ¬ јрш8ђPPSSэШ $ Ќ°ра8hPPSSюц р =рИ8 PPSSюјюS н`сD8ЬPPSSю EюKћарш7ьPPSSЪюm .р°8xPPSSюEэюи4р¬8ёPPSS эювЂсЂ84PPSSэ¤ыд C*с$9ШPPSSэ ъґXр47PPSSьюАр*7АPPSSъщ Ѓ ќмпш7дPP ------------------------- Мне необходимо считать эти 12 байт. Делфи совсем забыл, сижу туплю. Стоит компонент ComPort Library. Пытаюсь сделать что-то типа: Код:
|
24.03.2014, 13:40 | #2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Код:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
24.03.2014, 16:19 | #3 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
а склеивать неполные пакеты?
восстанавливать стартовую позицию пакета в случае если программа запустилась на полпакете, или обрыв/восстановление ком шнурка? псевдокод Код:
Не стесняемся, плюсуем!
Последний раз редактировалось Slym; 24.03.2014 в 16:26. |
24.03.2014, 16:47 | #4 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Для склейки у меня другой подход:
Код:
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
26.03.2014, 15:00 | #5 |
Регистрация: 24.03.2014
Сообщений: 4
|
Огромное спасибо отписавшимся! Из ваших постов собрал солянку, все ок.
Вопрос теперь следующий. Собираемые данные - со знаком, а при такой сборке типа slovo1:= (buf[3] shl 8)+ buf[2]; Получаю беззнаковое значение. Еще раз прошу прощения за глупый вопрос, но как восстановить знак? |
26.03.2014, 15:10 | #6 | ||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Цитата:
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
||
26.03.2014, 15:13 | #7 |
Регистрация: 24.03.2014
Сообщений: 4
|
Все, разобрался. Объявил slovo как SmallInt. Всем огромное спасибо!
|
26.03.2014, 15:15 | #8 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Тип SmallInt - 16 битное целое число со знаком. Поступив таким образом, вы теряете данные из 32-битного набора. Integer надоть, имхо.
Так как распределены данные внутри? Партизанен швайне яйке подвешен?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
26.03.2014, 15:39 | #9 |
Регистрация: 24.03.2014
Сообщений: 4
|
Мои int16_t - это 16-битное со знаком. Разбивка происходит в контроллере:
highByte=(char)(data>>8); lowByte=(char)(data); Передача в порядке: сначала старший байт, потом младший. Собрал в обратном порядке: slovo:=(highByte shl 8) + lowByte; где slovo - SmallInt. Просто взял из справочника тип 16-бит со знаком. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чтение COM порта | vovken1997 | Общие вопросы Delphi | 13 | 25.05.2020 16:44 |
Чтение com-порта на java | danyamaster | Фриланс | 3 | 15.02.2013 14:09 |
Чтение с COM-порта через HyperTerminal | rashid1988 | Общие вопросы Delphi | 9 | 20.04.2012 09:56 |
Чтение данных с COM порта 232 | Dimitr_88 | Общие вопросы C/C++ | 10 | 03.09.2010 10:39 |
чтение с COM-порта в отдельном потоке не получается | lexluter1988 | Общие вопросы .NET | 2 | 25.05.2010 20:40 |