ELV-430 · Lesson 12 of 12 · 24 min

Capstone: the Tillicum car 1 modernization and the certification exam

Tillicum car 1's acceptance inspection was booked for a Thursday in the tenth week, two days later than the original plan and one week inside the contingency Lena had added in lesson 2. The pretests were complete and recorded, the unintended movement test had been rerun after the gripper valve fix, the fire alarm technician had been booked for the morning, and Jonah had spent the previous afternoon cleaning the machine room, the pit and the car top as if the inspector were going to eat off them. Camille Draper, who had accepted Larchmont East and Birchwood car 2, arrived at eight. This capstone follows the acceptance day, the handover and the first weeks of service, the life-cycle comparison that the owner was given, and Tamsin's preparation for the certification exam that finished her apprenticeship.

Before the inspector arrives

Priya's rule for acceptance day was that the inspector should never wait for the crew. The job file was on the machine room bench, in the order Camille would want it: the permit and its two conditions, the modification for the retractable pit ladder, the approved drawings marked up as built, the requirements list from lesson 3, the pretest plan with every result signed and dated, the instrument calibration certificates, the hitch channel note from lesson 3 with the authority's reply, the motor, drive and landing system settings, the ride quality report from lesson 11, and the new maintenance control program. The test weights were on pallets in the lobby. The jumper board read zero, and Ray had counted the jumpers in the jumper box against the log. The car was parked at the lobby with its doors closed, ready to run.

# Acceptance day: documents and conditions checklist for Tillicum car 1
items = [  # (item, ready?)
    ("permit and conditions", True),
    ("modification for retractable pit ladder", True),
    ("as-built drawings in the machine room", True),
    ("requirements list and pretest results, signed", True),
    ("instrument calibration certificates", True),
    ("hitch channel repair note and reply", True),
    ("drive and controller settings record", True),
    ("ride quality baseline report", True),
    ("new maintenance control program", True),
    ("posted machine room temperature range", False),
    ("jumper board count zero, jumper box reconciled", True),
]
missing = [i for i, ok in items if not ok]
print(f"{len(items) - len(missing)} of {len(items)} ready")
for i in missing:
    print("  not ready:", i)
Output
10 of 11 ready
  not ready: posted machine room temperature range

The checklist caught one thing: the controller maker's sign stating the machine room's allowed temperature range, which ELV-410's survey had found missing on the old car, had been ordered but not mounted. Tamsin mounted it before eight. It would not have stopped the acceptance, but an inspector who finds a small thing missing at the start of the day looks harder at everything after it.

The acceptance inspection

Camille started with the documents and then walked the job from the top down: the machine room, with its ventilation fan running on the new sensor, its lighting measured at the controller, the car lighting disconnect, the working clearances in front of the cabinets and the new signs; the machine, the brake and the rope gripper; the hoistway from the car top on the new inspection station, with the guardrail that was a permit condition; the pit, with its stop switch moved to the access door, its light switch, receptacle and the retractable ladder; and the car, with its fixtures, phone and door equipment. Then the tests began, in the order Priya had set out in the pretest plan so that the weights went into the car once and came out once.

Camille chose which tests to witness from the pretest records, as authorities commonly do, and asked for some to be repeated in front of her. She saw the safety circuit opened at a sample of switches chosen by her, not by the crew; the interlocks on three floors she picked; the final limits at both ends; the brake holding 125 % of rated load at the bottom landing; the governor's overspeed switch stopping the car; the rope gripper tripped for ascending overspeed with an empty car and for unintended movement with a full car at the top landing, with the stopping distances measured; the door closing force and time on two floors and the light curtain across its full height; firefighters' service with the fire alarm technician activating the lobby, machine room and hoistway detectors in turn; the emergency phone call to the monitoring center; and the car top and in-car inspection stations with their priority. Every result matched the pretest record within its measurement tolerance.

