OS/2 для буровиков.


Иосиф Шраго

Эта статья посвящена ещё одному практическому применению OS/2.

Немного истории.

Некогда я был привлечён к работам по созданию тренажёра-имитатора скважин для буровиков в одном из советских ещё КБ.

Сначала была сделана версия под DOS, но спустя несколько лет требования заказчиков по обвешиванию тренажёра всякими финтифлюшками стали превышать возможности этой системы, и возникла необходимость поменять её на что-то такое же понятное, но гораздо более мощное и надёжное. Тут-то мне и удалось, наконец, перебраться на OS/2, о чём я начал мечтать ещё в 1987 году.

Работы шли медленно и со скрипом, но вот, наконец, первый экземпляр нового тренажёра, выполненного на и для OS/2 для обучения навыкам капитального ремонта скважин, был сдан заказчику (конечно, не полностью, но всё же).

Итак, о тренажёре-имитаторе.

Исходные требования к нему были такие: Разработка велась в среде Visual Age C++ 3.0, на С и С++. Он был выбран из уважение к Большому Голубому :) и за устойчивость при отладке многонитевидных приложений (в конкурсе ещё участвовали Borland и Watcom).

Первое требование было реализовано разработкой концепции имитатора как задачи, которая:

В результате на нижнем уровне двухуровневой системы ввода-вывода тренажёр ориентирован на работу через com-порты с контроллером аппаратуры по определённому, довольно гибкому протоколу.

На следующем уровне работает зависимый от типа тренажёра обработчик, который формирует кокретные входные параметры и выходные последовательности.

Затем расчитывается сама модель, и готовит данные для отображения своего состояния. Эти данные отображаются на экране и звуком. Все эти средства вызывает задача-имитатор, пользуясь унифицированным интерфейсом модели.

Следующие функции реализуют примерный интерфейс конкретной модели с абстрактным имитатором:

  // инициализация модели
  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 | Весёлые картинки | Наша галерея | Доска объявлений | Карта сайта | ПОИСК | ФОРУМ