Skip to content

SCADAScop 2.0 - RTU scripting and HMI displays

Latest

Choose a tag to compare

@CommunicationTools CommunicationTools released this 03 Nov 01:57

SCADAScop 2.0 is a major version for the two features that change what the tool is: slave RTUs that behave by script, and operator displays over every master and slave point. It is also the first release that ships scopctl, the terminal client, inside the SCADAScop package.

The standalone tools (ModbusScop, DNPScop, IEC104Scop, IEC101Scop) are frozen: new features are developed in SCADAScop only; the standalone tools remain available and receive fixes.

Highlights

  • RTU scripting — Lua 5.4 scripts on every slave RTU (DNP3, IEC 104, IEC 101, Modbus) decide commands and setpoints, react to value changes and timers, and drive the simulation through a standard library.
  • HMI displays — operator screens built in the tool and saved with the workspace: LEDs, bars, gauges, breakers, power flows, images, command buttons and setpoint fields bound to points by tag.
  • Watch window — read-only watch lists over every point of every protocol, with live value, decoded quality, age and change count.
  • Windows outside the main window — drag any dockable window to a second monitor, or create a Desktop to dock windows into.
  • Portable workspaces and packages — scripts, displays and pictures travel with the .ssw; File > Save Package writes everything in one zip.
  • scopctl 0.4 — the terminal client is now part of the package (win64, win7, Linux).
  • Modbus — value lists (enumerations and bit names), command maps on the slave, one window per RTU on the master.

RTU scripting (Lua 5.4)

  • Available on every slave RTU — DNP3, IEC 104, IEC 101 and Modbus. Right-click an RTU > Script...
  • Points take part through an opt-in Tag column: a checkbox plus a name per point / cell. Only tagged points are visible to scripts.
  • Handlers decide commands and setpoints — return ACCEPT or return REJECT(code) — answered with the protocol's own refusal (DNP3 status code, negative ACTCON, Modbus exception), optionally after a delay (return ACCEPT, 1500).
  • Handlers also react to value changes, timers and master on-line / off-line.
  • A standard library drives the simulation: Breaker, Bay, Signal, TapChanger, LoadProfile and bit helpers. help() in the console lists it.
  • Each RTU runs its own sandboxed Lua state (no io / os / require); a runaway handler is stopped without stopping the script.
  • Editor with Lua colouring, line numbers and the last error marked on its line; a Library viewer.
  • Scripts are stored in the workspace ([Script] under the [Rtu]) or bound to a .lua file that is reloaded when it changes.
  • Start / stop / reload from the RTU menu, the web interface (op=script_start|stop|reload; "script" per RTU in /api/state) and scopctl script.
  • Sample: docs/sample-workspaces/bay_demo.lua. Manual chapters RTU scripting and Script API.

HMI displays (Tools > Displays)

  • Objects: text, values, LEDs, bars, gauges, breakers / switches (square, circle or knife symbol, any orientation), power flows, shapes coloured by a tag's state (rectangle, rounded rectangle, ellipse, triangle, diamond), exact lines (length + angle), PNG / SVG images with transparency, command buttons and setpoint fields. Any object can be shown or hidden by a tag's value.
  • Objects bind to points by tag path (Channel/RTU/tag). Slave points carry their tag; master points get one from the new Tag column of the DNP3 / IEC map tables and the Modbus poll window.
  • Commands follow select-before-operate: the click sends the SELECT, Execute the operate, Cancel drops it. On a master the real protocol command goes out (DNP3 CROB / g41, IEC C_SC / C_DC / C_RC / C_SE, Modbus FC05 / 06 / 16); on a slave's own point the display drives the simulation.
  • A display belongs to the whole workspace, to one RTU or to a channel. For an RTU, bare tag names resolve inside that RTU and {rtu} / {channel} in a text show its name, so one .ssd file exported once and imported for many RTUs updates them all on Reload. For a channel, {rtu.N}/tag binds the N-th RTU. An RTU can have several displays, listed in its channel's context menu.
  • Editor: tag browser (filtered by channel / RTU), multi-select with align / distribute / same size, undo / redo, grid snap, Sans / Mono fonts with bold / italic.
  • Workspace: [Display.N] / [Display.N.Obj.M] blocks. Manual chapter HMI displays.

