Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Теория параллелизма. Самостоятельные работы. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
986 Кб
Скачать

со счетчиком, чтобы не превышалось максимальное количество автомобилей на стоянке.

17. Пешеходный переход по требованию

Два светофора на четырёхполосной дороге с кнопкой для пешеходов. В часы пик кнопка не действует, а светофор работает в обычном режиме.

18. Система забора образцов марсианского грунта

Марсоход один раз в сутки (в полдень) перемещается и каждые 100 метров осуществляет забор грунта, пока не наполнит все доступные ёмкости.

19. Пожарная сигнализация

Подаётся звуковой сигнал, когда есть дым, пламя, нажата тревожная кнопка. После этого включается система пожаротушения, которая работает заданное время, или пока не закончится пожаротушительная смесь, или пока эту систему не отключат вручную.

20. Сообразительный холодильник

Поддерживает заданную температуру. Включает освещение при открытии двери и выключает при закрытии. Подаёт сигнал, если долго открыта дверь. Есть отсек быстрого охлаждения: при достижении заданной температуры подаётся особый сигнал.

21. Багажная лента

Начинает двигаться при нажатии кнопки включения. Прекращает двигаться (1) при отсутствии багажа, (2) если багаж застревает и (3) при наличии слишком тяжёлого багажа.

22. Стиральная машина

На панели имеются индикаторы (времени) работы машины, программы стирки и температуры стирки. Стирка происходит следующим образом: (1) Старт. Подача воды, нагрев, кратковременное вращение по и против часовой стрелки. (2) Стирка. Вращение 15 минут по часовой стрелке и 15 минуту против часовой стрелки (включить нагреватель, если вода сильно остынет). (3) Выпуск воды. Барабан вращается 1 минуту в одном направлении при открытом выпускном клапане. (4) Отжим. Барабан вращается 1 минуту в разных направлениях при открытом выпускном клапане. (5) Финиш. Дверной замок открывается после периода задержки.

23. Розлив вина

На конвейерный завод по розливу вина случайным образом поставляются светлые или темные бутылки. Светлая бутылка должна быть наполнена белым вином и снабжена пробкой и этикеткой для белого вина. Темная бутылка должна быть соответственно наполнена красным вином и снабжена соответствующей пробкой и этикеткой. Баки с вином периодически пустеют.

51

24. Охранная сигнализация

Подаётся сигнал в охранную контору, когда зафиксировано вторжение через окна, двери, нажата тревожная кнопка. После этого блокируются окна и двери, пока не приедет охрана или пока блокировку не отключат вручную.

25. Умная теплица

Задача такой теплицы всегда поддерживать условия окружающей среды (относительную влажность, температуру и влажность почвы) для растений в допустимом диапазоне предельных значений. Многие растения требуют освещения более 12 часов, поэтому в таких случаях необходимо также использовать искусственное освещение. Все предельные значения контролируются датчиками.

26. Робот-пылесос

Должен работать в течение заданного времени. Если застревает под шкафом, или забивается пылью или врезается в кошку, то останавливается и подаёт звуковой сигнал пользователю, который должен устранить неприятности, иначе пылесос не сдвинется с места.

27. Линия упаковки конфет

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

Приложение Б. Быстрая установка пакета верификации SPIN

1)Скачать следующие файлы:

1)Сам верификатор SPIN spin.exe https://github.com/nimblecode/Spin/tree/master/Bin. Переименовать распакованный файл в «spin.exe»

2)Компилятор C "Strawberry Perl" https://strawberryperl.com/

3)Графический интерфейс GUI: iSpin (как откроется, нажать Ctrl+S): https://raw.githubusercontent.com/nimble-code/Spin/master/optional_gui/ispin.tcl ("iSpin Version 1.1.5 -- 28 May 2021")

4)Для запуска GUI нужен ActiveState TCL https://www.activestate.com/products/tcl/

5)Необязательная плюшка для просмотра автоматов dot.exe (из пакета

"Graphviz") https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.zip graphviz-2.38.zip

2)Установить:

a.Strawberry Perl

b.ActiveTcl….exe

c.graphviz-2.38.

Пусть все эти программы установлены на диске C. Если программы установлены в других местах, то далее изменить префикс “C:” на соответствующий.

Выполнить следующие действия:

52

3)Завести директорию для Spin вот тут: C:\Strawberry\c\bin\spin и сложить туда spin.exe и ispin.tcl.

4)Прописать пути к установленным программам в переменных среды (если прописывание путей не произошло в процессе установки), а именно: Панель управления\Система и безопасность\Система\Дополнительные параметры системы -> переменные среды

-> переменные среды для пользователя X -> Рath -> изменить -> создать

C:\Strawberry\c\bin\spin

C:\Strawberry\c\bin\

C:\ActiveTcl\bin\

c:\graphviz\bin\

