Pull to refresh

Исследование формата истории скада-системы IFix

Исследование формата истории скада-системы IFix



Приветствую пользователей Хабры

Вступление


Вот решил написать свой первый пост. Работаю я на крупнейшем в регионе энергетическом предприятии.
В сферу моей трудовой деятельности входит сопровождение скада системы IFix. Ну там скриптики подправить, картинку отредактировать и т.п.
Заострять внимание на особенностях Ifix я не буду — в интернете море информации по данной теме. Ссылка на русскоязычный сайт посвященный ifix www.ge-ip.com/ru/ifix_features
В один прекрасный момент у нас на предприятии проводили тесты котельного оборудования — от нас требовалось предоставить графики по основным параметрам.
Остановимся на системе сбора данных скада-системы поподробнее:
Для сбора информации у нас используются тренды истории. Не буду грузить Вас техническими подробностями, в двух словах:
выбираются нужные точки, интервал опроса, зона нечувствительности и на выходе получаем файл — за 4, 8 или 24 часа.

После проведения испытаний выяснилась неприятная вещь связанная с масштабирование графиков — проблема решили с помощью ms exсel, но как говорится осадок остался.

Начало


Было принято решение разбирать формат хранения истории. На тот момент опыта исследования форматов я не имел, но немного занимался реверс-инжинерингом ПО.
Первым делом я соорудил небольшой проект — он состоял из таймера, который последовательно записывал значения в 3 точки:
1, 2, 3…
10, 20, 30…
50, 100, 150…

Точки были добавлены в назначение истории и сконфигурирован просмотр трендов истории.
Необходимо так же отметить структуру хранения трендов — можно создать до 255 узлов, можно выбрать интервал сбора данный 4, 8 и 24 часа.
Группа может содержать до 255 точек. Можно выбрать период сбора данных — от 1 секунды до 30 минут.

Инструменты


Утилиту я решил писать на Delphi — использовал Delphi 7, так же необходим hex-редактор — выбор пал на WinHex.
Напомню, что у меня в проекте был один узел, содержащий три тега.

Запустил скаду, подождал некоторое время и получил файл 12070400.h24.

image

Загрузил файл h24 в WinHex и начал искать что-либо вразумительное. В первую очередь в глаза бросается имя группы и тегов.
Смещение имя группы — 40, смещение первого тега 160, промежуток между именами тегов — 74 байта.
Разбираемся далее — получаю с рабочего места машиниста «боевой» файл истории — и получаем следующее — смещение 1-го узла 40, смещение 2-го узла — 6100,
смещение 3-го узла — 12160, 4-го — 18220. Ладно пока берем за константу — 6060.
Особо останавливаться на именах узлов и тегах я не хочу — лучше возьмемся собственно за сам формат хранения данных.
В формате хранения меня интересовало значение, время и привязка к тегу. Возвращаемся к hex-редактору:
Для начала переводим отображение в двоичный вид (alt+F7 — в winhex)

Время


Первым делом я обратил внимание на повторяющиеся строчки

image

Пошел на обум — взял число C6EA — перевел в десятичный вид (незабываем перевернуть число перед этим) — получилось 60102, поделил его на 3600 — получил 16,695.
Время запуска скады — 16:40, ну ладно будем считать что время мы получили.

Значение


Вот со значением было немного посложнее — под подозрение попали следующие строчки

image

Если честно долго не мог вкурить что-же это за формат — меняю байтик — число улетает в миллионы(
В общем на одном форуме мне подсказали — это четырехбайтное значение с плавающей точкой.

Вообщем все составляющие есть — началось самое приятное — пишем код.

Грабли


Ну вот код написан, и вроде работает
1. Перво-наперво я напоролся на долгую работу утилиты — вывод параметра за сутки занимало порядка часа (я просто считывал с файла нужные байты)
Было принято решение переделать все через MemoryStream — и ура разбор показаний занимает теперь минуты и секунды!
2. Время отображалось до 18 часов — изначально я считал за время двухбайтовое значение, а оказалось нужно брать 3 байта.
3. У нас на предприятии в историю пишется порядка 200 тегов — взяв с рабочей машина файл я выяснил что периодически вылазят какие-то левые значения…
Хотя тестовый файл обрабатывается корректно.
Ну что ж возвращаемся к редактору…
В процессе мозгового штурма выяснилось следующее

image

То есть при изменение какого либо тега, программа пишет время, номер группы, количество измененных тегов в группе и собственно измененные значения.

Саму программу Вы можете найти по адресу — www.dimassoft2000.narod.ru/h24.htm

Заключение


Вообще к чему была написана данная статья? Когда я только начал разбор формата у меня не было точной уверенности что я смогу разобрать его до конца — но
к счастью я не бросил это дело и довел все-таки до конца. Конечно в программе имеются недоработки, вбито несколько костылей.
Но этот разбор принес мне много експириенса и показал на моем примере что реально не имея опыта разобрать формат довольно таки серьезной программы.
Так что я думаю не стоит опускать руки раньше времени и все у Вас получится!
Сразу извиняюсь за стиль написания — в голове все у меня крутится красиво, но как доходит до воплощения в текст то получается сами видите что ;-)
За картинки тоже просьба не бить — художник из меня никакой.

Спасибо за интерес, надеюсь до новых встреч!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.