Урок 2. Прибор «простой»
Узкое место — это станок, который никогда не стоит: перед ним всегда очередь. Все остальные время от времени ждут. Значит, чтобы найти узкое место, надо мерить, сколько каждый станок простаивает. В этом уроке соберём такой прибор: кнопка S переводит «щуп» со станка на станок, а табло I показывает, сколько секунд выбранный станок стоял без работы.
Схема большая, поэтому разберём её по шагам: кто выбран → занят ли он → считаем секунды.
2.1. Шаг 1: кто выбран — CD4017
Нам нужно пять сигналов «выбран станок 1», …, «выбран станок 5», из которых в каждый момент горит ровно один. Это умеет CD4017: у него десять выходов O0…O9, и каждый фронт CLOCK переводит «единичку» на следующий выход.
CLOCK= кнопка S (SEL): нажал — щуп перешёл на следующий станок;O0…O4— меткиP1…P5, они же зажигают лампы-щупы над станками;- нам нужно всего пять положений, поэтому
O5(P6) сразу сбрасывает счётчик: как только единичка дошла до O5, ногаRESETвозвращает её на O0. Щуп ходит по кругу 1 → 2 → 3 → 4 → 5 → 1; - кнопка R тоже должна возвращать щуп на станок 1:
SRST = P6 ИЛИ R— первый вентиль ИЛИ микросхемы CD4071.
2.2. Шаг 2: занят ли выбранный — мультиплексор из И и ИЛИ
У каждого станка есть нога BUSY: B1…B5. Нам нужен один сигнал — BUSY того станка, на котором щуп. Это называется мультиплексор: из пяти входов на выход проходит один, выбранный.
Собираем его из вентилей:
A1 = P1 И B1, …,A5 = P5 И B5— пять вентилей И (CD4081: четыре в первой микросхеме, пятый — во второй). Только у выбранного станкаPk = 1, поэтому только егоAkможет быть 1 — и он равен его BUSY;SB = A1 ИЛИ A2 ИЛИ A3 ИЛИ A4 ИЛИ A5— CD4072, два вентиля ИЛИ на 4 входа: первый собирает A1…A4 вT4, второй —T4иA5.
SB = 1 — выбранный станок работает, SB = 0 — стоит.
2.3. Шаг 3: считаем секунды простоя — CD4029 с разрешением
Табло — снова два CD4029, как в FL-01. Тактирует их CKR — такт 1 Гц, пока включён ПУСК (он уже есть в FL-01: CKR = CK И RUN). Но считать надо не каждую секунду, а только когда станок стоит. Для этого у CD4029 есть нога разрешения CI: счёт идёт, только если CI = 0. Подаём на неё SB:
- станок работает (
SB = 1) — фронтCKRпропускается, число стоит; - станок стоит (
SB = 0) — фронтCKRприбавляет секунду.
Так табло считает точно по фронтам такта, без лишних импульсов в те моменты, когда станок освобождается посреди секунды.
2.4. Шаг 4: сброс прибора
Табло I нужно обнулять в двух случаях: по R (новая смена) и при переходе щупа на другой станок — иначе к секундам одного станка прибавятся секунды другого. Поэтому вход загрузки PE счётчиков — это MRST = R ИЛИ S, второй вентиль ИЛИ той же CD4071.
2.5. Сборка
- Импортируй микросхемы набора: файл
flow-chips.json. В нём всё из FL-01 и ещё CD4017, CD4071, CD4072, CD4013, CD4019. Если редактор спросит про одинаковые микросхемы — они те же самые, можно оставить свои. - Вставь урок через
Cmd+Iповерх FL-01 с Херби (текст — в конце урока). Появятся:- на площадке — кнопка S, пять ламп-щупов над станками, табло I «простой, с»;
- снаружи — CD4017, CD4071, два CD4081, CD4072 и два CD4029.
2.6. Проверка
- Питание выкл и вкл → R → ПУСК. Горит щуп над станком 1, табло I растёт.
- Нажимай S — щуп переходит на следующий станок, табло I начинает с 0.
- Постой на каждом станке секунд 20.
| Щуп на станке | Табло I через 20 секунд |
|---|---|
| 1, 2 | около 10: стоят, пока Херби не заберёт деталь |
| 3 — Херби | 0: работает без перерыва |
| 4, 5 | около 10: ждут деталь от Херби |
Узкое место — станок с простоем 0. Его нашёл прибор, а не глаз.
Вставка урока 2 (Cmd+I)
# Lesson 2 — the idle meter. Insert on top of the finished FL-01 «The Dice Game» (needs the chip file flow-chips.json).# Button S steps the probe from machine to machine (CD4017: one lit output O0…O4; O5 jumps back to O0; R also resets).# The probe lamps P1…P5 show which machine is measured. SB = the probed machine is busy: Pk · Bk for each machine, then OR.# The meter counts seconds while the probed machine stands: clock CKR (= CK · RUN of FL-01), enable CI = SB (counts at SB = 0).# MRST = R OR S: pressing S also clears the meter — it starts from 0 on the newly probed machine.button sel{label="S"}(SEL)at(sel, B, 760, 290)led p1(P1)at(p1, B, 150, 60)led p2(P2)at(p2, B, 270, 60)led p3(P3)at(p3, B, 390, 60)led p4(P4)at(p4, B, 510, 60)led p5(P5)at(p5, B, 630, 60)display shI{busSource=I}at(shI, B, 620, 290)"TI CD4071B"(A=P6, B=RST, J=SRST, C=SEL, D=RST, K=MRST, E=GND, F=GND, G=GND, H=GND)"TI CD4017B"(CLOCK=SEL, INH=GND, RESET=SRST, O0=P1, O1=P2, O2=P3, O3=P4, O4=P5, O5=P6)"TI CD4081B"(A=P1, B=B1, J=A1, C=P2, D=B2, K=A2, E=P3, F=B3, L=A3, G=P4, H=B4, M=A4)"TI CD4081B"(A=P5, B=B5, J=A5, C=GND, D=GND, E=GND, F=GND, G=GND, H=GND)"TI CD4072B"(A=A1, B=A2, C=A3, D=A4, J=T4, E=T4, F=A5, G=GND, H=GND, K=SB)"TI CD4029B"(CLOCK=CKR, UD=VCC, BD=VCC, PE=MRST, CI=SB, J1=GND, J2=GND, J3=GND, J4=GND, Q1=I0, Q2=I1, Q3=I2, Q4=I3, CO=COI)"TI CD4029B"(CLOCK=CKR, UD=VCC, BD=VCC, PE=MRST, CI=COI, J1=GND, J2=GND, J3=GND, J4=GND, Q1=I4, Q2=I5, Q3=I6, Q4=I7)Не получается? Что-то не работает →