This commit is contained in:
2026-03-02 17:48:55 -05:00
commit 75678fce4d
27 changed files with 5354 additions and 0 deletions

329
config.yaml Normal file
View File

@@ -0,0 +1,329 @@
# arnold config.yaml — Terminator I/O server configuration
# ─────────────────────────────────────────────────────────────────────────────
# DEVICES
# Each device is a Terminator I/O EBC100 Ethernet base controller.
# Modules are listed in physical slot order (left-to-right after the EBC100).
# Supported module types: T1H-08TDS, T1H-08ND3, T1H-16ND3, T1H-08NA (inputs)
# T1H-08TD1, T1H-08TD2, T1H-16TD1, T1H-08TA, T1H-08TRS (outputs)
# ─────────────────────────────────────────────────────────────────────────────
devices:
- id: ebc100_main
host: 192.168.3.202
port: 502
unit_id: 1
poll_interval_ms: 50 # 20 Hz — well within EBC100 capability
modules:
- slot: 1
type: T1H-08TDS # 8-point 24VDC sinking digital input
points: 8
- slot: 2
type: T1H-08TDS
points: 8
- slot: 3
type: T1H-08TDS
points: 8
# ── Uncomment and adapt when output modules are added ──────────────────
# - slot: 4
# type: T1H-08TD1 # 8-point 24VDC sourcing digital output
# points: 8
# ─────────────────────────────────────────────────────────────────────────────
# LOGICAL I/O
# Give human-readable names to individual I/O points.
# device: must match a devices[].id above
# slot: physical slot number (1-based, matches modules list)
# point: point within that module (1-based, 18 for 8-pt modules)
# direction: must match the module type (input or output)
# ─────────────────────────────────────────────────────────────────────────────
logical_io:
# ── Slot 1 — Module 1 inputs ───────────────────────────────────────────────
- name: input_1_1
device: ebc100_main
slot: 1
point: 1
direction: input
- name: input_1_2
device: ebc100_main
slot: 1
point: 2
direction: input
- name: input_1_3
device: ebc100_main
slot: 1
point: 3
direction: input
- name: input_1_4
device: ebc100_main
slot: 1
point: 4
direction: input
- name: input_1_5
device: ebc100_main
slot: 1
point: 5
direction: input
- name: input_1_6
device: ebc100_main
slot: 1
point: 6
direction: input
- name: input_1_7
device: ebc100_main
slot: 1
point: 7
direction: input
- name: input_1_8
device: ebc100_main
slot: 1
point: 8
direction: input
# ── Slot 2 — Module 2 inputs ───────────────────────────────────────────────
- name: input_2_1
device: ebc100_main
slot: 2
point: 1
direction: input
- name: input_2_2
device: ebc100_main
slot: 2
point: 2
direction: input
- name: input_2_3
device: ebc100_main
slot: 2
point: 3
direction: input
- name: input_2_4
device: ebc100_main
slot: 2
point: 4
direction: input
- name: input_2_5
device: ebc100_main
slot: 2
point: 5
direction: input
- name: input_2_6
device: ebc100_main
slot: 2
point: 6
direction: input
- name: input_2_7
device: ebc100_main
slot: 2
point: 7
direction: input
- name: input_2_8
device: ebc100_main
slot: 2
point: 8
direction: input
# ── Slot 3 — Module 3 inputs ───────────────────────────────────────────────
- name: input_3_1
device: ebc100_main
slot: 3
point: 1
direction: input
- name: input_3_2
device: ebc100_main
slot: 3
point: 2
direction: input
- name: input_3_3
device: ebc100_main
slot: 3
point: 3
direction: input
- name: input_3_4
device: ebc100_main
slot: 3
point: 4
direction: input
- name: input_3_5
device: ebc100_main
slot: 3
point: 5
direction: input
- name: input_3_6
device: ebc100_main
slot: 3
point: 6
direction: input
- name: input_3_7
device: ebc100_main
slot: 3
point: 7
direction: input
- name: input_3_8
device: ebc100_main
slot: 3
point: 8
direction: input
# ── Outputs (uncomment when output module is added) ────────────────────────
# - name: output_4_1
# device: ebc100_main
# slot: 4
# point: 1
# direction: output
# ─────────────────────────────────────────────────────────────────────────────
# SEQUENCES
# name: unique identifier (used in POST /sequences/{name}/run)
# description: human-readable label
# steps: list of timed actions, executed in t_ms order
#
# Step fields:
# t_ms: milliseconds from sequence T=0 when this step fires (absolute)
# action: set_output | check_input
# signal: logical_io name
# state: (set_output only) true=ON false=OFF
# expected: (check_input only) true=ON false=OFF — failure aborts sequence
#
# ─────────────────────────────────────────────────────────────────────────────
sequences:
# ── Example: verify all inputs on module 1 are OFF at rest ────────────────
- name: check_all_inputs_off
description: "Verify all 24 inputs are de-energised (rest state check)"
steps:
- t_ms: 0
action: check_input
signal: input_1_1
expected: false
- t_ms: 0
action: check_input
signal: input_1_2
expected: false
- t_ms: 0
action: check_input
signal: input_1_3
expected: false
- t_ms: 0
action: check_input
signal: input_1_4
expected: false
- t_ms: 0
action: check_input
signal: input_1_5
expected: false
- t_ms: 0
action: check_input
signal: input_1_6
expected: false
- t_ms: 0
action: check_input
signal: input_1_7
expected: false
- t_ms: 0
action: check_input
signal: input_1_8
expected: false
- t_ms: 0
action: check_input
signal: input_2_1
expected: false
- t_ms: 0
action: check_input
signal: input_2_2
expected: false
- t_ms: 0
action: check_input
signal: input_2_3
expected: false
- t_ms: 0
action: check_input
signal: input_2_4
expected: false
- t_ms: 0
action: check_input
signal: input_2_5
expected: false
- t_ms: 0
action: check_input
signal: input_2_6
expected: false
- t_ms: 0
action: check_input
signal: input_2_7
expected: false
- t_ms: 0
action: check_input
signal: input_2_8
expected: false
- t_ms: 0
action: check_input
signal: input_3_1
expected: false
- t_ms: 0
action: check_input
signal: input_3_2
expected: false
- t_ms: 0
action: check_input
signal: input_3_3
expected: false
- t_ms: 0
action: check_input
signal: input_3_4
expected: false
- t_ms: 0
action: check_input
signal: input_3_5
expected: false
- t_ms: 0
action: check_input
signal: input_3_6
expected: false
- t_ms: 0
action: check_input
signal: input_3_7
expected: false
- t_ms: 0
action: check_input
signal: input_3_8
expected: false
# ── Example: output sequencing template (requires output module in slot 4) ─
# - name: actuate_and_verify
# description: "Set output, wait 500ms, verify input feedback"
# steps:
# - t_ms: 0
# action: set_output
# signal: output_4_1
# state: true
# - t_ms: 500
# action: check_input
# signal: input_1_1
# expected: true
# - t_ms: 1000
# action: set_output
# signal: output_4_1
# state: false