Repository navigation
Releases
SCADAScop 2.0 - RTU scripting and HMI displays
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 ACCEPTorreturn 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,LoadProfileand 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.luafile 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) andscopctl 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.ssdfile exported once and imported for many RTUs updates them all on Reload. For a channel,{rtu.N}/tagbinds 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
.ssdfiles and display pictures that sit beside the.ssw, or in itsscripts/displays/imagesfolders, 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
.zipwith the workspace and every file it uses inscripts/,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 showsClosed (1)orRUN | TRIPinstead 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 plainvalue nametable 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..7in[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 p...
SCADAScop 1.9
Version 1.9
-
Multiplatform binaries: Available for Windows 7 SPI, Windows 10/11 and Linux x86_64 Desktop
-
Check for update: Each tool checks for it's own platform
-
Online Manual: General updates.
-
Settings in the user folder: settings, window layout, recent-files lists and the shared colors file are now kept in
%APPDATA%\CommunicationTools(Linux:~/.config/CommunicationTools) -
All master channels — Local interface: Allows the user select the ethernet interface used for that specific channel.
-
Linux desktop integration: Updates in order to enable better Linux integration
-
Frame pacing: Some functionalities where separated in its own thread to avoid any locks cause by the GUI.
-
Channels panel: There is a new feature where the channel panel can be fixed docked at the left side and allow a very simplified view with only icons representing channels and RTUs.
-
Floating Point Calculator: IEEE 754 calculator for half, single and double precision embedded in the tool.
-
One Communication Monitor, switched per channel: the per-protocol monitor windows no longer appear inside SCADAScop.
-
DNP3 — Communication Monitor decode of long messages: the Decode column no longer reads an application function code out of transport continuation segments (FIR = 0).
-
Modbus Slave — FC06 / FC16 write target (per RTU): RTU Settings gains Register writes (FC06 / FC16) ? On write: Update Holding map (FC03) (default, unchanged), Update Input map (FC04), or Discard (no map).
-
IEC101 Slave — single-character replies: with Single-character enabled, a class poll with nothing to report is answered with the single character 0xE5 (ACD = DFC = 0) instead of a fixed-length "no data" frame; a comm-test NACK class 2 answers with 0xA2.
-
IEC101 / IEC104 Master — Select-Before-Operate: in select-then-execute command mode the master now waits for the positive application-layer confirmation (ACTCON) of the SELECT before sending the EXECUTE; a denied / negative select is not executed, and a timeout cancels the pending execute. Before, the EXECUTE was sent as soon as the link ACK arrived, ahead of the selection's confirmation.
-
IEC101 / IEC104 Slave — automatic over-range: like the DNP3 slave, a normalized / scaled measured whose value exceeds the representable range (taking the point's scaling min / max into account) now goes out with the OV (over-range) quality bit set on the wire only — it is not stored on the point. A value re-entered in range transmits without OV, while an OV flag set by hand on the point persists until cleared.
-
SCADAScop — scopctl (preview):
apps/scopctlis a console client of the SCADAScop web API — one-shot commands (status,start/stop,sim,log) and a full-screen FTXUI terminal interface. Built and tested on Linux and Windows.
SCADAScop 1.8.1 - Floating Point Calculator
Version 1.8.1
-
Channels as Free or Docked panel.
-
Floating-Point Converter
-
Communication Monitor - Only one across all protocols
-
DNP3 — Communication Monitor decode of long messages fixes.
-
Modbus Slave RTU — FC06 / FC16 write target (per RTU) FC03/FC04.
-
IEC101 Slave — single-character replies.
-
IEC101 / IEC104 Master — Select-Before-Operate behavior fixes.
-
IEC101 / IEC104S Slave — automatic over-range
SCADAScop 1.8 - Headless
Version 1.8
-
Headless functionality, allows the tool run on the console. A web browser interface is available in order to monitor and interact with the communication / simulation.
-
Help > About now links to the online manual.
-
Communication Monitor: open several monitor windows with View > Communication Monitor > New monitor
-
GUI Updates and new features
-
Zip packaged include certificates for testing of TLS IP channels.
Version 1.7 (not published)
-
Workspace format 2: ONE self-contained .sswm, this format supports the headless functionality.
-
Channel / RTU Duplication, Copy and Past of RTU across different channels. Export / Import RTU and Channels.
-
Check for updates: asks GitHub for the latest SCADAScop release, shows its notes and opens the download page;
-
GUI Updates and new features
SCADAScop 1.5 - Charts + P2P + PCAP Export
SCADAScop v1.5
-
Tools → Time & Date: one clock (System or Manual, Local/UTC, DST-aware offset) applied to all DNP3 and IEC stations
-
Point Detail window in the embedded DNP3 / IEC Slaves (double click over point address)
-
Charts: one Charts window over every master channel (multi-protocol time axis, logic-analyzer lanes, cursors, CSV export/recorder, "Add to chart" and drag & drop), saved in the workspace
-
P2P Monitoring channel: man-in-the-middle TCP proxy between a master and its RTU, with the family decoders and a detail panel
-
Capture PCAP (Wireshark-ready) in every Communication Monitor
-
Rendering → Refresh rate cap to cut CPU load in VMs / CPU rendering
-
Security (TLS) on every TCP channel of every protocol, master and slave: CA / certificate / key, peer-name check or client-certificate requirement, TLS 1.2/1.3, secure-port hints (19999 / 19998 / 802)
-
P2P channels secure each leg independently (TLS server towards the master, TLS client towards the RTU). can act as SSL stripper.
-
P2P Monitoring over serial: each leg TCP or a COM port, in any combination; with a serial master, connect to the RTU when the port opens or when the first bytes arrive, with automatic retry
Many other bug fixes.
SCADAScop v1.0
SCADAScop v1.0 — first release
The whole Scop family in one multiprotocol tool: Modbus, DNP3, IEC 60870-5-104
and IEC 60870-5-101 — master and slave each — all running at the same time.
- Eight tools in one window: ModbusScop Master/Slave, DNPScop Master/Slave, IEC104Scop Master/Slave, IEC101Scop Master/Slave, each the same code as its standalone release
- One grouped channel tree: pick Role (Master / Slave) and Protocol per channel, organize channels into named groups, reorder, move between groups, and color-code each channel (per-protocol default or custom accent)
- Every channel keeps running regardless of what is on screen
- Shared Status Messages window (all protocols, colored by source) and shared Dashboard with a section per protocol
- Each protocol's own windows (Live Data Map, Communication Monitor, Events, Points, Messages, poll windows) available under View
- One workspace (*.ssw) that restores every protocol's channels, points, schedules and simulations together; reopens the last workspace on launch
- Themes, accent color, DPI scaling, always-on-top, GPU/CPU rendering, animated splash