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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация протокола 
:(
    Опции темы
RinOSpro
Дата 25.7.2008, 10:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В общем, есть устройство, и есть протокол к нему. И нужно его реализовать.
Устройство работает по принципу: 

«Устройство запрашивает у меня данные, я ему отвечаю «Получил твой пакет, сейчас отправлю данные», потом «Отправляю данные».
И наоборот.

Соединяюсь с устройством по COM порту.

В общем, какие будут советы? Кто сталкивался с реализацией протоколов? 
Как это лучше сделать? Может, какая литература есть?
Т.к. мой вопрос не конкретный, а абстрактный, поэтому и жду таких же ответов!
  Вверх
Alkash
Дата 25.7.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


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

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





--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Rennigth
Дата 25.7.2008, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



RinOSpro, хм... что-то уж очень абстрактно описал задачу...   smile 
Спецификация на девайс есть? От нее нужно и отталкиваться что, сколько и когда отправлять данных.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
RinOSpro
Дата 25.7.2008, 10:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Желательно на русском языке...
  Вверх
Alkash
Дата 25.7.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


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

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





--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
RinOSpro
Дата 25.7.2008, 10:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Alkash не то.

Ладно слегка конкретизирую...

С COM порта читаю данные. Кадр начитаются и заканчивается определенным байтом.

В пакетах содержаться какие то команды, размер пакета заранее тоже не известен.
И не известно что придет в этом пакете... Толи это будет опрашивающий пакет, толи пакет с командой.
Если с командой то нужно ответить что я ее получил. потом обработать и отправить ответ.


  Вверх
Alkash
Дата 25.7.2008, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


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

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



А в чём затруднения?



Это сообщение отредактировал(а) Alkash - 25.7.2008, 11:43


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
RinOSpro
Дата 25.7.2008, 11:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Alkash - ну раз тебе кажется все просто дай хотя бы пару советов!
  Вверх
Alkash
Дата 25.7.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


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

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



В какой области тебе нужны советы?  Как данные обработать?


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
RinOSpro
Дата 25.7.2008, 12:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Alkash @  25.7.2008,  12:06 Найти цитируемый пост)
Как данные обработать?


Угу. 
  Вверх
Alkash
Дата 25.7.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


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

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