5)Создать ярлык для исполнения iSpin, при этом в поле «Объект» записать

C:\ActiveTcl\bin\wish.exe C:\Strawberry\c\bin\spin\ispin.

6)Запустить.

Приложение В. Код на mermaid

Controller (C)

53

stateDiagram

Controller: Controller (C) wait: wait[_, _]

top_1: top[P1, _][1] top_2: top[P1, _][2] top_3: top[P1, _][3] bottom_1: bottom[P1, _][1] bottom_2: bottom[P1, _][2] bottom_3: bottom[P1, _][3] up_1: up[_, P1][1]

up_2: up[_, P1][2] down_1: down[_, P1][1] down_2: down[_, P1][2] pressed1: pressed1[S1, _] pressed2: pressed2[S2, _]

pressed12: pressed12[S3, _] pressed21: pressed21[S4, _] opened_1: opened[S5, _][1] opened_2: opened[S5, _][2] closed_1: closed[S5, _][1] closed_2: closed[S5, _][2] state Controller {

direction TB wait --> wait

wait --> pressed1

54

wait --> pressed2 pressed1 --> bottom_1 pressed1 --> top_2 pressed2 --> bottom_2 pressed2 --> top_1 bottom_2 --> up_1 bottom_1 --> opened_1 bottom_1 --> wait bottom_3 --> pressed12 bottom_3 --> wait top_2 --> down_1 top_1 --> opened_2 top_1 --> wait

top_3 --> pressed21 top_3 --> wait pressed12 --> up_2 pressed21 --> down_2 opened_1 --> closed_1 opened_2 --> closed_2 closed_1 --> pressed12 closed_2 --> pressed21 up_1 --> top_1

up_2 --> top_3 down_1 --> bottom_1

55

down_2 --> bottom_3

}

User (E1)

stateDiagram

User: User (E1) absent: absent[_, _]

pressing1: pressing1[_, S1] pressing2: pressing2[_, S2] pressing12: pressing12[_, S3] pressing21: pressing21[_, S4] bottom_1: bottom[P1, _][1] bottom_2: bottom[P1, _][2] top_1: top[P1, _][1]

top_2: top[P1, _][2] opening_1: opening[_, S5][1] opening_2: opening[_, S5][2] opening_3: opening[_, S5][3] opening_4: opening[_, S5][4] closing_1: closing[_, S5][1] closing_2: closing[_, S5][2] closing_3: closing[_, S5][3] closing_4: closing[_, S5][4] state User {

direction TB

56

absent --> absent

absent --> pressing1 absent --> pressing2 pressing1 --> absent pressing1 --> bottom_1 pressing2 --> absent pressing2 --> top_1 bottom_1 --> opening_2 bottom_2 --> pressing12 bottom_2 --> opening_4 top_1 --> opening_3 top_2 --> pressing21 top_2 --> opening_1 opening_1 --> closing_1 opening_2 --> closing_3 opening_3 --> closing_4 opening_4 --> closing_2 closing_1 --> absent closing_2 --> absent closing_3 --> pressing12 closing_4 --> pressing21 pressing12 --> top_2 pressing21 --> bottom_2

}

57

Lift (P1)

stateDiagram

Lift: Lift (P1) top: top[_, E1, C]

bottom: bottom[_, E1, C] up: up[C, _]

down: down[C, _] state Lift {

direction TB top --> top top --> down

bottom --> bottom bottom --> up down --> bottom up --> top

}

Button1 (S1)

stateDiagram

Button1: Button1 (S1) released1: released1[_, _] releasing1: releasing1[E1, _] pressed1: pressed1[_, C] pressing1: pressing1[E1, _] state Button1 {

58

direction TB

released1 --> released1 released1 --> pressing1 pressing1 --> pressed1 pressed1 --> releasing1 releasing1 --> released1

}

Button2 (S2)

stateDiagram

Button2: Button2 (S2) released2: released2[_, _] releasing2: releasing2[E1, _] pressed2: pressed2[_, C] pressing2: pressing2[E1, _] state Button2 {

direction TB

released2 --> released2 released2 --> pressing2 pressing2 --> pressed2 pressed2 --> releasing2 releasing2 --> released2

}

Button12 (S3)

59

stateDiagram

Button12: Button12 (S3) released12: released12[_, _] releasing12: releasing12[E1, _] pressed12: pressed12[_, C] pressing12: pressing12[E1, _] state Button12 {

direction TB

released12 --> released12 released12 --> pressing12 pressing12 --> pressed12 pressed12 --> releasing12 releasing12 --> released12

}

Button21 (S4)

stateDiagram

Button21: Button21 (S4) released21: released21[_, _] releasing21: releasing21[E1, _] pressed21: pressed21[_, C] pressing21: pressing21[E1, _] state Button21 {

direction TB

released21 --> released21

60