Software — DSX

DataStreamerX

Microsoft's Data Streamer, with the parts it is missing.

Available 1.1.0 DSX — command line and desktop app

What it does

An Excel add-in that does what Microsoft's Data Streamer does, and then the things a real bench needs: several devices at once, and not just serial - TCP, a Modbus PLC over TCP or RTU, an SCPI instrument, a CAN bus decoded against a DBC, or the HardwareRTD engine. Plus real-time controls in a task pane and a countdown timer in a cell that fires the logging.

  • Nine kinds of device: serial, TCP out, TCP listen, Modbus TCP, Modbus RTU, SCPI over a socket, CAN, a built-in clock, and the HardwareRTD engine's own channels
  • CAN frames from an SLCAN adapter, decoded against a DBC file so every signal becomes its own named channel - and writable, but only once you tick Allow writes, because the other end of a CAN bus is usually a vehicle
  • Every one of the nine transports can send as well as receive, so =DSX.SEND lets a formula drive the device it is reading
  • =DSX.ADDSERIAL, =DSX.ADDTCP, =DSX.ADDLISTEN, =DSX.REMOVE - attach and detach devices from the sheet
  • =DSX.VALUE, =DSX.STATUS, =DSX.COUNT, =DSX.LASTLINE, =DSX.CHANNELS, =DSX.DEVICES, =DSX.PORTS, =DSX.HISTORY - read them back
  • =DSX.TIMER, =DSX.SETARMED, =DSX.ROWSLOGGED, =DSX.SETLOG - timed logging fired by a countdown in a cell
  • =DSX.SEND - write back to a device, so a formula can drive an instrument
  • Several devices at once, of different kinds, together
  • Task-pane controls while the test runs
The Logging tab. Rows land at Sheet1!$A$1 in a 500-row circular block and capture every channel of every device - here Timestamp, Mega.t_ms, Mega.A0, Mega.Sine, Mega.Ramp and Mega.Count. One row is written each time the five-second timer reaches zero, and =DSX.TIMER("log1", 5) puts that countdown in a cell, so a test starts logging on a timer rather than on a click.
The Logging tab. Rows land at Sheet1!$A$1 in a 500-row circular block and capture every channel of every device - here Timestamp, Mega.t_ms, Mega.A0, Mega.Sine, Mega.Ramp and Mega.Count. One row is written each time the five-second timer reaches zero, and =DSX.TIMER("log1", 5) puts that countdown in a cell, so a test starts logging on a timer rather than on a click.
The Devices tab of the task pane. An Arduino Mega on COM8 at 115200, with DTR asserted on open because most Arduino boards reset when it is - and a note that boards built on the MbLabScpi library repeat their column names every ten seconds, so DTR can stay off for anything that must not restart. The formula to read the device is generated underneath: =DSX.VALUE("Mega", "channel1").
The Devices tab of the task pane. An Arduino Mega on COM8 at 115200, with DTR asserted on open because most Arduino boards reset when it is - and a note that boards built on the MbLabScpi library repeat their column names every ten seconds, so DTR can stay off for anything that must not restart. The formula to read the device is generated underneath: =DSX.VALUE("Mega", "channel1").
The Status tab while a device streams: one device open, none faulted, 3.1 lines a second. Each channel shows its latest value - here a timestamp, a one-second tick and a ten-count - with the raw last line underneath, so a mis-parsed column is obvious rather than mysterious. There is a box to send a line back to the device.
The Status tab while a device streams: one device open, none faulted, 3.1 lines a second. Each channel shows its latest value - here a timestamp, a one-second tick and a ten-count - with the raw last line underneath, so a mis-parsed column is obvious rather than mysterious. There is a box to send a line back to the device.
Controls that write into the sheet rather than into the device. The slider writes 0 to 100 into a cell, throttled to one write every 120 ms so the workbook keeps up; the button writes text. A formula watching that cell closes the loop - the note shows =IF(B3="GO", DSX.SEND(...)) turning a button press into an instrument command.
Controls that write into the sheet rather than into the device. The slider writes 0 to 100 into a cell, throttled to one write every 120 ms so the workbook keeps up; the button writes text. A formula watching that cell closes the loop - the note shows =IF(B3="GO", DSX.SEND(...)) turning a button press into an instrument command.
Twenty of the thirty-two worked dashboards that ship with it, on one sheet. These are not pictures of a product: each is a real two-sheet workbook - a Stream sheet the add-in writes to, and a Live sheet that reads it with ordinary formulas, INDEX and conditional formatting and nothing else. Point the add-in at Stream!A1 with matching channel names and the dashboard starts moving. The sixty rows already in each one are plausible sample data for the trade, so the charts have something to show before anything is connected.
Twenty of the thirty-two worked dashboards that ship with it, on one sheet. These are not pictures of a product: each is a real two-sheet workbook - a Stream sheet the add-in writes to, and a Live sheet that reads it with ordinary formulas, INDEX and conditional formatting and nothing else. Point the add-in at Stream!A1 with matching channel names and the dashboard starts moving. The sixty rows already in each one are plausible sample data for the trade, so the charts have something to show before anything is connected.
A vehicle CAN bus at 500 kbit/s, decoded against a DBC file - engine, driveline and body. Every signal in the file becomes its own channel: engine speed, road speed, coolant temperature, lambda, throttle. The table lists the J1939 messages actually seen on the bus with their ids and rates, and 28,326 frames counted.
A vehicle CAN bus at 500 kbit/s, decoded against a DBC file - engine, driveline and body. Every signal in the file becomes its own channel: engine speed, road speed, coolant temperature, lambda, throttle. The table lists the J1939 messages actually seen on the bus with their ids and rates, and 28,326 frames counted.
Four bench instruments on one sheet, each polled over SCPI at its own VISA address - a Keysight DMM over TCPIP, a Rigol supply over USB, a BK load over a serial port and a Racal counter on GPIB. Four transports, one worksheet, and the DMM reading to four and a half digits.
Four bench instruments on one sheet, each polled over SCPI at its own VISA address - a Keysight DMM over TCPIP, a Rigol supply over USB, a BK load over a serial port and a Racal counter on GPIB. Four transports, one worksheet, and the DMM reading to four and a half digits.
The optical inspection station, reported from the sheet: yield and cycle time as running figures, pass and fail per region of interest, and the defects of the shift as a Pareto. The data comes from AOI Inspector over SCPI, which is the pairing the two were built for.
The optical inspection station, reported from the sheet: yield and cycle time as running figures, pass and fail per region of interest, and the defects of the shift as a Pareto. The data comes from AOI Inspector over SCPI, which is the pairing the two were built for.
One of the twelve panel-dark dashboards, for a shift that works in a dark room: an electric arc furnace with bath and roof temperature, three-electrode regulation, interlock lamps and energy per heat. Navy ground, amber numerals, hot trace colours - and the same ordinary Excel formulas underneath as the light ones.
One of the twelve panel-dark dashboards, for a shift that works in a dark room: an electric arc furnace with bath and roof temperature, three-electrode regulation, interlock lamps and energy per heat. Navy ground, amber numerals, hot trace colours - and the same ordinary Excel formulas underneath as the light ones.
The statistics of making things, from the same sheet: six hundred shafts against a 50.00 +/- 0.25 mm specification, the distribution with its fitted normal, and the indices that matter - Cp 1.02 capable, Cpk 0.97 off centre. The spread is fine and the process is not centred, which is precisely the difference Cpk catches and Cp hides.
The statistics of making things, from the same sheet: six hundred shafts against a 50.00 +/- 0.25 mm specification, the distribution with its fitted normal, and the indices that matter - Cp 1.02 capable, Cpk 0.97 off centre. The spread is fine and the process is not centred, which is precisely the difference Cpk catches and Cp hides.

