Bundles deemesh-sdk 1.4.0; see the SDK release for what changed there - soft-limit areas as addresses of their own, the new status code -24 (busy, send it again shortly), the per-axis axisWorkAreaLimitOn, one breaking change (axisSoftLimitPositive / …Negative are read-only and now return the limit actually in force), refusals that are really machine state now answering -22 (a Siemens file the channel is using, a Mitsubishi work offset during automatic operation), a Siemens upload over an existing file answering -21 instead of pretending to overwrite, a missing Siemens R parameter answering -18 instead of reading as 0, and a Siemens disconnect that could block forever once the peer had vanished.
The hub itself changed as well:
- One NC file-system change per machine at a time, refused immediately instead of queued. Uploads, deletes, renames, folder creation and main-program selection share one slot per machine; while it is taken, another such request gets HTTP 409 with status
-24and the error text names the operation in progress and its path, so the caller can decide. Downloads have their own slot, so one download and one change can run side by side. Nothing waits, sotimeoutkeeps its meaning. - Shutting down answers HTTP 503 with status
-24; every other busy case is 409, so a monitor no longer counts a full file slot as an outage. POSTbody limit raised to 64 MiB (was 10 MiB, and undocumented). Programs of data-server size now upload throughfileContent.- A bad or oversized body on
POST /read/batchor aPOST /machine/*write answers a JSON envelope ({"status":-19,"error":…}, HTTP 200) like every other failure, no more plain-text 400/413. - 401 responses carry
WWW-Authenticate: X-Admin-Code realm="deemesh-hub", as RFC 9110 requires. - File explorer knows which control overwrites. The upload and new-file confirmations say what happens to a file of the same name on the selected control (Fanuc and Mitsubishi overwrite; Siemens refuses with status
-21), and on Siemens the explorer stops before sending when the name already exists in the folder. /helpsays what a batch does and does not do: it saves round trips, but two values in one batch, even two returned by one vendor call, are not guaranteed to be sampled at the same instant. The same note is in the packaged manual.- Dashboard: moving between pages through the header keeps what you were looking at (the data-model tree stays expanded, searched and scrolled; the explorer restores its view without a round trip to the machine); the language switch is a segmented control (한국어 | English); the catalog meta line mirrors the fact block (
TYPE · NULL_ABLE · READ · WRITEwith protocol identifiers); the status-code view carries-24; tab titles readdeemesh-hub · <Page>. - Quieter logs on Siemens. An SDK fix, noted here because hubs run unattended: polling
alarmListevery second used to write an INFO line per read (most of a day's log), burying the write audit lines. It is DEBUG now; turn it back on withRUST_LOG=deemesh::nc::opcua_siemens=debug.
Notes
- Windows Firewall asks once on first run whether to allow the hub. Click Allow if other PCs will call it (it is not a virus warning). Details in
docs/HUB_KO.md/HUB_EN.mdsection 1.1. - Requirements: Windows 10 / Server 2016 or later; Linux with glibc 2.34 or later (Ubuntu 22.04, RHEL 9, Debian 12 and newer).
- The hub is designed for a trusted network inside the plant (IP whitelist + admin PIN, HTTPS available, no built-in user login). To expose it beyond that, put it behind an authenticating reverse proxy.
- Tested on a SINUMERIK 840D sl control on a test bench (Siemens); a FANUC Series 31i control on a test bench, a production machine and FANUC NC Guide with Series 30i and 0i projects, mill and lathe (Fanuc); and NC Trainer2 plus (Mitsubishi M800 series, lathe and mill).