По спецификации и смотри, как разобрать то, что пришло на порт. А как инфу с порта получить\отправить - глянь в ДКРБ


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Magik
Дата 25.7.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если применительно к существующим системам, то подобные протоколы применяются для передачи телеметрии. До конца прошлого века каждый производитель писал свой протокол. Где то с 1996 года и далее стали приходить к международным стандартам. Поэтому сейчас для передачи данных используют, наиболее часто, протоколы IEC 60870-5-101/104 (в обиходе МЕС101/104). Про них можешь читать из поисковиков. В общем, структура довольно сложная. Для передачи данных используется ЕХЕ-шник, который по запросу к базе данных формирует пакеты согласно протокола. Передача их в порты вывода зависит от назначения. МЕС101 - для RS232. МEC104 - для ETHERNET.
Думаю, конкретный код навряд ли здесь тебе сообщат. 
PM MAIL   Вверх
RinOSpro
Дата 25.7.2008, 17:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Magik ссылку не подкинешь, а то искал но про описание протокола, нашел только в википедии на англиском языке ((
  Вверх
Magik
Дата 25.7.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот можно почитать здесь: http://telemex.nm.ru/library_05.htm
Обобщённый стандарт на русском языке - ГОСТ Р МЭК 870-5-101 ,  ГОСТ Р МЭК 870-5-104. Они опираются на ранее принятые   ГОСТ Р МЭК 870-5-1(2,3,4,5)-95(96). 
У  программистов , владеющих технологией применения МЕС , это считается "высшим пилотажем".

PM MAIL   Вверх
RinOSpro
Дата 28.7.2008, 09:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Magik а средним пилотажем что считается?
  Вверх
Magik
Дата 28.7.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Думаю, что, если знать - что и почему в этих цифрах, за средний - с лихвой!
А в общем , это обмен (трасировка) по 101 протоколу, асинхронная, небалансная передача.
Пакеты постоянной (10), и переменной длины (68). Да это всё описано в ссылке, что я давал. Ну, а что внутри, тоже можно там же прочитать. Но эти вопросы для обсуждения не на этом форуме. Да и , думаю за эти посты модератор может дать по кумполу.
28-07 19:01:20.928 <10 5B 7E D9 16
28-07 19:01:21.021 >10 09 7E 87 16
28-07 19:01:41.178 <10 7B 7E F9 16
28-07 19:01:41.225 >68 26 26 68 08 7e  0d 86 01 7e e9 03 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 48 42 00  8e 16 
28-07 19:03:21.225 <10 09 7E 87 16 
PM MAIL   Вверх
Virtuals
Дата 28.7.2008, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 11



RinOSpro
отвечай на вопросы по пунктам;
.1.есть ли описание протокола?
.2.допускает ли канал связи потерю/искажение данных
.3. есть ли девайс работающий по данному протоколу?
.4.есть ли лог обмена девайса с чем либо по данному протоколу?

и подумаем как ковырять данное
PM MAIL ICQ   Вверх
Magik
Дата 29.7.2008, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Очень ценная статья есть здесь http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1126 с приложенным файлом. Лично мне очень нравится, и можно применять на прктике для тестирования каналов передачи данных с разными скоростями и паритетами. Протокол простой, но работает чётко. 
PM MAIL   Вверх
RinOSpro
Дата 29.7.2008, 08:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Virtuals Хорошо щас отвечу, но есть одно но! В общем такая ситуация протокол есть я даже могу посылать команды и принимать их. Но знаешь какая глобальная проблема?! как сделать качественную обработку.... Не то что тупо получил пакет сравнил с чем то и, отправил, нужно в реализация на высоком уровне... просто устройство сцуко умное... 

Кстати Magik тот лог что ты мне показываешь
Код

68 26 26 68 08 7e  0d 86 01 7e e9 03 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 00 00 80 00 00 48 42 00  8e 16 


Я уже такой реализовывал... это было довольно просто нежели сейчас... У предыдущего устройства протокол был 2 A4 )) и все нормально реализовал работает. а у нового протокол 150 A4 ((( и продвигаюсь как черепаха...


Virtuals 
1. Да 150 стр. англ. текста.
2. Да есть контроль правbльности пакетов достигается через CRC16
3. Да девайс есть и есть уже небольшие продвижения )
4. Лог обмена есть причем от родной программы этого девайа.

Вот не понимаю как в родной программе так все красиво и без глюков работает ) а у меня не получается ((
  Вверх
Virtuals
Дата 29.7.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 11



RinOSpro
ну так как мне нереально читать доки ваши то могу дать несколько советов, по крайне мере как я поступаю!

итак:
1. забудте что данные приходят пакетами кусками и т.д. представте что это непрерывный поток
2. нам нужно гдет хранить данные пока мы их полностью непримем, и не обработаем
3. для начала определимся что есть начало БЛОКА а что конец (именно набор условий)
(сдесь и далее буду приводить свой пример)
//набор спецификаций: 
блок начинается на 10 01 
кончается на 10 02
если в блоке встречается 10 то она меняется на 10 10
--
отсюда выводим правила
начало: 10 01 если перед ними нет нечетного количества десяток
конец: если было начало и если есть 10 02 и перед ними нет нечетного количества десяток

4 так научились выделять из потока нужные нам блоки, тепер структура обработки

процедура приема данных:
принимаем байты неважно как, и побайтово выкидываем в процедуру буфера
конец

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

процедура дешифровки:
анализируем буфер сначала и ищем начало блока (условия известны) если нашли то сдвигаем буферт так чтобы первым было начало буфера /10 01/ дыбы выкинуть мусор и взводим флак начала
если флаг начала анализируем буфер на предмет конца блока если ненашли то свалить
иначе из буфера выдераем весь БЛОК, что осталось смещаем на первую поз, сбрасываем флаги
а блок передаем в процедуру анализа
конец

процедура анализа
вот сюды и будут падть уже чистые блоки согласно вашим протоколам
осталось проверить контрольную сумму и если все пучком
то принять ответные действия

 smile 
ЗЫ удачи в этом нелегком деле

Это сообщение отредактировал(а) Virtuals - 29.7.2008, 12:22
PM MAIL ICQ   Вверх
RinOSpro
Дата 30.7.2008, 10:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Virtuals помоему это нереально сложно... 

Я так подумал, почитал и наверно буду делать в потоке через статусы... 

К примеру когда я отправил пакет ставлю статус скажем st_read_response, и в потоке смотрю если этот статус, то ждать ответа получил ли девайс мой пакет, устройство мне может вернуть или ошибку или данные, к примеру если ошибка, то заного ставлю статус который выполнит повторно эту команду, а если получил данные и CRC верно тогда ставлю статус st_write_response.

Примерно так... Как вам такая схема?
  Вверх
Virtuals
Дата 31.7.2008, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 11



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

Это сообщение отредактировал(а) Virtuals - 31.7.2008, 21:07
PM MAIL 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.

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


 




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


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

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