cyclePanel — master plan

2026-09-08 · cyclepanel.com · the clean-room tool chain for WEG and Mitsubishi drives and the GOT panel

1. What cyclePanel is

cyclePanel started on cyclepanel.com as a service: PLC migration in three days, browser simulator included (Mitsubishi ↔ WEG). Building that service produced something bigger than the service — a complete, clean-room implementation of both vendors' tool chains:

The mandate grew from migration to complete control: programming, flashing, monitoring, digital twin, connectivity, dashboard, fleet. That is the product. The migration service stays as the front door.

Mission. Give engineers who run Mitsubishi and WEG drives one unified, AI-driven platform — vibe-coded ladders from a spec, explained rung by rung, compiled byte-exact, verified in a twin before any hardware, flashed and watched over the air. Bring the AI era to these two vendors' ecosystems and set the standard for how industrial machines are programmed, simulated and managed.

2. Products — one platform, five faces

face what it does state 2026‑09‑07
Program four editors: WLP clone (CFW500 ladder + parameters), FR Developer clone (.fgw local/global + ladder), FR Configurator clone (.frc), GTX editor (GOT screens, comments in 7 languages, scripts, recipe, device repoint) WLP + .fgw proven byte-exact (cycleFR decodes all three programs, 0 problems); .frc partial — FRC2D under Wine isolated to a file-share violation on its own lock files, awaiting the Windows ProcMon oracle; GTX read proven, write decoded
Flash CFW500 commission.py (areas → ladder → run → setpoints) through the stick or the gateway; FR frladder.py; GOT gotwrite.py CFW500 + FR proven on hardware; GOT read on the HP (Data Check clean), write path needs no password, proven against a fake panel — one real write + the six DDTs pending
Twin mirror of a running machine: drives + GOT screens, via the GOT's gateway (:502) or the TRB register block GOT gateway proven; TRB block phase 1 proven
Simulate soft‑PLC executes the real ladder, plant model supplies every input (end stops with carriage timing, door, thermal chain, FU↔FU link), panel model draws the GOT screens; with a bench the same inputs are injected into the real drives no‑hardware proven; bench GOT‑off proven end to end on the real drives (2026‑09‑07); bench GOT‑on route built, GOT copy pending
Connect + Fleet TRB gateway: LTE, GNSS, I/O relay (GOT‑off for flashing), RS‑485 slave + raw serial, MQTT uplink; fleet tree of sites → machines → nodes, every node with monitor / configure / flash / backup TRB145 done incl. all 123 config pages; internet path proven on a public broker (block 51 ms, 406 parameters per station, hosted twin on the real drives); the router's RS‑485 role switched from anywhere (command register, proven both ways 2026‑09‑08); platform broker (TLS, credentials) pending; TRB246 when it arrives

3. Architecture

                 cyclepanel.com · fleet dashboard · AI copilot
                              │  MQTT (gateway-initiated, TLS)
                    ┌─────────┴──────────┐
                    │  TRB gateway node  │  LTE · GNSS · DO relay · Ethernet (TRB246)
                    │  Modbus RTU st.3 · raw :5001 · REST/uci · MQTT gateway
                    └───┬──────────┬─────┘
            RS‑485 pair │          │ Ethernet
        ┌───────────────┴──┐   ┌───┴──────────────┐
        │ CFW500 st.1/st.2 │   │ GT2104‑R panel   │  gateway :502 · transfer 5015
        │ FR‑E820 (Mitsu)  │   │ (RS‑485 master)  │
        └──────────────────┘   └──────────────────┘
                    ▲
        desk: cyclePanel server (cycleWLP) — editors · compilers · twin · simulation

Transport rule. Internet = MQTT (the gateway publishes and subscribes; it initiates, so carrier‑NAT on LTE is no obstacle). Desk and cabinet = Modbus (RTU on the pair, TCP on the LAN). The TRB is the hinge.

Bus rule. One master on an RS‑485 pair. With the GOT powered the suite reads through the GOT's gateway or the TRB block and injects simulation inputs through the GOT; flashing happens GOT‑off (the gateway's relay opens the panel's leg).

Full drawing: panel/weg/cyclewlp/docs/SUITE-ARCHITECTURE.html.

4. Phases

Phase 1 — cycleWASH on cyclePanel (now → 2026‑09‑08)

Phase 2 — full circle with GOT + TRB246 (2026‑09‑08, at the bench)

Phase 3 — the platform (next laptop, Windows)

Phase 4 — the standard

5. Killer features (what nobody else ships)

  1. Byte-exact clean-room compilers for WLP and the FR‑E800 ladder — the vendor tool is an oracle, not a dependency.
  2. Real protocols, not vendor DLLs — CFW500 SoftPLC download, FR USB, GOT package write, all from Python on any OS.
  3. Twin before hardware — the same ladder runs in the browser, on the bench, on the machine.
  4. Simulation that drives the real drives — inputs injected as markers, through the GOT when it is on.
  5. Gateway node — one box gives LTE, GNSS, relay for GOT‑off flashing, and its whole web UI inside the suite.
  6. AI that is checked — every generated rung goes through the compiler, the linters and the twin.

6. Proof, as of 2026‑09‑08

7. Names

8. Next items (2026‑09‑08)