# Acceptance tests witnessed on Tillicum car 1, compared with the pretest records
tests = [  # (test, pretest result, acceptance result, limit, units, lower is better)
    ("brake hold, 125 % load", "held", "held", "no creep in 5 min", "", True),
    ("gripper, unintended movement, full car", 4.6, 4.9, 48, "in", True),
    ("gripper, ascending overspeed, empty car", 6.3, 6.1, 48, "in", True),
    ("door closing time, floor 4", 3.0, 3.1, 1.4, "s", False),
    ("door closing time, floor 6", 3.0, 3.0, 1.4, "s", False),
    ("closing force, floor 4", 23.6, 24.3, 30, "lbf", True),
]
for name, pre, acc, lim, u, low in tests:
    if isinstance(pre, str):
        print(f"{name:42s} pretest {pre:>8s}  today {acc:>8s}  ({lim})")
        continue
    ok = acc <= lim if low else acc >= lim
    print(f"{name:42s} pretest {pre:8.1f}  today {acc:8.1f}  limit {lim:g} {u}  {'pass' if ok else 'FAIL'}")
Output
brake hold, 125 % load                     pretest     held  today     held  (no creep in 5 min)
gripper, unintended movement, full car     pretest      4.6  today      4.9  limit 48 in  pass
gripper, ascending overspeed, empty car    pretest      6.3  today      6.1  limit 48 in  pass
door closing time, floor 4                 pretest      3.0  today      3.1  limit 1.4 s  pass
door closing time, floor 6                 pretest      3.0  today      3.0  limit 1.4 s  pass
closing force, floor 4                     pretest     23.6  today     24.3  limit 30 lbf  pass

Findings and return to service

Camille's report had two minor findings. The braille plate beside the floor 7 button in the car operating panel had been mounted beside the wrong button, swapped with the plate for floor 8 during assembly, which the crew had missed because both plates had been checked for presence and height but not read. And the controller's code data plate, which ELV-410's fifth finding had required, showed the code edition correctly but had the rated speed stamped in the wrong units. Neither affected safety, and Camille allowed the car to return to service with both to be corrected and reported within thirty days. Tamsin swapped the braille plates that afternoon and sent a photograph; the corrected data plate came from the controller maker the following week. The car carried its first passengers at four o'clock, ten weeks and two days after it had been taken out of service.

Priya held a short meeting with the crew the next morning to record what had gone well and what had not. The survey had been good enough that the only surprise was the hitch channel; the critical path had held because of the second door crew; the gripper valve had been caught by a pretest, as it should have been; and the braille plates had been missed because the checklist said 'present and at height' rather than 'read each plate'. That line went into Northcrest's fixture checklist the same day. A modernization that ends with a list of lessons for the next one is a modernization that has been done properly.

Handover and the first weeks

The handover to the building and to the maintenance route was planned as carefully as the work. Grace Holm and the building's staff were shown the new emergency phone and the help-on-the-way light, the firefighters' keys and their storage, the in-car features and who to call. Ray, who would maintain the car, took over the new maintenance control program, the as-built drawings, the diagnostic tool access the specification required, the spare parts list and the baseline records. The contract included a maintenance and warranty period during which Northcrest would correct defects at its own cost, and Priya scheduled two extra visits in the first month, because new installations commonly have a few early faults as parts settle and the building's traffic tests the settings. Car 1 had two: a door reopening on a hall call at floor 3 because the door hold time was set too short for the walking distance from the corner office, and a nuisance fault from a landing system sensor bracket that had shifted slightly, both corrected on the next visit and recorded.

Was it worth it?

Before the work, the owners had asked the question every owner asks: what would it cost to keep the old car going instead? Lena's answer was a life-cycle comparison over twenty-five years: the cost of each option, including maintenance, repairs, energy and the cost of the outage, brought to present value with a discount rate so that money spent later counts for less than money spent now. The comparison is only as good as its assumptions, which Lena listed in the proposal so that the owners could change them.

# Life-cycle cost over 25 years: keep the 1962 car running, or modernize now (illustrative, dollars)
years = 25
rate = 0.04                              # discount rate
def pv(cash):                            # present value of a list of yearly costs, year 1 to n
    return sum(c / (1 + rate) ** (y + 1) for y, c in enumerate(cash))
# keep: rising repair costs, a forced controller replacement in year 6 under worse conditions, energy of the M-G set
keep = []
for y in range(years):
    maint = 8800 + 900 * y               # maintenance and repairs rising as parts get harder to find
    energy = 2900
    forced = 380000 if y == 5 else 0       # unplanned controller replacement after a failure (with a longer outage)
    keep.append(maint + energy + forced)
