17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-02 01:09:13 +01:00
Files
maszyna/tools/vehicle_graph/examples/vectron.vhg

255 lines
21 KiB
Plaintext

// electric locomotive Vectron, built from its .fiz: the whole vehicle defined by the graph.
// induction motors with inverters (drive.async with the Engine: parameters of the .fiz), EStED distributor with the
// electrodynamic brake blending, MHZ_K8P driver's brake valve, FD1 independent brake valve, spring brake,
// vigilance device with separate acknowledgement of the cab signal.
// the submodel names of the cab and the sound files are placeholders, to be replaced with the ones of the cab model
{
"format": "maszyna-vehicle-graph",
"version": 2,
"vehicle": { "name": "Vectron" },
"settings": { "low_voltage_simulation": false },
"body": {
"category": "train", "mass": 90000, "mass_rotating": 12000, "vmax": 160, "power": 5200, "sand_capacity": 700,
"length": 18.925, "height": 3.95, "width": 2.95, "cx": 0.1,
"wheel_diameter": 1.25, "wheel_inertia": 4000, "track_gauge": 1.435, "axle_arrangement": "Bo'Bo'", "axle_distance": 3, "bogie_distance": 9.5, "min_radius": 80,
"coupler_type": "Screw", "coupler_kb": 9200, "coupler_dmax_b": 0.15, "coupler_fmax_b": 740, "coupler_kc": 4800, "coupler_dmax_c": 0.15, "coupler_fmax_c": 780,
"coupler_beta": 0.58, "coupler_allowed_flag": 103,
"max_load": 7, "load_unit": "pieces", "load_accepted": "pantstate", "load_speed": 1, "unload_speed": 0.1,
"light_color": "255 255 228",
"collector_type": "WBL85", "collector_max_voltage": 4200, "collector_max_current": 2000, "collector_min_h": 0.38, "collector_max_h": 2.4, "collector_csw": 1.4,
"collector_min_voltage": 1900, "collector_layout": 3
},
"profiles": { "brake_pipe": 1, "feed_pipe": 1, "heating": 1 },
"nodes": [
// cab controls
{ "id": "bat", "type": "cab.switch", "title": "Battery", "params": { "behaviour": "bistable", "submodel": "battery_sw", "command": "batterytoggle" } },
{ "id": "pant_sel", "type": "cab.switch", "title": "Pantograph selector", "params": { "behaviour": "multi", "positions": 4, "min": 0, "max": 3, "default": 1, "labels": "rear;front;both;rear", "step": 30, "submodel": "pantselect_sw", "key_inc": "pantographselectnext", "key_dec": "pantographselectprevious" } },
{ "id": "pant_raise", "type": "cab.switch", "title": "Raise pantographs", "params": { "behaviour": "monostable", "animation": "move", "step": 4, "submodel": "pantselected_sw", "command": "pantographraiseselected" } },
{ "id": "pant_lower", "type": "cab.switch", "title": "Lower pantographs", "params": { "behaviour": "monostable", "animation": "move", "step": 4, "submodel": "pantselectedoff_sw", "command": "pantographlowerselected" } },
{ "id": "main_sw", "type": "cab.switch", "title": "Main switch", "params": { "behaviour": "multi", "positions": 3, "min": -1, "max": 1, "default": 0, "spring": true, "labels": "off;0;on", "step": 40, "offset": -40, "submodel": "main_sw", "key_inc": "linebreakerclose", "key_dec": "linebreakeropen" } },
{ "id": "reverser", "type": "cab.switch", "title": "Direction", "params": { "behaviour": "multi", "positions": 3, "min": -1, "max": 1, "default": 0, "labels": "back;0;forward", "step": 45, "offset": -45, "submodel": "dirkey", "key_inc": "reverserincrease", "key_dec": "reverserdecrease" } },
{ "id": "lever", "type": "cab.switch", "title": "Power/brake lever", "params": { "behaviour": "multi", "positions": 31, "min": -1, "max": 1, "default": 0, "step": 2, "offset": -30, "submodel": "jointctrl", "key_inc": "mastercontrollerincrease", "key_dec": "mastercontrollerdecrease" } },
{ "id": "brake", "type": "cab.switch", "title": "Driver's brake valve (MHZ_K8P)", "params": { "behaviour": "multi", "positions": 12, "min": -1, "max": 10, "default": 0, "step": 8, "offset": -8, "submodel": "brakectrl", "key_inc": "trainbrakeincrease", "key_dec": "trainbrakedecrease" } },
{ "id": "local", "type": "cab.switch", "title": "Independent brake (FD1)", "params": { "behaviour": "multi", "positions": 11, "min": 0, "max": 1, "default": 0, "step": 9, "submodel": "localbrake", "key_inc": "independentbrakeincrease", "key_dec": "independentbrakedecrease" } },
{ "id": "sb_release", "type": "cab.switch", "title": "Spring brake released", "params": { "behaviour": "bistable", "submodel": "springbraketoggle_bt", "command": "springbraketoggle" } },
{ "id": "ca_reset", "type": "cab.switch", "title": "Vigilance reset", "params": { "behaviour": "monostable", "animation": "move", "step": 4, "submodel": "security_reset_bt", "command": "alerteracknowledge" } },
{ "id": "shp_reset", "type": "cab.switch", "title": "Cab signal reset", "params": { "behaviour": "monostable", "animation": "move", "step": 4, "submodel": "shp_reset_bt", "command": "cabsignalacknowledge" } },
{ "id": "sand_bt", "type": "cab.switch", "title": "Sander", "params": { "behaviour": "monostable", "animation": "move", "step": 4, "submodel": "sand_bt", "command": "sandboxactivate" } },
{ "id": "horn_lo", "type": "cab.switch", "title": "Horn low", "params": { "behaviour": "monostable", "animation": "move", "step": 4, "submodel": "hornlow_bt", "command": "hornlowactivate" } },
{ "id": "horn_hi", "type": "cab.switch", "title": "Horn high", "params": { "behaviour": "monostable", "animation": "move", "step": 4, "submodel": "hornhigh_bt", "command": "hornhighactivate" } },
{ "id": "lights_sw", "type": "cab.switch", "title": "Head lights", "params": { "behaviour": "bistable", "submodel": "lights_sw", "command": "headlighttoggleupper" } },
{ "id": "heat_sw", "type": "cab.switch", "title": "Train heating", "params": { "behaviour": "bistable", "submodel": "trainheating_sw", "command": "heatingtoggle" } },
// pantographs: the selector chooses them, the buttons raise and lower the selection
{ "id": "pant_cmd_on", "type": "logic.and", "title": "Raising with battery" },
{ "id": "no_lower", "type": "logic.not", "title": "Lower button released" },
{ "id": "pant_cmd_off", "type": "logic.nand", "title": "Lowering or battery off" },
{ "id": "pant_cmd", "type": "logic.sr", "title": "Pantographs commanded up" },
{ "id": "sel_front", "type": "logic.compare", "title": "Front selected (1)", "params": { "op": "eq", "value": 1 } },
{ "id": "sel_both", "type": "logic.compare", "title": "Both selected (2)", "params": { "op": "eq", "value": 2 } },
{ "id": "sel_front_any", "type": "logic.or", "title": "Front in the selection" },
{ "id": "sel_rear", "type": "logic.compare", "title": "Rear in the selection", "params": { "op": "ne", "value": 1 } },
{ "id": "pant_f_up", "type": "logic.and", "title": "Front pantograph valve" },
{ "id": "pant_r_up", "type": "logic.and", "title": "Rear pantograph valve" },
{ "id": "pf", "type": "el.pantograph", "title": "Front pantograph", "params": { "index": 0, "raise_time": 5, "lower_time": 1, "min_pressure": 3.5 } },
{ "id": "pr", "type": "el.pantograph", "title": "Rear pantograph", "params": { "index": 1, "raise_time": 5, "lower_time": 1, "min_pressure": 3.5 } },
{ "id": "hv", "type": "el.junction", "title": "Roof line" },
// main circuit
{ "id": "ms_on_req", "type": "logic.compare", "title": "Main switch to on", "params": { "op": "gt", "value": 0 } },
{ "id": "ms_off_req", "type": "logic.compare", "title": "Main switch to off", "params": { "op": "lt", "value": 0 } },
{ "id": "ms_close", "type": "logic.and", "title": "Closing with battery" },
{ "id": "ms", "type": "el.hsb", "title": "Main circuit breaker", "params": { "trip_current": 3000, "close_time": 0.2, "min_voltage": 1900, "init_time": 10 } },
{ "id": "conv", "type": "el.converter", "title": "Auxiliary converter", "params": { "power": 120000, "start_time": 10, "min_voltage": 1900, "out_voltage": 400 } },
{ "id": "batt", "type": "el.battery", "title": "Battery", "params": { "voltage": 24, "capacity": 200, "min_voltage": 18 } },
{ "id": "heat", "type": "if.heat", "title": "Train heating", "params": { "side": "rear" } },
// drive
{ "id": "dir_set", "type": "logic.compare", "title": "Direction selected", "params": { "op": "ne", "value": 0 } },
{ "id": "drive_ok", "type": "logic.and", "title": "Ready to drive" },
{ "id": "demand", "type": "lua.block", "title": "Power/brake demand", "params": { "lua.ramp_up": 0.5, "lua.ramp_down": 1.0 }, "lua": "-- combined power/brake lever of the Vectron: forward of zero sets the traction demand, back of zero the\n-- electrodynamic brake demand. both follow the lever with limited rates, and drop to zero when the locomotive\n-- isn't ready to drive (no direction selected or main circuit open)\nlocal function approach(value, target, up, down, dt)\n if target > value then\n return math.min(target, value + up * dt)\n end\n return math.max(target, value - down * dt)\nend\n\nblock \"power_brake\" {\n inputs = { lever = \"float\", ready = \"bool\" },\n outputs = { traction = \"float\", ed_brake = \"float\" },\n params = { ramp_up = 0.5, ramp_down = 1.0 }, -- per second\n state = { t = 0.0, b = 0.0 },\n\n update = function(self, i, o, dt)\n local want_t, want_b = 0.0, 0.0\n if i.ready then\n want_t = math.max(i.lever, 0.0)\n want_b = math.max(-i.lever, 0.0)\n end\n self.t = approach(self.t, want_t, self.ramp_up, self.ramp_down, dt)\n self.b = approach(self.b, want_b, self.ramp_up, self.ramp_down, dt)\n o.traction = self.t\n o.ed_brake = self.b\n end,\n}\n" },
{ "id": "set_force", "type": "logic.math", "title": "Traction minus electric brake", "params": { "op": "sub" } },
{ "id": "motors", "type": "drive.async", "title": "Inverters and induction motors", "params": {
"dfic": 931, "dfmax": 1.67, "p": 2, "cfu": 29, "cim": 8.86, "icif": 0.642, "uzmax": 2216, "uzh": 2216, "du": 20, "i0": 20, "fcfu": 30,
"f0": 340, "a1": 0.35, "pmax": 5200, "fh": 150, "ph": 5200, "vh0": 5, "vh1": 10, "imax": 2500, "abed": 1, "edep": 1.5, "flat": true,
"motors": 4, "ratio": 4.7, "eff": 1.0 } },
{ "id": "gear", "type": "drive.gear", "title": "Gear 10:47", "params": { "ratio": 4.7, "eff": 1.0 } },
{ "id": "axles", "type": "drive.axle", "title": "Driven axles", "params": { "powered_axles": 4 } },
// air
{ "id": "comp_on", "type": "logic.and", "title": "Compressor allowed" },
{ "id": "comp", "type": "pn.compressor", "title": "Compressor", "params": { "flow": 0.06, "max_pressure": 9.9, "min_voltage": 300, "power": 15000 } },
{ "id": "gov", "type": "pn.governor", "title": "Pressure governor", "params": { "min": 8.5, "max": 9.9 } },
{ "id": "res", "type": "pn.reservoir", "title": "Main reservoir", "params": { "volume": 0.8 } },
{ "id": "k8p", "type": "br.handle", "title": "MHZ_K8P", "params": { "type": "MHZ_K8P", "lock_on": 3.0, "lock_off": 4.5, "unlock_pos": -1, "emergency_cuts_off": true } },
{ "id": "pipe", "type": "br.pipe", "title": "Brake pipe" },
{ "id": "fd1", "type": "br.local_handle", "title": "FD1", "params": { "type": "FD1" } },
{ "id": "dist", "type": "br.distributor", "title": "EStED distributor", "params": {
"type": "EStED", "mode": "GPR", "max_bp": 3.7, "max_lbp": 3.7, "cyl_count": 8, "cyl_radius": 0.127, "cyl_dist": 0.04, "volume": 125, "rm": 0.81,
"delay1": 15, "delay2": 4, "delay3": 35, "delay4": 25, "asb": "automatic" } },
{ "id": "rig", "type": "br.rigging", "title": "Brake rigging (discs)", "params": { "bcm": 2.7, "bcs": 0.8, "bsa": 0, "bre": 1.0, "nbpa": 4, "material": "Disk2" } },
{ "id": "spring", "type": "pn.spring_brake", "title": "Spring brake", "params": {
"volume": 10, "mbf": 8, "max_sp": 5.5, "reset_p": 4.0, "min_fp": 3.5, "press_off": 4.5, "press_on": 3.5, "valve_on_area": 0.0002, "valve_off_area": 0.0002,
"valve_pnb_area": 0.002 } },
{ "id": "pg_front", "type": "if.pg", "title": "Brake pipe, front", "params": { "side": "front" } },
{ "id": "pg_rear", "type": "if.pg", "title": "Brake pipe, rear", "params": { "side": "rear" } },
{ "id": "pz_front", "type": "if.pz", "title": "Feed pipe, front", "params": { "side": "front", "cock": true } },
{ "id": "pz_rear", "type": "if.pz", "title": "Feed pipe, rear", "params": { "side": "rear", "cock": true } },
// vehicle
{ "id": "vs", "type": "veh.state", "title": "Motion" },
{ "id": "ca", "type": "sec.ca", "title": "Vigilance device (CA/SHP)", "params": {
"aware": true, "cab_signal": true, "separate_ack": true, "aware_delay": 30, "sound_delay": 0, "emergency_delay": 5, "max_hold_time": 1.0, "radio_stop": true } },
{ "id": "sand", "type": "veh.sander", "title": "Sander" },
{ "id": "pc1", "type": "logic.const", "title": "Pc1: three white lights", "params": { "value": 21 } },
{ "id": "pc_front", "type": "logic.math", "title": "Front lights when switched on", "params": { "op": "mul" } },
{ "id": "lights", "type": "veh.lights", "title": "Lights" },
// indicators
{ "id": "ms_open", "type": "logic.not", "title": "Main circuit open" },
{ "id": "ms_lamp", "type": "logic.and", "title": "Main circuit lamp powered" },
{ "id": "pant_not_up", "type": "logic.not", "title": "Pantograph not up yet" },
{ "id": "pant_moving", "type": "logic.and", "title": "Pantograph moving" },
{ "id": "sb_lamp", "type": "logic.and", "title": "Spring brake lamp powered" },
{ "id": "lamp_ms", "type": "fb.lamp", "title": "Main circuit", "params": { "color": "red", "submodel": "i-mainbreaker" } },
{ "id": "lamp_pant", "type": "fb.lamp", "title": "Pantograph moving", "params": { "color": "yellow", "blink": true, "blink_period": 1.0, "submodel": "i-pantraising" } },
{ "id": "lamp_sb", "type": "fb.lamp", "title": "Spring brake applied", "params": { "color": "red", "submodel": "i-springbrake" } },
{ "id": "lamp_ca", "type": "fb.lamp", "title": "Vigilance", "params": { "color": "white", "submodel": "i-security_aware" } },
{ "id": "lamp_shp", "type": "fb.lamp", "title": "Cab signal", "params": { "color": "white", "submodel": "i-security_cabsignal" } },
{ "id": "hv_volts", "type": "logic.math", "title": "Voltage of the roof line", "params": { "op": "max" } },
{ "id": "g_hv", "type": "fb.gauge", "title": "Catenary voltage", "params": { "min": 0, "max": 4000, "unit": "V", "angle_min": 0, "angle_max": 270, "submodel": "hvoltage" } },
{ "id": "g_force", "type": "fb.gauge", "title": "Tractive force", "params": { "min": -150000, "max": 300000, "unit": "N", "angle_min": -90, "angle_max": 180, "submodel": "tractionforce" } },
{ "id": "g_v", "type": "fb.gauge", "title": "Speedometer", "params": { "min": 0, "max": 200, "unit": "km/h", "angle_min": 0, "angle_max": 300, "submodel": "tachometer" } },
{ "id": "g_pipes", "type": "fb.manometer", "title": "Brake pipe and main reservoir", "params": { "min": 0, "max": 10, "submodel": "pipepress", "submodel2": "compressor" } },
{ "id": "g_bc", "type": "fb.gauge", "title": "Brake cylinders", "params": { "min": 0, "max": 10, "unit": "bar", "angle_min": 0, "angle_max": 270, "submodel": "cylinder" } },
{ "id": "x_v", "type": "fb.export", "title": "Speed for the screens", "params": { "name": "graph_velocity", "kind": "float" } },
{ "id": "x_force", "type": "fb.export", "title": "Force for the screens", "params": { "name": "graph_force", "kind": "float" } },
{ "id": "snd_base", "type": "logic.const", "title": "Idle volume", "params": { "value": 0.3 } },
{ "id": "snd_gain", "type": "logic.math", "title": "Volume rising with demand", "params": { "op": "add" } },
{ "id": "snd_inverter", "type": "fb.sound", "title": "Inverters", "params": { "file": "vectron-inverter.wav", "placement": "engine", "loop": true } },
{ "id": "snd_comp", "type": "fb.sound", "title": "Compressor", "params": { "file": "vectron-compressor.wav", "placement": "engine", "loop": true } },
{ "id": "snd_buzzer", "type": "fb.sound", "title": "Vigilance buzzer", "params": { "file": "buzzer.wav", "placement": "internal", "loop": true } },
{ "id": "snd_horn_lo", "type": "fb.sound", "title": "Horn low", "params": { "file": "horn1.wav", "placement": "external", "range": 1000, "loop": true } },
{ "id": "snd_horn_hi", "type": "fb.sound", "title": "Horn high", "params": { "file": "horn2.wav", "placement": "external", "range": 1000, "loop": true } }
],
"connections": [
{ "from": "bat.pos", "to": "batt.on" },
{ "from": "conv.aux", "to": "batt.charge" },
{ "from": "pant_raise.pos", "to": "pant_cmd_on.a" },
{ "from": "bat.pos", "to": "pant_cmd_on.b" },
{ "from": "pant_lower.pos", "to": "no_lower.a" },
{ "from": "no_lower.q", "to": "pant_cmd_off.a" },
{ "from": "bat.pos", "to": "pant_cmd_off.b" },
{ "from": "pant_cmd_on.q", "to": "pant_cmd.s" },
{ "from": "pant_cmd_off.q", "to": "pant_cmd.r" },
{ "from": "pant_sel.pos", "to": "sel_front.a" },
{ "from": "pant_sel.pos", "to": "sel_both.a" },
{ "from": "pant_sel.pos", "to": "sel_rear.a" },
{ "from": "sel_front.q", "to": "sel_front_any.a" },
{ "from": "sel_both.q", "to": "sel_front_any.b" },
{ "from": "pant_cmd.q", "to": "pant_f_up.a" },
{ "from": "sel_front_any.q", "to": "pant_f_up.b" },
{ "from": "pant_cmd.q", "to": "pant_r_up.a" },
{ "from": "sel_rear.q", "to": "pant_r_up.b" },
{ "from": "pant_f_up.q", "to": "pf.raise" },
{ "from": "pant_r_up.q", "to": "pr.raise" },
{ "from": "res.out", "to": "pf.air" },
{ "from": "res.out", "to": "pr.air" },
{ "from": "pf.wn", "to": "hv.a" },
{ "from": "pr.wn", "to": "hv.b" },
{ "from": "main_sw.pos", "to": "ms_on_req.a" },
{ "from": "main_sw.pos", "to": "ms_off_req.a" },
{ "from": "ms_on_req.q", "to": "ms_close.a" },
{ "from": "bat.pos", "to": "ms_close.b" },
{ "from": "ms_close.q", "to": "ms.close" },
{ "from": "ms_off_req.q", "to": "ms.open" },
{ "from": "bat.pos", "to": "ms.hold" },
{ "from": "hv.out", "to": "ms.in" },
{ "from": "ms.out", "to": "conv.wn" },
{ "from": "ms.closed", "to": "conv.on" },
{ "from": "ms.out", "to": "heat.wn" },
{ "from": "heat_sw.pos", "to": "heat.on" },
{ "from": "reverser.pos", "to": "dir_set.a" },
{ "from": "dir_set.q", "to": "drive_ok.a" },
{ "from": "ms.closed", "to": "drive_ok.b" },
{ "from": "lever.pos", "to": "demand.lever" },
{ "from": "drive_ok.q", "to": "demand.ready" },
{ "from": "demand.traction", "to": "set_force.a" },
{ "from": "demand.ed_brake", "to": "set_force.b" },
{ "from": "ms.out", "to": "motors.wn" },
{ "from": "set_force.q", "to": "motors.demand" },
{ "from": "reverser.pos", "to": "motors.dir" },
{ "from": "motors.shaft", "to": "gear.in" },
{ "from": "gear.out", "to": "axles.shaft" },
{ "from": "conv.aux", "to": "comp.power" },
{ "from": "gov.need", "to": "comp_on.a" },
{ "from": "bat.pos", "to": "comp_on.b" },
{ "from": "comp_on.q", "to": "comp.on" },
{ "from": "comp.air", "to": "res.in" },
{ "from": "res.p", "to": "gov.p" },
{ "from": "res.out", "to": "k8p.zg" },
{ "from": "brake.pos", "to": "k8p.pos" },
{ "from": "k8p.pg", "to": "pipe.in" },
{ "from": "ca.brake", "to": "pipe.vent" },
{ "from": "res.out", "to": "fd1.zg" },
{ "from": "local.pos", "to": "fd1.pos" },
{ "from": "pipe.dist", "to": "dist.pg" },
{ "from": "res.pz", "to": "dist.feed" },
{ "from": "fd1.bc", "to": "dist.local" },
{ "from": "motors.ed", "to": "dist.ed" },
{ "from": "dist.bc", "to": "rig.bc" },
{ "from": "sb_release.pos", "to": "spring.release" },
{ "from": "res.out", "to": "spring.feed" },
{ "from": "spring.force", "to": "rig.spring" },
{ "from": "pipe.couplers", "to": "pg_front.pg" },
{ "from": "pipe.couplers", "to": "pg_rear.pg" },
{ "from": "res.pz", "to": "pz_front.pz" },
{ "from": "res.pz", "to": "pz_rear.pz" },
{ "from": "vs.v", "to": "ca.v" },
{ "from": "batt.ok", "to": "ca.power" },
{ "from": "ca_reset.pos", "to": "ca.reset" },
{ "from": "shp_reset.pos", "to": "ca.reset_shp" },
{ "from": "sand_bt.pos", "to": "sand.on" },
{ "from": "pc1.q", "to": "pc_front.a" },
{ "from": "lights_sw.pos", "to": "pc_front.b" },
{ "from": "pc_front.q", "to": "lights.front" },
{ "from": "ms.closed", "to": "ms_open.a" },
{ "from": "ms_open.q", "to": "ms_lamp.a" },
{ "from": "batt.ok", "to": "ms_lamp.b" },
{ "from": "ms_lamp.q", "to": "lamp_ms.on" },
{ "from": "pf.up", "to": "pant_not_up.a" },
{ "from": "pant_cmd.q", "to": "pant_moving.a" },
{ "from": "pant_not_up.q", "to": "pant_moving.b" },
{ "from": "pant_moving.q", "to": "lamp_pant.on" },
{ "from": "spring.applied", "to": "sb_lamp.a" },
{ "from": "batt.ok", "to": "sb_lamp.b" },
{ "from": "sb_lamp.q", "to": "lamp_sb.on" },
{ "from": "ca.lamp", "to": "lamp_ca.on" },
{ "from": "ca.shp_lamp", "to": "lamp_shp.on" },
{ "from": "pf.u", "to": "hv_volts.a" },
{ "from": "pr.u", "to": "hv_volts.b" },
{ "from": "hv_volts.q", "to": "g_hv.value" },
{ "from": "axles.force", "to": "g_force.value" },
{ "from": "vs.v", "to": "g_v.value" },
{ "from": "pipe.p", "to": "g_pipes.black" },
{ "from": "res.p", "to": "g_pipes.red" },
{ "from": "dist.bc", "to": "g_bc.value" },
{ "from": "vs.v", "to": "x_v.value" },
{ "from": "axles.force", "to": "x_force.value" },
{ "from": "ms.closed", "to": "snd_inverter.play" },
{ "from": "snd_base.q", "to": "snd_gain.a" },
{ "from": "demand.traction", "to": "snd_gain.b" },
{ "from": "snd_gain.q", "to": "snd_inverter.volume" },
{ "from": "comp.run", "to": "snd_comp.play" },
{ "from": "ca.buzzer", "to": "snd_buzzer.play" },
{ "from": "horn_lo.pos", "to": "snd_horn_lo.play" },
{ "from": "horn_hi.pos", "to": "snd_horn_hi.play" }
]
}