Portable workspaces and packages

  • Script files, display .ssd files and display pictures that sit beside the .ssw, or in its scripts / displays / images folders, are saved relative to it; anything else keeps its full path. A file that is not where the workspace says is found by name in those places.
  • A script bound to a file also travels inside the workspace and runs from that copy when the file is missing.
  • File > Missing Files lists what is still missing; Locate... repairs every missing file of the same folder at once.
  • File > Save Package writes one .zip with the workspace and every file it uses in scripts/, displays/, images/. Open Workspace opens such a zip directly (extracted beside it).

Watch window (Tools > Watch)

  • Read-only watch lists over points of any protocol and role: every master point, and every slave point — tagged or not — read straight from the simulated RTU.
  • Live value (units, ON / OFF, double-bit states), quality decoded per protocol (DNP3 flags, IEC IV / NT / SB / BL / OV), arrival time, age and a change counter. A row flashes on change; a bad quality tints the value.
  • Add from Add points... (channel > RTU > type picker), from Add to watch in the row menus of the masters' maps and the slaves' points (the row header adds the whole row), or by dragging rows in as onto a chart.
  • Several lists as tabs; labels, move, copy to another list, Delete, Ctrl+C (TAB separated), drag a row onto a chart, Freeze, Reset counters. Saved as [Watch.N] blocks.
  • With it, a Modbus master write map's cells have keys of their own (mb:<ch>/rtu<n>/FC16/<addr>, FC5 / FC6 / FC15) instead of sharing the polled register's key, so a watched or displayed setpoint no longer shows the measurand read at the same address. An IEC 104 / 101 master reports the positive ACTCON of an EXECUTE as an update, so a control / setpoint row shows its last executed value in the map, the Watch window and displays.

Windows outside the main window, and Desktops

  • Any dockable window (Communication Monitor, charts, HMI displays, point maps, Status Messages...) can be dragged out of the main window into a window of its own — e.g. on a second monitor — and other windows dock into it.
  • View > Windows outside the main window (on by default, applied live) and View > Bring all windows back.
  • View > Desktops > New desktop: an empty window with a normal title bar (move, maximize, snap, taskbar entry) to dock windows into; closing it docks its windows back into the main window.
  • Dialogs open over the window in use; text follows each monitor's scaling; Always on top covers the detached windows; an unchanged detached window is not redrawn. Window places, monitors and desktops are restored at start.
  • Not available under Wayland (the window system does not let applications place windows). Manual chapter Windows and monitors.

Channels and RTUs

  • Bulk edits — Ctrl / Shift+click several channels in the Channels tree to start, stop, move or delete them together (Delete key, one confirmation). RTUs... in the channel context menu lists every RTU of the channel(s): enable, disable or delete the ticked ones, or duplicate one RTU N times from a given address.
  • Numbered copies — duplicating a channel or an RTU whose name ends in a number continues the sequence with the same zero padding (Channel_0001 -> Channel_0002, ...) after the highest number already used, without the word "copy". New Channel with a count does the same.
  • Menus — View > protocol and a channel's Windows submenu list only that tool's own windows; the shell's merged Status Messages and Dashboard are the only ones.