# modernize: the job now, lower maintenance and energy, a controller refresh in year 20
mod = []
for y in range(years):
    maint = 5800 + 300 * y
    energy = 790
    refresh = 110000 if y == 19 else 0     # board and software refresh at about 20 years
    mod.append(maint + energy + refresh)
job = 350000
print(f"keep the old car: present value {pv(keep):,.0f} dollars")
print(f"modernize now:   present value {job + pv(mod):,.0f} dollars (including the {job:,.0f} job)")
diff = (pv(keep)) - (job + pv(mod))
print(("modernizing costs less by " if diff > 0 else "keeping costs less by ") + f"{abs(diff):,.0f} dollars over {years} years")
Output
keep the old car: present value 623,591 dollars
modernize now:   present value 549,983 dollars (including the 350,000 job)
modernizing costs less by 73,608 dollars over 25 years

On these assumptions the two options came out close, with modernizing somewhat cheaper, and the decisive points were not in the totals: keeping the old car meant an unplanned controller replacement after a failure, with a longer outage at a time the owners did not choose, and a car without the protection, accessibility and communication that the building's tenants now expected. Life-cycle numbers rarely make a modernization decision on their own, but they stop it being made on the price of the job alone.

Line chart of cumulative present-value cost over 25 years for two options: keeping the old car, which starts low, rises steadily and jumps at year 6 for a forced controller replacement, and modernizing now, which starts with the job cost and then rises slowly with a small step at year 20 for a controller refresh; the keep line passes the modernize line a few years after the forced replacement and ends higher.
Cumulative present-value cost of keeping the old car or modernizing (illustrative).

The certification exam

Tamsin's apprenticeship ended with the certification that lets her work as a mechanic on her own. In Washington, elevator mechanics are licensed by the Department of Labor and Industries, and the license is valid in Seattle as everywhere in the state. The general elevator mechanic license, Category 01, needs at least three years of verified conveyance work and either completion of a registered apprenticeship or the national program's training and its mechanic exam, or the state exam. Tamsin's path was the national program, whose apprenticeship runs about four to five years with roughly 600 hours of classroom instruction and 8,000 hours on the job, ending in its mechanic exam. The state's own Category 01 exam, for those who take it, is open book with 160 questions, 40 each on codes, installation, safety and maintenance, and needs 80 % to pass. Licenses are renewed every two years.

Moira's advice about an open-book exam was the same as her advice about the code: an open book is only useful to someone who knows where things are in it. In the last two months Tamsin tabbed her code book by section, made her own index of the requirements she had used on the job (the alteration lists, the brake and governor rules, the door limits, the electrical protective devices, the pit and car top requirements), and practiced with question banks from the training program, timing herself so that no question took more than a few minutes. She kept a score sheet by topic, so that her study time went to the topics where she was weakest, not the ones she enjoyed.

# Practice exam sampler and score tracker by topic
import random
random.seed(5)
bank = {  # topic: number of questions in the practice bank
    "code": 120, "installation": 90, "safety": 80, "maintenance": 95, "electrical": 70, "hydraulic": 45,
}
blueprint = {"code": 10, "installation": 10, "safety": 10, "maintenance": 10, "electrical": 0, "hydraulic": 0}      # questions per topic on a practice paper
paper = {t: random.sample(range(bank[t]), n) for t, n in blueprint.items()}
print(f"practice paper: {sum(blueprint.values())} questions drawn from {sum(bank.values())}")
# scores from Tamsin's last four practice papers, percent correct by topic
history = {
    "code": [62, 70, 76, 84],
    "installation": [76, 80, 83, 86],
    "safety": [82, 86, 89, 92],
    "maintenance": [72, 78, 81, 87],
}
pass_mark = 80
print(f"{'topic':14s}" + "".join(f"{'p' + str(i + 1):>6s}" for i in range(4)) + "   trend   focus")
for t, s in history.items():
    trend = s[-1] - s[0]
    focus = "study" if s[-1] < pass_mark + 5 else ""
    print(f"{t:14s}" + "".join(f"{x:6d}" for x in s) + f"   {trend:+4d}   {focus}")
