FAT-210 · Lesson 12 of 12 · 20 min

Capstone: programming and testing a panel for a mid-rise office

The Tamarind House panel is seventeen years old, its manufacturer has stopped making parts for it, and its loop cards have started to drop devices on hot days. The building's owner has hired Bramwell to replace it with a current model, reusing the two existing loops and all 340 field devices. Ravi Menon has written the design, and Donna Achebe has given the job to Sasha, with Gerry as her lead. 'You will build the program, swap the panel and run the test,' Donna says. 'Gerry signs off, but it's your job.' This capstone follows the job from the first site visit to the final paperwork, using everything in this course: the control unit's parts, zones and addressable loops, circuit classes, initiating and notification circuits, the single-stage sequence, programming, the cause-and-effect matrix, the annunciator and the panel's place on the monitoring network.

The design and the documents

Ravi's design package has six parts. The equipment list gives the new panel, two loop cards, a network-ready display, the communicator, two remote power supplies kept from the old system, and the batteries. The riser diagram shows the panel in the ground-floor electrical room, loop 1 serving floors 1 to 3 as Class A, loop 2 serving floors 4 to 6 as Class B with isolators at each floor, six notification circuits (one per floor), and the relays for elevator recall, two air handlers, door holders, stair door unlocking and the shunt trip. The point list gives every address, label and zone. The cause-and-effect matrix from lesson 9 sets every output. The battery and voltage drop calculations from FAT-130 confirm the power supply. And the sequence of operation describes the single-stage response in words.

Because the control unit is being replaced, every input and output in the building will pass through new equipment, so the Saskatoon Fire Department asks for a full CAN/ULC-S537 verification of the system, not just of the new panel. Captain Strand's office reviews the design before the work starts and asks for one change: a second annunciator at the loading dock entrance, which firefighters now use more than the main door.

Riser diagram of Tamarind House. Six floors are stacked, with the new panel and communicator on floor 1. Loop 1 runs up floors 1 to 3 and returns as a Class A loop; loop 2 runs up floors 4 to 6 as Class B with an isolator at each floor. Each floor has its own notification circuit. Relays from the panel go to the elevator controller, AHU-1, AHU-2, door holders, stair door locks and the shunt trip. Annunciators are shown at the main entrance and the loading dock.
The Tamarind House riser after the panel replacement.

Building the program before the swap

Sasha starts by uploading the old panel's program and printing its device list, then walks every floor with the point list to confirm that what is on the ceiling matches what is on paper. She builds the new program in the manufacturer's software from the point list and the matrix, not by converting the old program, because the old one contains seventeen years of patches and the new panel's logic works differently. Each device gets its type, label and zone; each output its function; and each matrix row becomes a rule using groups. Before going near the building, she runs the matrix cases through the software's simulator, as lesson 8 described, and Ravi reviews the program against the sequence line by line.

# Compare the devices the new panel found on its loops with the point list
point_list = {"1-001": "smoke", "1-047": "smoke", "1-050": "smoke", "1-063": "heat",
              "2-031": "waterflow", "2-044": "smoke", "2-060": "relay", "2-075": "pull station"}
found =      {"1-001": "smoke", "1-047": "smoke", "1-050": "smoke", "1-063": "heat",
              "2-031": "waterflow", "2-044": "heat", "2-060": "relay", "2-075": "pull station",
              "2-099": "heat"}
for addr in sorted(set(point_list) | set(found)):
    a, b = point_list.get(addr), found.get(addr)
    if a == b:
        continue
    if a is None:
        print(f"{addr}: found a {b} that is not in the point list")
    elif b is None:
        print(f"{addr}: {a} in the point list but not found on the loop")
    else:
        print(f"{addr}: point list says {a}, loop has a {b}")
print(f"{len(found)} devices found, {len(point_list)} in the point list (extract)")
Output
2-044: point list says smoke, loop has a heat
2-099: found a heat that is not in the point list
9 devices found, 8 in the point list (extract)

The panel's loop scan on swap day finds two surprises, shown here in an extract. Address 2-044, on the fifth floor, is a heat detector in a kitchenette where the point list says smoke: someone had swapped it years ago after nuisance alarms without updating the records. Address 2-099 is a heat detector nobody knew about, in a storage closet a tenant's electrician had wired in. Both are now real devices with known types and labels, and the point list, program and drawings are corrected before testing goes any further.

Swap day

