ModbusLens

Changelog

Major changes in every release. For the full, line-by-line detail - including smaller fixes and polish - see the GitHub repository or ModbusLens's own Help > About > Changelog tab.

v2.4.0 Current

New

  • Multiple devices in one window - each with its own connection (Modbus TCP, RTU over TCP, or serial) and Unit ID; devices sharing a link (several meters behind one gateway or on one RS-485 line) automatically share one connection
  • Overview tab - a live status card per device, with Add Device / Add from Profile / Find Unit IDs and Remove All or Remove Selected Devices
  • Top bar: select one or more devices there for Device Settings, Connect Selected and Disconnect Selected, alongside Connect All/Disconnect All
  • Every tool - Address Table, Tags, Trend, Raw Data, Script, Scanner, Diagnostic Functions - now works per device, including a DEVICE line in scripts to switch mid-run
  • Calculated tags - a Calc mode in the Tags table: an expression over other tags' values, recalculated after every poll cycle with no extra bus traffic, usable anywhere a tag is (alarms, Trend, Overview pins, CSV, Script)
  • Workspace auto-save, and per-device write bounds that survive reconnects
  • TCP Framing option for transparent serial-to-Ethernet gateways (RTU over TCP), and Gateway mode - relay real requests to a downstream serial device and return its actual response
  • Bit View - a per-bit breakdown of a register's raw value, with inline expansion and single-bit writes
  • Scanner reworked: an Excel-style color-coded results grid (green/red, with a legend) replaces the text log, paginated like spreadsheet sheets for large ranges, with an adjustable text size and a colorblind-friendly color option; Create Tags From Scan turns a result straight into Tags rows
  • Export CSV... on the Scanner, Find Devices and Serial Discovery - save what a scan found to a file you can open in Excel
  • Theme switching no longer force-disconnects a live device - it queues the switch and asks to restart only once everything's disconnected
  • Profiles tab relaid out; documentation rewritten for multiple devices

Fixed

  • Replies on a shared line (RTU-over-TCP gateway or RS-485 bus shared with another master) are now matched to their actual request instead of accepted as a wrong-data "Success"
  • Auto-reconnect now reliably notices a dropped TCP link instead of leaving it flagged connected
  • Script tag-name reads/writes hit the correct register (a one-off addressing bug)
  • Tags table mouse-wheel scrolling no longer changes the dropdown/number box under the pointer
  • Share to Community works again, with clearer failure messages; its submission key is now looked up from the project's GitHub, so it can be updated without a new release
  • Scanner no longer aborts the whole scan on an address that times out with no response (common on a flaky link) - it narrows down the same way as a device exception instead, marking an address that's still inconclusive a third color rather than stopping the rest of the range

v2.3.0

New

  • Device Profiles tab - save a device's Address Table range and Tags as a named, reusable profile (Name/Manufacturer/Type/Author); View Profile shows which tags are already in your live list (red/green, yellow for a mixed Tag Group) before importing any, and Apply doesn't close the dialog so you can adjust and import again
  • Community Profiles - browse and download profiles shared by other users, and share your own back for review, no account needed either way. Apply and Download are independent: import a profile's tags without ever saving it locally, or download without applying anything
  • Trend gained an Auto Scroll checkbox - an explicit, visible control for live-following vs. viewing history, travels into the detached window too
  • Modbus Diagnostic Functions dialog - exception status, diagnostics, comm event log, report server ID, file records, mask write, FIFO queue, and device identification
  • Save/Load Session - connection settings, Tags, Address Table range, and write bounds together in one file
  • U64/S64/F64 numeric formats, alongside the existing U32/S32/F32
  • Fast LAN Mode - instant unreachable-device detection instead of retrying every tag
  • Tags table: drag-to-reorder columns, a show/hide column picker, per-tag enable/disable
  • Raw Data gained an Exception column and an integrated Frame Viewer decoding TX/RX frames side by side
  • Diagnostics > Decode Registers - a standalone hex decoder (U16 through F64, HEX, binary, ASCII, BCD, individual bits, all four byte/word orderings), no connection needed
  • A shared read cache and coalesced adjacent reads cut duplicate traffic on the wire
  • Script engine gained ASSERT and an Assertion Results panel - checks log PASS/FAIL/ERROR without stopping the script on a failure
  • In-app documentation gained a "Full search" option across every topic at once
  • Network Discovery gained a "Scan Unit IDs (1-247)" option - sweeps every Unit ID on each confirmed Modbus host to report which ones respond
  • New "Find Devices" dialog - TCP network scan and serial parameter sweep in one shared results table, with a single Apply to Connection Settings for either

