AUTO SCANAuto Scan
Quick discovers practical readable ranges in all four address spaces. Exhaustive probes every single address and can issue 262,144 requests.
Use this manual when you need more than a tour of the interface. It covers the Modbus details Busloom exposes, the files it saves, and the checks worth making before you trust a value or write one back.
Busloom is a project-based Modbus engineering tool. The project describes a device and how to interpret it; the native runtime talks to the device; views schedule reads; tags decode the returned bits or words; diagnostics retain the evidence. These are separate layers on purpose.
Use the start screen, File → New Project, the project menu, or the command palette. Busloom intentionally creates no placeholder view.
Open Project Settings → Connection profiles, choose RTU, TCP, or TLS, and enter the physical connection parameters.
Select the profile in the app bar and connect. A connected transport alone does not start polling.
If the map is unknown, open Auto Scan and run Quick. If the map is known, skip scanning and create a view directly.
Add a view for the correct address space and range. Start it from the floating bar. The status changes from stopped to running.
Open Register Inspector for the address. Compare the raw word or bit with the device manual before adding data type, order, and scale.
Save as .busloom.json. Close and reopen it once; a reusable setup is only proven when it survives a new session.
Modbus exposes four independent address spaces. The number 10 in Holding registers and the number 10 in Input registers are different objects. Every read therefore needs both an address space and a zero-based PDU address.
| Address space | Native shape | Function codes | Typical use |
|---|---|---|---|
| Coils | 1-bit, read/write | FC01 read · FC05/FC15 write | Often outputs, enables, commands |
| Discrete inputs | 1-bit, read-only | FC02 | Status contacts and digital inputs |
| Holding registers | 16-bit, read/write | FC03 read · FC06/FC16 write | Setpoints, configuration, measurements |
| Input registers | 16-bit, read-only | FC04 | Measurements and device telemetry |
Busloom does not accept a response merely because bytes arrived. It validates the RTU or TCP envelope, Unit ID, function, declared lengths, requested quantity, byte count, and response shape. A valid Modbus exception is preserved as a completed protocol exchange; malformed transport or PDU data is reported separately.
Most Modbus confusion happens before any decoding. Documentation notation is a label used by manuals; the wire protocol carries a zero-based PDU offset. Busloom stores the PDU address and may display a selected documentation notation alongside it.
| Common documentation label | Space | Typical PDU offset | Wire operation |
|---|---|---|---|
| 00001 | Coils | 0 | FC01 / FC05 / FC15 |
| 10001 | Discrete inputs | 0 | FC02 |
| 30001 | Input registers | 0 | FC04 |
| 40001 | Holding registers | 0 | FC03 / FC06 / FC16 |
Use Register Inspector and keep hexadecimal visible. For a 32-bit value, record both consecutive 16-bit words.
Select signed/unsigned integer, float, ASCII, hexadecimal, binary, or Boolean according to the manual—not according to a plausible-looking result.
For multi-register values, decide which 16-bit word is most significant. Vendors often call this word swap.
If required by the device, swap bytes inside each 16-bit word. Treat byte and word order as independent choices.
Busloom presents the decoded number after scale and offset. Record the unit and precision only after the numeric interpretation is proven.
Change the real process or compare another known value. One plausible sample is not enough to prove endianness and scale.
A .busloom.json file is the reviewable source of truth for one device or device family. It should be safe to share after reviewing endpoint names and certificate paths. Credentials, accepted certificate pins, account state, and live history are not embedded.
| Owner | Examples | Lifecycle |
|---|---|---|
| Project file | Profiles and TLS paths · views · tags/groups · saved Trends · import presets · automation · notes · addressing/display | Portable and reviewable |
| This device | Theme · text size · keybindings · recent projects · accepted TLS pin · MCP bearer token · installed license | Never travels with the project |
| Current session | Live values · Raw Traffic window · Trend samples · floating-bar positions · unexported run output | Lost unless recorded/exported |
Store the .busloom.json beside related firmware or test assets. Relative TLS paths resolve from the project directory.
Use one profile per real endpoint or bench. Use Duplicate As to create a variant instead of overwriting another engineer's setup.
Project files are readable JSON. Check connection endpoints, certificate paths, new tags, write-capable automation, and view ranges.
Professional local Git integration commits only the active project file. It does not initialize a repository, change branches, push, or include unrelated files.
Save and Save As write the project. An unsaved recovery draft is maintained locally as crash protection, but it is not a second portable project. Opening another project replaces project-owned configuration and clears project-specific runtime such as prior scan results; recordings and reports open as independent Replay tabs instead.
A connection profile answers where the device is and how bytes reach it. It does not start views or define decoding. Busloom keeps one active serialized connection so reads, writes, scans, automation, and diagnostics agree on the same transport history.
| Mode | Use it for | Parameters that must match | First failure to check |
|---|---|---|---|
| RTU | USB–RS485 / serial | Port, baud, parity, data bits, stop bits, Unit ID | Port ownership, wiring, termination, framing mismatch |
| TCP | Direct device or gateway | Host, port, Unit ID | Routing, firewall, gateway Unit ID |
| TLS | Encrypted Modbus/TCP | Host, port, Unit ID, CA/pin, optional client cert/key | Trust chain, hostname, certificate path, client identity |
Refresh/discover ports and identify the adapter by system path. Close any terminal or vendor tool that may own it.
Copy baud, parity, data bits, and stop bits exactly. A wrong Unit ID can still produce silence, but wrong framing usually makes every Unit ID fail.
Run Unit-ID discovery. It probes IDs 1–247 with one FC03 request at PDU 0 and accepts both data and valid exception responses as evidence of a device.
A successful open only proves the OS port opened. Perform a read and verify a completed exchange in Raw Traffic.
For TCP, start with the documented host, port, and Unit ID. Port 502 is conventional, not mandatory. For TLS, prefer normal CA verification. A local certificate pin is machine-specific and is not written to the project. Skip verification and certificate paths belong to the selected project profile; use skip verification only for deliberate development setups.
A view is a subscription to one Modbus address space. It owns an address selection and poll interval. The native scheduler—not a browser timer—turns that selection into FC01/02/03/04 requests, retains raw history, and publishes bounded UI updates.
| View type | Use when | You define | Trade-off |
|---|---|---|---|
| Contiguous range | The device map is dense | Start address + count | Simple and efficient when every address in the block is readable |
| Custom addresses | The map has holes or sparse tags | Explicit address list | Busloom groups safe adjacent addresses and avoids unreadable gaps |
| Auto Scan result | The map is unknown | Discovered readable range | Good starting point; refine it after learning the actual device |
Coils, Discrete inputs, Holding registers, and Input registers use different function codes and cannot share one view.
Enter a range or custom set. Include every continuation word required by multi-register tags.
Review exact blocks, function codes, gaps, continuation words, and estimated frame sizes before polling.
Choose an interval the device and link can sustain. Fast UI refresh does not create faster polling.
Use the floating bar. Running, stopped, waiting, and error states describe acquisition—not connection state.
At least two successful cycles should update timestamps and produce matching traffic before you build dependent Trends or automation.
Views answer “what should Busloom read?” Tags answer “what does the data mean?” A tag begins at one PDU address and may consume one bit, one word, or several consecutive words depending on its codec.
Create the tag with the correct address space and PDU address. Do not compensate for addressing mistakes with a scale or word swap.
Match the vendor's width and signedness. Ensure the source view includes every consumed word.
Use hexadecimal raw words and a known device value to establish byte/word order.
Only after the raw numeric value is correct, add the documented engineering conversion.
Set unit, precision, value labels, and limits. These should communicate meaning, not hide uncertainty.
Verify zero, negative values, high range, or enumerated states where possible.
Busloom imports CSV, TSV, and XLSX through a preview rather than guessing column meaning. Choose whether source addresses are PDU offsets or documentation addresses, map columns to Busloom fields, review validation errors, then decide whether conflicts add only or update existing tags.
| Mechanism | What it reuses | Important behavior |
|---|---|---|
| Import preset | Column mapping and address interpretation for another file with the same shape | Import/export/delete one preset at a time |
| Device definition | Reusable package of views, tags, and metadata | Applying it copies definitions; the project stays self-contained |
| Tag export | A portable review or spreadsheet round-trip of project tags | Use when exchanging a register map without a complete project |
Writes change real equipment. Busloom keeps the protocol visible and applies write protection at the native boundary so UI actions, automation, CLI, and MCP cannot bypass a read-only profile.
Start from the exact row or decoded tag. The editor shows the target and expected representation.
Busloom validates type, finite numeric input, limits, and the codec's encodable range before producing raw bits or words.
Verify profile, Unit ID, address space, PDU address, function, and encoded payload—not only the friendly tag name.
Busloom uses FC05/FC06 for a single value or FC15/FC16 for supported multiple-value writes.
Read the target again and inspect Raw Traffic. An echoed write response proves protocol acceptance, not necessarily physical actuation.
Diagnostics observe the same native transaction stream as ordinary polling and writes. Start with the narrowest question; do not run an exhaustive scan when one known request can identify the fault.
AUTO SCANQuick discovers practical readable ranges in all four address spaces. Exhaustive probes every single address and can issue 262,144 requests.
FC43 · MEI 0EReads paged device identification and preserves standard and vendor-specific objects.
MEASUREExplains request lifecycle, latency distribution, throughput, retries, errors, connection state, and RTU utilization by source.
PROVEShows chronological frames, decoded fields, source attribution, timings, exceptions, filters, bounded recording, and export.
| Mode | Use when | Behavior | Cost / limitation |
|---|---|---|---|
| Quick | Unknown practical map | Adaptive block probes | May miss isolated readable addresses surrounded by illegal gaps |
| Exhaustive | Quick missed a known isolated address | Every address in all four spaces | Hours of traffic on a slow RTU link; use deliberately |
Stop unrelated views and reproduce with one address, one profile, and one expected value.
Decide whether the failure is connection, timeout/retry, Modbus exception, malformed response, TLS, or CRC-related.
Use Raw Traffic source attribution to inspect the exact request and response bytes.
Verify Unit ID, function, PDU address, quantity, byte count, exception code, and timing.
Capture only the interval needed to reproduce. Export a session when another person must inspect it without the device.
A Trend subscribes to numeric or Boolean values produced by source views. It does not create its own polling loop. Its floating bar reports how many required sources are running and can start missing sources from the Trend.
| Action | What it changes | What it preserves |
|---|---|---|
| Clear series | Removes collected chart samples | Configured series stay attached |
| Export | Writes the selected visible window | CSV, TSV, XLSX, JSON, or JSON Lines |
| Record | Captures new samples into a bounded session | Independent of React rendering |
| Replay | Opens a saved Trend or Raw Traffic session | No project, device, or connection required |
Prefer a small set of signals that explain one behavior, such as setpoint, measured value, enable, and alarm.
Add numeric or Boolean tags from source views. Existing saved Trends are edited in Project Settings to keep viewing and configuration separate.
Use the floating bar. The source counter makes incomplete acquisition explicit.
Use a window that shows the process dynamics without compressing meaningful transitions.
If the event matters, start a bounded recording before triggering it. Exporting afterward only sees retained history.
A replay tab is explicitly labeled Replay and owns an immutable local timeline. Scrubbing or changing playback speed never writes a project or sends traffic. Raw Traffic replay keeps the ordinary filters and frame inspector; Trend replay reconstructs chart samples and capture completeness, including dropped-count warnings.
Automation executes against project tags and connection profiles through the same native connection, codecs, write guards, and Raw Traffic attribution as the desktop UI. A Professional license is required to run it; Community projects may still retain definitions.
| Resource | Choose it when | What it owns |
|---|---|---|
| Structured scenario | Repeatable, reviewable test or commissioning sequence | Typed Read, Write, Expect, Wait, If/Else, Retry, nested scenario, Complete, Fail |
| Lua 5.4 | Dynamic logic that is awkward as a step tree | Bounded tag-oriented I/O, waits, assertions, captured output; no unrestricted OS access |
| Run profile | A saved launch configuration | Automation target, connection, parameters, dataset, repetitions, reporting |
Prove symbolic tag targets and decoding before adding a write.
Use parameters for values that change between runs. Use a dataset when the same scenario must run for multiple named cases.
If/Else expresses a branch, Retry repeats a bounded child sequence, and nested scenarios reuse a named workflow.
Dry run validates and presents planned writes without changing the device. Review every target and encoded value.
Automation has priority over background polling and may interrupt/reopen the shared connection.
Use iteration, case, nested step, captured variable, observed value, duration, log, and transaction ID evidence.
Export JSON for lossless replay, JUnit for CI, or standalone HTML for a human-readable artifact. Imported reports open in read-only Replay without a connection or rerun path. Compare a candidate against a compatible baseline to see semantic regressions, improvements, changed observations, and duration deltas matched by stable case and step identity.
The busloom binary runs without Tauri or a WebView. It reads the same schema-1 project, freezes the selected run profile and connection profile, and invokes the same native automation runner as the desktop application.
Open Application Preferences → Command-line interface and install the launcher into a directory on your PATH.
Shells cache command lookup. Start a new terminal or refresh the shell after installation.
Run busloom --help and busloom license status before relying on the command in CI.
busloom run ./device.busloom.json \
--run-profile "Smoke test" \
--connection "Bench RTU" \
--dry-run \
--report junit \
--output ./report.xml| Exit | Meaning | Typical CI action |
|---|---|---|
| 0 | Automation completed and passed | Continue the pipeline |
| 1 | Automation ran and failed | Publish the report and fail the test stage |
| 2 | Invalid command usage or input | Fix arguments, names, or paths |
| 3 | Setup, license, project, or connection failure | Fix the environment before treating it as a device test failure |
busloom license status
busloom license request --output ./machine.busloom-license-request
busloom license install ./machine.busloom-license
busloom license inspect ./machine.busloom-licenseThe CLI supports offline activation. Export a request on the target machine, turn it into a device license in My Busloom on a connected machine, then install the signed response on the target. Use the desktop app for the online device-code flow.
Busloom can expose the open desktop session as a local Model Context Protocol server. It is an adapter to the same project, connection, scan, view, tag, write, and automation paths—not a second hidden Modbus client.
MCP is a Professional feature and is disabled by default.
The listener binds only to 127.0.0.1 and Busloom must remain open.
Configure the client for Streamable HTTP and send the token in the Authorization header.
Read and project operations can proceed, while tag writes and real write-capable automation ask in Busloom.
Regenerating the token restarts the enabled server and disconnects existing clients.
The MCP surface covers project creation/open/save, profiles, port and Unit-ID discovery, connection, scans, views, tags, acquisition, bounded observation of changing values, writes, diagnostics, and automation. Mutations use the same project validator and undo/history path. Unsaved MCP edits remain unsaved until the project is explicitly saved.
| Control | Protection | Operator responsibility |
|---|---|---|
| Loopback binding | Prevents direct network exposure | A local malicious process is still in scope |
| Bearer token | Authenticates every request | Store it only in the local MCP client configuration |
| Write prompts | Require visible approval for device changes | Can be disabled explicitly; read-only profiles still win |
| Bounded operations | Limits payloads, observations, scans, and project discovery | Exhaustive scan requires explicit confirmation |
Manual projects, profiles, reads/writes, views, tags, imports, Trends, recording, Replay, discovery, diagnostics, the same updates, and the same support.
Commercial-use rights plus structured/Lua automation, CLI and CI, MCP, report comparison, and local project Git.
On the first run you can continue with Community or start the Professional trial. Declining it does not throw it away: start it later from Application Preferences → License & activation. The trial lasts seven days on that installation, enables Professional workflows for evaluation, and does not restart after it expires.
One purchased Professional license is assigned to one device. The installed certificate is verified locally and has no heartbeat or expiry. There is no self-service release; support handles legitimate hardware replacement. License state is device-local and never enters a project.
| Flow | Operator steps | Result |
|---|---|---|
| Online | License & activation → show device code → sign in to My Busloom → choose an unused license → approve | The app polls with a short-lived challenge token and installs the signed certificate |
| Offline | Export .busloom-license-request → upload in My Busloom elsewhere → download .busloom-license → import on target | The same license becomes permanently assigned without connecting the target |
| CLI | busloom license request / install / inspect | Suitable for machines without a desktop environment |
Application Preferences → Software updates checks the public stable manifest. Checking after launch is enabled by default and can be disabled there. The check never installs an update: download, installation, and restart remain explicit. The platform artifact is verified with a dedicated embedded update-signing public key. Community and Professional receive the same versions.
01Close other serial tools, reselect the discovered port, confirm OS permission and adapter presence, then reconnect.
02Verify Unit ID, serial framing or TCP gateway routing. On RTU, test Unit-ID discovery before scanning addresses.
03Inspect the exception code. Illegal Function points to FC support; Illegal Data Address points to space/range; Illegal Data Value points to quantity or payload.
04Confirm the source is running, its Read Plan contains the address, and Health shows completed requests rather than only an open connection.
05Inspect raw words, verify PDU address, width, signedness, byte/word order, then scale and offset—in that order.
06Start every attached source, use numeric/Boolean tags, and ensure the current time window overlaps collected data.
07Check latency, retries, RTU utilization, oversized ranges, illegal gaps, and whether automation currently owns the connection.
08Check Professional entitlement, active connection profile, validation errors, required parameters/dataset, and read-only status for writes.
One precise request and its evidence is more useful than an unbounded traffic dump.