Modbus

  • Master: one window per RTU with a tab per poll map.
  • Master and Slave: value lists. An RTU can hold named lists: an enumeration names values (0 Open, 1 Closed), bit names name the bits of a word (0 RUN, 1 ALARM, 5 TRIP). Assign one from a cell's right-click menu (coils take an enumeration for their two states) and the cell shows Closed (1) or RUN | TRIP instead of the number; a value outside the list is shown in the warning colour and the format badge gets an E / B marker. Writing uses the names too: enumerations as a drop-down, bit names as checkboxes, in the master's write command, the write maps and the slave's points. Lists are edited in the RTU window's new Lists tab, shown under the RTU in the channel tree, and move between RTUs and between master and slave with Copy / Paste, Export / Import (.mbvl) or with the RTU itself. Paste also takes a plain value name table from a manual or a spreadsheet. Workspace: [ValueList] sub-blocks of the [Rtu].
  • Slave: command maps (FC05 / FC06 / FC15 / FC16 blocks). New Block > Table also offers the four write codes. A block in one of them accepts that write code for its range — no coil / holding block needed — and its window shows the last values a master wrote, read-only, with the usual per-cell formats and aliases. A coil / holding block at the same address is updated as before. Workspace: Table=4..7 in [Block].
  • Slave: On coil write (store in FC01 / FC02 or discard) beside the FC06 / FC16 choice; the PLC memory window has a Words / Bits view.
  • Slave: a first RTU with the channel. New Channel gains a "First RTU" section: RTU-style (blocks per table) or PLC-style (one memory) with its unit id — stepping per channel with Count > 1 — or None for an empty channel as before.

IEC 104 / IEC 101

  • Slave: Communication Tests window. The fault-injection panel left the Points window; right-click an RTU > Communication Tests... (the DNP3 slave's layout).
  • Master and Slave: consistent Channel Settings while running. Link and protocol parameters are greyed while the channel runs — the Advanced sections still unfold so they can be read — and editable once it is stopped; the masters' interrogation, period and reconnect options stay live.

scopctl 0.4 — terminal client, first published release

  • A full-screen overview, a shell, one-shot commands (status, start / stop, sim, log -f), test scripts with wait / assert and exit codes, and several SCADAScop instances from a fleet file (up / down start and end headless instances).
  • New in 0.4: script status | start | stop | reload <channel>/<rtu> for the slave RTUs' scripts.
  • scopctl talks to SCADAScop's web interface, so it drives a GUI or a headless instance, local or remote.
  • Needs a VT terminal: Windows 10 / 11 (Windows Terminal, PowerShell, cmd) or Linux. On Windows 7 the executable runs but the stock console does not render the pages; use it over SSH or from a VT-capable terminal.
  • Manual chapter scopctl (terminal client).

Other changes

  • Startup splash — SCADAScop rotates through ten styles: the four classic ones plus six substation-automation scenes (single-line diagram energising with a breaker trip / reclose, three-phase waveforms + phasor star, RTU point scan, IEC 61850 GOOSE mesh, SOE log with 1PPS time sync, protocol frame decoder). Help > About previews all ten.
  • Manual — new chapters RTU scripting, Script API, HMI displays, Windows and monitors and scopctl; Tag column, Modbus write targets, workspace keys and display-editor shortcuts added to the existing pages.
  • Fix: every About text printed %APPDATA% through a printf format (garbled on screen).

Compatibility

  • Workspaces of 1.x open unchanged. New blocks ([Script], [Display.N], [Watch.N], [ValueList]) are written only when used.
  • A Modbus slave block with Table=4..7 (command map) is read by older versions as a holding block.
  • Settings stay in %APPDATA%\CommunicationTools (Linux: ~/.config/CommunicationTools), as since 1.9.

Downloads

File Platform Contents
SCADAScop-2.0-win64.zip Windows 10 / 11 SCADAScop, scopctl, Mesa DLL, lab certificates, certificate generator
SCADAScop-2.0-win7.zip Windows 7 SP1 same, built with the MSVC 14.39 toolset
SCADAScop-2.0-linux-x86_64.tar.gz Linux x86_64 (glibc 2.28+) SCADAScop, scopctl — static C++ runtime and OpenSSL, nothing to install
SHA256SUMS.txt — checksums of the three archives

"Check for updates" picks the archive of the running build; keep the file names when uploading.