Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  1 563

•  TDictionary Custom Sort  4 217

•  Fast Watermark Sources  3 891

•  3D Designer  6 010

•  Sik Screen Capture  4 160

•  Patch Maker  4 698

•  Айболит (remote control)  4 611

•  ListBox Drag & Drop  3 758

•  Доска для игры Реверси  89 847

•  Графические эффекты  4 948

•  Рисование по маске  3 965

•  Перетаскивание изображений  3 330

•  Canvas Drawing  3 638

•  Рисование Луны  3 431

•  Поворот изображения  2 934

•  Рисование стержней  2 600

•  Paint on Shape  1 990

•  Генератор кроссвордов  2 756

•  Головоломка Paletto  2 178

•  Теорема Монжа об окружностях  2 870

 

 

Архив исходников

   
  Базы данных
  Графика & Мультимедиа
  Сети & Интернет
  Система
  Разное
   

Ссылки и Баннеры ...

 

Delphi Sources

Delphi Sources

 




 

ИСХОДНИК ПРОГРАММЫ

 

. : Симулятор лифта : .

 

Delphi - Ручное управление до 6 лифтами, перемещающихся по 8 этажам

Исходник программы, показывающей пример создания программы ручного управления 6-ю лифтами, перемещающихся по 8 этажам.

Недавно я помог одной лифтовой компании преобразовать некоторые реальные процедуры управления лифтом, написанные на Basic, в Delphi. Само по себе это не было очень захватывающим, но все же привело меня к тому, что я наконец взялся за одну из программ в моем списке «жизненных целей» - симуляцию лифта.

Логика, необходимая для управления лифтами, сложнее, чем кажется на первый взгляд - особенно проблема вызова лифта, когда есть несколько лифтов на выбор. Стоит ли нам выбрать ближайший? Вероятно, нет, если он движется в направлении, противоположном направлению кнопки вызова. Что, если неработающий лифт находится на расстоянии одного этажа, но есть лифт, движущийся на два этажа выше, который все равно пройдет этот этаж? Для этой версии я отложил решение этих проблем и создал планировщик, который назначает первый (с наименьшим номером) неработающий лифт для вызовов этажей.

Каждый лифт представлен TElevator-потомком TThread. В каждом есть два массива с записями для каждого этажа; записи Stops относятся к типу TCallrec, записи, указывающей направление кнопки вызова (вверх, вниз или нет) и указатель на сам объект TCallBtn (чтобы мы могли блокировать кнопку, когда обрабатываем вызов). FloorBtns - это логический массив с истинными записями для каждой кнопки назначения, которая была нажата изнутри лифта.

В Threadstest1 метод Execute для каждого лифта приостанавливает его выполнение в режиме ожидания. В этом, вероятно, нет реальной пользы. Текущая реализация периодически (10 раз в секунду) проверяет массивы кнопок, чтобы определить, есть ли у нас ожидающие запросы, и никогда не приостанавливает свою работу.

Таймер Timer1 используется для вызова процедуры планировщика также 10 раз в секунду. Планировщик проверяет наличие ожидающих нажатий кнопок вызова лифта и назначает их массиву Stops неработающего лифта. Этот метод вместо того, чтобы отдавать ответственность за нажатие кнопки вызова, решает проблему того, что делать, если все лифты заняты.

Timer1 также отвечает за закрытие открытых дверей лифта после того, как они были открыты для DefaultDoorOpenTime (в настоящее время установлено на 5 секунд). Логично, что закрытие двери должно быть обязанностью лифта. Проблема в том, что обычная панель управления, ElPanel, используется для отображения внутренних кнопок лифта, когда пользователь нажимает на лифт, и всей этой логики; щелчок лифта, делающий панель управления видимой, и отслеживание того, какой лифт был нажат - все это известно форме, но не лифтам. Если ручное управление исчезнет в следующей версии, то необходимость во внешней панели управления исчезнет и задание на закрытие дверей будет перенесено обратно в лифт.

Просмотры: 1 782
Дата: 12.07.2021, Автор: Gary Darby
Скачивания: 17
Написать сообщение:

 

Скачать (12 Кб)     Регистрация >>


 

Похожие исходники


Indra (симулятор жидкости)

Симулятор дефрагментации

Симулятор движения молекул

Симулятор катапульты

 

Симулятор американских горок

 

© 2004-2024 "DS"

Соглашение пользователя / Реклама / Карта сайта             Created by BrokenByte Software