overall = [sum(history[t][i] * blueprint[t] for t in history) / sum(blueprint[t] for t in history) for i in range(4)]
print("overall:", ", ".join(f"{x:.0f} %" for x in overall), f"(pass mark {pass_mark} %)")
Output
practice paper: 40 questions drawn from 500
topic             p1    p2    p3    p4   trend   focus
code              62    70    76    84    +22   study
installation      76    80    83    86    +10   
safety            82    86    89    92    +10   
maintenance       72    78    81    87    +15   
overall: 73 %, 78 %, 82 %, 87 % (pass mark 80 %)
Line chart of practice exam scores by topic over four practice papers, with code, electrical and hydraulic starting lowest and rising, safety highest throughout, and the pass mark drawn as a horizontal line.
Tamsin's practice scores by topic, rising toward and past the pass mark.

The tracker did what it was meant to: it showed that Tamsin's weakest topic at the start was the code itself, the topic she most needed for an open-book exam, and that the months of the modernization, reading the alteration lists and writing the requirements list, had done more for her code scores than any study session. She sat the exam in April and passed comfortably. Lena handed her the keys to her own van the following Monday, with Route 7's newest unit, Tillicum car 1, on her list, and Jonah Sweeney as her helper.

Worked problem

An exam question worked the way the job works

A practice question reads: 'An existing traction elevator's relay controller is replaced with a microprocessor controller. The machine, ropes and safeties are kept. Which of the following must now be provided?' The options list several devices. How should a candidate approach it?

Show solution
  1. Recognize it as an alteration question: the answer is in the code's alteration section for a controller change, not in the new-installation requirements.
  2. Turn to the alteration item for controllers in the edition the exam uses, using the tabs and index made during study.
  3. Read the list of requirements it pulls in and match them against the options, such as protection against ascending car overspeed and unintended movement.
  4. Do not choose options because they are good practice or required for new installations if the alteration item does not pull them in.

Answer: Go to the alteration item for a controller change, read what it pulls in and match the options against it, exactly as the Tillicum requirements list was built.

Common mistakes

  • MistakeArriving at acceptance with the documents still being assembled.

    InsteadHave the job file ready and in order before the inspector arrives.

  • MistakeChecking fixtures for presence and height only.

    InsteadRead each braille plate and marking against its button.

  • MistakeTreating the end of acceptance as the end of the job.

    InsteadPlan the handover, the warranty visits and the lessons learned.

  • MistakeComparing options on the job price alone.

    InsteadCompare life-cycle costs with stated assumptions.

  • MistakeStudying favorite topics for the exam.

    InsteadTrack scores by topic and study the weakest ones.

Summary and key terms

  • Acceptance day goes smoothly when the job file, the weights and a zero jumper count are ready before the inspector arrives.
  • The inspector walks the job and witnesses tests chosen from the pretest records; results should match them.
  • Minor findings are corrected and reported within the time allowed; lessons learned go into the next job's checklists.
  • Handover covers the building staff, the maintenance mechanic, the new program, the warranty and extra early visits.
  • Life-cycle comparisons with stated assumptions show owners the cost of keeping old equipment as well as replacing it.
  • The certification exam rewards knowing where things are in the code and studying by weakness, as the job does.
Acceptance inspection
The authority’s inspection and witnessed tests before a new or altered unit returns to service.
Job file
The permit, drawings, records and correspondence for a job, kept in order for the inspector and the owner.
Warranty period
The time after completion during which the contractor corrects defects at its own cost.
Life-cycle cost
The total cost of an option over its life, brought to present value.
Present value
The value today of future costs, reduced by a discount rate.
Open-book exam
An exam where permitted reference materials may be used.

Practice problems

Work each problem on paper first, then reveal the answer to check.

  1. Why test in the pretest order on acceptance day?

    Show answer

    So the weights go into the car once and come out once.

  2. How did the inspector choose which tests to witness?

    Show answer

    From the pretest records, choosing samples herself.

  3. Why were two extra visits scheduled in the first month?

    Show answer

    New installations commonly have early faults as parts settle and traffic tests the settings.

  4. What does a discount rate do in a life-cycle comparison?

    Show answer

    Makes money spent later count for less than money spent now.

  5. What is the most useful preparation for an open-book exam?

    Show answer

    Knowing where things are in the code, with tabs and a personal index, and practicing by topic.

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz