ModelingEvolution.WeldingMachine.FairinoDo.Plugin 1.0.0
ModelingEvolution.WeldingMachine.FairinoDo.Plugin
A RocketWelder device plugin for a welding machine whose only control input is a start contact. Closing the contact strikes the arc; opening it stops. The contact is closed by a relay wired to one of the Fairino controller's sixteen control-box digital outputs.
There is no fieldbus, no protocol, and no second connection: the plugin rides the live
fairino.Robot the host's Fairino robot device already owns and writes one bit on it.
Minimum host
rocket-welder2 running RocketWelder.SDK 2.18.0 or later.
2.18.0 is the release that publishes IDeviceResolver (the seam that hands a plugin a live device
instance rather than a config snapshot) and IStoppableRobot (the robot's own stop channel, which
this plugin uses for the emergency path below). On an older host the install fails loudly —
PluginLoader.IsRideUpSupported rejects it — rather than loading a plugin that cannot resolve
anything.
Install
Plugin mutation endpoints are loopback-only; run this on the device:
curl -sS -X POST http://127.0.0.1:5000/api/plugins/install \
-H 'Content-Type: application/json' \
-d '{"PackageId":"ModelingEvolution.WeldingMachine.FairinoDo.Plugin","Version":"1.0.0"}'
Then restart the app — an installed plugin is inert until the host restarts.
The host must have a package source that carries this package. It is published to the internal feed
only (never to nuget.org), so RocketWelder:Plugins:Sources must include it:
"RocketWelder": {
"Plugins": {
"Sources": [ { "Name": "modelingevolution", "Url": "https://nuget.modelingevolution.com/v3/index.json" } ]
}
}
With no source configured the host makes no network call at all and reports a configuration error.
Configure
Add the device from the standard Add-device wizard — "Custom welding machine (Fairino DO)". It asks for two things and no address:
| Property | Required | Notes |
|---|---|---|
| Digital output (DO 0–15) | yes | The control-box output wired to the relay. No default: the operator reads it off the cabinet, and a wrong relay is a wrong arc. Tool-flange and auxiliary outputs are not addressable. |
| Fairino robot | only when more than one is configured | The robot name as shown on /devices, or a full device id. Leave blank when there is exactly one Fairino robot. |
A rename breaks a name binding. That is not silent: the device shows Error with a message naming the property and the offending value.
What it does, and what it cannot do
ArcOn() writes SetDO(index, 1, 0, 1) and returns only once the controller has acknowledged.
ArcOff() writes 0, never throws, retries once, and returns within 2 s whatever the controller
does — it is called from finally blocks and from the operator STOP, so it must not hang teardown.
The output is driven low on four occasions: the first attach after the device is created (a
restart mid-weld must not leave a relay closed), on ArcOff, on Dispose, and on every re-attach.
The arc is never restored automatically after a reconnect.
There is no read-back. The vendor's RPC surface declares SetDO and no GetDO, so every state
this device reports is commanded, never measured — ArcStableSignal says the write was
acknowledged, not that an arc exists. Current, voltage, wire-feed and target-current signals are
published permanently empty (HasValue == false) rather than as a fabricated zero. Mode, job number,
gas and wire inch have nothing behind them; a mode or job write is accepted, latched so the program's
own read-back stays consistent, and logged once per distinct value.
Emergency path
If the controller's XML-RPC service is lost while the output is latched high — the robot reports Disconnected, or a write returns a communication error — the plugin:
- commands STOP on the bound robot through its own stop channel, which for Fairino is the
:8080mailbox, a channel independent of XML-RPC:20003; - relies on
SetOutputResetCtlBoxDO(1), written on every attach, which makes the controller drop its own control-box outputs on that stop — so the relay opens with no XML-RPC call at all; - clears its signals, logs one Critical entry, and lets the running program abort through the host's safety path. The arc is not restored when the controller returns.
A robot that does not implement IStoppableRobot fails the attach with a message saying so, rather
than latching an output it could not guarantee to release.
Not this plugin's job
No welding parameters. No feedback from the machine — no arc-detect input, no fault input. No tool-flange or auxiliary outputs. No robots other than Fairino. No manual output toggle in the UI: a hand-operated arc-on from a status panel is not a feature.
Localisation
English and Polish. The detail view follows a runtime language switch; the device-type name in the Add-device picker and the two schema labels are resolved once at boot, so they follow the OS locale and change only on restart — a host limitation, not a plugin one.
No packages depend on ModelingEvolution.WeldingMachine.FairinoDo.Plugin.
.NET 10.0
- ModelingEvolution.Drawing (>= 1.13.0.71)
- ModelingEvolution.Signals (>= 2.0.1.1)
- MudBlazor (>= 9.4.0)
- RocketWelder.SDK.Abstractions (>= 2.18.0)
- RocketWelder.SDK.Automation.Abstractions (>= 2.18.0)
- RocketWelder.SDK.Devices.Robot (>= 2.18.0)
- RocketWelder.SDK.Devices.Welding (>= 2.17.0)