ELV-430 · Lesson 8 of 12 · 21 min
Commissioning and acceptance after a modernization
By the seventh week, Tillicum car 1 ran on its new controller from top to bottom on inspection operation, the doors opened and closed on every floor, and the fixtures lit when they were pressed. To a passenger it would have looked finished. To Priya it was about half done, because nothing on it had yet been proven to do what the code and the specification required. Commissioning is the work between first runs and acceptance: tuning the drive and the motion, learning the hoistway, setting up every function, and then testing each requirement in the scope, one by one, with the results written down. The pretests are the contractor's own acceptance tests, done before the inspector arrives, and the acceptance inspection is the authority's check of the same things. This lesson follows car 1 through commissioning and pretests; lesson 12 covers its acceptance day.
Tuning the drive and the motion
The drive's motor tuning routine from lesson 4 set the motor's electrical model. Commissioning sets the car's motion. The controller's motion profile, which ELV-310 described, has a rated speed, acceleration and deceleration rates, and jerk values that round the corners of the profile at the start and end of acceleration and deceleration. The drive's speed regulator follows the profile using the encoder feedback, and its gains decide how tightly it follows: too low and the car lags the profile and lands inaccurately; too high and the car vibrates or hunts around the target speed. Priya tuned car 1 empty and then with half load and full load, watching the drive's speed reference and actual speed on the service tool and riding the car with an accelerometer on the floor.
Two settings needed particular care on an old geared machine. The first was rollback at the start: the drive must hold the car at zero speed while the brake lifts, so that a full car does not sink or an empty car does not rise in the moment between the brake lifting and the drive taking the load. The drive's start sequence builds torque before the brake lifts, using the load weighing signal or a fast speed loop, and the crew checked it with a full car and an empty car at the bottom and top landings. The second was the worm gear's backlash: when the load reverses during a run, as it does when a balanced car passes the middle of the hoistway, the gear's free movement can cause a small knock unless the speed loop is tuned to pass through it smoothly. Tillicum's backlash was within limits, and a little filtering in the speed loop took the knock out.
# Motion profile check: flight time for one floor and the full run against the specification
v = 1.0 # rated speed, m/s
a = 0.8 # acceleration and deceleration, m/s2
j = 1.2 # jerk, m/s3
def flight(d):
# time for an S-curve run of distance d (symmetrical acceleration and deceleration)
t_j = a / j # time to build acceleration
d_acc = v * (v / a + t_j) / 2 # distance to reach full speed
assert d >= 2 * d_acc, "run too short to reach full speed"
return 2 * (v / a + t_j) + (d - 2 * d_acc) / v
floor = 3.75 # m, one floor
full = 30 # m, bottom to top
print(f"one floor: {flight(floor):.1f} s (specification {7.0} s or less)")
print(f"full travel: {flight(full):.1f} s")one floor: 5.7 s (specification 7.0 s or less) full travel: 31.9 s
Learning the hoistway and levelling
The new absolute landing system, a coded tape in the hoistway read by a sensor on the car top, gave the controller the car's position at every point without needing to count from a terminal landing. The controller learns the floor positions on a learn run, stopping at each floor while the mechanic records the exact position of the sill on the tape, and stores the door zones and the terminal slowdown positions. After the learn run, the levelling accuracy is checked at every floor in both directions with an empty car and a full car, measuring the step between the car sill and the landing sill with a scale, and individual floors are trimmed in the controller where needed.
# Levelling accuracy after the learn run (step from landing sill to car sill, + car high)
limit = 6 # specification limit, mm (the code's stopping accuracy is looser)
data = { # floor: (up empty, up full, down empty, down full), mm
1: (2, 3, -1, -2),
2: (1, 2, -2, -3),
3: (3, 4, 0, -2),
4: (2, 3, -1, -1),
5: (8, 9, 4, 3),
6: (1, 2, -2, -2),
7: (2, 2, -1, -3),
8: (1, 3, -2, -2),
9: (2, 3, -1, -2),
}
worst = 0
for fl, r in data.items():
w = max(abs(x) for x in r)
worst = max(worst, w)
flag = "" if w <= limit else " trim this floor"
print(f"floor {fl}: {r} worst {w}{flag}")
print(f"worst step {worst} mm against {limit} mm")floor 1: (2, 3, -1, -2) worst 3 floor 2: (1, 2, -2, -3) worst 3 floor 3: (3, 4, 0, -2) worst 4 floor 4: (2, 3, -1, -1) worst 3 floor 5: (8, 9, 4, 3) worst 9 trim this floor floor 6: (1, 2, -2, -2) worst 2 floor 7: (2, 2, -1, -3) worst 3 floor 8: (1, 3, -2, -2) worst 3 floor 9: (2, 3, -1, -2) worst 3 worst step 9 mm against 6 mm
Floor 5 stood out: the car stopped high in both directions and both loads, which pointed to the floor's learned position rather than the drive. Tamsin rode the car to floor 5 and found that the landing sill there had settled slightly relative to its neighbours, so the learned position had been taken from the tape correctly but the sill was not where the hoistway drawing assumed. The floor was trimmed in the controller and rechecked. The learn run had done its job; the building had simply moved in sixty years.
The pretest plan
Pretests are written before they are run. Priya's pretest plan for car 1 was built from lesson 3's requirements list: every requirement the alteration pulled in became one or more tests, each with the method, the acceptance criterion, the instruments and the person responsible, and each permit condition and every item in the specification's performance section was added. The plan was sent to the consultant and the authority with the request for an inspection date, so that the inspector could see in advance what would be shown and how. A good pretest plan is also a training document: Tamsin ran a third of the tests under Priya's eye, which was the best exam preparation she had.
| Group | Examples of tests on Tillicum car 1 |
|---|---|
| Safety circuit | Every switch in the circuit opened one at a time, car stops; jumper board count zero |
| Doors | Interlocks on every floor, door contacts, closing force and time, light curtain, door reopening |
| Terminal stopping | Normal and emergency terminal slowdown, final limits at both ends |
| Brake and overspeed | Brake holds 125 % load, governor switch stops the car, rope gripper trip |
| Unintended movement | Car moved away from the floor with doors open, rope gripper stops it within the limit |
| Drive and motor | Field loss detection, motor overload, drive faults |
| Inspection operation | Car top station, in-car inspection, hoistway access, priority between stations |
| Emergency operation | Firefighters' service with the fire alarm technician, emergency communication with the monitoring centre |
| Machine room and pit | Ventilation fan and sensor, lighting levels, car lighting disconnect, pit stop switch, ladder and guardrail conditions |
# Pretest tracker: what is left before booking the inspector
tests = [ # (group, test, result) result: "pass", "fail", or None for not yet done
("safety circuit", "each device opens the circuit", "pass"),
("safety circuit", "jumper board count zero", "pass"),
("doors", "interlocks all floors", "pass"),
("doors", "closing force and time all floors", "pass"),
("doors", "light curtain full height", "pass"),
("terminal", "final limits top and bottom", "pass"),
("brake", "125 % hold at bottom landing", "pass"),
("overspeed", "governor switch stops the car", "pass"),
("overspeed", "rope gripper ascending overspeed trip", "pass"),
("movement", "unintended movement stop distance", "fail"),
("drive", "field loss detection", "pass"),
("inspection", "car top station priority", "pass"),
("emergency", "firefighters' service with alarm technician", None),
("emergency", "emergency communication call", "pass"),
("rooms", "machine room ventilation and lighting", "pass"),
("conditions", "car top guardrail installed", "pass"),
("conditions", "retractable pit ladder per variance", "pass"),
]
done = [t for t in tests if t[2] is not None]
fails = [t for t in tests if t[2] == "fail"]
todo = [t for t in tests if t[2] is None]
print(f"{len(done)} of {len(tests)} tests done, {len(fails)} failed, {len(todo)} to do")
for g, t, r in fails + todo:
print(f" {g:12s} {t:45s} {r or 'not done'}")
print("book the inspector:", "yes" if not fails and not todo else "not yet")16 of 17 tests done, 1 failed, 1 to do movement unintended movement stop distance fail emergency firefighters' service with alarm technician not done book the inspector: not yet
A failed pretest
The unintended movement test failed on the first try, which is what pretests are for. The test makes the car move away from the floor with its doors open, simulating a brake or drive failure, by lifting the brake with the drive disabled and the car unbalanced, and measures how far the car travels before the door zone monitor trips the rope gripper and the car stops. The code limits that distance; ELV-410 and ELV-420 used a figure of about 1,220 mm (48 in). On the first run, with an empty car at the bottom landing rising under the heavier counterweight, the car travelled well inside the limit; but with a full car at the top landing sinking, it travelled further than Priya's own target, though still inside the code limit, and the gripper's response time on the service tool looked slow.
# Unintended movement test: distance travelled before the gripper stops the car
g = 9.81
k = 1000 # m to mm
kv = 1.0
limit = 1220 # code limit used in the program, mm
def distance(unbalance_frac, t_detect, t_grip, decel_g):
# car accelerates under the unbalanced load from rest until the gripper acts, then stops at decel_g
acc = unbalance_frac * g # crude: unbalanced fraction of gravity (friction ignored)
t = t_detect + t_grip
v = acc * t
s = 0.5 * acc * t * t + v * v / (2 * decel_g * g)
return s, v
for label, ub, tg in (("first test, full car sinking", 0.18, 0.30), ("after valve fix", 0.18, 0.12)):
s, v = distance(ub, 0.20, tg, 0.6)
print(f"{label:30s}: speed at grip {v * kv:.2f} m/s, distance {s * k:.0f} mm (limit {limit})")first test, full car sinking : speed at grip 0.88 m/s, distance 287 mm (limit 1220) after valve fix : speed at grip 0.57 m/s, distance 118 mm (limit 1220)
The gripper was released by a solenoid valve that dumped the pressure holding its jaws open. Priya found that the valve's exhaust port had been fitted with a restrictor meant for a different model, which slowed the release. With the correct fitting, the gripper's response time fell by more than half, and the distance with a full car dropped to a fraction of the limit. The test was repeated three times at the top and bottom landings with empty and full cars, and all results recorded. A pretest that passes on paper but leaves a doubt in the mechanic's mind is not finished, which is why Priya chased a slow valve on a test that had technically passed the code limit.
Handover documents
A modernized car is handed over with documents as well as keys. The maintenance control program from ELV-420 is rewritten for the new equipment, with the controller and drive maker's maintenance procedures, the procedures for any programmable safety devices, the test procedures for the rope gripper and the other new devices, the as-built wiring diagrams kept in the machine room, the diagnostic tool or its access instructions as the non-proprietary specification required, the spare parts list, and the baseline records: every pretest and acceptance result, the motor and drive settings, the levelling data and the ride quality readings from lesson 11. The owner's staff are shown how to use the emergency communication system, the firefighters' service keys and the in-car features, and the building's own emergency procedures are updated. Lesson 12 returns to the handover after the acceptance inspection.
Worked problem
Is a pretest result good enough?
During pretests, the car's levelling accuracy is within the code's stopping tolerance on every floor but outside the specification's tighter limit on two floors. The inspector is booked for the next morning. What should the crew do?
Show solution
- The code is the minimum; the specification is the contract with the owner and the consultant.
- Trim the two floors and recheck them in both directions with empty and full cars.
- If they cannot be fixed before the inspection, record them as open items to be shown to the consultant, because the inspector checks the code and the consultant checks the specification.
- Never record a pretest result as passed when it did not meet the criterion in the plan.
Answer: Fix the two floors if possible; if not, record them honestly as open against the specification while showing the code result to the inspector.
Common mistakes
MistakeTreating a car that runs as a car that is finished.
InsteadCommissioning and pretests prove every requirement; running is the start.
MistakeTuning the drive with an empty car only.
InsteadTune and check with empty, half and full load.
MistakeRunning pretests without a written plan.
InsteadWrite the plan from the requirements list and share it with the inspector.
MistakeAccepting a pass that leaves a doubt.
InsteadFind the cause of anything that looks wrong, even inside the limit.
MistakeHanding over without as-built drawings and baseline records.
InsteadThe maintenance control program for the new car starts with them.
Summary and key terms
- Commissioning tunes the drive and motion, learns the hoistway and sets up every function.
- Rollback at start and gear backlash need care on geared machines; tuning is done at several loads.
- Levelling is checked at every floor, both directions, empty and full, and trimmed floor by floor.
- The pretest plan comes from the requirements list, permit conditions and specification, and is shared with the inspector.
- Failed pretests are what pretests are for; results inside the limit that look wrong are still investigated.
- Handover includes a new maintenance control program, as-built drawings, tools access and baseline records.
- Commissioning
- Setting up and proving a new or modernized elevator before acceptance.
- Pretests
- The contractor’s own tests of every requirement before the acceptance inspection.
- Rollback
- Movement of the car at the start of a run between brake lift and the drive taking the load.
- Learn run
- A run in which the controller records floor positions and zones from the landing system.
- Speed loop gain
- The setting that decides how tightly the drive follows the speed reference.
- Baseline
- The first set of test and performance results for a unit, used to judge later results.
Practice problems
Work each problem on paper first, then reveal the answer to check.
What causes rollback at the start of a run?
Show answer
The brake lifting before the drive has built enough torque to hold the load.
Why check levelling in both directions and with two loads?
Show answer
Errors that change with direction or load point to the drive; errors that do not point to the floor position.
Where does the pretest plan come from?
Show answer
The requirements list, the permit conditions and the specification.
Why did Priya investigate the gripper even though the distance was inside the limit?
Show answer
The response looked slow, which suggested a fault that could worsen.
Name three things in the handover documents.
Show answer
New maintenance control program, as-built wiring diagrams, baseline test records, diagnostic tool access, spare parts list.
Lesson quiz · 5 questions
Score 60% or more to complete this lesson.
Create a free account to save your progress, take quizzes and earn a certificate.