Автор Тема: Протокол передачи данных от Realtime в DTCIS  (Прочитано 3058 раз)

Оффлайн fed777dim

  • Старенький
  • **
  • Сообщений: 12
  • Карма: +0/-0
Здравствуйте, уважаемые участники форума.
Кто знает как выглядит протокол передачи данных по TCP от Realtime (Реальновременная обработка данных) к  RemoteView (Просмотр реальновременных данных по TCP) в DTCIS ? По такому же протоколу передается информация к подпрограмме DrillerBoard (Табло бурильщика).

Я разобрал 80% протокола, но никак не могу разобраться в первых передаваемых байтах, которые постоянно меняются (похоже на кодировку времени, но не факт).

Кто хочет разобраться и помочь, отзовитесь, пожалуйста!


Оффлайн 127486

  • Старожил
  • ****
  • Сообщений: 506
  • Карма: +34/-9
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #1 : 01 Декабрь 2014, 18:16:34 »
Если не изменяет память, то он гоняет данные по сокетам, почитай описание сервера кодов. Там описана технология обмена между приложениями.

Оффлайн fed777dim

  • Старенький
  • **
  • Сообщений: 12
  • Карма: +0/-0
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #2 : 01 Декабрь 2014, 19:33:05 »
Технология WinSock. Но меня интересует вопрос о протоколе, т.е. первые 4 байта в посылке - ...., следующие 6 байт - ..., и.т.д. Я знаю, где передаются данные по скважине, где передается время, где сами данные, но никак не получается разобрать первые байты посылки. В ASCI передается "blok", а далее постоянно меняющиеся 4 байта, которые не понятно что передают...

Оффлайн 127486

  • Старожил
  • ****
  • Сообщений: 506
  • Карма: +34/-9
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #3 : 01 Декабрь 2014, 19:37:03 »
Внешние программы реально-временного про-смотра и обработки данных
Это программы, которые не возвращают результатов. Такими программами являются про-граммы визуализации, печати и т.п.. Они присоединяются к REALTIME как DCOM-клиенты по интерфейсу IIMSViewService и получают события по интерфейсу IIMSEventService. Интерфейсы описаны в файле REALTIME.TLB.

IIMSViewService   {11A45860-0657-11D4-AF5F-0050DA79C21E}
IIMSEventService   {11A45869-0657-11D4-AF5F-0050DA79C21E}

При присоединении по интерфейсу IIMSViewService программа должна передать в REALTIME следующую информацию о себе с помощью метода IIMSViewService\ViewerInfo со следующими параметрами:
•   имя программы обработки;
•   сетевое имя компьютера, на котором работает программа;
•   адрес переменной, по которой будет возвращен результат выполнения.

Сервер интерфейса событий создается в клиенте, а в REALTIME пересылается указатель на него с помощью метода IIMSViewService\Advise. Для отсоединения сервера событий перед закрытием соединения вызовите метод IIMSViewService\Unadvise. По интерфейсу событий драйвер получает следующие события:
•   IIMSEventService\EvDisconnectAndTest «проверка соединения или просьба за-крыть соединение» - эти события отличаются по флагу TestSignal:
o   TRUE – сервер проверяет соединение, нужно только вернуть OK.
o   FALSE – сервер просит закрыть соединение, так как он завершает выполне-ние. Рекомендуем восстанавливать соединение не менее чем через 30 се-кунд, так как возможно пользователь перезагружает компьютер.
•   IIMSEventService\EvNewDataReady «событие прихода новых данных» - это со-бытие отсылается при окончании обработки новых данных.
•   IIMSEventService\EvAutoSendData «событие автоматической отсылки данных клиенту» - это событие генерируется, если клиент заказал прием данных в автома-тическом режиме. По этому событию сервер отсылает новые данные по предвари-тельно заказанному списку параметров клиенту. Таким образом нет необходимости постоянно опрашивать сервер на наличие новых данных.

Клиент в любое время при наличии связи с REALTIME может изменять или устанавли-вать режим передачи данных с помощью метода IIMSViewService\SetModes, имеющего следующие параметры:
•   OnlyModified – флаг передачи только изменившихся значений. Включенный флаг уменьшает загрузку трафика сети и времени на передачу данных.
•   UseAutoSend – флаг автоматической передачи новых данных. При включенном флаге REALTIME автоматически отсылает новые данные клиенту, то есть клиент работает по событиям, не тратя времени на постоянный или периодический опрос REALTIME об изменении данных. Этот флаг работает только при наличии сервера событий IIMSEventService в клиенте.

Запрашивать данные REALTIME можно 2-мя способами:
•   Прием данных по передаваемому списку параметров с помощью метода IIMSViewService\GetDataByList . В параметрах передаются:
o   ListItems – массив кодов заказываемых параметров. Это значение типа VARIANT, содержащий в себе массив кодов параметров из справочника DTCIS.
o   DataArray – ссылка на значение типа VARIANT, в который будут записаны значения заказанных параметров в формате, описанном выше.
o   ResultFlag – флаг выполнения операции.
•   Прием данных по заказанному списку параметров. Для этого используются сле-дующие методы:
o   IIMSViewService\ClearList – очистить список заказываемых параметров в сервере;
o   IIMSViewService\SetListItems – добавить параметры в список заказывае-мых параметров;
o   IIMSViewService\GetListData – запрос данных по заказанному списку.
Оба способа не исключают друг друга, то есть при необходимости вы можете переклю-чаться между ними в вашем приложении, при этом список заказываемых параметров не будет изменен.

