![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 24.03.2014
Сообщений: 4
|
![]()
Господа, стыдно признаваться, но я туплю. Лет десять ничего не кодил, а тут пришлось. Сижу, туплю. Итак, ситуация: имеем ком порт, с которого с интервалом 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. Пытаюсь сделать что-то типа: Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]() Код:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
![]()
а склеивать неполные пакеты?
восстанавливать стартовую позицию пакета в случае если программа запустилась на полпакете, или обрыв/восстановление ком шнурка? псевдокод Код:
Не стесняемся, плюсуем!
![]() Последний раз редактировалось Slym; 24.03.2014 в 16:26. |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
Для склейки у меня другой подход:
Код:
Цитата:
![]()
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 24.03.2014
Сообщений: 4
|
![]()
Огромное спасибо отписавшимся! Из ваших постов собрал солянку, все ок.
Вопрос теперь следующий. Собираемые данные - со знаком, а при такой сборке типа slovo1:= (buf[3] shl 8)+ buf[2]; Получаю беззнаковое значение. Еще раз прошу прощения за глупый вопрос, но как восстановить знак? |
![]() |
![]() |
![]() |
#6 | ||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]() Цитата:
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
||
![]() |
![]() |
![]() |
#7 |
Регистрация: 24.03.2014
Сообщений: 4
|
![]()
Все, разобрался. Объявил slovo как SmallInt. Всем огромное спасибо!
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
![]()
Тип SmallInt - 16 битное целое число со знаком. Поступив таким образом, вы теряете данные из 32-битного набора. Integer надоть, имхо.
Так как распределены данные внутри? Партизанен швайне яйке подвешен?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
![]() |
![]() |
![]() |
#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 |