Любой, кто сталкивался в своей работе со SCADA-системой SIMATIC WinCC, открывал или запускал на исполнение проекты WinCC. При этом мало кто обращал внимание на проектный файл имеющий расширение .mcp. Тем не менее, при более детальном изучении из него можно извлечь некоторую интересную информацию.
Цель этой статьи – познакомиться с внутренним устройством проектного файла SCADA-системыSIMATIC WinCC (далее просто WinCC). Знание внутреннего устройства проектного файла WinCC может очень пригодится, если встанет вопрос автоматизации разворачивания проекта WinCC, что собственно и послужило поводом для исследования данного вопроса.
Структурированное хранилище
Файл проекта WinCC, имеющий расширение .mcp, представляет собой структурированное хранилище (Structured Storage) или по-другому составной файл. Что такое структурированное хранилище? Если одним предложением - это файловая система внутри файла. Для примера на рис. 1 показан проектный файл WinCC:
В отличие от обычной файловой структуры, где используются термины директория и файл, в файле структурированного хранилища используется соответственно термины хранилище (Storage) и поток (Stream). Если посмотреть на рис. 1, то BAXAN – это директория (хранилище), а ProjectSettings – это файл (поток).
Кстати, такие файлы как документ Microsoft Word и таблица Microsoft Excel, также являются файлами структурированного хранилища (составными файлами).
Те, кого интересует более подробная информация по этому вопросу, могут обратиться к таким источникам, как Structured Storage (MSDN), Структурированное хранилище (Первые шаги), или же самостоятельно найти нужную информацию на просторах сети Интернет.
Инструменты для исследования структурированного хранилища
В свое время, когда я только начал заниматься исследованием проектного файла WinCC, в моем арсенале было несколько утилит, которые позволяли просмотреть содержимое файла структурированного хранилища. Сейчас, когда я пишу эту статью, мне стало интересно, а что еще появилось по этому вопросу, и к своему удовольствию, я нашел еще одну утилиту. В итоге, на текущий момент мне известно 3 утилиты для просмотра содержимого файлов структурированного хранилища. Для начала я их коротко рассмотрю:
- DocFileViewer – эта утилита, входящая в состав инструментов Microsoft Visual Studio 6.0, может только просматривать любые файлы структурированных хранилищ, а не только документы, как это может показаться из ее названия. На текущий момент актуальна версия 2.0;
- CompoundFK – полноценная утилита для работы с файлами структурированных хранилищ. Утилита позволяет не только просматривать, но редактировать и создавать новые файлы структурированных хранилищ. Собственно эта утилита и помогла мне в свое время изучить проектный файл WinCC. В настоящее время актуальной является версия 2.0;
- StructuredStorageViewer (SSViewer) – эта утилита является наиболее функциональной, так как помимо возможностей предоставленных утилитой CompoundFK, она позволяет просматривать потоки в разных представлениях. Например, в шестнадцатеричном виде, в виде текста, в виде картинки, в виде RTFили как HTML файл. Утилита также поддерживает возможность использования дополнительных плагинов для кодирования/декодирования потоков и многооконный режим работы. В настоящее время актуальной является версия 3.3.
Надо сказать, что самой интересной и удобной для меня оказалась утилита SSViewer, собственно с ее помощью я и проводил исследования проектных файлов WinCC.
Внутреннее устройство проектного файла WinCC
В проводимом мной исследовании участвовали проектные файлы практически всех версий WinCC: WinCC 4.02, WinCC 5.1, WinCC 6.0 SP4, WinCC 6.2 и WinCC 7.0 SP2. Забегая вперед, скажу, что от версии к версии WinCCпроектный файл изменяется и поэтому информация о внутренней структуре приведена для каждой перечисленной версии. Но, не смотря на это, общая внутренняя структура проектного файла сохраняется.
Итак, что мне удалось выяснить на первом этапе (см. рис. 1):
- BAXAN – это хранилище, имеющее в качестве своего названия имя компьютера, на котором работал или был создан проект WinCC. Таким образом, открыв любой проектный файл с помощью одной из выше описанных утилит, можно узнать имя этого компьютера, что уже является полезной информацией. Наблюдение: во всех проектах созданных выше по тексту, хранилище остается пустым. Назначение и цели его в проектном файле WinCC еще предстоит узнать;
- ProjectSettings – поток, название которого говорит само за себя (буквально – настройки проекта), хранит в себе в двоичном виде общие настройки проекта WinCC. Собственно, этот поток в проектных файлах WinCC разных версий и отличается своей структурой.
На следующем этапе я изучил потоки ProjectSettings для всех перечисленных ниже версий WinCC. Чтобы условия создания проектов для исследования были одинаковые, я выполнял следующие действия:
- Создаю новый проект с именем PrjWinCCVer в соответствующей версии WinCC (выбираю всегда тип проекта Single User System), где в имени проекта Ver – это версия WinCC без точек;
- Закрываю проект, ничего не делая после окончания его создания;
- Открываю файл PrjWinCCVer.MCP в SSViewer, выделяю поток ProjectSettings для просмотра его содержимого в шестнадцатеричном виде;
- Делаю скриншот и далее привожу таблицу с описанием полей двоичной структуры потока, которые мне удалось расшифровать или понять их смысл.
Таким образом, я сделал 5 скриншотов и 5 таблиц для каждого проектного файла соответствующей версии WinCC, которые и привожу ниже.