project: rimmer

2026-02-23 - ongoing
the icon for the rimmer programme

this is the test executive which was originally going to be part of skipper but is large enough to be broken out(that and skipper is useful enough on its own to be a separate project).

rimmer currently supports

the general structure of rimmer is based around a shared library and a runtime. the shared library contains all of the actual test executive bits and the runtime application contains some tests, an external module loader, and a test specification loader, validator, and runner.

rimmer test specifications are ".ace" files and are yaml which contains details about TE, the EUT, output report configuration, external test modules, and tests to run

the output reports contain information about any TE used, any provided EUT information, a passfail, readings(truncatable to a configurable level) with links to unmodified logs and readings, and information about the test performed

test pre and post states are states that instruments can be put in before running tests, for example multiplexors may be set to a test specification defined configuration. these are non optional for tests and are presented in the report

the built in tests are

watcher watches one or more parameters of one or more TE with an optional delay. simpleEfficiency gathers I/V and efficiency curves from a power supply using a PSU, load, and scanning DMM

origin of the name
ace rimmer will be a test pilot. a test pilot runs tests. i want this to be ace! therefore: fingers crossed

below is an example ace file which uses a switchBox and a siglent SDM3055 with some resistors

# -*- mode: yaml -*-
---
TE:
  - DMM: DMM
    URL: tcp://192.168.0.13:5025
    driver: "siglent SDM3055(-SC)"
  - switchSet: switches
    URL: tcp://192.168.0.5:5025
    driver: JBDLI switchBox
    channels:
      - 5k:
          bank: 3
          contact: 0
          closed: false
      - 10k:
          bank: 3
          contact: 2
          closed: false
      - 20k:
          bank: 3
          contact: 1
          closed: false
EUT:
  - name: this programme!
  - meta: this field
  - remarks: |
      the EUT is a set of resistors to be wired as follows:-
      * a 5k resistor connected to the C contact of "switches" bank 1 contact 1
      * a 10k resistor connected to the C contact of "switches" bank 1 contact 2
      * a 20k resistor connected to the C contact of "switches" bank 1 contact 3
      * the free end of all of these resistors is to be connected together
      * all three NO contacts should be connected together
      * the two commoned points should be connected to "DMM"
      * DO NOT connect any voltage sources
tests:
  - test: only 5k switch on
    catalogueName: "watcher"
    preState:
      5k:
        - closed: true
      10k:
        - closed: false
      20k:
        - closed: false
    args:
      - sources: DMM.resistance
      - samples: 1
      - expectTolerance: DMM.resistance(5e3 2.5%)
    postState:
      5k:
        - closed: false
      10k:
        - closed: false
      20k:
        - closed: false

  - test: all switches off
    catalogueName: "watcher"
    args:
      - sources: DMM.resistance
      - samples: 1
      - expectAbove: DMM.resistance(10e9)