On video

Four recordings of it actually running.

Screens of a program that moves are only half of it, so here it is moving. A real Excel window, the real add-in, a real socket. Each film builds a working dashboard from an empty sheet while the data is already arriving - nothing is mocked up and nothing is edited afterwards, so what the sheet did is what you see. Nothing plays until you press it.

92 s A weigh platform on four load cells, built panel by panel: raw counts in, kilograms out, each corner's share of the load shown separately so an off-centre pallet is visible as it lands, and a stability lamp that only lights when the plate has settled.
96 s Eighteen thermocouples and three pressure sensors across three floors, drawn as a floor plan that colours itself from the readings. Then a window is opened in room 206, and the plan says which room without anybody labelling it.
100 s A reflow oven with four zones. Setpoints are typed into cells, deviation is computed beside them, an operator sets the alarm limit - and the RUN/HOLD cell is not a label, it is the switch: the sheet writes back down the same socket it is reading.
104 s A bottling line: a hundred station sensors as a wall of cells with four instruments beside them, 104 channels down one socket. A jam appears, and the sheet names the station.

Battery systems

A pack, its management, and eight of them on a grid.

Five more recordings, on the same window and the same socket. Five films in order, and they are one argument rather than five demonstrations: a 160-cell LFP pack read electrically, the same pack read thermally, the management system that sits across it, that system drawn as the traces an engineer reads afterwards, and then eight of those sites on a network. Everything arrives every 100 ms down one socket, and every number in every caption below is read off the film it belongs to. The towers, lines, substation, racks and converter in the last one are drawn rather than photographed - they are in the repository as SVG, and were rasterised on this machine.