The swap is planned for a Saturday, when the building is empty. On Friday Sasha sends the impairment notice: the building owner, the signal receiving centre and the fire department are told the system will be out of service from 07:00 to about 15:00, and the owner arranges a fire watch, a person who patrols the building every hour with a radio, as the fire code requires. On Saturday the old panel is powered down and labelled, the field wiring is tagged and photographed, and the new panel is mounted. Loops, notification circuits, relays and the communicator are landed one by one, each checked against the riser diagram. The new batteries go in last, after the AC supply is confirmed.

With the panel powered, Sasha lets each loop card scan its loop, compares the result with the point list as shown above, and then downloads the program. By early afternoon every device is online, the troubles are down to the two known differences being fixed, and the panel can detect and notify on its own. The fire watch continues until the first full functional check: one device on each floor, each notification circuit, and an alarm signal received at the monitoring station. At 15:40 the system goes back into service and the impairment is closed.

Testing every device and every output

The full test takes three days the following week, with the building occupied, so it runs in the early mornings and evenings with the tenants told in advance. Sasha and a second technician work floor by floor. Each detector is tested with the method its type needs, each pull station is operated, each waterflow switch is tripped by the sprinkler contractor opening the inspector's test valve, and each tamper switch is operated by moving its valve. For every input, the panel and both annunciators are checked for the right message, and the matrix is used to confirm every output that should operate does, and every output that shouldn't stays still.

The class tests are done next. On loop 1, the Class A loop, Sasha opens the loop on the second floor and confirms every device stays online while the panel reports the trouble, then repeats the test with a ground fault. On loop 2, she shorts the loop on the fifth floor and confirms the isolators confine the loss to that floor's devices. Every notification circuit is opened to confirm its trouble, and every remote power supply has its AC power removed to confirm its trouble reaches the panel. Finally the batteries are tested: the AC supply is turned off, the system runs on batteries, and the voltage is measured under alarm load.

# Acceptance test summary from the test log: expected outputs against what was observed (extract)
tests = [  # (input, expected outputs, observed outputs)
    ("FL4 DUCT DET AHU-2", {"EVAC", "AHU2_OFF", "MON_ALM"}, {"EVAC", "MON_ALM"}),
    ("FL1 MAIN LOBBY SMOKE", {"EVAC", "RECALL_ALT", "DOORS", "MON_ALM"}, {"EVAC", "RECALL_ALT", "DOORS", "MON_ALM"}),
    ("FL6 WATERFLOW (97 s)", {"EVAC", "MON_ALM"}, {"EVAC", "MON_ALM"}),
    ("FL3 VALVE TAMPER", {"MON_SUP"}, {"MON_SUP"}),
    ("ELEV MACH RM HEAT", {"EVAC", "RECALL_MAIN", "HAT", "SHUNT", "MON_ALM"}, {"EVAC", "RECALL_MAIN", "HAT", "SHUNT", "MON_ALM"}),
]
fails = 0
for name, exp, obs in tests:
    missing, extra = exp - obs, obs - exp
    timing = "(97 s)" in name
    ok = not missing and not extra and not timing
    fails += not ok
    note = []
    if missing:
        note.append("missing " + ", ".join(sorted(missing)))
    if extra:
        note.append("unexpected " + ", ".join(sorted(extra)))
    if timing:
        note.append("waterflow over 90 s")
    print(f"{'PASS' if ok else 'FAIL'}  {name:24s} {'; '.join(note)}")
print(f"{len(tests) - fails} of {len(tests)} passed in this extract; failures are fixed and retested")
Output
FAIL  FL4 DUCT DET AHU-2       missing AHU2_OFF
PASS  FL1 MAIN LOBBY SMOKE     
FAIL  FL6 WATERFLOW (97 s)     waterflow over 90 s
PASS  FL3 VALVE TAMPER         
PASS  ELEV MACH RM HEAT        
3 of 5 passed in this extract; failures are fixed and retested

The extract of the test log shows the two failures the test found, out of several hundred checks. The fourth-floor duct detector for AHU-2 sent the alarm but didn't stop the fan: in the new program the duct detector was in the AHU-1 group, a slip when the groups were built from the old program's notes. And the sixth-floor waterflow took 97 seconds from the start of flow to the alarm, so the sprinkler contractor shortened the switch's retard. Both were fixed and retested, and the retests are recorded beside the failures, not instead of them.

The fire department, the monitoring station and the owner

On the last evening, Captain Strand's inspector joins the test for a sample of devices on every floor, watches the elevator recall and the stair door unlocking, and checks the two annunciators and their labels. The signal receiving centre confirms it received alarm, supervisory and trouble signals with the right account and zones during the test, and the communicator's two paths are each failed in turn to confirm the centre sees the path trouble. The owner's building manager is trained on the panel and annunciators: what each indication means, what she may press, and whom to call.

Closing the job

The job isn't finished until the paperwork is. Sasha completes the CAN/ULC-S537 verification report, with the device record for all 341 devices and every output, the class and battery tests, and the list of deficiencies found and corrected. She saves the final program with its version number and date to the building's records and to Bramwell's archive, sets the panel's clock and site passcodes, changes the default programming passcode, and updates the point list, matrix and record drawings to show the kitchenette heat detector and the closet detector. The documents go into the cabinet beside the panel and to the owner.

Summary of the Tamarind House panel replacement.
ItemResult
Devices found and tested341, including two corrected in the records
Program corrections from testingDuct detector moved to the AHU-2 group
Field corrections from testingFloor 6 waterflow retard shortened to bring the time under 90 s
Class testsLoop 1 open and ground passed; loop 2 short confined to floor 5
BatteriesStandby and alarm load test passed
MonitoringAlarm, supervisory, trouble and both path troubles received
RecordsProgram archived; point list, matrix and drawings updated

At the debrief, Gerry asks Sasha what she would do differently. She says she would build the groups from the matrix itself, not from the old program's notes, because that is where the duct detector slip came from. Gerry agrees, and adds one thing of his own: the two devices nobody knew about were found because she walked the floors with the point list before the swap. 'Most people would have trusted the old records,' he says. 'Those two would have been missing from the new system for another seventeen years.'

Worked problem

Deciding whether a retest is enough

After moving the duct detector to the AHU-2 group and downloading the corrected program, Sasha retests the duct detector and AHU-2 stops. Is that retest enough?

Show solution
  1. The program change touched the AHU-1 and AHU-2 groups, not just one device.
  2. Any other device in those groups could have been affected by the edit.
  3. The safe retest covers every input in both groups and both fan shutdowns, plus a check that nothing else changed.
  4. A program comparison between the tested version and the corrected version confirms that only the group membership changed.

Answer: Sasha runs the program comparison, which shows a single change, then retests every device in both AHU groups with both fans running. All pass, and the comparison and retests are attached to the report.

Handing over to the service team

Before the job closes, Sasha meets the Bramwell service technician who will look after Tamarind House from now on. She walks him through the new panel, shows him where the remote power supplies and their breakers are, gives him the program version and the passcodes his access level needs, and explains the two record corrections. The annual inspection date is set for twelve months after the acceptance test, and the service file is updated with the new equipment's part numbers and battery date codes.

Common mistakes

  • MistakeConverting an old panel's program without checking it.

    InsteadBuild the new program from the point list and the matrix.

  • MistakeTrusting old records for the device count.

    InsteadWalk the floors and compare the loop scan with the point list.

  • MistakeLeaving the system out of service without a fire watch.

    InsteadSend the impairment notice and arrange the fire watch first.

  • MistakeRecording retests in place of the original failures.

    InsteadRecord both, so the report shows what was found and fixed.

  • MistakeFinishing without updating the records and passcodes.

    InsteadArchive the program, update documents and set site passcodes.

Summary and key terms

  • A panel replacement is a full system test, because every input and output passes through new equipment.
  • The program is built from the point list and the matrix, simulated and reviewed before the swap.
  • Swap day needs an impairment notice, a fire watch, careful terminations and a loop scan against the point list.
  • Testing covers every device and output, class tests, notification circuit and power supply troubles, batteries and monitoring.
  • Failures are fixed, retested and recorded alongside the originals.
  • The CAN/ULC-S537 report, archived program and updated records close the job.
Impairment notice
A notice to the owner, monitoring and fire department that a system will be out of service.
Fire watch
A person patrolling a building to detect and report fire while the system is impaired.
Loop scan
The panel discovering every device on a loop and its type.
Verification report
The document recording the installed system and its test results.
Retest
Testing again after a correction, recorded with the original failure.
Program archive
Stored copies of each version of the site program with dates.

Practice problems

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

  1. Why did the fire department ask for a full test, not just a test of the new panel?

    Show answer

    Every input and output now passes through new equipment.

  2. What found the two unrecorded detectors?

    Show answer

    Walking the floors with the point list and comparing the loop scan.

  3. Why did the duct detector not stop AHU-2?

    Show answer

    It had been put in the AHU-1 group in the new program.

  4. What does a program comparison prove before a retest?

    Show answer

    Which parts of the program changed, so the retest covers them.

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz