OS/2 для буровиков.
Эта статья посвящена ещё одному практическому применению OS/2.
Немного истории.
Некогда я был привлечён к работам по созданию тренажёра-имитатора скважин для буровиков в одном из советских ещё КБ.Сначала была сделана версия под DOS, но спустя несколько лет требования заказчиков по обвешиванию тренажёра всякими финтифлюшками стали превышать возможности этой системы, и возникла необходимость поменять её на что-то такое же понятное, но гораздо более мощное и надёжное. Тут-то мне и удалось, наконец, перебраться на OS/2, о чём я начал мечтать ещё в 1987 году.
Работы шли медленно и со скрипом, но вот, наконец, первый экземпляр нового тренажёра, выполненного на и для OS/2 для обучения навыкам капитального ремонта скважин, был сдан заказчику (конечно, не полностью, но всё же).
Итак, о тренажёре-имитаторе.
Исходные требования к нему были такие:- настройка на любой (несильно шустрый) тип тренажёра - т.е. тренажёр чего угодно;
- настройка на конкретное оборудование (скважину);
- моделирование разных технологических процессов в рамках одного тренажёра;
- имитация используемого оборудования как с помощью аппаратных аналогов, так и с клавиатуры;
- сопровождение имитации цифрой, графиками, анимацией и звуком;
- ведение журнала обучения;
- чтобы было легко и понятно;
- чтобы было красиво и уело конкурентов :).
Первое требование было реализовано разработкой концепции имитатора как задачи, которая:
- что-то опрашивает, что-то считает, как-то оценивает и каким-то образом отображает.
- в конце работы где-то сохраняет результат.
- всё это с какой-то частотой.
На следующем уровне работает зависимый от типа тренажёра обработчик, который формирует кокретные входные параметры и выходные последовательности.
Затем расчитывается сама модель, и готовит данные для отображения своего состояния. Эти данные отображаются на экране и звуком. Все эти средства вызывает задача-имитатор, пользуясь унифицированным интерфейсом модели.
Следующие функции реализуют примерный интерфейс конкретной модели с абстрактным имитатором:
// инициализация модели int _Export _System InitModel(DST_STATE *); // проверка сценария на полноту int _Export _System TestScript(void); // передача имен используемых пультов подсистеме ввода-вывода int _Export _System SetPult(char **); // расчёт модели int _Export _System CalcModel(void); // подготовка параметров модели для отображения в цифровом виде int _Export _System MakeModelInfo(void); // анимация технологических процессов (большое окно) int _Export _System ViewModelLAnimation(void); // анимация технологических процессов (малое окно) int _Export _System ViewModelSAnimation(void); // завершение работы модели int _Export _System DestroyModel(void); // имя режима исполнения модели int _Export _System GetModeName(char *);Настройка имитатора на конкретный тип тренажёра и его технологическую модель производится в момент запуска путем передачи ему сценария учебного задания (начальных условий имитации). В этом сценарии содержится информация о типе тренажёра и о запускаемой модели.
На основе этого выбираются и подгружаются тренажёро-зависимые динамические библиотеки: реализация второго уровня подсистемы ввода-вывода, подсистема звукового сопровождения, сама модель, а также файлы конфигурации ввода-вывода и списка диагностируемых и имитируемых моделями нештатных ситуаций.
Для достижения неограниченной свободы настройки тренажёра и простоты работы с составляющими эту настройку элементами (оборудованием, инструментом и прочего) все они были реализованы как WPS-объекты, в свойствах которых записываются все учитываемые моделями тренажёра характеристики.
Пример страницы свойств объекта:
Для хранения полного описания настроек задачи имитации были созданы композитные WPS-объекты (сценарии обучающих задач), которые состоят из специализированного набора данных объектов оборудования и прочих параметров (для каждой задачи свой набор), характерных для каждого типа тренажёра. При его создании, характеристики оборудования и прочего вводятся методом drag'n'drop соответствующих WPS-объектов на страницы свойств объекта-сценария. Объект сценария также может быть кинут на принтер для печати своего содежимого.
Пример страницы свойств сценария:
Для ведения журнала обучения был создан объект обучаемого:
При натаскивании этого объекта (обучаемого) на объект принтера он печатает содержимое журнала обучения, а при натаскивании на него сценария он запускает задачу имитатора, передает ей все необходимые настройки и переходит в состояние ожидания завершения работы имитатора с помощью метода "мёртвая рука", т.е. раз в две секунды ожидает события на семафоре, которое имитатор регулярно посылает (если ещё жив). Все объекты (не только их - ещё sound mixer) разработал Greg. Спасибо ему.
Следующий рисунок даёт представление о всех объектах тренажёра и традиционности (для пользователей OS/2) методов работы с ними.
Вид экрана с открытыми папками всех WPS-объектов тренажёра
Возможность работы как с аппаратными, так и с программными пультами реализована на втором (тренажёрозависимом) уровне подсистемы ввода-вывода. Имитатор может подключить диалоговые аналоги аппаратных пультов, имена которых передаёт ему модель. Выбор между работой с аппаратурой или её имитацией производится либо по записанному в файле конфигурации признаку, либо с помощью специальной программы - редиректора.
Ведение журнала обучения обеспечивается унифицированной подсистемой сопровождения и имитации аварий, ресурсами которой пользуется модель и имитатор. В процесе выполнения задания она накапливает данные о замеченных нештатных ситуациях (вызванных неправильными действиями обучаемого, запрограммированными в сценарии или вызванными инструктором нарочно) и сбрасывает их в файл объекта обучаемого. На основе этих данных имитатор дает интегральную оценку выполнения обучаемым задания, которая записывается в EA (очень глюкавый момент, т.к. после определенного количества занятий начинает сбивать WPS, хотя до 64К размер вроде не доходит - может, кто подскажет, где копать?
Реализация остальных требований вроде понятна и не требует объяснений за исключением того, что почти весь дизайн - анимации и иконки - профессионально выполнил Виталий Власенко; спасибо ему.
Вид экрана во время работы имитатора:
Вот вроде и всё. Милости прошу слать замечания.
PS: Представляете, что бы можно было наворотить при наличии аппаратной
акселерации OpenGL под OS/2!
PPS: Когда будут доделаны все недоделки и, по возможности, подбраны все сопли - начну делать клиент-серверный вариант, для работы в IP сетях. Сервер на OS/2, естественно, клиенты на Java. Если, конечно, все мы четверо доживем. :)
Интересные ссылки:
Комментариев к странице: 0 | Добавить комментарий
Домой | Проект ядро Core/2 | Проект OS/4 Download | Новости | Гостевая книга | Подробно обо всем | Нужные программы | Проекты | OS/2 FAQ | Всячина | За и Против | Металлолом | #OS2Russian | RDM/2 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