96 s An LFP pack on a cycler: 160 cells in series, 512 V, 100 Ah, charged at 50 A and discharged at 75 A, with every cell, the cycler and six temperatures arriving every 100 ms - 170 channels down one socket. The cells are drawn twice, the same cell in the same place in both walls: the terminal voltages, coloured against the chemistry's own window rather than against each other, and underneath them each cell's distance in millivolts from the lowest, which is the quantity a balancer acts on. On the plateau the cells read alike. At the knee they fan out, and the sheet's own rule - 25 mV over the lowest, charging, above 75 per cent - lights 94 of them and adds the bleed up to 14.10 A. Then the cycler is reversed, and one cell that had only looked a little high all the way up the charge is the lowest in the pack within a second: cell 93, at 3.200 V, named by a MATCH over the same 160 columns. Nobody wrote a cell-matching test.
92 s The same pack as a thermal problem, which is what a pack under load is before it is anything else. One sensor per four cells, forty of them, drawn as the ten by four map they sit in, plus coolant in, coolant out and ambient - 208 channels. With the pump running the far end of the pack is the warmest end, and that is the coolant path rather than a fault: group 37, nine kelvin over the coldest. Then the pump stops, the gradient stops being about the coolant and starts being about which group makes the most heat, and the warmest becomes group 24 - the four cells that include cell 93 - at 53.5 degC and 15.1 K over the coldest. MAX over forty columns found it; nothing on the sheet is a hot-spot detector.
92 s A whole battery management system: 160 cells, 16 module temperatures, three contactors, two independent current measurements, the pack voltage measured at the terminals AND summed from the cells, state of charge and health, the insulation resistance to chassis and a fault word - 188 channels. The two pairs are the point. The Hall sensor reads half an amp high at zero current and the shunt is how you know; the terminals read 6.6 V under the cells at 75 A out, which is the pack's own resistance and not a fault. It runs its own sequence - idle, precharge through the resistor, close, charge, rest, discharge - and then the insulation to chassis falls to 0.3 megohms, the fault word reads 0x08, and all three contactors open while the cells sit there at 526 V.
95 s The same management system drawn the way an engineer reads it afterwards: the three contactor signals as a timing diagram, the current, both pack voltages, the state of charge and the warmest module, all on one time axis. The device still publishes every 100 ms; the log trigger is half a second over a 180-row window, which is ninety seconds of history in 180 points instead of 1800 - one cell decides that. You can see precharge close the gap between the terminals and the cells before the main contactor takes over, and at the end all three contactors drop inside one logged row.
94 s Eight of those packs on one network, as a mimic diagram: Hartwell, Kingsmere, Oakridge, Pennine, Sandford, Thornby, Westmoor and Yarrow, each publishing state of charge, pack voltage, current, power at the point of connection, its warmest module and a status - 53 channels with the network's own frequency, demand and generation. Nobody dispatches them: each site follows frequency on its own deadband, which is why some are standing by while others are holding the system up. Then Sandford trips, and the other seven take its share inside a second - 49.797 Hz, 85.2 MW of the 85.2 MW asked for, one site off, counted by the sheet. The towers, lines, substation, racks and converter are drawn rather than photographed; they are in the repository as a hundred lines of SVG.

The stress harness

What it does when you stop being reasonable.

Four more recordings, on the same window and the same socket. Four runs of 23 October, filmed off the screen: one minute each, the whole Excel window, and the numbers under each one read out of that run's own metrics file. Filming them turned up five faults in the harness itself, four of them on these Live sheets; these are of the fixed kit.

60 s The stress harness: 1000 digital channels arriving every 100 ms, with the Stream sheet on screen for a minute. 633 rows were sent, 631 seen and 619 logged - 97.8 per cent - and a trivial COM call, the thing a person feels when they click a cell, took 9 ms on the median and never more than 75. Half way through, the zoom pulls back twice: at 100 per cent you see six of the thousand columns, and the rest of the film is the other 994.
60 s The same thousand channels at the same rate, watched from the Live sheet instead: every one of them drawn as a cell in a 100 by 10 panel that repaints ten times a second, with the device, the rows logged, the samples in and the count of ones beside it. 617 of 631 rows logged while the panel kept up, and the count of ones tracks the green: about 495 of the thousand at any moment, which is what a coin flip per channel per sample looks like.
60 s 400 analogue channels, also every 100 ms - three decimal places per channel rather than a 0 or a 1, which is four times the bytes per row. 619 of 633 rows logged, the same 97.8 per cent, median COM call 8 ms and no refusals. The same pull-back at the end, over 400 columns.
60 s The analogue run from its Live sheet: eight of the four hundred channels drawn as a rolling trend over the whole fifty-row window, and underneath it all 400 of them as the newest sample, a bar each, repainting ten times a second. 618 of 632 rows logged, median COM call 18 ms, no refusals.

Get in touch

DataStreamerX is not a download. It is one of the tools the work is done with, installed and licensed when an engagement starts. Tell me what you are working on and I will tell you what it would do for it.

Or email mblab.technology@gmail.com. Your details are used to answer you and to follow up — nothing else.

Requirements

  • Windows 10 or 11, 64-bit
  • About 200 MB of disk
  • No .NET install needed — the runtime is bundled
  • No Excel needed — workbooks are written directly

Also in the set