At the bench (Phase 2)

  1. ~~GOT DDTs + script No.10~~ — written 2026‑09‑08 17:30 (HP, GT Designer3): blocks 1/2/4 LIVE over LTE/MQTT (step register, P‑blocks of both stations), script 10 completes (step 2 → 3). Bit blocks 3/5/6 refused by GT21 (1 point max) — via script later. 1b. GOT round 2 — handover/HP-INSTRUCTIONS.md A9–A13: the panel shows "PLC stop / operation locked" because Trigger Actions + the PLC‑Run switch read P0006 as FR SD203 (→ P1000 401001, range 4 !=), the project has no inter‑drive relay (Y40..48 → station 2, X40..47 + link words → station 1; script handover/hp/script02-Relay-CFW500.txt, addresses from the built tag tables), the door input %IX2 is real on the field build (jumper DI2 on the bench), and the transfer password must be set (24081969, rule: always). Gate: %MW8074 = 4 and %MW8012 331 → 0 over MQTT; carriage moves on the bench. 1c. Bench = software-generated signals through the GOT (owner's rule, no wiring): sim-input level words in the TRB block (regmap 7/8 = holding 1167/1168, coin/door + end stops; button mask 1165/1166) written from the Mac over LTE and read back 2026‑09‑08 19:00 (0 0 3 15); GOT script SimInputs (A14) fans them into the drive markers; station 1 back on pro_kbg_bench. Gate: door bit → "Tür ist Offen" disappears; 4 coin pulses → step 04 with the GOT on. 1d. DONE 2026‑09‑08 23:50 — bench runs on software‑generated signals with the GOT on: round‑2 project (P1000 triggers, Relay with the %MW8067 setpoint, SimInputs, 7 trimmed DDTs, script 30 v7, password), CH2 at 38400 (P0310 = 2, GOT CH2, TRB), carriage 22 Hz + big drive 87 Hz, coins/end stops from the Mac over LTE. Open: ~2 s relay latency (ladder‑side %PD683, packed link word, GOT‑internal switching devices), GOT Ethernet unreachable since the write, GOT texts + cycleWASH branding (comment CSVs, Windows).
  2. Simulation with bench, GOT on — "Simulation über GOT" end to end once (1) is live: 4 pulses → step 04 → Weiter → 06 → 09 → Abbruch → 30, the GOT the sole RS‑485 master.
  3. TRB246 when it arrives — + D1 D2 D3 CTS RTS R+ D+ / − ⏚ A ⏚ TX RX R− D−, SIM, relay on D1 cutting the GOT's leg, aux contact D2; GOT‑off flashing and internet mqtt-serial through the relay instead of a hand power‑off.
  4. Power‑cycle test of the user‑parameter areas on both stations: P1001 = 1 stored, areas survive, P1000 = 4 after power‑up.
  5. One real GOT package write with the corrected package (gotwrite.py — must now send the transfer‑password frame once A11 is on the panel) — owner at the bench, explicit go, read‑back diff 0.

5b. Go program on the bench (A13): GOT off → commission.py go --station 1 → GOT on → write GO-CFW500.GTX with password → verify_got_ddt.py --mqtt → twin ?program=go. Same A9 fixes; no door, no relay.

Platform (Phase 3)

  1. Own MQTT broker — Mosquitto with TLS and per‑gateway credentials, the gateway pointed at it, data_sender stream; retire the public prefix. Gate: the hosted twin reads the block through the private broker. 6b. ~~Router‑initiated control channel~~ — DONE 2026‑09‑08 12:50, proven on the bench. Found with the USB hub unplugged: over the internet the gateway answers Modbus, but switching its role was a uci change over SSH, LAN only. Now: a command register in the router's own block (docs/TRB-COMMAND-REGISTER.md) — the router watches four words and flips its role itself; the client writes them over MQTT from anywhere. Adversarially reviewed (16 findings): keyed tag + sequence + lockout + rate limit, bus‑quiet guard, nonce‑echoed status, set -e mode scripts, sysupgrade‑safe; 14 tests on the real watcher. Installed on the TRB145 (all five busybox tools present) and exercised over HiveMQ → LTE: remote --to twin re‑applied the slave (seq 1); remote --to mqtt-serial with the GOT on the pair was refused, status 202, slave restored by the router itself (seq 2). With the GOT off (15:10): remote --to mqtt-serial accepted (seq 5), both drives read from the internet with no LAN — P1000 = 4 / P1001 = 1 on both stations, step register 3 — then remote --to twin (seq 6). Closed.
  2. Fleet dashboard — sites → machines → nodes, GNSS map, the five verbs per node.
  3. AI copilot — spec → ladder, rung explainer, fault‑to‑cause, parameter advisor; every rung through the compiler, the linters and the twin.
  4. FRC2D under Wine — last action — a Windows ProcMon capture of a successful open (handover/hp/wine-guard-diagnostics.txt, step 1b) into diff_procmon.py: _dup SUCCESS on Windows ⇒ shim the share mode; otherwise stop. cycleFR stays the editor either way.
  5. Windows bootstrap on the next laptop — BOOTSTRAP-WINDOWS.md (§5 = what changed on the last Mac day, 2026‑09‑08: carry .cyclepanel/mqtt.json and .ssh/trb145, MQTT tooling works off‑LAN, FRC2D native, GOT on USB), then bash tools/roundtrip_all.sh with PY=python.
  6. Cloud — cyclepanel.com login, per‑customer fleets, Cloudflare Access for /pro, /mini, /demos.
Source: panel/cyclepanel/MASTER-PLAN.md · architecture: panel/weg/cyclewlp/docs/SUITE-ARCHITECTURE.html · exported 2026‑09‑08