Appearance
Reference — Bloc 8 power module
The device this module publishes
| Device | Function | Instance | What it carries |
|---|---|---|---|
| Power outputs, Bloc 8 | 1 | the configured InstanceNum, 0…62 | the whole module: outputs, inputs, currents, voltage |
The module publishes one device and one only. Its instance is the InstanceNum parameter; the factory value is 255, which means not addressed — the module then parks at instance 63, answers requests there, and publishes nothing periodic.
Its address on the bus, the -d of muxen-uds, is function × 64 + instance — instance 3 is device id 67. On the Brain its topics are device/1/<instance>/….
Frames
| Frame | Broadcast id | Topic | Sent |
|---|---|---|---|
| Boot | common | — | once at startup, with the count of software restarts |
| UID | common | — | on request |
| Life | 1 | life | every 500 ms, and on every output change |
| I/O | 2 | io | on a digital-input change, on an analog change of 100 mV or more, and at least every GenIoMaxSendingPeriod |
| Current 1 (outputs 1…4) | 4 | current1 | every 500 ms while current publication is on |
| Current 2 (outputs 5…8) | 5 | current2 | every 500 ms while current publication is on |
| Voltage | 7 | voltage | every second |
| Level | 10 | level | once at startup, then on change, at most every 500 ms — see below |
Each of them is also sent on request, so a screen coming up does not have to wait for the next period.
Nothing periodic is sent while the module has no instance number of its own. Requests are still answered.
Output levels, in the level frame
Eight bytes, level0 to level7 for outputs 1 to 8: the level each output is driven at right now, 0…100 %, a ramp in progress included. An output that does not dim reads 0 or 100.
| Value | Meaning |
|---|---|
0…100 | the output's level |
255 | no level to give: the output tripped (short-circuit or not-connected), or the module is parked at 63 |
A change goes out at once. Changes within the next 500 ms are held back, and the latest one is sent when that window ends — so a ramp is seen twice a second, and its final level always arrives. The frame is not repeated periodically: a listener that starts later asks for it.
Output states, in the life frame
| Code | Meaning |
|---|---|
0 | power-off |
1 | power-on |
2 | short-circuit — the overcurrent tripped |
3 | not-connected — the open-load detection tripped |
Commands
One point-to-point frame, addressed to function 1 and the module's instance. On the Brain: device/1/<instance>/command.
| Field | Values | Effect |
|---|---|---|
channel | 0…7 | the output, 0 being output 1 |
requestOn | true | switch that output on |
requestOff | true | switch that output off |
dimming | 1…100 | dimming level, clamped into the output's range. Ignored on an output that is not dimmable. 0 and anything above 100 leave the level alone |
channel | 8 | the frame carries the two flags below instead of an output command |
requestOnPublishCurrent | true | start the per-output current frames |
requestOffPublishCurrent | true | stop them |
The current publication asked for this way is not saved: it is off again after a restart, unless EnCurrentPeriodic says otherwise. The publication period is fixed at 500 ms.
On a non-latching output a command is a hold of 5 seconds, not a switch: after that the output follows its pad and its equation again. On a latching or monostable output it acts like a press.
How an output behaves
Three inputs reach every output: its pad on the front panel, commands from the bus, and its own equation. They are equivalent — any of them triggers the output.
What wins, from the top:
- Safety — the supply outside
VBatMin…VBatMax, or no instance number: every output is held at 0. - Overcurrent — the output is forced to 0 and reports short-circuit until it is commanded off.
- Open load — same, reporting not-connected.
- A command from the bus — an override on a non-latching output, a press like any other on a latching or monostable one.
- The pad and the equation.
The three modes
LatchOut<n> | Mode | Behaviour |
|---|---|---|
0 | non-latching | on while something asks for it, off when nothing does. Holding the pad for 5 s locks it on until the next press |
1 | latching | each press toggles it. The default |
2 | monostable | each press starts a pulse of OffDelayOut<n>. MonoOutRetrigger<n> says what a second press during the pulse does: 0 — restart the pulse1 — cancel it |
Delays
| Parameter | Latching and non-latching | Monostable |
|---|---|---|
OnDelayOut<n> | delay between the request and the output coming on | delay before the pulse starts |
OffDelayOut<n> | delay between the request and the output going off | length of the pulse |
Both delays are cancelled by a new request during the delay. They are ignored on a dimmable output.
Dimming
Only on a latching output with Dimmable<n> = 1. The level lives between DimmingMiniLvl<n> and DimmingDfltLvl<n>; a long press — longer than GlobOutLongPushDly — ramps it up and down over that range, one full sweep taking GlobOutDimRamp, and releasing freezes it. The level is remembered until the next restart, when it starts again at the maximum.
A minimum above the maximum is refused: see Common mistakes — Bloc 8 power module.
Flashing
FlashOutput<n> set to a duration makes a latching output flash while it is on, half the period on and half off. It is ignored on a dimmable output.
At switch-on
Every time an output goes from off to on, the module checks it after 10 ms. On a fault it pulses the output off for 20 ms and on again, up to 256 times, before declaring the overcurrent — an output into a real short chatters briefly, then latches off as short-circuit.
Parameters
Written with muxen-uds writeconfig. The supply window, the sensor supply, the I/O period and the two current-reporting settings take effect at once; everything that decides how an output behaves is read at startup, so write the last one of a batch with --reboot.
The module
| Parameter | Type | Default | Meaning |
|---|---|---|---|
InstanceNum | 0…62 | 255 | the module's instance; 255 means not addressed |
EnAnalogPwr | 0/1 | 1 | supply of the analog sensors: 0 — off1 — on |
VBatMax | mV | 32000 | above this, every output is held off |
VBatMin | mV | 9000 | below this, every output is held off |
EnCurrentPeriodic | 0/1 | 0 | publish the per-output currents from every start |
GenIoMaxSendingPeriod | ms | 5000 | longest silence on the I/O frame; 0 — only on change |
StartupDly | ms | 0 | delay between power-up and the outputs starting |
GlobOutLongPushDly | ms | 3000 | press longer than this is a long press |
GlobOutDimRamp | ms | 1000 | one full dimming sweep, minimum to maximum |
BindToParc | — | autodetect | declared for the family; not used by this firmware |
ProductId, HardwareId, SoftwareId, SoftwareVersion | read-only | see Reference |
Each output, <n> = 1…8
| Parameter | Type | Default | Meaning |
|---|---|---|---|
EqnOut<n> | text, 255 | empty | the output's own rule, over the boat's signals. Empty means no rule |
LatchOut<n> | 0/1/2 | 1 | 0 — non-latching1 — latching2 — monostable |
DefaultSteOut<n> | 0/1 | 0 | state taken at every start: 0 — off1 — on |
MonoOutRetrigger<n> | 0/1 | 0 | monostable, press during the pulse: 0 — restart1 — cancel |
OnDelayOut<n> | ms | 0 | see the delay table above |
OffDelayOut<n> | ms | 0 | see the delay table above |
MaxCurrentOut<n> | mA | 5000 | overcurrent threshold; 0 disables the protection |
MinCurrentOut<n> | mA | 0 | open-load threshold; 0 — disabled |
AlertDelayOut<n> | ms | 200 | how long either threshold must be exceeded before the output trips |
Dimmable<n> | 0/1 | 0 | 0 — disabled1 — enabled, latching outputs only |
DimmingDfltLvl<n> | % | 100 | top of the dimming range |
DimmingMiniLvl<n> | % | 10 | bottom of the dimming range. Must stay below the top |
FlashOutput<n> | ms | 0 | flash period while on; 0 — steady |
DegradedMode<n> | 0…255 | 0 | load-shedding level: the output is shed when the boat's degraded level rises above it, and comes back only if DefaultSteOut<n> is 1. 0 — never shed |
NomCurrentOut<n> | mA | 0 | nominal current reported when the output is on and the measurement falls below it |
IMeaCoef<n> | — | 17 | converts the measurement into milliamps. Factory value; changing it changes every current this output reports, and its two thresholds with them |
Each virtual signal, <n> = 1…4
Four more equations that switch nothing and are published in the life frame as VirtualSig0 … VirtualSig3 — useful to publish a state the rest of the boat needs without spending an output on it.
| Parameter | Type | Default |
|---|---|---|
EqnVsig<n> | text, 255 | empty |
LatchVsig<n> | 0/1/2 | 0 |
DefaultSteVsig<n> | 0/1 | 0 |
MonoOutRetriggerVsig<n> | 0/1 | 0 |
OnDelayVsig<n> | ms | 0 |
OffDelayVsig<n> | ms | 0 |
Routines
| Routine | Payload | Effect |
|---|---|---|
| 1 | 0001 | restore the instance number to its default |
| 1 | any bit above bit 0 | restore every other parameter — erases the equations and the trip settings |
| 2 | — | locate: the eight cells of the front panel flash three times |
| 16 | built by muxen-uds legend | write one label image to a zone of the front panel |
The front panel
The panel is a slave of the module: it has no address, no configuration and no bus of its own, and everything it shows comes from the module.
| Link | internal, 20 kbaud |
| Output states sent | on every output-processing pass |
| Instance, module status, inputs | one of them every second, in rotation, so each is refreshed about every 4 s |
| Panel refresh | an output cell is repainted when its state changes; a page, or a new label, repaints the whole screen |
| At start | a waiting screen for 5 s, then the output page |
| On silence | after 500 ms with nothing from the module, a POWER OFF page with every output shown off |
The pages
| # | Page | Pads |
|---|---|---|
| 1 | the eight outputs: name and state | switch their output |
| 2 | trip settings: maximum current and delay per output | — |
| 3 | fault codes — reserved, empty in the panel firmware that ships today | — |
| 4 | the six digital inputs | — |
| 5 | the three analog inputs | — |
| 6 | identity: product, software, version, UID | 8 then 1 opens the instance screen |
The two arrows walk the ring. On any page other than the first, the numbered pads switch nothing.
The label zones
One image per zone, 155 × 40 pixels, black and white. The zone number is what muxen-uds legend --zone takes.
| Zone | Labels |
|---|---|
| 16…23 | outputs 1…8 |
| 24 | the module's own name, in the header |
| 25 | the digital-input page title |
| 26…31 | digital inputs 1…6 |
| 32 | the analog-input page title |
| 33…35 | analog inputs 1…3 |
Images are stored in the panel and survive a power cut; they are only replaced when they are pushed again. A transfer takes the module about a second, during which it answers neither the pads nor another image.
Diagnostic codes
| Code | Meaning |
|---|---|
0x0001 | supply voltage above VBatMax |
0x0002 | supply voltage below VBatMin |
0x<n>01 | output <n>: its equation would not parse |
0x<n>02 | output <n>: overcurrent |
0x<n>03 | output <n>: open load |
<n> is the output number, 1…8 — output 3's overcurrent is 0x0302. They are published once a second.
Timings
| Life frame | 500 ms |
| Voltage frame | 1 s |
| Current frames | 500 ms, when on |
| Diagnostic codes | 1 s |
| Voltage debounce, in and out of safety | about 1 s |
| A command from the bus holds a non-latching output for | 5 s |
| A pad held on a non-latching output locks it on after | 5 s |
| The boat's degraded level is forgotten after | 5 s without news |
| System LED | one blink a second; five a second when the supply is out of range |
Versions
| Product ID | 010020008 |
| Hardware ID | 990010072 |
| Software ID | 990050032 |
| Software version | 6.0 |
| Image | 010020008.srec |
Updating the image is the same on every BLOC 8 v2: Loading and updating a firmware. The outputs go off when the module restarts to install it and come back on their DefaultSteOut<n>; the settings and the panel's labels are kept.
