Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с Сom-портом, получить данные 
:(
    Опции темы
Kirill_Arbuzov
Дата 11.11.2005, 12:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нужно получить несколько пакетов информации с компорта и загнать их (пакеты) в массив для дальнейшей обработки. Данные поступают каждую секунду. Можно ли разбить полученную информацию на пакеты без ввода идентификаторов начала и конца пакета. Длинна пакета фиксирована. Помогите плиз!
  Вверх
_hunter
Дата 11.11.2005, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



порт понятия не имеет о твоих пакетах. он передает информацию -- ты ее парсиш. все.
как работать с портом:
http://forum.vingrad.ru/index.php?showtopic=68604


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Kirill_Arbuzov
Дата 11.11.2005, 13:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











да дело в том, что нужно отсеять данные полученные ранее, и работать только с теми, что пришли в это время
  Вверх
_hunter
Дата 11.11.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



как я поинмаю, полученные данные ты куда-то сохраняеш. что мешает при получении новых удалить старые?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Kirill_Arbuzov
Дата 11.11.2005, 14:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











_hunter
вот это правильно, а как это сделать? Просто очистить буфер порта? PurgeComm после обработки полученных?
  Вверх
Guest
Дата 11.11.2005, 15:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











_hunter
кстати, почему-то ссылка твоя не работает... Осел вылетает smile
  Вверх
Rennigth
Дата 11.11.2005, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



Цитата(Guest @ 11.11.2005, 15:00)
кстати, почему-то ссылка твоя не работает... Осел вылетает 

Осел болеет значит, ссылка рабочая.



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
_hunter
Дата 11.11.2005, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



при чем тут буффер порта? он старые данные не хранит...
по поводу ссылки: хз


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Cashey
Дата 11.11.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: нет
Всего: 60



Есть механизм переброски данных их COM-порта в буфер клавиатуры, может это то, что надо?


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Kirill_Arbuzov
Дата 11.11.2005, 16:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











дело в том что мне нужно следить за состоянием датчиков, установленных на конвеерах. сигналы поступают на компорт. Мне нужно отслеживать состояние устройств, и в случае поломки сообщить об этом пользователю. Но бывает (очень часто на практике) что данные об устройстве приходят искаженными, а сам конвеер работает. Поэтому необходимо вводить таймер, который сравнивает полученное ранее значение с тем, которое пришло. Если они содержат одинаковую ошибку, то только в этом случае пользователь получит уведомление. Проблема в том, что полученными данными нужно забить в массив, а вот с этим-то и проблема - данные полученные в разное время (100 мсек разницы) распознаются как одно целое

  Вверх
~FoX~
Дата 11.11.2005, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 0
Всего: 68



Kirill_Arbuzov ну если
Цитата(Kirill_Arbuzov @ 11.11.2005, 13:34)
Длинна пакета фиксирована
, то и обрабатывай поток кусками размером именно этой длинны....

А так нельзя?
Идет поток "нормальных" данных......И вдруг "бах", пришол "кривой" пакет....Запомнили время и взвели таймер, скажем на 300 мсек....
Идет еще "кривой пакет" - проверили естаймер <300 и кривизна второго пакета ~ кривезне первого, то кричим что все плохо....
Если же дальше пакеты ровные идут, то таймер дойдя до конца останавливается и ждет следующего пакета.
Если кривизна пакетов разная, то надо взводить еще один таймер и проверять уже их состояние
И ни каких массивов. smile
Или может я не все понял?


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
_hunter
Дата 11.11.2005, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



распознаются кем? и по какому принципу?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Kirill_Arbuzov
Дата 11.11.2005, 16:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











_hunter
~FoX~


Приходит ко мне пакет от конвеера №1, например он равен "111" (правильный), затем приходит пакет "222" от второго конвеера....


я юзаю компоненту com32. Там есть событие прихода в порт данных - смотрю данные - "111222 ...." то есть событие возникает не по приходу первого пакета "111". Компонента говорит типа эти данные пришли одновременно. В этом и вся беда.
  Вверх
YurikGL
Дата 11.11.2005, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
я юзаю компоненту com32.

Ну я ее тоже юзаю...

Цитата
Там есть событие прихода в порт данных - смотрю данные - "111222 ...." то есть событие возникает не по приходу первого пакета "111". Компонента говорит типа эти данные пришли одновременно.


Вопрос первый, у тебя там rs-232 или rs-422 (или 485-й) который шинный? Если у тебя интерфейс один и он RS-232, значит, реально у тебя приходит с одного устройства.
Идем далее...
Пакеты ж предполагалось как-то различать? Либо у них фиксированная длина, либо есть признак начала/конца. Хотя фиксированная длина - частный случай, когда есть признак конца пакета (длина пакета превысила N значит это уже следующий пакет).

Я делал так:
Создаю буферную строку.
Принимаю символ. Добавляю его к буферной строке.
Если этот символ - не является конечным символом пакета, то считываем следующий символ-добавляем к буферной строке и т.д.
Если символ является концом пакета, то вызываем процедуру обработки пакета в целом и в качестве ее параметра используем нашу буферную строку. Эта процедура (лучше ее выделить в отдельный поток), когда заканчивает работу, буферную строку сама уничтожает. А основная процедура создает новую буферную строку и все заново...

Если скорости порта низкие, а обработка простая, то можно обходится одной буферной строкой не уничтожая и не создавая ее вновь. Но нужно быть уверенным, что процедура обработки пакета завершится до того, как переполнится буфер порта.

--------------------
 
PM MAIL WWW ICQ   Вверх
Kirill_Arbuzov
Дата 11.11.2005, 17:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











YurikGL
у меня rs-232 датчики подключены к преобразователю, он отцифровывает сигнал и передает в ком порт. А как ты приход одного символа как получаешь?

[quote] Я делал так:
Создаю буферную строку.
Принимаю символ. Добавляю его к буферной строке.


----

Компонента ж возвращает целый полученый кусок!



  Вверх
YurikGL
Дата 12.11.2005, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
А как ты приход одного символа как получаешь?


Цитата
Там есть событие прихода в порт данных - смотрю данные - "111222 ...."

Посимвольно разбираю...
Кончилась строка ну и фиг с ней....
Когда придет следующая, начало текущего пакета останется в буферной строке...
Буферная строка - глобальная переменная...

--------------------
 
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.