Передача данных клиентам осуществляется в виде значения типа VARIANT. В это значе-ние записан массив заказанных параметров. Каждый параметр представлен в виде массива 3-х чисел: код параметра, код единицы измерения, значение. Кодировка пара-метров в соответствии со справочником DTCIS. Для примера приводим код распаковки одного элемента массива присланных данных, написанный в среде C++Builder

bool GetDataItem(Variant Data, SPVServiceDataItem *DataItem)
{
    try {
        // инициализация
        ZeroMemory(DataItem, sizeof(SPVServiceDataItem));
        // распаковать код параметра
        DataItem->Code = int(Data.GetElement(1));
        // распаковать код единицы измерения
        DataItem->UnitCode = int(Data.GetElement(2));
        // распаковать значение параметра
        DataItem->Value = Data.GetElement(3);
        return true;
        }
    catch(...)
        {
        return false;
        }
}

Оффлайн fed777dim

  • Старенький
  • **
  • Сообщений: 12
  • Карма: +0/-0
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #4 : 01 Декабрь 2014, 20:24:28 »
Этот документ у меня есть, но я к сожалению еще не разбирался с технологией DCOM. Не совсем понимаю как это все реализовать на c# (я на нем пишу), но думаю все же придется. Я же спрашивал про связь клиентов с Realtime по TCP, это альтернатива DCOM. Про DCOM в c# маловато информации в инете.

Оффлайн 127486

  • Старожил
  • ****
  • Сообщений: 506
  • Карма: +34/-9
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #5 : 03 Декабрь 2014, 13:42:54 »
А порт пробовал слушать?

Оффлайн fed777dim

  • Старенький
  • **
  • Сообщений: 12
  • Карма: +0/-0
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #6 : 03 Декабрь 2014, 15:25:39 »
Да, слушал программой CommView. Пример перехвата приложил.
Мне не понятны несколько байт вначале посылки.

Оффлайн fed777dim

  • Старенький
  • **
  • Сообщений: 12
  • Карма: +0/-0
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #7 : 03 Декабрь 2014, 15:40:58 »
Сервер кодов прослушивал тоже этой прогой. Но тут все просто. Вот пример:

Оффлайн 127486

  • Старожил
  • ****
  • Сообщений: 506
  • Карма: +34/-9
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #8 : 03 Декабрь 2014, 16:43:42 »
"прослушка.txt" не ясно направление данных.
Сделай 2 файла, отдельный для каждого приложения.

Оффлайн 127486

  • Старожил
  • ****
  • Сообщений: 506
  • Карма: +34/-9
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #9 : 03 Декабрь 2014, 16:44:47 »
Потомучто может это контрольная сумма, но обычно она последними байтами лежит.
А номер записи и текущее время нашел?

Оффлайн fed777dim

  • Старенький
  • **
  • Сообщений: 12
  • Карма: +0/-0
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #10 : 03 Декабрь 2014, 19:16:56 »
Вот разобранный мной протокол с пояснениями.

Оффлайн 127486

  • Старожил
  • ****
  • Сообщений: 506
  • Карма: +34/-9
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #11 : 03 Декабрь 2014, 19:52:13 »
Хорошая работа проведена.
А в настройках клиентов как настроено, принимать только измененные значения или есть период опроса?
И не плохо было бы для более подробного изучения (неизвестные постоянно меняющиеся значения), проанализировать их в формате dec, учитывать при этом что они могут быть перевернуты.
Неоднократно такой прием выручал при разборе протоколов.
 

Оффлайн fed777dim

  • Старенький
  • **
  • Сообщений: 12
  • Карма: +0/-0
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #12 : 03 Декабрь 2014, 20:57:07 »
Анализ протокола для DrillerBoard. Брал 4 байта, которые меняются. Настройки Driller Board в том же документе.

Оффлайн 127486

  • Старожил
  • ****
  • Сообщений: 506
  • Карма: +34/-9
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #13 : 04 Декабрь 2014, 13:32:08 »
Ну вот уже теплее.
Обрати внимание что первые 2 байта перевернутые, в реальности мы получаем либо одно либо 2 dec, число идет на увеличение, вероятно там содержится информация о номере либо количеству данных.
Маловероятно что это КС, но проверить стоит.

Оффлайн 127486

  • Старожил
  • ****
  • Сообщений: 506
  • Карма: +34/-9
Re: Протокол передачи данных от Realtime в DTCIS
« Ответ #14 : 04 Декабрь 2014, 13:51:47 »
А с какой целью разбираешь протокол?
Если просто для приема/передачи данных, то есть много других более практичных инструментов для этого.

 



Покер онлайн