Fixed

  • Tag Monitoring's polling (read-mode and write-mode) moved off the GUI thread - a single unreachable device no longer freezes the whole window
  • Write-mode tags with a signed format showed the raw unsigned value instead of the signed one
  • Tags table selection was invisible, with a related write-safety gap around deselected rows
  • Script tab's example/help text is now real, scrollable content instead of clipped placeholder text
  • Run Script's live-system safety warning dialog now follows the app's theme
  • Connection Settings: selecting a Recent Connections entry - including the most recent one - now actually applies it
  • Tag Monitoring could crash whenever Tag Groups were used, which also showed up as Read Values getting stuck blank; group headers were also unclickable while monitoring was active
  • Typing into a tag's Read Value field while monitoring was running got overwritten by the next poll tick before you could act on it
  • Raw Data's TX/RX byte columns could show one tag's bytes on a different tag's row during fast back-to-back polling
  • A cancelled write now also flashes a clear status bar message, not just a log line - a reflexive second Enter could silently cancel a write via the confirmation dialog's No-default button
  • Script tab: right-clicking selected text to copy it collapsed the selection first, so Copy had nothing to act on
  • Local/Community Profiles toggle buttons gave no visual indication of which one was selected
  • Trend's Record/Replay feature could silently fail to log a tick due to a timestamp overflow

v2.2.0

New

  • Modbus Diagnostic Functions dialog - the function codes beyond basic read/write (exception status, diagnostics, comm event log, report server ID, file records, mask write, FIFO queue, device identification)
  • Save/Load Session - connection settings, Tags, Address Table range, and write bounds together in one file
  • U64/S64/F64 numeric formats, alongside the existing U32/S32/F32
  • Fast LAN Mode - instant unreachable-device detection instead of retrying every tag
  • Raw Data gained an Exception column and an integrated Frame Viewer decoding TX/RX frames side by side
  • Tags table: drag-to-reorder columns, a show/hide column picker, per-tag enable/disable
  • A shared read cache and coalesced adjacent reads cut duplicate traffic on the wire

Fixed

  • Tag Monitoring's polling moved off the GUI thread - a single unreachable device no longer freezes the whole window
  • Write-mode tags with a signed format showed the raw unsigned value instead of the signed one
  • Tags table selection was invisible, with a related write-safety gap around deselected rows

v2.1.0

New

  • Light/Dark theme, with a "follow system" option
  • Scanner tab - auto-discover which addresses actually respond on a connected device
  • Serial Discovery - sweep baud rate/parity/stop bits/Unit ID to find an undocumented serial device's settings
  • Auto-reconnect with backoff, and monitoring resumes automatically once the connection comes back
  • Modbus ASCII framing support for serial connections, alongside RTU
  • Raw Data became its own dedicated tab - full wire-level diagnostics for every transaction

Fixed

  • Scanner/Serial Discovery could race with auto-reconnect or a manual disconnect, and closing the app mid-scan could crash instead of shutting down cleanly
  • Server tab's Unit ID field did nothing - the simulator answered on any unit ID
  • Monitoring's auto-stop-after-repeated-failures didn't actually stop

v2.0.0

  • Modbus Serial (RTU) support, alongside TCP
  • Scripting tab - a small test-sequence language (WRITE/READ/WAIT/LOG/LET) with a safety warning before running against a live device
  • Multi-window support - connect to more than one device at once, each in its own window
  • Built-in documentation (Help menu)

v1.1.0

  • Server/slave mode - act as a Modbus TCP device so another master can poll ModbusLens
  • Trend tab with live graphing
  • Per-tag alarms (high/low limits) and CSV logging of live values
  • ARP-based network discovery and Modbus device detection

v1.0.0

  • Initial public release
  • Modbus TCP client - connect, read, and write coils/registers from an address table
  • Tag table for monitoring named addresses, with safety interlocks around live writes
  • Standalone Windows executable