{ descr: "Numeric HMI Can Controller", vars: { params: { can_timeout: { descr: "Timeouts if no RX in this period", val: 200000, unit: "ms", }, }, input: { }, private: { }, output: { online: { type: "uint64_t", ui_type: "bool", descr: "CAN is online", val: 0, }, status: { type: "uint64_t", descr: "Status", val: 0, }, qm: { type: "uint64_t", descr: "Mass flow", val: 0, }, qv: { type: "uint64_t", descr: "Volume flow", val: 0, }, p_rise: { type: "uint64_t", descr: "Pressure rise", val: 0, }, p_out: { type: "uint64_t", descr: "Pressure out", val: 0, }, c_ref: { type: "uint64_t", descr: "Comp ref", val: 0, }, c_place: { type: "uint64_t", descr: "Control place", val: 0, }, run_l: { type: "uint64_t", descr: "Running Led", val: 0, }, fault_l: { type: "uint64_t", descr: "Fault Led", val: 0, }, warn_l: { type: "uint64_t", descr: "Warn Led", val: 0, }, }, timers: { run_time: { descr: "Elapsed from start", }, last_rx: { descr: "Elapsed from latest rx", }, last_online: { descr: "Elapsed from lastest online", } }, }, funcs: { is_bus_offline: "last_online < 1000", is_rx_silent: "( last_rx > can_timeout ) || ( last_rx == 0 )", is_rx_live: "( ! is_rx_silent ) && ( ! is_bus_offline )", is_rx_not_live: "! is_rx_live", resetti: 'event == 18', }, transitions: { start: { sources : ["INIT"], when: true, color: "cyan", target: "OFFLINE", descr: "Auto Start", set: { online: 0, last_rx: 0, last_online: 1, }, }, live: { sources : ["OFFLINE"], when: "is_rx_live", color: "lightgreen", descr: "It's Alive", target: "ONLINE", set: { online: 1, }, }, dead: { sources : ["ONLINE"], color: "lightblue", descr: "Now it died", when: "is_rx_not_live", target: "OFFLINE", set: { online: 0, }, }, reset: { sources : ["*"], when: "resetti", descr: "Reset Time", color: "pink", target: "INIT", set: { } } }, events: { CAN_RX_1: { descr: "ICE Status to display", id: 1, color: "lightgreen", args: { status: { type: "uint64_t", descr: "status", }, }, }, CAN_RX_2: { descr: "ICE Mass flow", id: 2, color: "lightgreen", args: { qm: { type: "uint64_t", descr: "mass flow", }, }, }, CAN_RX_3: { descr: "ICE Pressure rise", id: 3, color: "lightgreen", args: { p_rise: { type: "uint64_t", descr: "pressure rise", }, }, }, CAN_RX_4: { descr: "ICE Running Led pattern", id: 4, color: "lightgreen", args: { run_l: { type: "uint64_t", descr: "run pattern", }, }, }, CAN_RX_5: { descr: "ICE Fault Led pattern", id: 5, color: "lightgreen", args: { fault_l: { type: "uint64_t", descr: "fault pattern", }, }, }, CAN_RX_6: { descr: "ICE Warning Led pattern", id: 6, color: "lightgreen", args: { warn_l: { type: "uint64_t", descr: "warn pattern", }, }, }, CAN_RX_7: { descr: "ICE Comp reference", id: 7, color: "lightgreen", args: { c_ref: { type: "uint64_t", descr: "comp ref", }, }, }, CAN_RX_10: { descr: "ICE Comp control place", id: 10, color: "lightgreen", args: { c_place: { type: "uint64_t", descr: "control place", }, }, }, CAN_RX_12: { descr: "ICE Volume flow", id: 12, color: "lightgreen", args: { qv: { type: "uint64_t", descr: "Volume flow", }, }, }, CAN_RX_13: { descr: "ICE Pout,qm,qv", id: 13, color: "lightgreen", args: { p_out: { type: "uint64_t", descr: "p out", }, qm: { type: "uint64_t", descr: "Mass flow", }, qv: { type: "uint64_t", descr: "Volume flow", }, }, }, CAN_RX_14: { descr: "ICE Status and ref", id: 14, color: "lightgreen", args: { status: { type: "uint64_t", descr: "status", }, qv: { type: "uint64_t", descr: "Volume flow", }, }, }, BUS_OFF: { descr: "CAN BUS Offline from h/w", id: 0x11, color: "magenta", args: { state: { type: "uint64_t", descr: "Offline State", }, }, }, RESET: { descr: "Reset Button is pressed", id: 0x12, color: "lightblue", args: { }, }, }, states: { INIT: { descr: "Initial State", color: "cyan", on_exit: { run_time: 1, last_rx: 0, event: 0 } }, ONLINE: { descr: "Online State", color: "Aquamarine", }, OFFLINE: { descr: "Offline State", color: "FireBrick", }, }, }